@syncfusion/ej2-richtexteditor 24.1.47 → 24.2.4

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 (106) hide show
  1. package/CHANGELOG.md +30 -2
  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 +832 -209
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +835 -203
  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 +12 -12
  13. package/src/common/constant.d.ts +6 -0
  14. package/src/common/constant.js +6 -0
  15. package/src/common/util.d.ts +6 -0
  16. package/src/common/util.js +58 -20
  17. package/src/editor-manager/base/constant.d.ts +6 -0
  18. package/src/editor-manager/base/constant.js +6 -0
  19. package/src/editor-manager/base/editor-manager.d.ts +5 -0
  20. package/src/editor-manager/base/editor-manager.js +59 -0
  21. package/src/editor-manager/base/interface.d.ts +8 -0
  22. package/src/editor-manager/plugin/dom-node.js +3 -1
  23. package/src/editor-manager/plugin/format-painter-actions.js +1 -1
  24. package/src/editor-manager/plugin/inserthtml.js +7 -2
  25. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +2 -0
  26. package/src/editor-manager/plugin/ms-word-clean-up.js +39 -10
  27. package/src/editor-manager/plugin/selection-commands.js +16 -0
  28. package/src/editor-manager/plugin/table.d.ts +0 -1
  29. package/src/editor-manager/plugin/table.js +14 -26
  30. package/src/editor-manager/plugin/undo.d.ts +1 -0
  31. package/src/editor-manager/plugin/undo.js +21 -1
  32. package/src/rich-text-editor/actions/base-quick-toolbar.js +3 -0
  33. package/src/rich-text-editor/actions/base-toolbar.js +8 -4
  34. package/src/rich-text-editor/actions/count.js +1 -1
  35. package/src/rich-text-editor/actions/dropdown-buttons.js +21 -2
  36. package/src/rich-text-editor/actions/emoji-picker.js +1 -1
  37. package/src/rich-text-editor/actions/full-screen.js +1 -0
  38. package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
  39. package/src/rich-text-editor/actions/html-editor.js +88 -4
  40. package/src/rich-text-editor/actions/keyboard.js +3 -1
  41. package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -0
  42. package/src/rich-text-editor/actions/paste-clean-up.js +32 -4
  43. package/src/rich-text-editor/actions/toolbar.d.ts +2 -1
  44. package/src/rich-text-editor/base/constant.d.ts +25 -0
  45. package/src/rich-text-editor/base/constant.js +194 -0
  46. package/src/rich-text-editor/base/interface.d.ts +6 -1
  47. package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -0
  48. package/src/rich-text-editor/base/rich-text-editor.js +34 -64
  49. package/src/rich-text-editor/base/util.d.ts +4 -0
  50. package/src/rich-text-editor/base/util.js +35 -1
  51. package/src/rich-text-editor/formatter/formatter.js +15 -4
  52. package/src/rich-text-editor/models/default-locale.js +17 -17
  53. package/src/rich-text-editor/models/items.js +2 -2
  54. package/src/rich-text-editor/renderer/audio-module.d.ts +1 -0
  55. package/src/rich-text-editor/renderer/audio-module.js +13 -0
  56. package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -0
  57. package/src/rich-text-editor/renderer/dialog-renderer.js +7 -0
  58. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  59. package/src/rich-text-editor/renderer/image-module.d.ts +1 -0
  60. package/src/rich-text-editor/renderer/image-module.js +20 -2
  61. package/src/rich-text-editor/renderer/link-module.js +10 -1
  62. package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
  63. package/src/rich-text-editor/renderer/table-module.js +22 -2
  64. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +1 -0
  65. package/src/rich-text-editor/renderer/toolbar-renderer.js +25 -3
  66. package/src/rich-text-editor/renderer/video-module.d.ts +3 -0
  67. package/src/rich-text-editor/renderer/video-module.js +54 -30
  68. package/src/selection/selection.js +3 -0
  69. package/styles/bootstrap-dark.css +44 -6
  70. package/styles/bootstrap.css +44 -6
  71. package/styles/bootstrap4.css +44 -6
  72. package/styles/bootstrap5-dark.css +44 -6
  73. package/styles/bootstrap5.css +44 -6
  74. package/styles/fabric-dark.css +44 -6
  75. package/styles/fabric.css +44 -6
  76. package/styles/fluent-dark.css +44 -6
  77. package/styles/fluent.css +44 -6
  78. package/styles/highcontrast-light.css +44 -6
  79. package/styles/highcontrast.css +44 -6
  80. package/styles/material-dark.css +44 -6
  81. package/styles/material.css +44 -6
  82. package/styles/material3-dark.css +58 -14
  83. package/styles/material3.css +58 -14
  84. package/styles/rich-text-editor/_layout.scss +39 -2
  85. package/styles/rich-text-editor/_material-definition.scss +0 -1
  86. package/styles/rich-text-editor/_material3-definition.scss +7 -7
  87. package/styles/rich-text-editor/_theme.scss +12 -5
  88. package/styles/rich-text-editor/bootstrap-dark.css +44 -6
  89. package/styles/rich-text-editor/bootstrap.css +44 -6
  90. package/styles/rich-text-editor/bootstrap4.css +44 -6
  91. package/styles/rich-text-editor/bootstrap5-dark.css +44 -6
  92. package/styles/rich-text-editor/bootstrap5.css +44 -6
  93. package/styles/rich-text-editor/fabric-dark.css +44 -6
  94. package/styles/rich-text-editor/fabric.css +44 -6
  95. package/styles/rich-text-editor/fluent-dark.css +44 -6
  96. package/styles/rich-text-editor/fluent.css +44 -6
  97. package/styles/rich-text-editor/highcontrast-light.css +44 -6
  98. package/styles/rich-text-editor/highcontrast.css +44 -6
  99. package/styles/rich-text-editor/material-dark.css +44 -6
  100. package/styles/rich-text-editor/material.css +44 -6
  101. package/styles/rich-text-editor/material3-dark.css +58 -14
  102. package/styles/rich-text-editor/material3.css +58 -14
  103. package/styles/rich-text-editor/tailwind-dark.css +44 -6
  104. package/styles/rich-text-editor/tailwind.css +44 -6
  105. package/styles/tailwind-dark.css +44 -6
  106. package/styles/tailwind.css +44 -6
