@syncfusion/ej2-richtexteditor 23.2.7 → 24.1.41

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/CHANGELOG.md +27 -1
  2. package/dist/ej2-richtexteditor.min.js +2 -2
  3. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +571 -309
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +570 -308
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +2 -2
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +13 -13
  13. package/src/common/config.js +1 -1
  14. package/src/editor-manager/plugin/audio.js +13 -3
  15. package/src/editor-manager/plugin/dom-node.js +1 -14
  16. package/src/editor-manager/plugin/image.js +30 -3
  17. package/src/editor-manager/plugin/inserthtml.js +5 -2
  18. package/src/editor-manager/plugin/ms-word-clean-up.js +4 -1
  19. package/src/editor-manager/plugin/nodecutter.js +1 -1
  20. package/src/editor-manager/plugin/selection-commands.js +39 -0
  21. package/src/rich-text-editor/actions/base-quick-toolbar.js +18 -4
  22. package/src/rich-text-editor/actions/color-picker.js +3 -3
  23. package/src/rich-text-editor/actions/dropdown-buttons.js +4 -2
  24. package/src/rich-text-editor/actions/emoji-picker.js +12 -3
  25. package/src/rich-text-editor/actions/enter-key.js +2 -1
  26. package/src/rich-text-editor/actions/file-manager.js +1 -1
  27. package/src/rich-text-editor/actions/format-painter.js +1 -1
  28. package/src/rich-text-editor/actions/full-screen.js +2 -2
  29. package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
  30. package/src/rich-text-editor/actions/html-editor.js +36 -5
  31. package/src/rich-text-editor/actions/paste-clean-up.d.ts +2 -0
  32. package/src/rich-text-editor/actions/paste-clean-up.js +72 -19
  33. package/src/rich-text-editor/actions/quick-toolbar.js +24 -5
  34. package/src/rich-text-editor/actions/toolbar.d.ts +1 -0
  35. package/src/rich-text-editor/actions/toolbar.js +18 -10
  36. package/src/rich-text-editor/base/classes.d.ts +5 -0
  37. package/src/rich-text-editor/base/classes.js +5 -0
  38. package/src/rich-text-editor/base/constant.d.ts +6 -1
  39. package/src/rich-text-editor/base/constant.js +6 -1
  40. package/src/rich-text-editor/base/interface.d.ts +10 -0
  41. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +1 -1
  42. package/src/rich-text-editor/base/rich-text-editor.d.ts +9 -0
  43. package/src/rich-text-editor/base/rich-text-editor.js +80 -17
  44. package/src/rich-text-editor/base/util.js +11 -2
  45. package/src/rich-text-editor/formatter/formatter.js +1 -1
  46. package/src/rich-text-editor/models/default-locale.js +2 -0
  47. package/src/rich-text-editor/models/items.js +1 -1
  48. package/src/rich-text-editor/renderer/dialog-renderer.js +10 -1
  49. package/src/rich-text-editor/renderer/image-module.js +68 -59
  50. package/src/rich-text-editor/renderer/link-module.js +43 -23
  51. package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
  52. package/src/rich-text-editor/renderer/table-module.js +43 -30
  53. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +0 -6
  54. package/src/rich-text-editor/renderer/toolbar-renderer.js +13 -93
  55. package/src/rich-text-editor/renderer/view-source.js +3 -1
  56. package/styles/bootstrap-dark.css +194 -52
  57. package/styles/bootstrap.css +197 -53
  58. package/styles/bootstrap4.css +194 -52
  59. package/styles/bootstrap5-dark.css +195 -53
  60. package/styles/bootstrap5.css +195 -53
  61. package/styles/fabric-dark.css +194 -52
  62. package/styles/fabric.css +194 -52
  63. package/styles/fluent-dark.css +197 -53
  64. package/styles/fluent.css +197 -53
  65. package/styles/highcontrast-light.css +194 -52
  66. package/styles/highcontrast.css +194 -52
  67. package/styles/material-dark.css +196 -53
  68. package/styles/material.css +196 -53
  69. package/styles/material3-dark.css +194 -52
  70. package/styles/material3.css +194 -52
  71. package/styles/rich-text-editor/_bootstrap5-definition.scss +1 -1
  72. package/styles/rich-text-editor/_fluent-definition.scss +1 -1
  73. package/styles/rich-text-editor/_layout.scss +78 -3
  74. package/styles/rich-text-editor/_theme.scss +1 -1
  75. package/styles/rich-text-editor/bootstrap-dark.css +194 -52
  76. package/styles/rich-text-editor/bootstrap.css +197 -53
  77. package/styles/rich-text-editor/bootstrap4.css +194 -52
  78. package/styles/rich-text-editor/bootstrap5-dark.css +195 -53
  79. package/styles/rich-text-editor/bootstrap5.css +195 -53
  80. package/styles/rich-text-editor/fabric-dark.css +194 -52
  81. package/styles/rich-text-editor/fabric.css +194 -52
  82. package/styles/rich-text-editor/fluent-dark.css +197 -53
  83. package/styles/rich-text-editor/fluent.css +197 -53
  84. package/styles/rich-text-editor/highcontrast-light.css +194 -52
  85. package/styles/rich-text-editor/highcontrast.css +194 -52
  86. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +3 -3
  87. package/styles/rich-text-editor/icons/_bootstrap.scss +3 -3
  88. package/styles/rich-text-editor/icons/_bootstrap4.scss +3 -3
  89. package/styles/rich-text-editor/icons/_bootstrap5.scss +3 -3
  90. package/styles/rich-text-editor/icons/_fabric-dark.scss +3 -3
  91. package/styles/rich-text-editor/icons/_fabric.scss +3 -3
  92. package/styles/rich-text-editor/icons/_fluent.scss +3 -3
  93. package/styles/rich-text-editor/icons/_fusionnew.scss +3 -3
  94. package/styles/rich-text-editor/icons/_highcontrast-light.scss +3 -3
  95. package/styles/rich-text-editor/icons/_highcontrast.scss +3 -3
  96. package/styles/rich-text-editor/icons/_material-dark.scss +3 -3
  97. package/styles/rich-text-editor/icons/_material.scss +3 -3
  98. package/styles/rich-text-editor/icons/_material3.scss +3 -3
  99. package/styles/rich-text-editor/icons/_tailwind.scss +3 -3
  100. package/styles/rich-text-editor/material-dark.css +196 -53
  101. package/styles/rich-text-editor/material.css +196 -53
  102. package/styles/rich-text-editor/material3-dark.css +194 -52
  103. package/styles/rich-text-editor/material3.css +194 -52
  104. package/styles/rich-text-editor/tailwind-dark.css +194 -52
  105. package/styles/rich-text-editor/tailwind.css +194 -52
  106. package/styles/tailwind-dark.css +194 -52
  107. package/styles/tailwind.css +194 -52
