jodit 3.6.16 → 3.7.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 (107) hide show
  1. package/.eslintrc.js +1 -1
  2. package/{ISSUE_TEMPLATE.md → .github/ISSUE_TEMPLATE.md} +0 -0
  3. package/{PULL_REQUEST_TEMPLATE.md → .github/PULL_REQUEST_TEMPLATE.md} +0 -0
  4. package/CHANGELOG.MD +76 -5
  5. package/build/jodit.css +23 -19
  6. package/build/jodit.es2018.css +22 -18
  7. package/build/jodit.es2018.en.css +22 -18
  8. package/build/jodit.es2018.en.js +153 -99
  9. package/build/jodit.es2018.en.min.css +1 -1
  10. package/build/jodit.es2018.en.min.js +2 -2
  11. package/build/jodit.es2018.js +153 -99
  12. package/build/jodit.es2018.min.css +1 -1
  13. package/build/jodit.es2018.min.js +2 -2
  14. package/build/jodit.js +884 -809
  15. package/build/jodit.min.css +2 -2
  16. package/build/jodit.min.js +2 -2
  17. package/package.json +24 -24
  18. package/src/core/async.ts +22 -8
  19. package/src/core/component/component.ts +4 -2
  20. package/src/core/component/view-component.ts +1 -1
  21. package/src/core/decorators/cache.ts +1 -1
  22. package/src/core/decorators/component.ts +1 -1
  23. package/src/core/decorators/debounce.ts +5 -4
  24. package/src/core/decorators/idle.ts +40 -0
  25. package/src/core/decorators/index.ts +1 -0
  26. package/src/core/decorators/nonenumerable.ts +1 -1
  27. package/src/core/decorators/spy.ts +2 -3
  28. package/src/core/decorators/watch.ts +9 -5
  29. package/src/core/events/events-native.ts +1 -1
  30. package/src/core/global.ts +7 -3
  31. package/src/core/helpers/checker/is-plain-object.ts +1 -2
  32. package/src/core/helpers/checker/is-url.ts +4 -1
  33. package/src/core/helpers/scroll-into-view.ts +1 -1
  34. package/src/core/helpers/size/position.ts +1 -22
  35. package/src/core/helpers/string/stringify.ts +2 -2
  36. package/src/core/helpers/type.ts +0 -44
  37. package/src/core/helpers/utils/utils.ts +1 -1
  38. package/src/core/plugin.ts +3 -1
  39. package/src/core/ui/button/button/button.ts +2 -2
  40. package/src/core/ui/button/group/group.ts +6 -4
  41. package/src/core/ui/element.ts +2 -2
  42. package/src/core/ui/form/block/block.ts +1 -1
  43. package/src/core/ui/form/form.ts +5 -5
  44. package/src/core/ui/form/inputs/area/area.ts +3 -3
  45. package/src/core/ui/form/inputs/checkbox/checkbox.ts +2 -2
  46. package/src/core/ui/form/inputs/file/file.ts +6 -4
  47. package/src/core/ui/form/inputs/input/input.ts +7 -5
  48. package/src/core/ui/form/inputs/select/select.ts +9 -7
  49. package/src/core/ui/list/group.ts +4 -4
  50. package/src/core/ui/list/list.ts +2 -2
  51. package/src/core/ui/popup/popup.ts +3 -3
  52. package/src/core/ui/progress-bar/progress-bar.ts +3 -3
  53. package/src/core/view/view-with-toolbar.ts +5 -2
  54. package/src/core/view/view.ts +2 -2
  55. package/src/jodit.ts +37 -15
  56. package/src/modules/context-menu/context-menu.ts +1 -1
  57. package/src/modules/dialog/dialog.ts +4 -4
  58. package/src/modules/file-browser/builders/context-menu.ts +1 -1
  59. package/src/modules/file-browser/data-provider.ts +1 -1
  60. package/src/modules/file-browser/file-browser.ts +3 -3
  61. package/src/modules/image-editor/image-editor.ts +1 -1
  62. package/src/modules/observer/observer.ts +1 -1
  63. package/src/modules/observer/snapshot.ts +1 -1
  64. package/src/modules/status-bar/status-bar.ts +1 -1
  65. package/src/modules/table.ts +3 -1
  66. package/src/modules/toolbar/button/button.ts +13 -10
  67. package/src/modules/toolbar/button/content.ts +3 -3
  68. package/src/modules/toolbar/collection/collection.ts +9 -6
  69. package/src/modules/toolbar/collection/editor-collection.ts +26 -4
  70. package/src/modules/uploader/uploader.ts +1 -1
  71. package/src/modules/widget/file-selector/file-selector.ts +1 -1
  72. package/src/plugins/about/about.ts +1 -1
  73. package/src/plugins/class-span/class-span.ts +3 -3
  74. package/src/plugins/clipboard/clipboard.ts +28 -24
  75. package/src/plugins/clipboard/paste/helpers.ts +5 -8
  76. package/src/plugins/clipboard/paste/paste.ts +3 -3
  77. package/src/plugins/fix/clean-html.ts +3 -3
  78. package/src/plugins/image/helpers.ts +1 -1
  79. package/src/plugins/inline-popup/inline-popup.ts +1 -1
  80. package/src/plugins/keyboard/delete.ts +1 -1
  81. package/src/plugins/keyboard/enter.ts +26 -26
  82. package/src/plugins/limit.ts +2 -2
  83. package/src/plugins/link/link.ts +3 -3
  84. package/src/plugins/media/video/index.ts +1 -1
  85. package/src/plugins/ordered-list.ts +64 -61
  86. package/src/plugins/redo-undo.ts +3 -3
  87. package/src/plugins/search/search.ts +2 -2
  88. package/src/plugins/select.ts +3 -2
  89. package/src/plugins/size/resize-handler.ts +2 -2
  90. package/src/plugins/size/size.ts +2 -2
  91. package/src/plugins/source/editor/engines/ace.ts +8 -8
  92. package/src/plugins/source/editor/engines/area.ts +15 -13
  93. package/src/plugins/source/source.ts +1 -1
  94. package/src/plugins/symbols/symbols.ts +3 -3
  95. package/src/plugins/table/config.ts +3 -1
  96. package/src/plugins/table/resize-cells.ts +21 -16
  97. package/src/plugins/table/select-cells.ts +44 -6
  98. package/src/plugins/table/table-keyboard-navigation.ts +134 -131
  99. package/src/plugins/table/table.less +24 -17
  100. package/src/types/async.d.ts +2 -0
  101. package/src/types/core.ts +13 -0
  102. package/src/types/index.d.ts +1 -0
  103. package/src/types/jodit.d.ts +2 -0
  104. package/test/tests/acceptance/editorTest.js +37 -0
  105. package/test/tests/acceptance/tableTest.js +23 -14
  106. package/tsconfig.json +1 -0
  107. package/webpack.config.js +1 -0
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is awesome and usefully wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/)
4
- * Version: v3.6.16
4
+ * Version: v3.7.2
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -648,7 +648,7 @@ class EventsNative {
648
648
  }