@@ -390,7 +390,7 @@ var RichTextEditor = /** @class */ (function (_super) {
390
390
  if (tool.command === 'InsertText') {
391
391
  currentInsertContentLength = value.length;
392
392
  }
393
- var currentLength = this.getText().trim().replace(/(\r\n|\n|\r)/gm, '').replace(/\u200B/g, '').length;
393
+ var currentLength = this.getText().trim().replace(/(\r\n|\n|\r|\t)/gm, '').replace(/\u200B/g, '').length;
394
394
  var selectionLength = this.getSelection().length;
395
395
  var totalLength = (currentLength - selectionLength) + currentInsertContentLength;
396
396
  if (!(this.maxLength === -1 || totalLength <= this.maxLength)) {
@@ -765,7 +765,12 @@ var RichTextEditor = /** @class */ (function (_super) {
765
765
  FormatPainterEscapeAction = this.formatPainterModule.previousAction === 'escape';
766
766
  }
767
767
  if (!FormatPainterEscapeAction) {
768
- this.formatter.process(this, null, e);
768
+ if (this.editorMode === 'HTML' && (e.action === 'increase-fontsize' || e.action === 'decrease-fontsize')) {
769
+ this.notify(events.onHandleFontsizeChange, { member: 'onHandleFontsizeChange', args: e });
770
+ }
771
+ else {
772
+ this.formatter.process(this, null, e);
773
+ }
769
774
  }
770
775
  switch (e.action) {
771
776
  case 'toolbar-focus':
@@ -791,6 +796,7 @@ var RichTextEditor = /** @class */ (function (_super) {
791
796
  this.setPlaceHolder();
792
797
  }
793
798
  }
799
+ this.notify(events.afterKeyDown, { member: 'afterKeyDown', args: e });
794
800
  this.autoResize();
795
801
  };
796
802
  RichTextEditor.prototype.keyUp = function (e) {
@@ -817,7 +823,7 @@ var RichTextEditor = /** @class */ (function (_super) {
817
823
  var formatPainterCopy = e.key === 'C' && e.altKey && e.shiftKey;
818
824
  var formatPainterPaste = e.key === 'V' && e.altKey && e.shiftKey;
819
825
  if ((!formatPainterCopy && !formatPainterPaste) && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'
820
- && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {
826
+ && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) || (this.autoSaveOnIdle && Browser.isDevice) && !this.inlineMode.enable) {
821
827
  this.formatter.onKeyHandler(this, e);
822
828
  }
823
829
  if (this.inputElement && this.inputElement.textContent.length !== 0
@@ -913,60 +919,6 @@ var RichTextEditor = /** @class */ (function (_super) {
913
919
  return;
914
920
  }
915
921
  }
916
- if (e.detail === 3) {
917
- var range = this.getRange();
918
- var selection = this.formatter.editorManager.domNode.getSelection();
919
- // To handle the triple click node selection improper range due to browser behavior.
920
- if (selection.rangeCount > 0 && !isNOU(range.startContainer.parentElement) && (!isNOU(range.startContainer.parentElement.nextSibling) &&
921
- (range.startContainer.parentElement.nextSibling.nodeType !== 3 ||
922
- /\s+$/.test(range.startContainer.parentElement.nextSibling.textContent)) || range.startOffset === range.endOffset)
923
- || range.startContainer.parentElement.tagName.toLocaleLowerCase() === 'li') {
924
- var newRange = new Range();
925
- var start = range.startContainer;
926
- var end = range.endContainer;
927
- var isInvalid = false;
928
- var isInsideList = range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL'
929
- || range.commonAncestorContainer.nodeName === 'LI';
930
- if (!isInsideList && end.nodeType === 1 && end.nodeName === 'LI') {
931
- end = closest(end, 'ol, ul').previousElementSibling.lastElementChild;
932
- }
933
- else if (isInsideList && end.nodeType === 1 && range.endOffset === 0) {
934
- if (end.previousElementSibling && end.previousElementSibling.lastElementChild) {
935
- end = end.previousElementSibling.lastElementChild;
936
- }
937
- else {
938
- end = closest(end.parentElement, 'li');
939
- if (end && end.nodeName === 'LI') {
940
- end = end.previousElementSibling;
941
- }
942
- }
943
- }
944
- else {
945
- if (!closest(end, 'li') && end.previousElementSibling && end.previousElementSibling.lastChild &&
946
- end.previousElementSibling.textContent.trim().length > 0) {
947
- end = end.previousElementSibling.lastChild;
948
- }
949
- else if (closest(end, 'li') && end.previousElementSibling && end.previousElementSibling.lastChild) {
950
- end = closest(end, 'li').parentElement.previousElementSibling.lastChild;
951
- }
952
- }
953
- if (!end || end === this.inputElement) {
954
- end = start;
955
- isInvalid = true;
956
- }
957
- while (end.nodeName !== '#text' && !isInvalid) {
958
- if (end.lastElementChild) {
959
- end = end.lastElementChild;
960
- }
961
- else {
962
- end = end.lastChild;
963
- }
964
- }
965
- newRange.setStart(start, 0);
966
- newRange.setEnd(end, end.textContent.length);
967
- this.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), newRange);
968
- }
969
- }
970
922
  this.notifyMouseUp(e);
971
923
  };
972
924
  /**
@@ -1008,10 +960,10 @@ var RichTextEditor = /** @class */ (function (_super) {
1008
960
  requestType: 'Paste'
1009
961
  };
1010
962
  this.trigger(events.actionBegin, evenArgs, function (pasteArgs) {
1011
- var currentLength = _this.inputElement.textContent.length;
963
+ var currentLength = _this.getText().replace(/(\r\n|\n|\r|\t)/gm, '').replace(/\u200B/g, '').length;
1012
964
  var selectionLength = _this.getSelection().length;
1013
965
  var pastedContentLength = (isNOU(e) || isNOU(e.clipboardData))
1014
- ? 0 : e.clipboardData.getData('text/plain').replace(/(\r\n|\n|\r)/gm, '').replace(/\u200B/g, '').length;
966
+ ? 0 : e.clipboardData.getData('text/plain').replace(/(\r\n|\n|\r|\t)/gm, '').replace(/\u200B/g, '').length;
1015
967
  var totalLength = (currentLength - selectionLength) + pastedContentLength;
1016
968
  if (_this.editorMode === 'Markdown') {
1017
969
  var args_1 = { requestType: 'Paste', editorMode: _this.editorMode, event: e };
@@ -1451,7 +1403,7 @@ var RichTextEditor = /** @class */ (function (_super) {
1451
1403
  if (this.valueContainer) {
1452
1404
  this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;
1453
1405
  }
1454
- if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.replace('&amp;', '&').trim() !== value.trim()) {
1406
+ if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {
1455
1407
  this.inputElement.innerHTML = value;
1456
1408
  }
1457
1409
  else if (this.editorMode === 'Markdown' && this.inputElement
@@ -1472,9 +1424,6 @@ var RichTextEditor = /** @class */ (function (_super) {
1472
1424
  }
1473
1425
  else {
1474
1426
  this.inputElement.innerHTML = '<p><br/></p>';
1475
- if (value === '' && this.formatter && this.inputElement) {
1476
- this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), this.inputElement.firstElementChild, this.inputElement.firstElementChild.childElementCount);
1477
- }
1478
1427
  }
1479
1428
  }
1480
1429
  else {
@@ -2089,6 +2038,7 @@ var RichTextEditor = /** @class */ (function (_super) {
2089
2038
  addClass([this.element], [classes.CLS_FOCUS]);
2090
2039
  this.preventDefaultResize(e);
2091
2040
  this.notify(events.mouseDown, { args: e });
2041
+ this.formatter.editorManager.observer.notify(events.mouseDown, { args: e });
2092
2042
  this.clickPoints = { clientX: touch.clientX, clientY: touch.clientY };
2093
2043
  };
2094
2044
  RichTextEditor.prototype.preventImgResize = function (e) {
@@ -2250,6 +2200,7 @@ var RichTextEditor = /** @class */ (function (_super) {
2250
2200
  detach(item[i]);
2251
2201
  }
2252
2202
  }
2203
+ this.removeSelectionClassStates(valueElementWrapper);
2253
2204
  return valueElementWrapper.innerHTML;
2254
2205
  };
2255
2206
  RichTextEditor.prototype.updateStatus = function (e) {
@@ -2297,6 +2248,7 @@ var RichTextEditor = /** @class */ (function (_super) {
2297
2248
  }
2298
2249
  if (this.isBlur && isNOU(trg)) {
2299
2250
  removeClass([this.element], [classes.CLS_FOCUS]);
2251
+ this.removeSelectionClassStates(this.inputElement);
2300
2252
  this.notify(events.focusChange, {});
2301
2253
  var value = this.getUpdatedValue();
2302
2254
  this.setProperties({ value: value });
@@ -2472,7 +2424,7 @@ var RichTextEditor = /** @class */ (function (_super) {
2472
2424
  RichTextEditor.prototype.restrict = function (e) {
2473
2425
  if (this.maxLength >= 0) {
2474
2426
  var element = this.editorMode === 'Markdown' ? this.contentModule.getText() :
2475
- (e && e.currentTarget.textContent);
2427
+ (this.getText().replace(/(\r\n|\n|\r|\t)/gm, '').replace(/\u200B/g, ''));
2476
2428
  if (!element) {
2477
2429
  return;
2478
2430
  }
@@ -2622,6 +2574,24 @@ var RichTextEditor = /** @class */ (function (_super) {
2622
2574
  }
2623
2575
  }
2624
2576
  };
2577
+ RichTextEditor.prototype.removeSelectionClassStates = function (element) {
2578
+ var classNames = [classes.CLS_IMG_FOCUS, classes.CLS_TABLE_SEL, classes.CLS_VID_FOCUS, classes.CLS_AUD_FOCUS];
2579
+ for (var i = 0; i < classNames.length; i++) {
2580
+ var item = element.querySelectorAll('.' + classNames[i]);
2581
+ removeClass(item, classNames[i]);
2582
+ if (item.length === 0) {
2583
+ continue;
2584
+ }
2585
+ for (var j = 0; j < item.length; j++) {
2586
+ if (item[j].classList.length === 0) {
2587
+ item[j].removeAttribute('class');
2588
+ }
2589
+ if (item[j].nodeName === 'IMG' && item[j].style.outline !== '') {
2590
+ item[j].style.outline = '';
2591
+ }
2592
+ }
2593
+ }
2594
+ };
2625
2595
  __decorate([
2626
2596
  Complex({}, ToolbarSettings)
2627
2597
  ], RichTextEditor.prototype, "toolbarSettings", void 0);
@@ -51,6 +51,10 @@ export declare function pageYOffset(e: MouseEvent | Touch, parentElement: HTMLEl
51
51
  * @hidden
52
52
  */
53
53
  export declare function getTooltipText(item: string, serviceLocator: ServiceLocator): string;
54
+ export declare function getTooltipTextDropdownItems(item: string, serviceLocator: ServiceLocator, localeItems: {
55
+ [ket: string]: string;
56
+ }[], rteObj?: IRichTextEditor): string;
57
+ export declare function getQuickToolbarTooltipText(item: string): string;
54
58
  /**
55
59
  * @param {ISetToolbarStatusArgs} e - specifies the e element
56
60
  * @param {boolean} isPopToolbar - specifies the boolean value
@@ -6,7 +6,7 @@ import { Browser, detach, SanitizeHtmlHelper, extend } from '@syncfusion/ej2-bas
6
6
  import * as classes from '../base/classes';
7
7
  import * as CONSTANT from '../base/constant';
8
8
  import * as model from '../models/items';
9
- import { toolsLocale, fontNameLocale, formatsLocale, numberFormatListLocale, bulletFormatListLocale } from '../models/default-locale';
9
+ import { toolsLocale, fontNameLocale, formatsLocale, numberFormatListLocale, bulletFormatListLocale, defaultLocale } from '../models/default-locale';
10
10
  var undoRedoItems = ['Undo', 'Redo'];
11
11
  var inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',
12
12
  'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',
@@ -134,6 +134,40 @@ export function getTooltipText(item, serviceLocator) {
134
134
  var tooltipText = i10n.getConstant(itemLocale);
135
135
  return tooltipText;
136
136
  }
137
+ export function getTooltipTextDropdownItems(item, serviceLocator, localeItems, rteObj) {
138
+ if (localeItems) {
139
+ var i10n = serviceLocator.getService('rteLocale');
140
+ for (var i = 0; i < localeItems.length; i++) {
141
+ var itemLocale = localeItems[i].value.toLocaleLowerCase();
142
+ var numberValue = localeItems[i].locale;
143
+ var numberLocale = defaultLocale["" + numberValue].toLocaleLowerCase();
144
+ if (item === itemLocale || item === numberLocale) {
145
+ var tooltipText = localeItems[i].locale;
146
+ return i10n.getConstant(tooltipText);
147
+ }
148
+ }
149
+ }
150
+ else {
151
+ var fontsize = rteObj.fontSize.items;
152
+ for (var i = 0; i < fontsize.length; i++) {
153
+ if (item === rteObj.fontSize.items[i].value) {
154
+ var fontSize = rteObj.fontSize.items[i].text;
155
+ return fontSize;
156
+ }
157
+ }
158
+ }
159
+ return '';
160
+ }
161
+ export function getQuickToolbarTooltipText(item) {
162
+ var keys = Object.keys(defaultLocale);
163
+ for (var i = 0; i < keys.length; i++) {
164
+ var tooltipText = defaultLocale["" + keys[i]];
165
+ if (item === tooltipText) {
166
+ return tooltipText;
167
+ }
168
+ }
169
+ return '';
170
+ }
137
171
  /**
138
172
  * @param {ISetToolbarStatusArgs} e - specifies the e element
139
173
  * @param {boolean} isPopToolbar - specifies the boolean value
@@ -1,4 +1,4 @@
1
- import { extend, isNullOrUndefined as isNOU, Browser } from '@syncfusion/ej2-base';
1
+ import { extend, isNullOrUndefined as isNOU, Browser, closest } from '@syncfusion/ej2-base';
2
2
  import * as CONSTANT from '../base/constant';
3
3
  import { updateUndoRedoStatus, isIDevice } from '../base/util';
4
4
  import { KEY_DOWN, KEY_UP } from './../../common/constant';
@@ -27,12 +27,21 @@ var Formatter = /** @class */ (function () {
27
27
  var selection = self.contentModule.getDocument().getSelection();
28
28
  var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;
29
29
  var saveSelection;
30
+ var newRange;
31
+ if (!isNOU(value) && !isNOU(value.selection)) {
32
+ newRange = value.selection.range;
33
+ }
30
34
  var isKeyboardVideoInsert = (!isNOU(value) && !isNOU(value.cssClass) &&
31
35
  value.cssClass !== 'e-video-inline');
32
36
  if (self.editorMode === 'HTML') {
33
37
  if (!isNOU(args) && !isKeyboardVideoInsert) {
34
38
  if (isNOU(args.name) || (!isNOU(args.name) && args.name !== 'showDialog')) {
35
- saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());
39
+ if (newRange) {
40
+ saveSelection = this.editorManager.nodeSelection.save(newRange, self.contentModule.getDocument());
41
+ }
42
+ else {
43
+ saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());
44
+ }
36
45
  }
37
46
  }
38
47
  }
@@ -60,7 +69,7 @@ var Formatter = /** @class */ (function () {
60
69
  if (args.item.command === 'Images' || args.item.command === 'Videos' || args.item.command === 'Table' || args.item.command === 'Files') {
61
70
  currentInsertContentLength = 1;
62
71
  }
63
- var currentLength = self.getText().trim().replace(/(\r\n|\n|\r)/gm, '').replace(/\u200B/g, '').length;
72
+ var currentLength = self.getText().trim().replace(/(\r\n|\n|\r|\t)/gm, '').replace(/\u200B/g, '').length;
64
73
  var selectionLength = self.getSelection().length;
65
74
  var totalLength = (currentLength - selectionLength) + currentInsertContentLength;
66
75
  if (!(self.maxLength === -1 || totalLength <= self.maxLength)) {
@@ -124,7 +133,9 @@ var Formatter = /** @class */ (function () {
124
133
  _this.saveData();
125
134
  }
126
135
  self.isBlur = false;
127
- self.contentModule.getEditPanel().focus();
136
+ if (isNOU(saveSelection) || isNOU(closest(saveSelection.range.startContainer.parentElement, ".e-img-caption")) ? true : !(closest(saveSelection.range.startContainer.parentElement, ".e-img-caption").getAttribute("contenteditable") == "false")) {
137
+ self.contentModule.getEditPanel().focus();
138
+ }
128
139
  if (self.editorMode === 'HTML' && !isKeyboardVideoInsert) {
129
140
  if (isNOU(args.selectType) || (!isNOU(args.selectType) && args.selectType !== 'showDialog')) {
130
141
  saveSelection.restore();
@@ -48,11 +48,11 @@ export var defaultLocale = {
48
48
  'audioLayoutOption': 'Layout option',
49
49
  'videoLayoutOption': 'Layout option',
50
50
  'align': 'Align',
51
- 'caption': 'Image Caption',
51
+ 'caption': 'Caption',
52
52
  'remove': 'Remove',
53
53
  'insertLink': 'Insert Link',
54
54
  'display': 'Display',
55
- 'altText': 'Alternative Text',
55
+ 'altText': 'Alternative text',
56
56
  'dimension': 'Change Size',
57
57
  'fullscreen': 'Maximize',
58
58
  'maximize': 'Maximize',
@@ -65,12 +65,12 @@ export var defaultLocale = {
65
65
  'preview': 'Preview',
66
66
  'viewside': 'ViewSide',
67
67
  'insertCode': 'Insert Code',
68
- 'linkText': 'Display Text',
68
+ 'linkText': 'Display text',
69
69
  'linkTooltipLabel': 'Title',
70
- 'linkWebUrl': 'Web Address',
70
+ 'linkWebUrl': 'Web address',
71
71
  'linkTitle': 'Enter a title',
72
72
  'linkurl': 'http://example.com',
73
- 'linkOpenInNewWindow': 'Open Link in New Window',
73
+ 'linkOpenInNewWindow': 'Open link in new window',
74
74
  'linkHeader': 'Insert Link',
75
75
  'dialogInsert': 'Insert',
76
76
  'dialogCancel': 'Cancel',
@@ -104,22 +104,22 @@ export var defaultLocale = {
104
104
  'imageWidth': 'Width',
105
105
  'videoHeight': 'Height',
106
106
  'videoWidth': 'Width',
107
- 'textPlaceholder': 'Enter Text',
108
- 'inserttablebtn': 'Insert Table',
107
+ 'textPlaceholder': 'Enter text',
108
+ 'inserttablebtn': 'Insert table',
109
109
  'tabledialogHeader': 'Insert Table',
110
110
  'tableWidth': 'Width',
111
111
  'cellpadding': 'Cell Padding',
112
112
  'cellspacing': 'Cell Spacing',
113
113
  'columns': 'Number of columns',
114
114
  'rows': 'Number of rows',
115
- 'tableRows': 'Table Rows',
116
- 'tableColumns': 'Table Columns',
115
+ 'tableRows': 'Row',
116
+ 'tableColumns': 'Column',
117
117
  'tableCellHorizontalAlign': 'Table Cell Horizontal Align',
118
- 'tableCellVerticalAlign': 'Table Cell Vertical Align',
118
+ 'tableCellVerticalAlign': 'Vertical Align',
119
119
  'createTable': 'Create Table',
120
120
  'removeTable': 'Remove Table',
121
- 'tableHeader': 'Table Header',
122
- 'tableRemove': 'Table Remove',
121
+ 'tableHeader': 'Header Row',
122
+ 'tableRemove': 'Delete',
123
123
  'tableCellBackground': 'Table Cell Background',
124
124
  'tableEditProperties': 'Table Edit Properties',
125
125
  'styles': 'Styles',
@@ -193,8 +193,8 @@ export var defaultLocale = {
193
193
  'bulletFormatListNone': 'None',
194
194
  'formatPainter': 'Format Painter',
195
195
  'emojiPicker': 'Emoji Picker',
196
- 'embeddedCode': 'Embedded Code',
197
- 'pasteEmbeddedCodeHere': 'Paste Embedded Code here',
196
+ 'embeddedCode': 'Embedded code',
197
+ 'pasteEmbeddedCodeHere': 'Paste embedded code here',
198
198
  'emojiPickerTypeToFind': 'Type to find',
199
199
  'emojiPickerNoResultFound': 'No results found',
200
200
  'emojiPickerTrySomethingElse': 'Try something else',
@@ -254,7 +254,7 @@ export var toolsLocale = {
254
254
  'remove': 'remove',
255
255
  'insertlink': 'insertLink',
256
256
  'display': 'display',
257
- 'alttext': 'altText',
257
+ 'alttext': 'alternateHeader',
258
258
  'dimension': 'dimension',
259
259
  'fullscreen': 'fullscreen',
260
260
  'maximize': 'maximize',
@@ -289,8 +289,8 @@ export var toolsLocale = {
289
289
  'deleterow': 'deleteRow',
290
290
  'formatpainter': 'formatPainter',
291
291
  'emojipicker': 'emojiPicker',
292
- 'embeddedCode': 'Embedded Code',
293
- 'pasteEmbeddedCodeHere': 'Paste Embedded Code here',
292
+ 'embeddedCode': 'Embedded code',
293
+ 'pasteEmbeddedCodeHere': 'Paste embedded code here',
294
294
  'emojiPickerTypeToFind': 'Type to find',
295
295
  'emojiPickerNoResultFound': 'No results found',
296
296
  'emojiPickerTrySomethingElse': 'Try something else',
@@ -457,14 +457,14 @@ export var tools = {
457
457
  'sourcecode': {
458
458
  'id': 'SourceCode',
459
459
  'icon': 'e-source-code',
460
- 'tooltip': 'Source Code',
460
+ 'tooltip': 'Code View (Ctrl+Shift+H)',
461
461
  'command': 'SourceCode',
462
462
  'subCommand': 'SourceCode'
463
463
  },
464
464
  'preview': {
465
465
  'id': 'Preview',
466
466
  'icon': 'e-preview',
467
- 'tooltip': 'Preview',
467
+ 'tooltip': 'Preview (Ctrl+Shift+H)',
468
468
  'command': 'Preview',
469
469
  'subCommand': 'Preview'
470
470
  },
@@ -34,6 +34,7 @@ export declare class Audio {
34
34
  private onToolbarAction;
35
35
  private onKeyUp;
36
36
  private onKeyDown;
37
+ private handleSelectAll;
37
38
  private openDialog;
38
39
  private showDialog;
39
40
  private closeDialog;
@@ -239,6 +239,13 @@ var Audio = /** @class */ (function () {
239
239
  originalEvent.preventDefault();
240
240
  break;
241
241
  }
242
+ if (originalEvent.ctrlKey && originalEvent.key === 'a') {
243
+ this.handleSelectAll();
244
+ }
245
+ };
246
+ Audio.prototype.handleSelectAll = function () {
247
+ var audioFocusNodes = this.parent.inputElement.querySelectorAll('.' + classes.CLS_AUD_FOCUS);
248
+ removeClass(audioFocusNodes, classes.CLS_AUD_FOCUS);
242
249
  };
243
250
  Audio.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {
244
251
  var range;
@@ -379,6 +386,7 @@ var Audio = /** @class */ (function () {
379
386
  if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {
380
387
  }
381
388
  else {
389
+ this.parent.notify(events.documentClickClosedBy, { closedBy: "outside click" });
382
390
  this.dialogObj.hide({ returnValue: true });
383
391
  this.parent.isBlur = true;
384
392
  dispatchEvent(this.parent.element, 'focusout');
@@ -640,6 +648,11 @@ var Audio = /** @class */ (function () {
640
648
  }
641
649
  }
642
650
  });
651
+ if (e.selectNode && this.isAudioElem(e.selectNode[0])) {
652
+ var regex = new RegExp(/([^\S]|^)(((https?\:\/\/)|(www\.))(\S+))/gi);
653
+ var sourceElement = e.selectNode[0].querySelector('source');
654
+ this.inputUrl.value = sourceElement.src.match(regex) ? sourceElement.src : '';
655
+ }
643
656
  audioUrl.appendChild(this.inputUrl);
644
657
  return audioUrl;
645
658
  };
@@ -7,6 +7,7 @@ export declare class DialogRenderer {
7
7
  dialogObj: Dialog;
8
8
  private dialogEle;
9
9
  private parent;
10
+ private outsideClickClosedBy;
10
11
  constructor(parent?: IRichTextEditor);
11
12
  protected addEventListener(): void;
12
13
  protected removeEventListener(): void;
@@ -23,6 +24,7 @@ export declare class DialogRenderer {
23
24
  private handleEnterKeyDown;
24
25
  private beforeOpenCallback;
25
26
  private open;
27
+ private documentClickClosedBy;
26
28
  private beforeClose;
27
29
  private getDialogPosition;
28
30
  /**
@@ -15,6 +15,7 @@ var DialogRenderer = /** @class */ (function () {
15
15
  }
16
16
  this.parent.on(events.moduleDestroy, this.moduleDestroy, this);
17
17
  this.parent.on(events.destroy, this.removeEventListener, this);
18
+ this.parent.on(events.documentClickClosedBy, this.documentClickClosedBy, this);
18
19
  };
19
20
  DialogRenderer.prototype.removeEventListener = function () {
20
21
  if (this.parent.isDestroyed) {
@@ -22,6 +23,7 @@ var DialogRenderer = /** @class */ (function () {
22
23
  }
23
24
  this.parent.off(events.destroy, this.removeEventListener);
24
25
  this.parent.off(events.moduleDestroy, this.moduleDestroy);
26
+ this.parent.off(events.documentClickClosedBy, this.documentClickClosedBy);
25
27
  };
26
28
  /**
27
29
  * dialog render method
@@ -68,10 +70,14 @@ var DialogRenderer = /** @class */ (function () {
68
70
  DialogRenderer.prototype.open = function (args) {
69
71
  this.parent.trigger(events.dialogOpen, args);
70
72
  };
73
+ DialogRenderer.prototype.documentClickClosedBy = function (args) {
74
+ this.outsideClickClosedBy = args.closedBy;
75
+ };
71
76
  DialogRenderer.prototype.beforeClose = function (args) {
72
77
  if (this.dialogEle) {
73
78
  this.dialogEle.removeEventListener('keydown', this.handleEnterKeyDown);
74
79
  }
80
+ args.closedBy = this.outsideClickClosedBy === 'outside click' ? this.outsideClickClosedBy : args.closedBy;
75
81
  this.parent.trigger(events.beforeDialogClose, args, function (closeArgs) {
76
82
  if (!closeArgs.cancel) {
77
83
  if (closeArgs.container.classList.contains('e-popup-close')) {
@@ -79,6 +85,7 @@ var DialogRenderer = /** @class */ (function () {
79
85
  }
80
86
  }
81
87
  });
88
+ this.outsideClickClosedBy = "";
82
89
  };
83
90
  DialogRenderer.prototype.getDialogPosition = function () {
84
91
  var distanceFromVisibleTop = this.parent.element.getBoundingClientRect().top;
@@ -14,7 +14,7 @@ var __extends = (this && this.__extends) || (function () {
14
14
  import { ContentRender } from '../renderer/content-renderer';
15
15
  import { isNullOrUndefined } from '@syncfusion/ej2-base';
16
16
  import { getEditValue } from '../base/util';
17
- var IFRAMEHEADER = "\n<!DOCTYPE html> \n <html>\n <head>\n <meta charset='utf-8' /> \n <style>\n @charset \"UTF-8\";\n body {\n font-family: \"Roboto\", sans-serif;\n font-size: 14px;\n }\n html, body{height: 100%;margin: 0;}\n body.e-cursor{cursor:default}\n span.e-selected-node\t{background-color: #939393;color: white;}\n span.e-selected-node.e-highlight {background-color: #1d9dd8;}\n body{color:#333;word-wrap:break-word;padding: 8px;box-sizing: border-box;}\n .e-rte-image, .e-rte-audio, .e-rte-video {border: 0;cursor: pointer;display:\n block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-imginline, .e-rte-audio.e-audio-inline, .e-rte-video.e-video-inline {display: inline-block;float: none;max-width: calc(100% - (2 * 5px));padding: 1px;vertical-align: bottom;}\n .e-rte-image.e-imgcenter, .e-rte-video.e-video-center {cursor: pointer;display: block;float: none;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-imgright, .e-rte-video.e-video-right { float: right; margin: 0 auto;margin-left: 5px;text-align: right;}\n .e-rte-image.e-imgleft, .e-rte-video.e-video-left {float: left;margin: 0 auto;margin-right: 5px;text-align: left;}\n .e-img-caption { display: inline-block; float: none; margin: 5px auto; max-width: 100%;position: relative;}\n .e-img-caption.e-caption-inline {display: inline-block;float: none;\n margin: 5px auto;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));\n position: relativetext-align: center;vertical-align: bottom;}\n .e-img-inner {box-sizing: border-box;display: block;font-size: 16px;font-weight: initial;\n margin: auto;opacity: .9;text-align: center;width: 100%;}\n .e-img-wrap {display: inline-block;margin: auto;padding: 0;text-align: center;width: 100%;}\n .e-imgleft, .e-video-left {float: left;margin: 0 5px 0 0;text-align: left;}\n .e-imgright, .e-video-right {float: right;margin: 0 0 0 5px;text-align: right;}\n .e-imgcenter, .e-video-center {cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-control img:not(.e-resize) {border: 2px solid transparent; z-index: 1000}\n .e-imginline , .e-audio-inline, .e-video-inline {display: inline-block;float: none;margin-left: 5px;margin-right: 5px;\n max-width: calc(100% - (2 * 5px));vertical-align: bottom;}\n .e-imgbreak, .e-audio-break, .e-video-break {border: 0;cursor: pointer;\n display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-img-focus:not(.e-resize), .e-audio-focus:not(.e-resize), .e-video-focus:not(.e-resize) {border: solid 2px #4a90e2;}\n img.e-img-focus::selection, audio.e-audio-focus::selection, .e-video-focus::selection { background: transparent;color: transparent;}\n span.e-rte-imageboxmark { width: 10px; height: 10px; position: absolute; display: block;\n background: #4a90e2; border: 1px solid #fff; z-index: 1000;}\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\n .e-mob-rte span.e-rte-imageboxmark { background: #fff; border: 1px solid #4a90e2;\n border-radius: 15px; height: 20px; width: 20px; }\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\n .e-rte-content .e-content img.e-resize, .e-rte-content .e-content video.e-resize { z-index: 1000; }\n .e-img-caption .e-img-inner { outline: 0; }\n .e-img-caption a:focus-visible { outline: none; }\n .e-img-caption .e-rte-image.e-imgright, .e-img-caption .e-rte-image.e-imgleft { float: none; margin: 0;}\n body{box-sizing: border-box;min-height: 100px;outline: 0 solid transparent;\n overflow-x: auto;padding: 16px;position: relative;text-align: inherit;z-index: 2;}\n p{margin: 0 0 10px;margin-bottom: 10px;}\n li{margin-bottom: 10px;}\n h1{font-size: 2.17em;font-weight: 400;line-height: 1;margin: 10px 0;}\n h2{font-size: 1.74em;font-weight: 400;margin: 10px 0;}\n h3{font-size: 1.31em;font-weight: 400;margin: 10px 0;}\n h4{font-size: 16px;font-weight: 400;line-height: 1.5;margin: 0;}\n h5{font-size: 00.8em;font-weight: 400;margin: 0;}\n h6{font-size: 00.65em;font-weight: 400;margin: 0;}\n blockquote{margin: 10px 0;margin-left: 0;padding-left: 5px;border-left: solid 2px #5c5c5c;}\n pre{background-color: inherit;border: 0;border-radius: 0;color: #333;\n font-size: inherit;line-height: inherit;margin: 0 0 10px;overflow: visible;padding: 0;\n white-space: pre-wrap;word-break: inherit;word-wrap: break-word;}\n strong, b{font-weight: 700;}\n a{text-decoration: none;user-select: auto;}\n a:hover{text-decoration: underline;};\n p:last-child, pre:last-child, blockquote:last-child{margin-bottom: 0;}\n h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}\n ul:last-child{margin-bottom: 0;}\n table { border-collapse: collapse; empty-cells: show;}\n table td,table th {border: 1px solid #BDBDBD; height: 20px; padding: 2px 5px; vertical-align: middle;}\n table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}\n table th {background-color: #E0E0E0;}\n table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD} \n table .e-cell-select {border: 1px double #4a90e2;}\n span.e-table-box { cursor: nwse-resize; display: block; height: 10px; position: absolute; width: 10px; }\n span.e-table-box.e-rmob {height: 14px;width: 14px;}\n .e-row-resize, .e-column-resize { background-color: transparent; background-repeat: repeat;\n bottom: 0;cursor: col-resize;height: 1px;overflow: visible;position: absolute;width: 1px; }\n .e-row-resize { cursor: row-resize; height: 1px;}\n .e-table-rhelper { cursor: col-resize; opacity: .87;position: absolute;}\n .e-table-rhelper.e-column-helper { width: 1px; }\n .e-table-rhelper.e-row-helper {height: 1px;}\n .e-reicon::before { border-bottom: 6px solid transparent; border-right: 6px solid;\n border-top: 6px solid transparent; content: ''; display: block; height: 0;\n position: absolute; right: 4px; top: 4px; width: 20px; }\n .e-reicon::after { border-bottom: 6px solid transparent; border-left: 6px solid;\n border-top: 6px solid transparent; content: ''; display: block;\n height: 0; left: 4px; position: absolute; top: 4px; width: 20px; z-index: 3; }\n .e-row-helper.e-reicon::after { top: 10px; transform: rotate(90deg); }\n .e-row-helper.e-reicon::before { left: 4px; top: -20px; transform: rotate(90deg); }\n span.e-table-box { background-color: #ffffff; border: 1px solid #BDBDBD; }\n span.e-table-box.e-rbox-select { background-color: #BDBDBD; border: 1px solid #BDBDBD; }\n .e-table-rhelper { background-color: #4a90e2;}\n .e-rtl { direction: rtl; }\n .e-rte-placeholder::before { content: attr(placeholder); opacity: 0.54; overflow: hidden; padding-top: 16px; position: absolute; text-align: start; top: 0; z-index: 1; }\n </style>\n </head>";
17
+ var IFRAMEHEADER = "\n<!DOCTYPE html> \n <html>\n <head>\n <meta charset='utf-8' /> \n <style>\n @charset \"UTF-8\";\n body {\n font-family: \"Roboto\", sans-serif;\n font-size: 14px;\n }\n html, body{height: 100%;margin: 0;}\n body.e-cursor{cursor:default}\n span.e-selected-node\t{background-color: #939393;color: white;}\n span.e-selected-node.e-highlight {background-color: #1d9dd8;}\n body{color:#333;word-wrap:break-word;padding: 8px;box-sizing: border-box;}\n .e-rte-image, .e-rte-audio, .e-rte-video {border: 0;cursor: pointer;display:\n block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-imginline, .e-rte-audio.e-audio-inline, .e-rte-video.e-video-inline {display: inline-block;float: none;max-width: calc(100% - (2 * 5px));padding: 1px;vertical-align: bottom;}\n .e-rte-image.e-imgcenter, .e-rte-video.e-video-center {cursor: pointer;display: block;float: none;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-imgright, .e-rte-video.e-video-right { float: right; margin: 0 auto;margin-left: 5px;text-align: right;}\n .e-rte-image.e-imgleft, .e-rte-video.e-video-left {float: left;margin: 0 auto;margin-right: 5px;text-align: left;}\n .e-img-caption { display: inline-block; float: none; margin: 5px auto; max-width: 100%;position: relative;}\n .e-img-caption.e-caption-inline {display: inline-block;float: none;\n margin: 5px auto;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));\n position: relativetext-align: center;vertical-align: bottom;}\n .e-img-inner {box-sizing: border-box;display: block;font-size: 16px;font-weight: initial;\n margin: auto;opacity: .9;text-align: center;width: 100%;}\n .e-img-wrap {display: inline-block;margin: auto;padding: 0;text-align: center;width: 100%;}\n .e-imgleft, .e-video-left {float: left;margin: 0 5px 0 0;text-align: left;}\n .e-imgright, .e-video-right {float: right;margin: 0 0 0 5px;text-align: right;}\n .e-imgcenter, .e-video-center {cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-control img:not(.e-resize) {border: 2px solid transparent; z-index: 1000}\n .e-imginline , .e-audio-inline, .e-video-inline {display: inline-block;float: none;margin-left: 5px;margin-right: 5px;\n max-width: calc(100% - (2 * 5px));vertical-align: bottom;}\n .e-imgbreak, .e-audio-break, .e-video-break {border: 0;cursor: pointer;\n display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\n .e-rte-image.e-img-focus:not(.e-resize), .e-audio-focus:not(.e-resize), .e-video-focus:not(.e-resize) {border: solid 2px #4a90e2;}\n img.e-img-focus::selection, audio.e-audio-focus::selection, .e-video-focus::selection { background: transparent;color: transparent;}\n span.e-rte-imageboxmark, span.e-rte-videoboxmark { width: 10px; height: 10px; position: absolute; display: block;\n background: #4a90e2; border: 1px solid #fff; z-index: 1000;}\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark, .e-mob-rte.e-mob-span span.e-rte-videoboxmark { background: #4a90e2; border: 1px solid #fff; }\n .e-mob-rte span.e-rte-imageboxmark, .e-mob-rte span.e-rte-videoboxmark { background: #fff; border: 1px solid #4a90e2;\n border-radius: 15px; height: 20px; width: 20px; }\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark, .e-mob-rte.e-mob-span span.e-rte-videoboxmark { background: #4a90e2; border: 1px solid #fff; }\n .e-rte-content .e-content img.e-resize, .e-rte-content .e-content video.e-resize { z-index: 1000; }\n .e-img-caption .e-img-inner { outline: 0; }\n .e-img-caption a:focus-visible { outline: none; }\n .e-img-caption .e-rte-image.e-imgright, .e-img-caption .e-rte-image.e-imgleft { float: none; margin: 0;}\n body{box-sizing: border-box;min-height: 100px;outline: 0 solid transparent;\n overflow-x: auto;padding: 16px;position: relative;text-align: inherit;z-index: 2;}\n p{margin: 0 0 10px;margin-bottom: 10px;}\n li{margin-bottom: 10px;}\n h1{font-size: 2.17em;font-weight: 400;line-height: 1;margin: 10px 0;}\n h2{font-size: 1.74em;font-weight: 400;margin: 10px 0;}\n h3{font-size: 1.31em;font-weight: 400;margin: 10px 0;}\n h4{font-size: 16px;font-weight: 400;line-height: 1.5;margin: 0;}\n h5{font-size: 00.8em;font-weight: 400;margin: 0;}\n h6{font-size: 00.65em;font-weight: 400;margin: 0;}\n blockquote{margin: 10px 0;margin-left: 0;padding-left: 5px;border-left: solid 2px #5c5c5c;}\n pre{background-color: inherit;border: 0;border-radius: 0;color: #333;\n font-size: inherit;line-height: inherit;margin: 0 0 10px;overflow: visible;padding: 0;\n white-space: pre-wrap;word-break: inherit;word-wrap: break-word;}\n strong, b{font-weight: 700;}\n a{text-decoration: none;user-select: auto;}\n a:hover{text-decoration: underline;};\n p:last-child, pre:last-child, blockquote:last-child{margin-bottom: 0;}\n h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}\n ul:last-child{margin-bottom: 0;}\n table { border-collapse: collapse; empty-cells: show;}\n table td,table th {border: 1px solid #BDBDBD; height: 20px; padding: 2px 5px; vertical-align: middle;}\n table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}\n table th {background-color: #E0E0E0;}\n table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD} \n table .e-cell-select {border: 1px double #4a90e2;}\n span.e-table-box { cursor: nwse-resize; display: block; height: 10px; position: absolute; width: 10px; }\n span.e-table-box.e-rmob {height: 14px;width: 14px;}\n .e-row-resize, .e-column-resize { background-color: transparent; background-repeat: repeat;\n bottom: 0;cursor: col-resize;height: 1px;overflow: visible;position: absolute;width: 1px; }\n .e-row-resize { cursor: row-resize; height: 1px;}\n .e-table-rhelper { cursor: col-resize; opacity: .87;position: absolute;}\n .e-table-rhelper.e-column-helper { width: 1px; }\n .e-table-rhelper.e-row-helper {height: 1px;}\n .e-reicon::before { border-bottom: 6px solid transparent; border-right: 6px solid;\n border-top: 6px solid transparent; content: ''; display: block; height: 0;\n position: absolute; right: 4px; top: 4px; width: 20px; }\n .e-reicon::after { border-bottom: 6px solid transparent; border-left: 6px solid;\n border-top: 6px solid transparent; content: ''; display: block;\n height: 0; left: 4px; position: absolute; top: 4px; width: 20px; z-index: 3; }\n .e-row-helper.e-reicon::after { top: 10px; transform: rotate(90deg); }\n .e-row-helper.e-reicon::before { left: 4px; top: -20px; transform: rotate(90deg); }\n span.e-table-box { background-color: #ffffff; border: 1px solid #BDBDBD; }\n span.e-table-box.e-rbox-select { background-color: #BDBDBD; border: 1px solid #BDBDBD; }\n .e-table-rhelper { background-color: #4a90e2;}\n .e-rtl { direction: rtl; }\n .e-rte-placeholder::before { content: attr(placeholder); opacity: 0.54; overflow: hidden; padding-top: 16px; position: absolute; text-align: start; top: 0; z-index: 1; }\n </style>\n </head>";
18
18
  /**
19
19
  * Content module is used to render Rich Text Editor content
20
20
  *
@@ -67,6 +67,7 @@ export declare class Image {
67
67
  private editImgLink;
68
68
  private removeImgLink;
69
69
  private onKeyDown;
70
+ private handleSelectAll;
70
71
  private openDialog;
71
72
  private showDialog;
72
73
  private closeDialog;
@@ -725,6 +725,14 @@ var Image = /** @class */ (function () {
725
725
  originalEvent.preventDefault();
726
726
  break;
727
727
  }
728
+ if (originalEvent.ctrlKey && originalEvent.key === 'a') {
729
+ this.handleSelectAll();
730
+ }
731
+ };
732
+ Image.prototype.handleSelectAll = function () {
733
+ this.cancelResizeAction();
734
+ var imgFocusNodes = this.parent.inputElement.querySelectorAll('.' + classes.CLS_IMG_FOCUS);
735
+ removeClass(imgFocusNodes, classes.CLS_IMG_FOCUS);
728
736
  };
729
737
  Image.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {
730
738
  var range;
@@ -894,10 +902,12 @@ var Image = /** @class */ (function () {
894
902
  _this.parent.formatter.editorManager.nodeSelection.Clear(_this.contentModule.getDocument());
895
903
  _this.parent.formatter.editorManager.nodeSelection.setSelectionContents(_this.contentModule.getDocument(), target);
896
904
  _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);
905
+ _this.resizeStart(e.args, target);
897
906
  }, 400);
898
907
  }
899
908
  else {
900
- this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);
909
+ var coordinates = target.getBoundingClientRect();
910
+ this.quickToolObj.imageQTBar.showPopup(coordinates.left, coordinates.top, target, 'Image');
901
911
  }
902
912
  }
903
913
  };
@@ -1361,7 +1371,7 @@ var Image = /** @class */ (function () {
1361
1371
  isModal: Browser.isDevice,
1362
1372
  buttons: [{
1363
1373
  click: this.insertImageUrl.bind(selectObj),
1364
- buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + this.parent.getCssClass(true), isPrimary: true, disabled: true }
1374
+ buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + this.parent.getCssClass(true), isPrimary: true, disabled: this.parent.editorMode === 'Markdown' ? false : true }
1365
1375
  },
1366
1376
  {
1367
1377
  click: function (e) {
@@ -1467,6 +1477,7 @@ var Image = /** @class */ (function () {
1467
1477
  if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {
1468
1478
  }
1469
1479
  else {
1480
+ this.parent.notify(events.documentClickClosedBy, { closedBy: "outside click" });
1470
1481
  this.dialogObj.hide({ returnValue: true });
1471
1482
  this.parent.isBlur = true;
1472
1483
  dispatchEvent(this.parent.element, 'focusout');
@@ -1528,6 +1539,10 @@ var Image = /** @class */ (function () {
1528
1539
  }
1529
1540
  }
1530
1541
  });
1542
+ if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {
1543
+ var regex = new RegExp(/([^\S]|^)(((https?\:\/\/)|(www\.))(\S+))/gi);
1544
+ this.inputUrl.value = e.selectNode[0].src.match(regex) ? e.selectNode[0].src : '';
1545
+ }
1531
1546
  imgUrl.appendChild(this.inputUrl);
1532
1547
  return imgUrl;
1533
1548
  };
@@ -1536,6 +1551,9 @@ var Image = /** @class */ (function () {
1536
1551
  var proxy = this.selfImage;
1537
1552
  proxy.isImgUploaded = false;
1538
1553
  var url = proxy.inputUrl.value;
1554
+ if (proxy.parent.editorMode === 'Markdown' && url === '') {
1555
+ url = 'http://';
1556
+ }
1539
1557
  if (proxy.parent.formatter.getUndoRedoStack().length === 0) {
1540
1558
  proxy.parent.formatter.saveData();
1541
1559
  }