@@ -265,18 +265,18 @@ var Image = /** @class */ (function () {
265
265
  this.resizeBtnInit();
266
266
  this.imgEle = e;
267
267
  addClass([this.imgEle], 'e-resize');
268
- this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + ' ' + this.parent.cssClass, id: this.rteID + '_imgResize' });
268
+ this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + this.parent.getCssClass(true), id: this.rteID + '_imgResize' });
269
269
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
270
- className: 'e-rte-imageboxmark e-rte-topLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
270
+ className: 'e-rte-imageboxmark e-rte-topLeft' + this.parent.getCssClass(true), styles: 'cursor: nwse-resize'
271
271
  }));
272
272
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
273
- className: 'e-rte-imageboxmark e-rte-topRight' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
273
+ className: 'e-rte-imageboxmark e-rte-topRight' + this.parent.getCssClass(true), styles: 'cursor: nesw-resize'
274
274
  }));
275
275
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
276
- className: 'e-rte-imageboxmark e-rte-botLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
276
+ className: 'e-rte-imageboxmark e-rte-botLeft' + this.parent.getCssClass(true), styles: 'cursor: nesw-resize'
277
277
  }));
278
278
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
279
- className: 'e-rte-imageboxmark e-rte-botRight' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
279
+ className: 'e-rte-imageboxmark e-rte-botRight' + this.parent.getCssClass(true), styles: 'cursor: nwse-resize'
280
280
  }));
281
281
  if (Browser.isDevice) {
282
282
  addClass([this.imgResizeDiv], 'e-mob-rte');
@@ -429,8 +429,8 @@ var Image = /** @class */ (function () {
429
429
  img.removeAttribute('height');
430
430
  }
431
431
  else {
432
- img.style.width = expectedX + 'px';
433
- img.style.height = expectedX + 'px';
432
+ img.style.width = ((expectedX >= 15) ? expectedX : 15) + 'px';
433
+ img.style.height = ((expectedX >= 15) ? expectedX : 15) + 'px';
434
434
  }
435
435
  }
436
436
  };
@@ -459,7 +459,6 @@ var Image = /** @class */ (function () {
459
459
  _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10), args);
460
460
  _this.resizeImgDupPos(_this.imgEle);
461
461
  _this.imgResizePos(_this.imgEle, _this.imgResizeDiv);
462
- _this.parent.setContentHeight('', false);
463
462
  }
464
463
  });
465
464
  };