649
649
  getStore(subject) {
650
650
  if (!subject) {
651
- throw (0,type/* error */.vU)('Need subject');
651
+ throw (0,type/* error */.v)('Need subject');
652
652
  }
653
653
  if (subject[this.__key] === undefined) {
654
654
  const store = new EventHandlersStore();
@@ -710,10 +710,10 @@ class EventsNative {
710
710
  }
711
711
  const store = this.getStore(subject);
712
712
  if (!(0,is_string/* isString */.H)(events) || events === '') {
713
- throw (0,type/* error */.vU)('Need events names');
713
+ throw (0,type/* error */.v)('Need events names');
714
714
  }
715
715
  if (!(0,is_function/* isFunction */.m)(callback)) {
716
- throw (0,type/* error */.vU)('Need event handler');
716
+ throw (0,type/* error */.v)('Need event handler');
717
717
  }
718
718
  if ((0,is_array/* isArray */.k)(subject)) {
719
719
  subject.forEach((subj) => {
@@ -738,7 +738,7 @@ class EventsNative {
738
738
  }
739
739
  this.eachEvent(events, (event, namespace) => {
740
740
  if (event === '') {
741
- throw (0,type/* error */.vU)('Need event name');
741
+ throw (0,type/* error */.v)('Need event name');
742
742
  }
743
743
  if (store.indexOf(event, namespace, callback) === false) {
744
744
  const block = {
@@ -850,7 +850,7 @@ class EventsNative {
850
850
  ? subjectOrEvents
851
851
  : eventsList;
852
852
  if (typeof events !== 'string') {
853
- throw (0,type/* error */.vU)('Need event names');
853
+ throw (0,type/* error */.v)('Need event names');
854
854
  }
855
855
  const store = this.getStore(subject);
856
856
  this.eachEvent(events, (event, namespace) => {
@@ -888,7 +888,7 @@ class EventsNative {
888
888
  : args;
889
889
  const isDOMElement = (0,is_function/* isFunction */.m)(subject.dispatchEvent);
890
890
  if (!isDOMElement && !(0,is_string/* isString */.H)(events)) {
891
- throw (0,type/* error */.vU)('Need events names');
891
+ throw (0,type/* error */.v)('Need events names');
892
892
  }
893
893
  const store = this.getStore(subject);
894
894
  if (!(0,is_string/* isString */.H)(events) && isDOMElement) {
@@ -956,7 +956,7 @@ class EventsNative {
956
956
  var tslib_es6 = __webpack_require__(36);
957
957
  // EXTERNAL MODULE: ./src/core/helpers/index.ts + 32 modules
958
958
  var helpers = __webpack_require__(8);
959
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
959
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
960
960
  var decorators = __webpack_require__(33);
961
961
  ;// CONCATENATED MODULE: ./src/core/events/observe-object.ts
962
962
  /*!
@@ -1081,48 +1081,13 @@ class ObserveObject {
1081
1081
 
1082
1082
  "use strict";
1083
1083
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
1084
- /* harmony export */ "RI": () => (/* binding */ hasOwn),
1085
- /* harmony export */ "dt": () => (/* binding */ type),
1086
- /* harmony export */ "vU": () => (/* binding */ error)
1084
+ /* harmony export */ "v": () => (/* binding */ error)
1087
1085
  /* harmony export */ });
1088
1086
  /*!
1089
1087
  * Jodit Editor (https://xdsoft.net/jodit/)
1090
1088
  * Released under MIT see LICENSE.txt in the project root for license information.
1091
1089
  * Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
1092
1090
  */
1093
- const class2type = {};
1094
- const toString = class2type.toString;
1095
- const hasOwn = class2type.hasOwnProperty;
1096
- [
1097
- 'Boolean',
1098
- 'Number',
1099
- 'String',
1100
- 'Function',
1101
- 'Array',
1102
- 'Date',
1103
- 'RegExp',
1104
- 'Object',
1105
- 'Error',
1106
- 'Symbol',
1107
- 'HTMLDocument',
1108
- 'Window',
1109
- 'HTMLElement',
1110
- 'HTMLBodyElement',
1111
- 'Text',
1112
- 'DocumentFragment',
1113
- 'DOMStringList',
1114
- 'HTMLCollection'
1115
- ].forEach(name => {
1116
- class2type['[object ' + name + ']'] = name.toLowerCase();
1117
- });
1118
- const type = (obj) => {
1119
- if (obj === null) {
1120
- return 'null';
1121
- }
1122
- return typeof obj === 'object' || typeof obj === 'function'
1123
- ? class2type[toString.call(obj)] || 'object'
1124
- : typeof obj;
1125
- };
1126
1091
  function error(message) {
1127
1092
  return new TypeError(message);
1128
1093
  }
@@ -1220,7 +1185,7 @@ __webpack_require__.d(__webpack_exports__, {
1220
1185
  "dataBind": () => (/* reexport */ data_bind/* dataBind */.q),
1221
1186
  "defaultLanguage": () => (/* reexport */ default_language/* defaultLanguage */.X),
1222
1187
  "each": () => (/* reexport */ each),
1223
- "error": () => (/* reexport */ type/* error */.vU),
1188
+ "error": () => (/* reexport */ type/* error */.v),
1224
1189
  "fastClone": () => (/* reexport */ fastClone),
1225
1190
  "get": () => (/* reexport */ utils/* get */.U2),
1226
1191
  "getClassName": () => (/* reexport */ utils/* getClassName */.gj),
@@ -1228,7 +1193,6 @@ __webpack_require__.d(__webpack_exports__, {
1228
1193
  "getXPathByElement": () => (/* reexport */ getXPathByElement),
1229
1194
  "hasBrowserColorPicker": () => (/* reexport */ checker/* hasBrowserColorPicker */.EO),
1230
1195
  "hasContainer": () => (/* reexport */ checker/* hasContainer */.Zt),
1231
- "hasOwn": () => (/* reexport */ type/* hasOwn */.RI),
1232
1196
  "htmlspecialchars": () => (/* reexport */ htmlspecialchars),
1233
1197
  "humanSizeToBytes": () => (/* reexport */ humanSizeToBytes),
1234
1198
  "i18n": () => (/* reexport */ string/* i18n */.ag),
@@ -1293,7 +1257,6 @@ __webpack_require__.d(__webpack_exports__, {
1293
1257
  "toArray": () => (/* reexport */ toArray),
1294
1258
  "trim": () => (/* reexport */ string/* trim */.fy),
1295
1259
  "trimInv": () => (/* reexport */ string/* trimInv */.as),
1296
- "type": () => (/* reexport */ type/* type */.dt),
1297
1260
  "ucfirst": () => (/* reexport */ string/* ucfirst */.Ps),
1298
1261
  "val": () => (/* reexport */ val)
1299
1262
  });
@@ -1569,14 +1532,14 @@ function resolveElement(element, od) {
1569
1532
  resolved = od.querySelector(element);
1570
1533
  }
1571
1534
  catch (_a) {
1572
- throw (0,type/* error */.vU)('String "' + element + '" should be valid HTML selector');
1535
+ throw (0,type/* error */.v)('String "' + element + '" should be valid HTML selector');
1573
1536
  }
1574
1537
  }
1575
1538
  if (!resolved ||
1576
1539
  typeof resolved !== 'object' ||
1577
1540
  !dom/* Dom.isElement */.i.isElement(resolved) ||
1578
1541
  !resolved.cloneNode) {
1579
- throw (0,type/* error */.vU)('Element "' + element + '" should be string or HTMLElement instance');
1542
+ throw (0,type/* error */.v)('Element "' + element + '" should be string or HTMLElement instance');
1580
1543
  }
1581
1544
  return resolved;
1582
1545
  }
@@ -2818,13 +2781,15 @@ const extendLang = (langs) => {
2818
2781
  });
2819
2782
  };
2820
2783
  const boxes = new WeakMap();
2821
- function getContainer(jodit, classFunc, tag = 'div', inside = false) {
2784
+ function getContainer(jodit, classFunc, tag = 'div', createInsideEditor = false) {
2822
2785
  const name = (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.getClassName)(classFunc.prototype);
2823
2786
  const data = boxes.get(jodit) || {}, key = name + tag;
2824
2787
  const view = (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.isViewObject)(jodit) ? jodit : jodit.j;
2825
2788
  if (!data[key]) {
2826
2789
  let c = view.c, body = jodit.od.body;
2827
- if (inside && (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.isJoditObject)(jodit) && jodit.od !== jodit.ed) {
2790
+ if (createInsideEditor &&
2791
+ (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.isJoditObject)(jodit) &&
2792
+ jodit.od !== jodit.ed) {
2828
2793
  c = jodit.createInside;
2829
2794
  body = tag === 'style' ? jodit.ed.head : jodit.ed.body;
2830
2795
  }
@@ -3652,8 +3617,6 @@ function isWindow(obj) {
3652
3617
  return obj != null && obj === obj.window;
3653
3618
  }
3654
3619
 
3655
- // EXTERNAL MODULE: ./src/core/helpers/type.ts
3656
- var type = __webpack_require__(4);
3657
3620
  ;// CONCATENATED MODULE: ./src/core/helpers/checker/is-plain-object.ts
3658
3621
  /*!
3659
3622
  * Jodit Editor (https://xdsoft.net/jodit/)
@@ -3661,13 +3624,12 @@ var type = __webpack_require__(4);
3661
3624
  * Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
3662
3625
  */
3663
3626
 
3664
-
3665
3627
  function isPlainObject(obj) {
3666
3628
  if (!obj || typeof obj !== 'object' || obj.nodeType || isWindow(obj)) {
3667
3629
  return false;
3668
3630
  }
3669
3631
  return !(obj.constructor &&
3670
- !type/* hasOwn.call */.RI.call(obj.constructor.prototype, 'isPrototypeOf'));
3632
+ !{}.hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf'));
3671
3633
  }
3672
3634
 
3673
3635
  // EXTERNAL MODULE: ./src/core/helpers/checker/is-promise.ts
@@ -3685,7 +3647,7 @@ function isURL(str) {
3685
3647
  if (typeof URL !== 'undefined') {
3686
3648
  try {
3687
3649
  const url = new URL(str);
3688
- return ['https:', 'http:', 'ftp:', 'file:'].includes(url.protocol);
3650
+ return ['https:', 'http:', 'ftp:', 'file:', 'rtmp:'].includes(url.protocol);
3689
3651
  }
3690
3652
  catch (e) {
3691
3653
  return false;
@@ -3756,7 +3718,7 @@ function isValidName(name) {
3756
3718
  */
3757
3719
  function stringify(value, options = {}) {
3758
3720
  if (typeof value !== 'object') {
3759
- return value.toString ? value.toString() : value;
3721
+ return String(value);
3760
3722
  }
3761
3723
  const excludeKeys = new Set(options.excludeKeys);
3762
3724
  const map = new WeakMap();
@@ -4825,7 +4787,7 @@ var helpers = __webpack_require__(8);
4825
4787
  var icon = __webpack_require__(27);
4826
4788
  // EXTERNAL MODULE: ./src/core/ui/list/list.ts + 1 modules
4827
4789
  var list = __webpack_require__(31);
4828
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
4790
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
4829
4791
  var decorators = __webpack_require__(33);
4830
4792
  // EXTERNAL MODULE: ./src/core/component/index.ts + 3 modules
4831
4793
  var component = __webpack_require__(11);
@@ -5157,7 +5119,7 @@ function getStrongControlTypes(items, controls) {
5157
5119
  return elements.map(item => (0,get_control_type/* getControlType */.Y)(item, controls || config/* Config.defaultOptions.controls */.D.defaultOptions.controls));
5158
5120
  }
5159
5121
 
5160
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
5122
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
5161
5123
  var decorators = __webpack_require__(33);
5162
5124
  // EXTERNAL MODULE: ./src/core/ui/list/group.ts
5163
5125
  var group = __webpack_require__(35);
@@ -5353,6 +5315,7 @@ __webpack_require__.d(__webpack_exports__, {
5353
5315
  "debounce": () => (/* reexport */ debounce),
5354
5316
  "getPropertyDescriptor": () => (/* reexport */ getPropertyDescriptor),
5355
5317
  "hook": () => (/* reexport */ hook),
5318
+ "idle": () => (/* reexport */ idle),
5356
5319
  "nonenumerable": () => (/* reexport */ nonenumerable),
5357
5320
  "persistent": () => (/* reexport */ persistent),
5358
5321
  "throttle": () => (/* reexport */ throttle),
@@ -5449,6 +5412,24 @@ function throttle(timeout, firstCallImmediately = false) {
5449
5412
  return debounce(timeout, firstCallImmediately, 'throttle');
5450
5413
  }
5451
5414
 
5415
+ ;// CONCATENATED MODULE: ./src/core/decorators/idle.ts
5416
+
5417
+
5418
+ function idle() {
5419
+ return (target, propertyKey) => {
5420
+ if (!(0,helpers.isFunction)(target[propertyKey])) {
5421
+ throw (0,helpers.error)('Handler must be a Function');
5422
+ }
5423
+ target.hookStatus(core_component/* STATUSES.ready */.n$.ready, (component) => {
5424
+ const view = (0,helpers.isViewObject)(component)
5425
+ ? component
5426
+ : component.jodit;
5427
+ const originalMethod = component[propertyKey];
5428
+ component[propertyKey] = (...args) => view.async.requestIdleCallback(originalMethod.bind(component, ...args));
5429
+ });
5430
+ };
5431
+ }
5432
+
5452
5433
  ;// CONCATENATED MODULE: ./src/core/decorators/hook.ts
5453
5434
  /*!
5454
5435
  * Jodit Editor (https://xdsoft.net/jodit/)
@@ -5588,9 +5569,10 @@ function watch(observeFields, context) {
5588
5569
  if ((0,helpers.isFunction)(context)) {
5589
5570
  context = context(component);
5590
5571
  }
5591
- view.events
5592
- .on(context || component, eventName, callback)
5593
- .on(eventName, callback);
5572
+ view.events.on(context || component, eventName, callback);
5573
+ if (!context) {
5574
+ view.events.on(eventName, callback);
5575
+ }
5594
5576
  view.hookStatus('beforeDestruct', () => {
5595
5577
  view.events
5596
5578
  .off(context || component, eventName, callback)
@@ -5666,6 +5648,7 @@ var esm = __webpack_require__(34);
5666
5648
 
5667
5649
 
5668
5650
 
5651
+
5669
5652
  /***/ }),
5670
5653
  /* 34 */
5671
5654
  /***/ ((__unused_webpack_module, exports) => {
@@ -6108,10 +6091,16 @@ function __spreadArrays() {
6108
6091
  return r;
6109
6092
  }
6110
6093
  exports.__spreadArrays = __spreadArrays;
6111
- function __spreadArray(to, from) {
6112
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
6113
- to[j] = from[i];
6114
- return to;
6094
+ function __spreadArray(to, from, pack) {
6095
+ if (pack || arguments.length === 2)
6096
+ for (var i = 0, l = from.length, ar; i < l; i++) {
6097
+ if (ar || !(i in from)) {
6098
+ if (!ar)
6099
+ ar = Array.prototype.slice.call(from, 0, i);
6100
+ ar[i] = from[i];
6101
+ }
6102
+ }
6103
+ return to.concat(ar || from);
6115
6104
  }
6116
6105
  exports.__spreadArray = __spreadArray;
6117
6106
  function __await(v) {
@@ -6286,7 +6275,7 @@ var helpers = __webpack_require__(8);
6286
6275
  var global = __webpack_require__(12);
6287
6276
  // EXTERNAL MODULE: ./src/core/ui/element.ts
6288
6277
  var ui_element = __webpack_require__(25);
6289
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
6278
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
6290
6279
  var decorators = __webpack_require__(33);
6291
6280
  ;// CONCATENATED MODULE: ./src/core/ui/popup/popup.ts
6292
6281
  /*!
@@ -6569,7 +6558,7 @@ var ui_element = __webpack_require__(25);
6569
6558
  var helpers = __webpack_require__(8);
6570
6559
  // EXTERNAL MODULE: ./src/core/dom.ts
6571
6560
  var dom = __webpack_require__(14);
6572
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
6561
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
6573
6562
  var decorators = __webpack_require__(33);
6574
6563
  // EXTERNAL MODULE: ./src/core/ui/icon.ts
6575
6564
  var ui_icon = __webpack_require__(27);
@@ -11568,7 +11557,7 @@ const FileSelectorWidget = (editor, callbacks, elm, close, isImage = true) => {
11568
11557
  required: true,
11569
11558
  label: 'URL',
11570
11559
  name: 'url',
11571
- type: 'url',
11560
+ type: 'text',
11572
11561
  placeholder: 'https://'
11573
11562
  }),
11574
11563
  new ui/* UIInput */.u3(editor, {
@@ -12749,21 +12738,29 @@ class Async {
12749
12738
  return 0;
12750
12739
  }
12751
12740
  let options = {};
12752
- if (typeof timeout !== 'number') {
12741
+ if (!(0,helpers.isNumber)(timeout)) {
12753
12742
  options = timeout;
12754
12743
  timeout = options.timeout || 0;
12755
12744
  }
12756
- if (options.label && this.timers.has(options.label)) {
12757
- (0,helpers.clearTimeout)(this.timers.get(options.label));
12758
- this.timers.delete(options.label);
12745
+ if (options.label) {
12746
+ this.clearLabel(options.label);
12759
12747
  }
12760
12748
  const timer = (0,helpers.setTimeout)(callback, timeout, ...args), key = options.label || timer;
12761
12749
  this.timers.set(key, timer);
12762
12750
  return timer;
12763
12751
  }
12764
- clearTimeout(timer) {
12765
- (0,helpers.clearTimeout)(timer);
12766
- this.timers.delete(timer);
12752
+ clearLabel(label) {
12753
+ if (label && this.timers.has(label)) {
12754
+ (0,helpers.clearTimeout)(this.timers.get(label));
12755
+ this.timers.delete(label);
12756
+ }
12757
+ }
12758
+ clearTimeout(timerOrLabel) {
12759
+ if ((0,helpers.isString)(timerOrLabel)) {
12760
+ return this.clearLabel(timerOrLabel);
12761
+ }
12762
+ (0,helpers.clearTimeout)(timerOrLabel);
12763
+ this.timers.delete(timerOrLabel);
12767
12764
  }
12768
12765
  debounce(fn, timeout, firstCallImmediately = false) {
12769
12766
  let timer = 0, fired = false;
@@ -13267,7 +13264,7 @@ class Storage {
13267
13264
 
13268
13265
  // EXTERNAL MODULE: ./src/core/global.ts
13269
13266
  var global = __webpack_require__(12);
13270
- // EXTERNAL MODULE: ./src/core/decorators/index.ts + 8 modules
13267
+ // EXTERNAL MODULE: ./src/core/decorators/index.ts + 9 modules
13271
13268
  var decorators = __webpack_require__(33);
13272
13269
  // EXTERNAL MODULE: ./src/core/traits/index.ts + 2 modules
13273
13270
  var traits = __webpack_require__(26);
@@ -13293,7 +13290,7 @@ class View extends component/* Component */.wA {
13293
13290
  this.isView = true;
13294
13291
  this.mods = {};
13295
13292
  this.components = new Set();
13296
- this.version = "3.6.16";
13293
+ this.version = "3.7.2";
13297
13294
  this.async = new Async();
13298
13295
  this.buffer = Storage.makeStorage();
13299
13296
  this.storage = Storage.makeStorage(true, this.componentName);
@@ -13391,10 +13388,10 @@ class View extends component/* Component */.wA {
13391
13388
  return this.__isFullSize;
13392
13389
  }
13393
13390
  getVersion() {
13394
- return "3.6.16";
13391
+ return "3.7.2";
13395
13392
  }
13396
13393
  static getVersion() {
13397
- return "3.6.16";
13394
+ return "3.7.2";
13398
13395
  }
13399
13396
  initOptions(options) {
13400
13397
  this.options = (0,helpers.ConfigProto)(options || {}, (0,helpers.ConfigProto)(this.options || {}, View.defaultOptions));
@@ -13590,8 +13587,8 @@ ToolbarCollection = (0,tslib_es6.__decorate)([
13590
13587
 
13591
13588
 
13592
13589
  let ToolbarEditorCollection = class ToolbarEditorCollection extends ToolbarCollection {
13593
- constructor() {
13594
- super(...arguments);
13590
+ constructor(jodit) {
13591
+ super(jodit);
13595
13592
  this.checkActiveStatus = (cssObject, node) => {
13596
13593
  let matches = 0, total = 0;
13597
13594
  Object.keys(cssObject).forEach((cssProperty) => {
@@ -13610,6 +13607,7 @@ let ToolbarEditorCollection = class ToolbarEditorCollection extends ToolbarColle
13610
13607
  });
13611
13608
  return total === matches;
13612
13609
  };
13610
+ this.prependInvisibleInput(this.container);
13613
13611
  }
13614
13612
  className() {
13615
13613
  return 'ToolbarEditorCollection';
@@ -13662,6 +13660,13 @@ let ToolbarEditorCollection = class ToolbarEditorCollection extends ToolbarColle
13662
13660
  getTarget(button) {
13663
13661
  return button.target || this.j.s.current() || null;
13664
13662
  }
13663
+ prependInvisibleInput(container) {
13664
+ const input = this.j.create.element('input', {
13665
+ tabIndex: -1,
13666
+ style: 'width: 0; height:0; position: absolute; visibility: hidden;'
13667
+ });
13668
+ dom/* Dom.appendChildFirst */.i.appendChildFirst(container, input);
13669
+ }
13665
13670
  };
13666
13671
  ToolbarEditorCollection = (0,tslib_es6.__decorate)([
13667
13672
  decorators.component
@@ -13911,12 +13916,14 @@ let ToolbarButton = class ToolbarButton extends ui_button/* UIButton */.y3 {
13911
13916
  originalEvent,
13912
13917
  button: this
13913
13918
  });
13914
- if (result !== false) {
13919
+ if (result !== false && result !== true) {
13915
13920
  (_e = (_d = this.j) === null || _d === void 0 ? void 0 : _d.e) === null || _e === void 0 ? void 0 : _e.fire('synchro');
13916
13921
  if (this.parentElement) {
13917
13922
  this.parentElement.update();
13918
13923
  }
13919
13924
  (_g = (_f = this.j) === null || _f === void 0 ? void 0 : _f.e) === null || _g === void 0 ? void 0 : _g.fire('closeAllPopups afterExec');
13925
+ }
13926
+ if (result !== false) {
13920
13927
  return;
13921
13928
  }
13922
13929
  }
@@ -14037,11 +14044,12 @@ var helpers_buttons = __webpack_require__(38);
14037
14044
  class ViewWithToolbar extends View {
14038
14045
  constructor(options, isJodit = false) {
14039
14046
  super(options, isJodit);
14040
- this.isJodit = isJodit;
14041
14047
  this.toolbar = makeCollection(this);
14042
14048
  this.defaultToolbarContainer = this.c.div('jodit-toolbar__box');
14043
14049
  this.registeredButtons = new Set();
14044
14050
  this.groupToButtons = {};
14051
+ this.isJodit = false;
14052
+ this.isJodit = isJodit;
14045
14053
  this.e.on('beforeToolbarBuild', this.beforeToolbarBuild);
14046
14054
  }
14047
14055
  get toolbarContainer() {
@@ -14704,6 +14712,7 @@ const Confirm = (msg, title, callback) => {
14704
14712
  class Plugin extends component/* ViewComponent */.Hr {
14705
14713
  constructor(jodit) {
14706
14714
  super(jodit);
14715
+ this.requires = [];
14707
14716
  this.buttons = [];
14708
14717
  this.hasStyle = false;
14709
14718
  jodit.e
@@ -19642,6 +19651,14 @@ class Jodit extends ViewWithToolbar {
19642
19651
  className() {
19643
19652
  return 'Jodit';
19644
19653
  }
19654
+ waitForReady() {
19655
+ if (this.isReady) {
19656
+ return Promise.resolve(this);
19657
+ }
19658
+ return this.async.promise(resolve => {
19659
+ this.hookStatus('ready', () => resolve(this));
19660
+ });
19661
+ }
19645
19662
  get text() {
19646
19663
  if (this.editor) {
19647
19664
  return this.editor.innerText || '';
@@ -20675,7 +20692,7 @@ config/* Config.prototype.controls.about */.D.prototype.controls.about = {
20675
20692
  ? 'MIT'
20676
20693
  : (0,helpers.normalizeLicense)(editor.o.license))}</div>
20677
20694
  <div>
20678
- <a href="https://xdsoft.net/jodit/" target="_blank">http://xdsoft.net/jodit/</a>
20695
+ <a href="${"https://xdsoft.net/jodit/"}" target="_blank">${"https://xdsoft.net/jodit/"}</a>
20679
20696
  </div>
20680
20697
  <div>
20681
20698
  <a href="https://xdsoft.net/jodit/doc/" target="_blank">${i18n("Jodit User's Guide")}</a>
@@ -21889,7 +21906,8 @@ function pasteInsertHtml(e, editor, html) {
21889
21906
  function getAllTypes(dt) {
21890
21907
  const types = dt.types;
21891
21908
  let types_str = '';
21892
- if ((0,helpers.isArray)(types) || (0,helpers.type)(types) === 'domstringlist') {
21909
+ if ((0,helpers.isArray)(types) ||
21910
+ {}.toString.call(types) === '[object DOMStringList]') {
21893
21911
  for (let i = 0; i < types.length; i += 1) {
21894
21912
  types_str += types[i] + ';';
21895
21913
  }
@@ -23099,7 +23117,9 @@ class enter extends Plugin {
23099
23117
  ? constants.PARAGRAPH
23100
23118
  : this.defaultTag;
23101
23119
  }
23102
- editor.e.off('.enter').on('keydown.enter', (event) => {
23120
+ editor.e
23121
+ .off('.enter')
23122
+ .on('keydown.enter', (event) => {
23103
23123
  if (event.key === constants.KEY_ENTER) {
23104
23124
  const beforeEnter = editor.e.fire('beforeEnter', event);
23105
23125
  if (beforeEnter !== undefined) {
@@ -26010,7 +26030,8 @@ function orderedList(editor) {
26010
26030
  if (isOurCommand(command) && listStyleType) {
26011
26031
  const ul = getListWrapper();
26012
26032
  if (ul && !listStyleTypeEqual(ul, listStyleType)) {
26013
- if ((dom/* Dom.isTag */.i.isTag(ul, 'ul') && /unordered/i.test(command)) ||
26033
+ if ((dom/* Dom.isTag */.i.isTag(ul, 'ul') &&
26034
+ /unordered/i.test(command)) ||
26014
26035
  (dom/* Dom.isTag */.i.isTag(ul, 'ol') && !/unordered/i.test(command))) {
26015
26036
  setListStyleType(ul, listStyleType);
26016
26037
  return false;
@@ -27094,12 +27115,12 @@ class select_select extends Plugin {
27094
27115
  }
27095
27116
  afterInit(jodit) {
27096
27117
  this.proxyEventsList.forEach(eventName => {
27097
- jodit.e.on(eventName + '.inline-popup', this.onStartSelection);
27118
+ jodit.e.on(eventName + '.select', this.onStartSelection);
27098
27119
  });
27099
27120
  }
27100
27121
  beforeDestruct(jodit) {
27101
27122
  this.proxyEventsList.forEach(eventName => {
27102
- jodit.e.on(eventName + '.inline-popup', this.onStartSelection);
27123
+ jodit.e.on(eventName + '.select', this.onStartSelection);
27103
27124
  });
27104
27125
  }
27105
27126
  onStartSelection(e) {
@@ -28563,7 +28584,8 @@ class symbols extends Plugin {
28563
28584
 
28564
28585
  config/* Config.prototype.table */.D.prototype.table = {
28565
28586
  allowCellSelection: true,
28566
- selectionCellStyle: 'border: 1px double #1e88e5 !important;',
28587
+ selectionCellStyle: 'border: 1px double #1e88e5 !important;' +
28588
+ 'background-color: rgba(158, 207, 250, 0.3)!important',
28567
28589
  allowCellResize: true,
28568
28590
  useExtraClassesOptions: false
28569
28591
  };
@@ -28927,7 +28949,7 @@ class resizeCells extends Plugin {
28927
28949
  this.hideResizeHandle();
28928
28950
  }
28929
28951
  })
28930
- .on(table, 'mousemove.resize-cells touchmove.resize-cells', (event) => {
28952
+ .on(table, 'mousemove.resize-cells touchmove.resize-cells', this.j.async.throttle((event) => {
28931
28953
  if (this.j.isLocked) {
28932
28954
  return;
28933
28955
  }
@@ -28936,7 +28958,9 @@ class resizeCells extends Plugin {
28936
28958
  return;
28937
28959
  }
28938
28960
  this.calcHandlePosition(table, cell, event.offsetX);
28939
- });
28961
+ }, {
28962
+ timeout: this.j.defaultTimeout
28963
+ }));
28940
28964
  this.createResizeHandle();
28941
28965
  }
28942
28966
  beforeDestruct(jodit) {
@@ -28973,11 +28997,13 @@ class resizeCells extends Plugin {
28973
28997
 
28974
28998
 
28975
28999
  const select_cells_key = 'table_processor_observer';
29000
+ const MOUSE_MOVE_LABEL = 'onMoveTableSelectCell';
28976
29001
  class selectCells extends Plugin {
28977
29002
  constructor() {
28978
29003
  super(...arguments);
28979
29004
  this.requires = ['select'];
28980
29005
  this.selectedCell = null;
29006
+ this.isSelectionMode = false;
28981
29007
  }
28982
29008
  get module() {
28983
29009
  return this.j.getInstance('Table', this.j.o);
@@ -29003,8 +29029,13 @@ class selectCells extends Plugin {
29003
29029
  ]
29004
29030
  .map(e => e + '.select-cells')
29005
29031
  .join(' '), this.onStartSelection)
29006
- .on('clickTr', () => {
29007
- if (this.module.getAllSelectedCells().length) {
29032
+ .on('clickTr clickTbody', () => {
29033
+ var _a;
29034
+ const cellsCount = this.module.getAllSelectedCells().length;
29035
+ if (cellsCount) {
29036
+ if (cellsCount > 1) {
29037
+ (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
29038
+ }
29008
29039
  return false;
29009
29040
  }
29010
29041
  });
@@ -29024,17 +29055,28 @@ class selectCells extends Plugin {
29024
29055
  if (!cell.firstChild) {
29025
29056
  cell.appendChild(this.j.createInside.element('br'));
29026
29057
  }
29058
+ this.isSelectionMode = true;
29027
29059
  this.selectedCell = cell;
29028
29060
  this.module.addSelection(cell);
29029
29061
  this.j.e
29030
- .on(table, 'mousemove.select-cells touchmove.select-cells', this.onMove.bind(this, table))
29062
+ .on(table, 'mousemove.select-cells touchmove.select-cells', this.j.async.throttle(this.onMove.bind(this, table), {
29063
+ label: MOUSE_MOVE_LABEL,
29064
+ timeout: this.j.defaultTimeout / 2
29065
+ }))
29031
29066
  .on(table, 'mouseup.select-cells touchend.select-cells', this.onStopSelection.bind(this, table));
29032
29067
  return false;
29033
29068
  }
29034
- onOutsideClick(e) {
29035
- this.unselectCells();
29069
+ onOutsideClick() {
29070
+ this.selectedCell = null;
29071
+ this.onRemoveSelection();
29072
+ }
29073
+ onChange() {
29074
+ if (!this.j.isLocked && !this.isSelectionMode) {
29075
+ this.onRemoveSelection();
29076
+ }
29036
29077
  }
29037
29078
  onMove(table, e) {
29079
+ var _a;
29038
29080
  if (this.j.o.readonly) {
29039
29081
  return;
29040
29082
  }
@@ -29059,6 +29101,10 @@ class selectCells extends Plugin {
29059
29101
  this.module.addSelection(box[i][j]);
29060
29102
  }
29061
29103
  }
29104
+ const cellsCount = this.module.getAllSelectedCells().length;
29105
+ if (cellsCount > 1) {
29106
+ (_a = this.j.s.sel) === null || _a === void 0 ? void 0 : _a.removeAllRanges();
29107
+ }
29062
29108
  this.j.e.fire('hidePopup');
29063
29109
  e.stopPropagation();
29064
29110
  (() => {
@@ -29080,12 +29126,14 @@ class selectCells extends Plugin {
29080
29126
  this.j.e.fire('hidePopup', 'cells');
29081
29127
  return;
29082
29128
  }
29129
+ this.isSelectionMode = false;
29083
29130
  this.selectedCell = null;
29084
29131
  }
29085
29132
  onStopSelection(table, e) {
29086
29133
  if (!this.selectedCell) {
29087
29134
  return;
29088
29135
  }
29136
+ this.isSelectionMode = false;
29089
29137
  this.j.unlock();
29090
29138
  const node = this.j.ed.elementFromPoint(e.clientX, e.clientY);
29091
29139
  if (!node) {
@@ -29113,6 +29161,7 @@ class selectCells extends Plugin {
29113
29161
  (0,helpers.$$)('table', this.j.editor).forEach(table => {
29114
29162
  this.j.e.off(table, 'mousemove.select-cells touchmove.select-cells mouseup.select-cells touchend.select-cells');
29115
29163
  });
29164
+ this.j.async.clearTimeout(MOUSE_MOVE_LABEL);
29116
29165
  }
29117
29166
  unselectCells(table, currentCell) {
29118
29167
  const module = this.module;
@@ -29191,6 +29240,9 @@ class selectCells extends Plugin {
29191
29240
  (0,tslib_es6.__decorate)([
29192
29241
  (0,decorators.watch)(':outsideClick')
29193
29242
  ], selectCells.prototype, "onOutsideClick", null);
29243
+ (0,tslib_es6.__decorate)([
29244
+ (0,decorators.watch)(':change')
29245
+ ], selectCells.prototype, "onChange", null);
29194
29246
  (0,tslib_es6.__decorate)([
29195
29247
  decorators.autobind
29196
29248
  ], selectCells.prototype, "onRemoveSelection", null);
@@ -29224,7 +29276,9 @@ function tableKeyboardNavigation(editor) {
29224
29276
  event.key === constants.KEY_UP ||
29225
29277
  event.key === constants.KEY_DOWN) {
29226
29278
  current = editor.s.current();
29227
- block = dom/* Dom.up */.i.up(current, (elm) => elm && elm.nodeName && /^td|th$/i.test(elm.nodeName), editor.editor);
29279
+ block = dom/* Dom.up */.i.up(current, (elm) => elm &&
29280
+ elm.nodeName &&
29281
+ /^td|th$/i.test(elm.nodeName), editor.editor);
29228
29282
  if (!block) {
29229
29283
  return;
29230
29284
  }