@@ -474,7 +473,7 @@ var Image = /** @class */ (function () {
474
473
  else if (isNOU(this.parent.insertImageSettings.maxHeight)) {
475
474
  this.imgEle.style.maxHeight = '';
476
475
  }
477
- this.imgEle.style.maxWidth = this.parent.getInsertImgMaxWidth() + 'px';
476
+ this.imgEle.style.maxWidth = (closest(this.imgEle, 'ol,ul') != null ? this.parent.getInsertImgMaxWidth() - parseInt((getComputedStyle(closest(this.imgEle, 'ol,ul')).paddingLeft), 0) : this.parent.getInsertImgMaxWidth()) + 'px';
478
477
  var pageX = this.getPointX(e);
479
478
  var pageY = this.getPointY(e);
480
479
  var mouseX = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageX - this.pageX) : (pageX - this.pageX);
@@ -699,13 +698,22 @@ var Image = /** @class */ (function () {
699
698
  }
700
699
  }
701
700
  }
702
- else if ((range.startContainer.nodeType === 1 &&
703
- range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE))) {
704
- detach(range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE));
705
- }
706
- else if (range.startContainer.nodeType === 1 &&
707
- range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_IMGBREAK)) {
708
- detach(range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_IMGBREAK));
701
+ else if (range.startContainer.nodeType === 1) {
702
+ if (range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE)) {
703
+ detach(range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE));
704
+ }
705
+ else if (range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_IMGBREAK)) {
706
+ detach(range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_IMGBREAK));
707
+ }
708
+ else if (range.startContainer.classList.contains('e-img-wrap') && closest(range.startContainer, '.' + classes.CLS_CAPTION)) {
709
+ var parentElem = range.startContainer.parentElement.parentElement;
710
+ detach(closest(range.startContainer, '.' + classes.CLS_CAPTION));
711
+ if (parentElem && parentElem.textContent.trim() === '') {
712
+ var brElem = this.parent.createElement('br');
713
+ brElem.classList.add('e-rte-image-remove-focus');
714
+ parentElem.appendChild(brElem);
715
+ }
716
+ }
709
717
  }
710
718
  }
711
719
  break;
@@ -762,7 +770,7 @@ var Image = /** @class */ (function () {
762
770
  };
763
771
  Image.prototype.showDialog = function () {
764
772
  this.openDialog(false);
765
- this.setCssClass({ cssClass: this.parent.cssClass });
773
+ this.setCssClass({ cssClass: this.parent.getCssClass() });
766
774
  };
767
775
  Image.prototype.closeDialog = function () {
768
776
  if (this.dialogObj) {
@@ -970,19 +978,19 @@ var Image = /** @class */ (function () {
970
978
  }
971
979
  this.imagDialog(e);
972
980
  if (!isNullOrUndefined(this.dialogObj)) {
973
- var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + ' ' + this.parent.cssClass });
981
+ var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + this.parent.getCssClass(true) });
974
982
  var linkUrl = this.i10n.getConstant('linkurl');
975
- var content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
976
- '<input type="text" data-role ="none" class="e-input e-img-link' + ' ' + this.parent.cssClass + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
983
+ var content = '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
984
+ '<input type="text" data-role ="none" class="e-input e-img-link' + this.parent.getCssClass(true) + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
977
985
  '<div class="e-rte-label"></div>' + '<div class="e-rte-field">' +
978
- '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>';
986
+ '<input type="checkbox" class="e-rte-linkTarget' + this.parent.getCssClass(true) + '" data-role ="none"></div>';
979
987
  var contentElem = parseHtml(content);
980
988
  linkWrap.appendChild(contentElem);
981
989
  var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');
982
990
  var inputLink = linkWrap.querySelector('.e-img-link');
983
991
  var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');
984
992
  this.checkBoxObj = new CheckBox({
985
- label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
993
+ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, cssClass: this.parent.getCssClass(),
986
994
  change: function (e) {
987
995
  if (e.checked) {
988
996
  target_1 = '_blank';
@@ -996,11 +1004,12 @@ var Image = /** @class */ (function () {
996
1004
  this.checkBoxObj.createElement = this.parent.createElement;
997
1005
  this.checkBoxObj.appendTo(linkTarget);
998
1006
  var target_1 = this.checkBoxObj.checked ? '_blank' : null;
1007
+ var imageLabel = this.checkBoxObj.checked ? this.i10n.getConstant('ImageLinkAriaLabel') : null;
999
1008
  var linkUpdate = this.i10n.getConstant('dialogUpdate');
1000
1009
  var linkargs_1 = {
1001
1010
  args: e.args,
1002
1011
  selfImage: this, selection: e.selection,
1003
- selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1
1012
+ selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1, ariaLabel: imageLabel
1004
1013
  };
1005
1014
  this.dialogObj.setProperties({
1006
1015
  height: 'inherit',
@@ -1013,7 +1022,7 @@ var Image = /** @class */ (function () {
1013
1022
  _this.insertlink(linkargs_1);
1014
1023
  },
1015
1024
  buttonModel: {
1016
- content: linkUpdate, cssClass: 'e-flat e-update-link' + ' ' + this.parent.cssClass, isPrimary: true
1025
+ content: linkUpdate, cssClass: 'e-flat e-update-link' + this.parent.getCssClass(true), isPrimary: true
1017
1026
  }
1018
1027
  }],
1019
1028
  cssClass: this.dialogObj.cssClass + ' e-rte-img-link-dialog'
@@ -1039,13 +1048,13 @@ var Image = /** @class */ (function () {
1039
1048
  this.imagDialog(e);
1040
1049
  var altText = this.i10n.getConstant('altText');
1041
1050
  if (!isNullOrUndefined(this.dialogObj)) {
1042
- var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + ' ' + this.parent.cssClass });
1051
+ var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + this.parent.getCssClass(true) });
1043
1052
  var altHeader = this.i10n.getConstant('alternateHeader');
1044
1053
  var linkUpdate = this.i10n.getConstant('dialogUpdate');
1045
1054
  var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :
1046
1055
  e.selectNode[0].getAttribute('alt');
1047
- var content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
1048
- '<input type="text" spellcheck="false" class="e-input e-img-alt' + ' ' + this.parent.cssClass + '" placeholder="' + altText + '"/>' +
1056
+ var content = '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
1057
+ '<input type="text" spellcheck="false" class="e-input e-img-alt' + this.parent.getCssClass(true) + '" placeholder="' + altText + '"/>' +
1049
1058
  '</div>';
1050
1059
  var contentElem = parseHtml(content);
1051
1060
  contentElem.querySelector('input').setAttribute('value', getAlt);
@@ -1063,7 +1072,7 @@ var Image = /** @class */ (function () {
1063
1072
  _this.insertAlt(altArgs_1);
1064
1073
  },
1065
1074
  buttonModel: {
1066
- content: linkUpdate, cssClass: 'e-flat e-update-alt' + ' ' + this.parent.cssClass, isPrimary: true
1075
+ content: linkUpdate, cssClass: 'e-flat e-update-alt' + this.parent.getCssClass(true), isPrimary: true
1067
1076
  }
1068
1077
  }],
1069
1078
  cssClass: this.dialogObj.cssClass + ' e-rte-img-alt-dialog'
@@ -1115,14 +1124,14 @@ var Image = /** @class */ (function () {
1115
1124
  }
1116
1125
  if (e.selectNode[0].parentElement.nodeName === 'A') {
1117
1126
  proxy.parent.formatter.process(proxy.parent, e.args, e.args, {
1118
- url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,
1127
+ url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, ariaLabel: proxy.checkBoxObj.checked ? this.i10n.getConstant('ImageLinkAriaLabel') : null, selectNode: e.selectNode,
1119
1128
  subCommand: e.args.item.subCommand
1120
1129
  });
1121
1130
  proxy.dialogObj.hide({ returnValue: true });
1122
1131
  return;
1123
1132
  }
1124
1133
  proxy.parent.formatter.process(proxy.parent, e.args, e.args, {
1125
- url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,
1134
+ url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, ariaLabel: proxy.checkBoxObj.checked ? this.i10n.getConstant('ImageLinkAriaLabel') : null, selectNode: e.selectNode,
1126
1135
  subCommand: e.args.item.subCommand, selection: e.selection
1127
1136
  });
1128
1137
  var captionEle = closest(e.selectNode[0], '.e-img-caption');
@@ -1233,11 +1242,11 @@ var Image = /** @class */ (function () {
1233
1242
  }
1234
1243
  else {
1235
1244
  this.captionEle = this.parent.createElement('span', {
1236
- className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION + ' ' + this.parent.cssClass,
1245
+ className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION + this.parent.getCssClass(true),
1237
1246
  attrs: { contenteditable: 'false', draggable: 'false', style: 'width:' + this.parent.insertImageSettings.width }
1238
1247
  });
1239
- var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + ' ' + this.parent.cssClass });
1240
- var imgInner = this.parent.createElement('span', { className: 'e-img-inner' + ' ' + this.parent.cssClass,
1248
+ var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + this.parent.getCssClass(true) });
1249
+ var imgInner = this.parent.createElement('span', { className: 'e-img-inner' + this.parent.getCssClass(true),
1241
1250
  attrs: { contenteditable: 'true' } });
1242
1251
  var parent_1 = e.selectNode[0].parentElement;
1243
1252
  if (parent_1.tagName === 'A') {
@@ -1290,7 +1299,7 @@ var Image = /** @class */ (function () {
1290
1299
  _this.insertSize(selectObj_1);
1291
1300
  },
1292
1301
  buttonModel: {
1293
- content: linkUpdate, cssClass: 'e-flat e-update-size' + ' ' + this.parent.cssClass, isPrimary: true
1302
+ content: linkUpdate, cssClass: 'e-flat e-update-size' + this.parent.getCssClass(true), isPrimary: true
1294
1303
  }
1295
1304
  }],
1296
1305
  cssClass: this.dialogObj.cssClass + ' e-rte-img-size-dialog'
@@ -1336,7 +1345,7 @@ var Image = /** @class */ (function () {
1336
1345
  this.dialogObj.hide({ returnValue: true });
1337
1346
  return;
1338
1347
  }
1339
- var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_image' });
1348
+ var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + this.parent.getCssClass(true), id: this.rteID + '_image' });
1340
1349
  this.parent.element.appendChild(imgDialog);
1341
1350
  var imgInsert = this.i10n.getConstant('dialogInsert');
1342
1351
  var imglinkCancel = this.i10n.getConstant('dialogCancel');
@@ -1345,20 +1354,20 @@ var Image = /** @class */ (function () {
1345
1354
  var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };
1346
1355
  var dialogModel = {
1347
1356
  header: imgHeader,
1348
- cssClass: classes.CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,
1357
+ cssClass: classes.CLS_RTE_ELEMENTS + this.parent.getCssClass(true),
1349
1358
  enableRtl: this.parent.enableRtl,
1350
1359
  locale: this.parent.locale,
1351
1360
  showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px',
1352
1361
  isModal: Browser.isDevice,
1353
1362
  buttons: [{
1354
1363
  click: this.insertImageUrl.bind(selectObj),
1355
- buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + ' ' + this.parent.cssClass, isPrimary: true, disabled: true }
1364
+ buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + this.parent.getCssClass(true), isPrimary: true, disabled: true }
1356
1365
  },
1357
1366
  {
1358
1367
  click: function (e) {
1359
1368
  _this.cancelDialog(e);
1360
1369
  },
1361
- buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: imglinkCancel }
1370
+ buttonModel: { cssClass: 'e-flat e-cancel' + this.parent.getCssClass(true), content: imglinkCancel }
1362
1371
  }],
1363
1372
  target: (Browser.isDevice) ? document.body : this.parent.element,
1364
1373
  animationSettings: { effect: 'None' },
@@ -1381,12 +1390,12 @@ var Image = /** @class */ (function () {
1381
1390
  _this.dialogObj = null;
1382
1391
  }
1383
1392
  };
1384
- var dialogContent = this.parent.createElement('div', { className: 'e-img-content' + ' ' + this.parent.cssClass });
1393
+ var dialogContent = this.parent.createElement('div', { className: 'e-img-content' + this.parent.getCssClass(true) });
1385
1394
  if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
1386
1395
  || this.parent.editorMode === 'HTML') {
1387
1396
  dialogContent.appendChild(this.imgUpload(e));
1388
1397
  }
1389
- var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + ' ' + this.parent.cssClass });
1398
+ var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + this.parent.getCssClass(true) });
1390
1399
  var linkHeaderText = this.i10n.getConstant('imageLinkHeader');
1391
1400
  if (this.parent.editorMode === 'HTML') {
1392
1401
  linkHeader.innerHTML = linkHeaderText;
@@ -1503,10 +1512,10 @@ var Image = /** @class */ (function () {
1503
1512
  // eslint-disable-next-line
1504
1513
  Image.prototype.imageUrlPopup = function (e) {
1505
1514
  var _this = this;
1506
- var imgUrl = this.parent.createElement('div', { className: 'imgUrl' + ' ' + this.parent.cssClass });
1515
+ var imgUrl = this.parent.createElement('div', { className: 'imgUrl' + this.parent.getCssClass(true) });
1507
1516
  var placeUrl = this.i10n.getConstant('imageUrl');
1508
1517
  this.inputUrl = this.parent.createElement('input', {
1509
- className: 'e-input e-img-url' + ' ' + this.parent.cssClass,
1518
+ className: 'e-input e-img-url' + this.parent.getCssClass(true),
1510
1519
  attrs: { placeholder: placeUrl, spellcheck: 'false', 'aria-label': this.i10n.getConstant('imageLinkHeader') }
1511
1520
  });
1512
1521
  this.inputUrl.addEventListener('input', function () {
@@ -1573,7 +1582,7 @@ var Image = /** @class */ (function () {
1573
1582
  var selectNode = e.selectNode[0];
1574
1583
  var imgHeight = this.i10n.getConstant('imageHeight');
1575
1584
  var imgWidth = this.i10n.getConstant('imageWidth');
1576
- var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + ' ' + this.parent.cssClass });
1585
+ var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + this.parent.getCssClass(true) });
1577
1586
  var widthVal = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||
1578
1587
  selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?
1579
1588
  this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();
@@ -1582,10 +1591,10 @@ var Image = /** @class */ (function () {
1582
1591
  this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();
1583
1592
  this.changedWidthValue = null;
1584
1593
  this.changedHeightValue = null;
1585
- var content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + imgWidth +
1586
- '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" id="imgwidth" class="e-img-width' + ' ' + this.parent.cssClass + '/></div>' +
1587
- '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
1588
- '<input type="text" id="imgheight" class="e-img-height' + ' ' + this.parent.cssClass + '"/></div>';
1594
+ var content = '<div class="e-rte-label' + this.parent.getCssClass(true) + '"><label>' + imgWidth +
1595
+ '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '"><input type="text" id="imgwidth" class="e-img-width' + this.parent.getCssClass(true) + '"/></div>' +
1596
+ '<div class="e-rte-label' + this.parent.getCssClass(true) + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '"> ' +
1597
+ '<input type="text" id="imgheight" class="e-img-height' + this.parent.getCssClass(true) + '"/></div>';
1589
1598
  var contentElem = parseHtml(content);
1590
1599
  contentElem.getElementById('imgwidth').setAttribute('value', widthVal);
1591
1600
  contentElem.getElementById('imgheight').setAttribute('value', heightVal);
@@ -1593,7 +1602,7 @@ var Image = /** @class */ (function () {
1593
1602
  this.widthNum = new TextBox({
1594
1603
  value: formatUnit(widthVal),
1595
1604
  enableRtl: this.parent.enableRtl,
1596
- cssClass: this.parent.cssClass,
1605
+ cssClass: this.parent.getCssClass(),
1597
1606
  input: function (e) {
1598
1607
  _this.inputWidthValue = formatUnit(_this.inputValue(e.value));
1599
1608
  }
@@ -1603,7 +1612,7 @@ var Image = /** @class */ (function () {
1603
1612
  this.heightNum = new TextBox({
1604
1613
  value: formatUnit(heightVal),
1605
1614
  enableRtl: this.parent.enableRtl,
1606
- cssClass: this.parent.cssClass,
1615
+ cssClass: this.parent.getCssClass(),
1607
1616
  input: function (e) {
1608
1617
  _this.inputHeightValue = formatUnit(_this.inputValue(e.value));
1609
1618
  }
@@ -1675,16 +1684,16 @@ var Image = /** @class */ (function () {
1675
1684
  save = e.selection;
1676
1685
  selectParent = e.selectParent;
1677
1686
  }
1678
- var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + ' ' + this.parent.cssClass });
1687
+ var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + this.parent.getCssClass(true) });
1679
1688
  var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');
1680
1689
  var imgUpMsg = this.i10n.getConstant('imageUploadMessage');
1681
- var span = this.parent.createElement('span', { className: 'e-droptext' + ' ' + this.parent.cssClass });
1690
+ var span = this.parent.createElement('span', { className: 'e-droptext' + this.parent.getCssClass(true) });
1682
1691
  var spanMsg = this.parent.createElement('span', {
1683
- className: 'e-rte-upload-text' + ' ' + this.parent.cssClass, innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
1692
+ className: 'e-rte-upload-text' + this.parent.getCssClass(true), innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
1684
1693
  });
1685
1694
  span.appendChild(spanMsg);
1686
1695
  var btnEle = this.parent.createElement('button', {
1687
- className: 'e-browsebtn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
1696
+ className: 'e-browsebtn' + this.parent.getCssClass(true), id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
1688
1697
  });
1689
1698
  span.appendChild(btnEle);
1690
1699
  uploadParentEle.appendChild(span);
@@ -1696,7 +1705,7 @@ var Image = /** @class */ (function () {
1696
1705
  var btnClick = (Browser.isDevice) ? span : btnEle;
1697
1706
  EventHandler.add(btnClick, 'click', this.fileSelect, this);
1698
1707
  var uploadEle = this.parent.createElement('input', {
1699
- id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.cssClass
1708
+ id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.getCssClass()
1700
1709
  });
1701
1710
  uploadParentEle.appendChild(uploadEle);
1702
1711
  var altText;
@@ -1704,7 +1713,7 @@ var Image = /** @class */ (function () {
1704
1713
  var filesData;
1705
1714
  this.uploadObj = new Uploader({
1706
1715
  asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },
1707
- dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
1716
+ dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.getCssClass(),
1708
1717
  allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),
1709
1718
  selected: function (e) {
1710
1719
  proxy.isImgUploaded = true;
@@ -1778,9 +1787,9 @@ var Image = /** @class */ (function () {
1778
1787
  failure: function (e) {
1779
1788
  _this.parent.trigger(events.imageUploadFailed, e);
1780
1789
  },
1781
- removing: function () {
1790
+ removing: function (removeEventArgs) {
1782
1791
  // eslint-disable-next-line
1783
- _this.parent.trigger(events.imageRemoving, e, function (e) {
1792
+ _this.parent.trigger(events.imageRemoving, removeEventArgs, function (e) {
1784
1793
  proxy.isImgUploaded = false;
1785
1794
  _this.dialogObj.getButtons(0).element.disabled = true;
1786
1795
  proxy.inputUrl.removeAttribute('disabled');
@@ -2069,7 +2078,7 @@ var Image = /** @class */ (function () {
2069
2078
  saveUrl: this.parent.insertImageSettings.saveUrl,
2070
2079
  removeUrl: this.parent.insertImageSettings.removeUrl
2071
2080
  },
2072
- cssClass: classes.CLS_RTE_DIALOG_UPLOAD + ' ' + this.parent.cssClass,
2081
+ cssClass: classes.CLS_RTE_DIALOG_UPLOAD + this.parent.getCssClass(true),
2073
2082
  dropArea: this.parent.element,
2074
2083
  allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),
2075
2084
  removing: function () {
@@ -2275,10 +2284,10 @@ var Image = /** @class */ (function () {
2275
2284
  */
2276
2285
  /* eslint-enable */
2277
2286
  Image.prototype.destroy = function () {
2278
- this.prevSelectedImgEle = undefined;
2279
2287
  if (isNOU(this.parent)) {
2280
2288
  return;
2281
2289
  }
2290
+ this.prevSelectedImgEle = undefined;
2282
2291
  this.removeEventListener();
2283
2292
  };
2284
2293
  Image.prototype.moduleDestroy = function () {
@@ -129,7 +129,7 @@ var Link = /** @class */ (function () {
129
129
  pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;
130
130
  }
131
131
  if (this.quickToolObj.linkQTBar) {
132
- this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);
132
+ this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer, 'link');
133
133
  }
134
134
  }
135
135
  };
@@ -160,12 +160,32 @@ var Link = /** @class */ (function () {
160
160
  if (isPopupOpen) {
161
161
  return;
162
162
  }
163
- this.showLinkQuickToolbar({
164
- args: args,
165
- isNotify: false,
166
- type: 'Links',
167
- elements: [args.target]
168
- });
163
+ if (e.args.ctrlKey === false) {
164
+ this.showLinkQuickToolbar({
165
+ args: args,
166
+ isNotify: false,
167
+ type: 'Links',
168
+ elements: [args.target]
169
+ });
170
+ }
171
+ else {
172
+ var selection = this.parent.formatter.editorManager.nodeSelection;
173
+ var range = selection.getRange(this.parent.contentModule.getDocument());
174
+ var args_1 = {
175
+ args: {
176
+ item: {
177
+ subCommand: 'OpenLink',
178
+ command: 'Links',
179
+ name: ''
180
+ },
181
+ originalEvent: e.args
182
+ },
183
+ selectNode: selection.getNodeCollection(range),
184
+ selectParent: selection.getParentNodeCollection(range),
185
+ selection: selection.save(range, this.parent.contentModule.getDocument())
186
+ };
187
+ this.parent.notify(events.openLink, args_1);
188
+ }
169
189
  }
170
190
  else {
171
191
  this.hideLinkQuickToolbar();
@@ -222,7 +242,7 @@ var Link = /** @class */ (function () {
222
242
  };
223
243
  Link.prototype.showDialog = function () {
224
244
  this.openDialog(false);
225
- this.setCssClass({ cssClass: this.parent.cssClass });
245
+ this.setCssClass({ cssClass: this.parent.getCssClass() });
226
246
  };
227
247
  Link.prototype.closeDialog = function () {
228
248
  if (this.dialogObj) {
@@ -255,22 +275,22 @@ var Link = /** @class */ (function () {
255
275
  var textPlace = this.i10n.getConstant('textPlaceholder');
256
276
  var title = this.i10n.getConstant('linkTitle');
257
277
  var linkDialogEle = this.parent.createElement('div', {
258
- className: 'e-rte-link-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_rtelink'
278
+ className: 'e-rte-link-dialog' + this.parent.getCssClass(true), id: this.rteID + '_rtelink'
259
279
  });
260
280
  this.parent.element.appendChild(linkDialogEle);
261
281
  var linkContent = this.parent.createElement('div', {
262
- className: 'e-rte-linkcontent' + ' ' + this.parent.cssClass, id: this.rteID + '_linkContent'
282
+ className: 'e-rte-linkcontent' + this.parent.getCssClass(true), id: this.rteID + '_linkContent'
263
283
  });
264
284
  var htmlTextbox = (this.parent.editorMode === 'HTML') ? '<label>' + linkTooltip +
265
- '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
266
- '<input type="text" data-role ="none" spellcheck="false" placeholder = "' + title + '"aria-label="' + this.i10n.getConstant('linkTitle') + '" class="e-input e-rte-linkTitle' + ' ' + this.parent.cssClass + '"></div>' +
267
- '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
268
- '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>' : '';
269
- var content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + linkWebAddress + '</label></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
270
- '<input type="text" data-role ="none" spellcheck="false" placeholder="' + urlPlace + '"aria-label="' + this.i10n.getConstant('linkWebUrl') + '" class="e-input e-rte-linkurl' + ' ' + this.parent.cssClass + '"/></div>' +
271
- '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + linkDisplayText + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
272
- '<input type="text" data-role ="none" spellcheck="false" class="e-input e-rte-linkText' + ' ' + this.parent.cssClass + '"aria-label="' + this.i10n.getConstant('linkText') + '" placeholder="' + textPlace + '">' +
273
- '</div><div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + htmlTextbox;
285
+ '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
286
+ '<input type="text" data-role ="none" spellcheck="false" placeholder = "' + title + '"aria-label="' + this.i10n.getConstant('linkTitle') + '" class="e-input e-rte-linkTitle' + this.parent.getCssClass(true) + '"></div>' +
287
+ '<div class="e-rte-label' + this.parent.getCssClass(true) + '"></div>' + '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
288
+ '<input type="checkbox" class="e-rte-linkTarget' + this.parent.getCssClass(true) + '" data-role ="none"></div>' : '';
289
+ var content = '<div class="e-rte-label' + this.parent.getCssClass(true) + '"><label>' + linkWebAddress + '</label></div>' + '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
290
+ '<input type="text" data-role ="none" spellcheck="false" placeholder="' + urlPlace + '"aria-label="' + this.i10n.getConstant('linkWebUrl') + '" class="e-input e-rte-linkurl' + this.parent.getCssClass(true) + '"/></div>' +
291
+ '<div class="e-rte-label' + this.parent.getCssClass(true) + '">' + '<label>' + linkDisplayText + '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '"> ' +
292
+ '<input type="text" data-role ="none" spellcheck="false" class="e-input e-rte-linkText' + this.parent.getCssClass(true) + '"aria-label="' + this.i10n.getConstant('linkText') + '" placeholder="' + textPlace + '">' +
293
+ '</div><div class="e-rte-label' + this.parent.getCssClass(true) + '">' + htmlTextbox;
274
294
  var contentElem = parseHtml(content);
275
295
  linkContent.appendChild(contentElem);
276
296
  var linkTarget = linkContent.querySelector('.e-rte-linkTarget');
@@ -279,7 +299,7 @@ var Link = /** @class */ (function () {
279
299
  var linkTitle = linkContent.querySelector('.e-rte-linkTitle');
280
300
  var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');
281
301
  this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl,
282
- cssClass: this.parent.cssClass });
302
+ cssClass: this.parent.getCssClass() });
283
303
  this.checkBoxObj.isStringTemplate = true;
284
304
  this.checkBoxObj.createElement = this.parent.createElement;
285
305
  this.checkBoxObj.appendTo(linkTarget);
@@ -292,16 +312,16 @@ var Link = /** @class */ (function () {
292
312
  var dialogModel = {
293
313
  header: this.i10n.getConstant('linkHeader'),
294
314
  content: linkContent,
295
- cssClass: CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,
315
+ cssClass: CLS_RTE_ELEMENTS + this.parent.getCssClass(true),
296
316
  enableRtl: this.parent.enableRtl,
297
317
  locale: this.parent.locale,
298
318
  showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px',
299
319
  isModal: Browser.isDevice,
300
320
  buttons: [{
301
321
  click: this.insertlink.bind(selectObj),
302
- buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink' + ' ' + this.parent.cssClass, isPrimary: true }
322
+ buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink' + this.parent.getCssClass(true), isPrimary: true }
303
323
  },
304
- { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat' + ' ' + this.parent.cssClass, content: linkCancel } }],
324
+ { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat' + this.parent.getCssClass(true), content: linkCancel } }],
305
325
  target: (Browser.isDevice) ? document.body : this.parent.element,
306
326
  animationSettings: { effect: 'None' },
307
327
  close: function (event) {
@@ -59,6 +59,7 @@ export declare class Table {
59
59
  private setBGColor;
60
60
  private hideTableQuickToolbar;
61
61
  private tableHeader;
62
+ private getAnchorNode;
62
63
  private editAreaClickHandler;
63
64
  private tableCellSelect;
64
65
  private tableMouseUp;
@@ -91,6 +92,7 @@ export declare class Table {
91
92
  private removeRowColumn;
92
93
  private removeTable;
93
94
  private renderDlgContent;
95
+ private onIframeMouseDown;
94
96
  private docClick;
95
97
  private drawTable;
96
98
  private editTable;