@syncfusion/ej2-richtexteditor 20.2.49 → 20.3.47

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 (150) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/ej2-richtexteditor.min.js +10 -0
  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 +3790 -358
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +3780 -319
  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 +2 -0
  14. package/src/common/types.d.ts +4 -0
  15. package/src/editor-manager/base/classes.d.ts +16 -0
  16. package/src/editor-manager/base/classes.js +16 -0
  17. package/src/editor-manager/base/constant.d.ts +2 -0
  18. package/src/editor-manager/base/constant.js +2 -0
  19. package/src/editor-manager/base/editor-manager.d.ts +4 -0
  20. package/src/editor-manager/base/editor-manager.js +14 -0
  21. package/src/editor-manager/base/interface.d.ts +2 -0
  22. package/src/editor-manager/plugin/audio.d.ts +32 -0
  23. package/src/editor-manager/plugin/audio.js +133 -0
  24. package/src/editor-manager/plugin/dom-node.js +1 -1
  25. package/src/editor-manager/plugin/image.js +1 -1
  26. package/src/editor-manager/plugin/inserthtml.js +1 -1
  27. package/src/editor-manager/plugin/lists.js +10 -8
  28. package/src/editor-manager/plugin/ms-word-clean-up.js +18 -18
  29. package/src/editor-manager/plugin/nodecutter.d.ts +1 -1
  30. package/src/editor-manager/plugin/nodecutter.js +7 -5
  31. package/src/editor-manager/plugin/selection-commands.js +3 -2
  32. package/src/editor-manager/plugin/table.js +3 -2
  33. package/src/editor-manager/plugin/undo.js +2 -1
  34. package/src/editor-manager/plugin/video.d.ts +34 -0
  35. package/src/editor-manager/plugin/video.js +249 -0
  36. package/src/editor-manager/plugin.d.ts +2 -0
  37. package/src/editor-manager/plugin.js +2 -0
  38. package/src/global.js +1 -1
  39. package/src/rich-text-editor/actions/base-quick-toolbar.js +3 -1
  40. package/src/rich-text-editor/actions/base-toolbar.js +1 -1
  41. package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
  42. package/src/rich-text-editor/actions/dropdown-buttons.js +14 -11
  43. package/src/rich-text-editor/actions/enter-key.d.ts +1 -0
  44. package/src/rich-text-editor/actions/enter-key.js +157 -103
  45. package/src/rich-text-editor/actions/html-editor.d.ts +1 -0
  46. package/src/rich-text-editor/actions/html-editor.js +59 -1
  47. package/src/rich-text-editor/actions/paste-clean-up.js +2 -1
  48. package/src/rich-text-editor/actions/quick-toolbar.d.ts +2 -0
  49. package/src/rich-text-editor/actions/quick-toolbar.js +52 -6
  50. package/src/rich-text-editor/actions/resize.js +11 -1
  51. package/src/rich-text-editor/actions/toolbar-action.js +2 -1
  52. package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
  53. package/src/rich-text-editor/audio.d.ts +4 -0
  54. package/src/rich-text-editor/audio.js +4 -0
  55. package/src/rich-text-editor/base/classes.d.ts +50 -0
  56. package/src/rich-text-editor/base/classes.js +50 -0
  57. package/src/rich-text-editor/base/constant.d.ts +74 -14
  58. package/src/rich-text-editor/base/constant.js +76 -16
  59. package/src/rich-text-editor/base/enum.d.ts +10 -2
  60. package/src/rich-text-editor/base/enum.js +10 -2
  61. package/src/rich-text-editor/base/interface.d.ts +86 -2
  62. package/src/rich-text-editor/base/interface.js +8 -0
  63. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +130 -29
  64. package/src/rich-text-editor/base/rich-text-editor.d.ts +150 -30
  65. package/src/rich-text-editor/base/rich-text-editor.js +200 -6
  66. package/src/rich-text-editor/formatter/formatter.js +7 -2
  67. package/src/rich-text-editor/models/default-locale.js +46 -0
  68. package/src/rich-text-editor/models/items.d.ts +3 -0
  69. package/src/rich-text-editor/models/items.js +100 -3
  70. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +169 -1
  71. package/src/rich-text-editor/models/toolbar-settings.d.ts +143 -1
  72. package/src/rich-text-editor/models/toolbar-settings.js +88 -0
  73. package/src/rich-text-editor/renderer/audio-module.d.ts +76 -0
  74. package/src/rich-text-editor/renderer/audio-module.js +875 -0
  75. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  76. package/src/rich-text-editor/renderer/image-module.js +9 -6
  77. package/src/rich-text-editor/renderer/link-module.js +2 -1
  78. package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
  79. package/src/rich-text-editor/renderer/table-module.js +43 -7
  80. package/src/rich-text-editor/renderer/video-module.d.ts +105 -0
  81. package/src/rich-text-editor/renderer/video-module.js +1422 -0
  82. package/src/rich-text-editor/renderer/view-source.js +2 -0
  83. package/src/rich-text-editor/renderer.d.ts +2 -0
  84. package/src/rich-text-editor/renderer.js +2 -0
  85. package/src/rich-text-editor/video.d.ts +4 -0
  86. package/src/rich-text-editor/video.js +4 -0
  87. package/styles/_all.scss +1 -2
  88. package/styles/bootstrap-dark.css +220 -70
  89. package/styles/bootstrap.css +220 -70
  90. package/styles/bootstrap4.css +220 -70
  91. package/styles/bootstrap5-dark.css +220 -70
  92. package/styles/bootstrap5.css +220 -70
  93. package/styles/fabric-dark.css +220 -70
  94. package/styles/fabric.css +222 -72
  95. package/styles/fluent-dark.css +222 -72
  96. package/styles/fluent.css +222 -72
  97. package/styles/highcontrast-light.css +222 -72
  98. package/styles/highcontrast.css +222 -72
  99. package/styles/material-dark.css +220 -70
  100. package/styles/material.css +220 -70
  101. package/styles/rich-text-editor/_all.scss +1 -1
  102. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +3 -0
  103. package/styles/rich-text-editor/_bootstrap-definition.scss +2 -1
  104. package/styles/rich-text-editor/_bootstrap4-definition.scss +5 -3
  105. package/styles/rich-text-editor/_bootstrap5-definition.scss +8 -3
  106. package/styles/rich-text-editor/_fabric-dark-definition.scss +3 -0
  107. package/styles/rich-text-editor/_fabric-definition.scss +2 -0
  108. package/styles/rich-text-editor/_fluent-definition.scss +8 -3
  109. package/styles/rich-text-editor/_fusionnew-definition.scss +8 -3
  110. package/styles/rich-text-editor/_highcontrast-definition.scss +2 -0
  111. package/styles/rich-text-editor/_highcontrast-light-definition.scss +2 -0
  112. package/styles/rich-text-editor/_layout.scss +116 -74
  113. package/styles/rich-text-editor/_material-dark-definition.scss +3 -0
  114. package/styles/rich-text-editor/_material-definition.scss +2 -0
  115. package/styles/rich-text-editor/_material3-definition.scss +8 -3
  116. package/styles/rich-text-editor/_tailwind-definition.scss +7 -2
  117. package/styles/rich-text-editor/_theme.scss +74 -15
  118. package/styles/rich-text-editor/bootstrap-dark.css +220 -70
  119. package/styles/rich-text-editor/bootstrap.css +220 -70
  120. package/styles/rich-text-editor/bootstrap4.css +220 -70
  121. package/styles/rich-text-editor/bootstrap5-dark.css +220 -70
  122. package/styles/rich-text-editor/bootstrap5.css +220 -70
  123. package/styles/rich-text-editor/fabric-dark.css +220 -70
  124. package/styles/rich-text-editor/fabric.css +222 -72
  125. package/styles/rich-text-editor/fluent-dark.css +222 -72
  126. package/styles/rich-text-editor/fluent.css +222 -72
  127. package/styles/rich-text-editor/highcontrast-light.css +222 -72
  128. package/styles/rich-text-editor/highcontrast.css +222 -72
  129. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +20 -4
  130. package/styles/rich-text-editor/icons/_bootstrap.scss +20 -4
  131. package/styles/rich-text-editor/icons/_bootstrap4.scss +20 -4
  132. package/styles/rich-text-editor/icons/_bootstrap5.scss +20 -4
  133. package/styles/rich-text-editor/icons/_fabric-dark.scss +20 -4
  134. package/styles/rich-text-editor/icons/_fabric.scss +20 -4
  135. package/styles/rich-text-editor/icons/_fluent.scss +20 -4
  136. package/styles/rich-text-editor/icons/_fusionnew.scss +20 -4
  137. package/styles/rich-text-editor/icons/_highcontrast-light.scss +20 -4
  138. package/styles/rich-text-editor/icons/_highcontrast.scss +20 -4
  139. package/styles/rich-text-editor/icons/_material-dark.scss +20 -4
  140. package/styles/rich-text-editor/icons/_material.scss +20 -4
  141. package/styles/rich-text-editor/icons/_material3.scss +20 -4
  142. package/styles/rich-text-editor/icons/_tailwind.scss +20 -4
  143. package/styles/rich-text-editor/material-dark.css +220 -70
  144. package/styles/rich-text-editor/material.css +220 -70
  145. package/styles/rich-text-editor/tailwind-dark.css +220 -70
  146. package/styles/rich-text-editor/tailwind.css +220 -70
  147. package/styles/tailwind-dark.css +220 -70
  148. package/styles/tailwind.css +220 -70
  149. package/.eslintrc.json +0 -244
  150. package/tslint.json +0 -111
@@ -0,0 +1,875 @@
1
+ import { addClass, detach, EventHandler, isNullOrUndefined, Ajax } from '@syncfusion/ej2-base';
2
+ import { Browser, closest, removeClass, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';
3
+ import * as events from '../base/constant';
4
+ import * as classes from '../base/classes';
5
+ import { Uploader } from '@syncfusion/ej2-inputs';
6
+ import { Button } from '@syncfusion/ej2-buttons';
7
+ import { RenderType } from '../base/enum';
8
+ import { dispatchEvent, parseHtml, hasClass, convertToBlob } from '../base/util';
9
+ import { isIDevice } from '../../common/util';
10
+ /**
11
+ * `Audio` module is used to handle audio actions.
12
+ */
13
+ var Audio = /** @class */ (function () {
14
+ function Audio(parent, serviceLocator) {
15
+ this.isAudioUploaded = false;
16
+ this.isAllowedTypes = true;
17
+ this.deletedAudio = [];
18
+ this.parent = parent;
19
+ this.rteID = parent.element.id;
20
+ this.i10n = serviceLocator.getService('rteLocale');
21
+ this.rendererFactory = serviceLocator.getService('rendererFactory');
22
+ this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');
23
+ this.addEventListener();
24
+ }
25
+ Audio.prototype.addEventListener = function () {
26
+ if (this.parent.isDestroyed) {
27
+ return;
28
+ }
29
+ this.parent.on(events.keyDown, this.onKeyDown, this);
30
+ this.parent.on(events.keyUp, this.onKeyUp, this);
31
+ this.parent.on(events.insertAudio, this.insertingAudio, this);
32
+ this.parent.on(events.initialEnd, this.afterRender, this);
33
+ this.parent.on(events.dynamicModule, this.afterRender, this);
34
+ this.parent.on(events.showAudioDialog, this.showDialog, this);
35
+ this.parent.on(events.closeAudioDialog, this.closeDialog, this);
36
+ this.parent.on(events.audioToolbarAction, this.onToolbarAction, this);
37
+ this.parent.on(events.dropDownSelect, this.alignmentSelect, this);
38
+ this.parent.on(events.audioDelete, this.deleteAudio, this);
39
+ this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);
40
+ this.parent.on(events.insertCompleted, this.showAudioQuickToolbar, this);
41
+ this.parent.on(events.destroy, this.removeEventListener, this);
42
+ };
43
+ Audio.prototype.removeEventListener = function () {
44
+ if (this.parent.isDestroyed) {
45
+ return;
46
+ }
47
+ this.parent.off(events.keyDown, this.onKeyDown);
48
+ this.parent.off(events.keyUp, this.onKeyUp);
49
+ this.parent.off(events.insertAudio, this.insertingAudio);
50
+ this.parent.off(events.initialEnd, this.afterRender);
51
+ this.parent.off(events.dynamicModule, this.afterRender);
52
+ this.parent.off(events.showAudioDialog, this.showDialog);
53
+ this.parent.off(events.closeAudioDialog, this.closeDialog);
54
+ this.parent.off(events.audioToolbarAction, this.onToolbarAction);
55
+ this.parent.off(events.dropDownSelect, this.alignmentSelect);
56
+ this.parent.off(events.audioDelete, this.deleteAudio);
57
+ this.parent.off(events.editAreaClick, this.editAreaClickHandler);
58
+ this.parent.off(events.insertCompleted, this.showAudioQuickToolbar);
59
+ this.parent.off(events.destroy, this.removeEventListener);
60
+ if (!isNullOrUndefined(this.contentModule)) {
61
+ EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.touchStart);
62
+ EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.audioClick);
63
+ EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);
64
+ }
65
+ };
66
+ Audio.prototype.afterRender = function () {
67
+ this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);
68
+ EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.touchStart, this);
69
+ EventHandler.add(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.audioClick, this);
70
+ EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);
71
+ };
72
+ Audio.prototype.checkAudioBack = function (range) {
73
+ if (range.startContainer.nodeName === '#text' && range.startOffset === 0 &&
74
+ !isNOU(range.startContainer.previousSibling) && this.isAudioElem(range.startContainer.previousSibling)) {
75
+ this.deletedAudio.push(range.startContainer.previousSibling);
76
+ }
77
+ else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset - 1]) &&
78
+ this.isAudioElem(range.startContainer.childNodes[range.startOffset - 1])) {
79
+ this.deletedAudio.push(range.startContainer.childNodes[range.startOffset - 1]);
80
+ }
81
+ };
82
+ Audio.prototype.checkAudioDel = function (range) {
83
+ if (range.startContainer.nodeName === '#text' && range.startOffset === range.startContainer.textContent.length &&
84
+ !isNOU(range.startContainer.nextSibling) && range.startContainer.nextSibling.nodeName === 'IMG') {
85
+ this.deletedAudio.push(range.startContainer.nextSibling);
86
+ }
87
+ else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset]) &&
88
+ this.isAudioElem(range.startContainer.childNodes[range.startOffset])) {
89
+ this.deletedAudio.push(range.startContainer.childNodes[range.startOffset]);
90
+ }
91
+ };
92
+ Audio.prototype.undoStack = function (args) {
93
+ if (args.subCommand.toLowerCase() === 'undo' || args.subCommand.toLowerCase() === 'redo') {
94
+ for (var i = 0; i < this.parent.formatter.getUndoRedoStack().length; i++) {
95
+ var temp = this.parent.createElement('div');
96
+ var contentElem = parseHtml(this.parent.formatter.getUndoRedoStack()[i].text);
97
+ temp.appendChild(contentElem);
98
+ }
99
+ }
100
+ };
101
+ Audio.prototype.touchStart = function (e, ele) {
102
+ if (this.parent.readonly) {
103
+ return;
104
+ }
105
+ this.prevSelectedAudEle = this.audEle;
106
+ };
107
+ Audio.prototype.onToolbarAction = function (args) {
108
+ if (isIDevice()) {
109
+ this.parent.notify(events.selectionRestore, {});
110
+ }
111
+ var item = args.args.item;
112
+ switch (item.subCommand) {
113
+ case 'AudioReplace':
114
+ this.parent.notify(events.insertAudio, args);
115
+ break;
116
+ case 'AudioRemove':
117
+ this.parent.notify(events.audioDelete, args);
118
+ break;
119
+ }
120
+ };
121
+ // eslint-disable-next-line
122
+ Audio.prototype.onKeyUp = function (event) {
123
+ if (!isNOU(this.deletedAudio) && this.deletedAudio.length > 0) {
124
+ for (var i = 0; i < this.deletedAudio.length - 1; i++) {
125
+ var args = {
126
+ element: this.deletedAudio[i].querySelector('audio'),
127
+ src: this.deletedAudio[i].querySelector('source').getAttribute('src')
128
+ };
129
+ this.parent.trigger(events.afterMediaDelete, args);
130
+ }
131
+ }
132
+ };
133
+ Audio.prototype.onKeyDown = function (event) {
134
+ var originalEvent = event.args;
135
+ var range;
136
+ var save;
137
+ var selectNodeEle;
138
+ var selectParentEle;
139
+ this.deletedAudio = [];
140
+ var isCursor;
141
+ var keyCodeValues = [27, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
142
+ 44, 45, 9, 16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 91, 92, 93, 144, 145, 182, 183];
143
+ if (this.parent.editorMode === 'HTML') {
144
+ range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
145
+ isCursor = range.startContainer === range.endContainer && range.startOffset === range.endOffset;
146
+ }
147
+ if (!isCursor && this.parent.editorMode === 'HTML' && keyCodeValues.indexOf(originalEvent.which) < 0) {
148
+ var nodes = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);
149
+ for (var i = 0; i < nodes.length; i++) {
150
+ if (this.isAudioElem(nodes[i])) {
151
+ this.deletedAudio.push(nodes[i]);
152
+ }
153
+ }
154
+ }
155
+ if (this.parent.editorMode === 'HTML' && ((originalEvent.which === 8 && originalEvent.code === 'Backspace') ||
156
+ (originalEvent.which === 46 && originalEvent.code === 'Delete'))) {
157
+ var isCursor_1 = range.startContainer === range.endContainer && range.startOffset === range.endOffset;
158
+ if ((originalEvent.which === 8 && originalEvent.code === 'Backspace' && isCursor_1)) {
159
+ this.checkAudioBack(range);
160
+ }
161
+ else if ((originalEvent.which === 46 && originalEvent.code === 'Delete' && isCursor_1)) {
162
+ this.checkAudioDel(range);
163
+ }
164
+ }
165
+ if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) &&
166
+ originalEvent.code !== 'KeyK') {
167
+ range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
168
+ save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
169
+ selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);
170
+ selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);
171
+ if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&
172
+ (this.isAudioElem(selectParentEle[0])) && selectParentEle[0].parentElement) {
173
+ var prev = selectParentEle[0].parentElement.childNodes[0];
174
+ this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);
175
+ removeClass([selectParentEle[0]], classes.CLS_AUD_FOCUS);
176
+ this.quickToolObj.audioQTBar.hidePopup();
177
+ }
178
+ }
179
+ if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {
180
+ this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });
181
+ }
182
+ if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {
183
+ if (selectNodeEle && this.isAudioElem(selectNodeEle[0]) && selectNodeEle.length < 1) {
184
+ originalEvent.preventDefault();
185
+ var event_1 = {
186
+ selectNode: selectNodeEle, selection: save, selectParent: selectParentEle,
187
+ args: {
188
+ item: { command: 'Audios', subCommand: 'AudioRemove' },
189
+ originalEvent: originalEvent
190
+ }
191
+ };
192
+ this.deleteAudio(event_1, originalEvent.keyCode);
193
+ }
194
+ }
195
+ switch (originalEvent.action) {
196
+ case 'escape':
197
+ if (!isNullOrUndefined(this.dialogObj)) {
198
+ this.dialogObj.close();
199
+ }
200
+ break;
201
+ case 'backspace':
202
+ case 'delete':
203
+ for (var i = 0; i < this.deletedAudio.length; i++) {
204
+ var src = this.deletedAudio[i].src;
205
+ this.audioRemovePost(src);
206
+ }
207
+ if (this.parent.editorMode !== 'Markdown') {
208
+ if (range.startContainer.nodeType === 3) {
209
+ if (originalEvent.code === 'Backspace') {
210
+ if (range.startContainer.previousElementSibling && range.startOffset === 0 &&
211
+ range.startContainer.previousElementSibling.classList.contains(classes.CLS_AUDIOWRAP)) {
212
+ detach(range.startContainer.previousElementSibling);
213
+ }
214
+ }
215
+ else {
216
+ if (range.startContainer.nextElementSibling &&
217
+ range.endContainer.textContent.length === range.endOffset &&
218
+ range.startContainer.nextElementSibling.classList.contains(classes.CLS_AUDIOWRAP)) {
219
+ detach(range.startContainer.nextElementSibling);
220
+ }
221
+ }
222
+ }
223
+ else if (range.startContainer.nodeType === 1 && (range.startContainer.classList &&
224
+ (range.startContainer.classList.contains(classes.CLS_AUDIOWRAP) ||
225
+ range.startContainer.classList.contains(classes.CLS_CLICKELEM) ||
226
+ range.startContainer.classList.contains(classes.CLS_VID_CLICK_ELEM)))) {
227
+ detach(range.startContainer);
228
+ }
229
+ }
230
+ break;
231
+ case 'insert-audio':
232
+ this.openDialog(true, originalEvent, save, selectNodeEle, selectParentEle);
233
+ originalEvent.preventDefault();
234
+ break;
235
+ }
236
+ };
237
+ Audio.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {
238
+ var range;
239
+ var save;
240
+ var selectNodeEle;
241
+ var selectParentEle;
242
+ if (!isInternal && !isNOU(this.parent.formatter.editorManager.nodeSelection)) {
243
+ range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
244
+ save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
245
+ selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);
246
+ selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);
247
+ }
248
+ else {
249
+ save = selection;
250
+ selectNodeEle = ele;
251
+ selectParentEle = parentEle;
252
+ }
253
+ if (this.parent.editorMode === 'HTML') {
254
+ this.insertAudio({
255
+ args: {
256
+ item: { command: 'Audios', subCommand: 'Audio' },
257
+ originalEvent: event
258
+ },
259
+ selectNode: selectNodeEle,
260
+ selection: save,
261
+ selectParent: selectParentEle
262
+ });
263
+ }
264
+ };
265
+ Audio.prototype.showDialog = function () {
266
+ this.openDialog(false);
267
+ };
268
+ Audio.prototype.closeDialog = function () {
269
+ if (this.dialogObj) {
270
+ this.dialogObj.hide({ returnValue: true });
271
+ }
272
+ };
273
+ Audio.prototype.deleteAudio = function (e, keyCode) {
274
+ if (!this.isAudioElem(e.selectNode[0])) {
275
+ return;
276
+ }
277
+ if (this.audEle) {
278
+ if (e.selectNode[0].nodeType === 3) {
279
+ e.selectNode[0] = this.audEle;
280
+ }
281
+ else if (this.isAudioElem(e.selectNode[0])) {
282
+ e.selectNode[0] = e.selectNode[0].classList.contains(classes.CLS_AUDIOWRAP) ? e.selectNode[0] :
283
+ e.selectNode[0].parentElement;
284
+ }
285
+ }
286
+ var args = {
287
+ element: e.selectNode[0].querySelector('audio'),
288
+ src: e.selectNode[0].querySelector('source').getAttribute('src')
289
+ };
290
+ if (this.parent.formatter.getUndoRedoStack().length === 0) {
291
+ this.parent.formatter.saveData();
292
+ }
293
+ e.selection.restore();
294
+ this.parent.formatter.process(this.parent, e.args, e.args, {
295
+ selectNode: e.selectNode,
296
+ subCommand: e.args.item.subCommand
297
+ });
298
+ this.audioRemovePost(args.src);
299
+ if (this.quickToolObj && document.body.contains(this.quickToolObj.audioQTBar.element)) {
300
+ this.quickToolObj.audioQTBar.hidePopup();
301
+ }
302
+ if (isNullOrUndefined(keyCode)) {
303
+ this.parent.trigger(events.afterMediaDelete, args);
304
+ }
305
+ };
306
+ Audio.prototype.audioRemovePost = function (src) {
307
+ var proxy = this;
308
+ var absoluteUrl = '';
309
+ if (isNOU(this.parent.insertAudioSettings.removeUrl) || this.parent.insertAudioSettings.removeUrl === '') {
310
+ return;
311
+ }
312
+ if (src.indexOf('http://') > -1 || src.indexOf('https://') > -1) {
313
+ absoluteUrl = src;
314
+ }
315
+ else {
316
+ absoluteUrl = new URL(src, document.baseURI).href;
317
+ }
318
+ this.removingAudioName = absoluteUrl.replace(/^.*[\\\/]/, '');
319
+ var xhr = new XMLHttpRequest();
320
+ xhr.addEventListener('readystatechange', function () {
321
+ if (this.readyState === 4 && this.status === 200) {
322
+ proxy.triggerPost(this.response);
323
+ }
324
+ });
325
+ xhr.open('GET', absoluteUrl);
326
+ xhr.responseType = 'blob';
327
+ xhr.send();
328
+ };
329
+ Audio.prototype.triggerPost = function (response) {
330
+ var removeUrl = this.parent.insertAudioSettings.removeUrl;
331
+ if (isNOU(removeUrl) || removeUrl === '') {
332
+ return;
333
+ }
334
+ var file = new File([response], this.removingAudioName);
335
+ var ajax = new Ajax(removeUrl, 'POST', true, null);
336
+ var formData = new FormData();
337
+ formData.append('UploadFiles', file);
338
+ ajax.send(formData);
339
+ };
340
+ Audio.prototype.audioClick = function (e) {
341
+ if (Browser.isDevice) {
342
+ if (this.isAudioElem(e.target)) {
343
+ this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');
344
+ e.target.focus();
345
+ }
346
+ else {
347
+ if (!this.parent.readonly) {
348
+ this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');
349
+ }
350
+ }
351
+ }
352
+ if (this.isAudioElem(e.target)) {
353
+ e.preventDefault();
354
+ }
355
+ };
356
+ Audio.prototype.onDocumentClick = function (e) {
357
+ var target = e.target;
358
+ if (this.isAudioElem(target)) {
359
+ this.audEle = target.querySelector('audio');
360
+ }
361
+ if (!isNullOrUndefined(this.dialogObj) && ((
362
+ // eslint-disable-next-line
363
+ !closest(target, '[id=' + "'" + this.dialogObj.element.id + "'" + ']') && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&
364
+ !this.parent.getToolbarElement().contains(e.target)) ||
365
+ (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&
366
+ !closest(target, '#' + this.parent.getID() + '_toolbar_Audio') &&
367
+ !target.querySelector('#' + this.parent.getID() + '_toolbar_Audio')))) {
368
+ /* eslint-disable */
369
+ if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {
370
+ }
371
+ else {
372
+ this.dialogObj.hide({ returnValue: true });
373
+ this.parent.isBlur = true;
374
+ dispatchEvent(this.parent.element, 'focusout');
375
+ }
376
+ /* eslint-enable */
377
+ }
378
+ if (this.contentModule.getEditPanel().querySelector('.' + classes.CLS_AUD_FOCUS)) {
379
+ if (!this.isAudioElem(e.target) && !isNOU(this.audEle)) {
380
+ this.audEle.style.outline = '';
381
+ }
382
+ else if (!isNOU(this.prevSelectedAudEle) && this.prevSelectedAudEle !== target) {
383
+ this.prevSelectedAudEle.style.outline = '';
384
+ }
385
+ }
386
+ };
387
+ Audio.prototype.alignmentSelect = function (e) {
388
+ var item = e.item;
389
+ if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Audios') {
390
+ return;
391
+ }
392
+ var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
393
+ var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);
394
+ selectNodeEle = [this.audEle];
395
+ var args = { args: e, selectNode: selectNodeEle };
396
+ if (this.parent.formatter.getUndoRedoStack().length === 0) {
397
+ this.parent.formatter.saveData();
398
+ }
399
+ switch (item.subCommand) {
400
+ case 'Inline':
401
+ this.inline(args);
402
+ break;
403
+ case 'Break':
404
+ this.break(args);
405
+ break;
406
+ }
407
+ if (this.quickToolObj && document.body.contains(this.quickToolObj.audioQTBar.element)) {
408
+ this.quickToolObj.audioQTBar.hidePopup();
409
+ removeClass([selectNodeEle[0]], classes.CLS_AUD_FOCUS);
410
+ }
411
+ };
412
+ Audio.prototype.break = function (e) {
413
+ if (e.selectNode[0].nodeName !== 'AUDIO') {
414
+ return;
415
+ }
416
+ var subCommand = (e.args.item) ?
417
+ e.args.item.subCommand : 'Break';
418
+ this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });
419
+ };
420
+ Audio.prototype.inline = function (e) {
421
+ if (e.selectNode[0].nodeName !== 'AUDIO') {
422
+ return;
423
+ }
424
+ var subCommand = (e.args.item) ?
425
+ e.args.item.subCommand : 'Inline';
426
+ this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });
427
+ };
428
+ Audio.prototype.editAreaClickHandler = function (e) {
429
+ if (this.parent.readonly) {
430
+ this.hideAudioQuickToolbar();
431
+ return;
432
+ }
433
+ var args = e.args;
434
+ var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;
435
+ if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {
436
+ if ((showOnRightClick && args.which === 1) && !isNullOrUndefined(args.target) &&
437
+ this.isAudioElem(args.target)) {
438
+ this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());
439
+ this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), args.target);
440
+ }
441
+ return;
442
+ }
443
+ if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.audioQTBar) {
444
+ this.quickToolObj = this.parent.quickToolbarModule;
445
+ var target = args.target;
446
+ this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);
447
+ var isPopupOpen = this.quickToolObj.audioQTBar.element.classList.contains('e-rte-pop');
448
+ if (this.isAudioElem(target) && this.parent.quickToolbarModule) {
449
+ if (isPopupOpen) {
450
+ return;
451
+ }
452
+ this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());
453
+ this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);
454
+ if (isIDevice()) {
455
+ this.parent.notify(events.selectionSave, e);
456
+ }
457
+ target.querySelector('audio').style.outline = '2px solid #4a90e2';
458
+ this.showAudioQuickToolbar({ args: args, type: 'Audios', elements: [args.target] });
459
+ }
460
+ else {
461
+ this.hideAudioQuickToolbar();
462
+ }
463
+ }
464
+ };
465
+ Audio.prototype.isAudioElem = function (target) {
466
+ if (target && target.nodeType !== 3 && target.nodeName !== 'BR' && (target.classList &&
467
+ (target.classList.contains(classes.CLS_AUDIOWRAP) || target.classList.contains(classes.CLS_CLICKELEM)))) {
468
+ return true;
469
+ }
470
+ else {
471
+ return false;
472
+ }
473
+ };
474
+ Audio.prototype.showAudioQuickToolbar = function (e) {
475
+ var _this = this;
476
+ if (e.type !== 'Audios' || isNullOrUndefined(this.parent.quickToolbarModule)
477
+ || isNullOrUndefined(this.parent.quickToolbarModule.audioQTBar) || isNullOrUndefined(e.args)) {
478
+ return;
479
+ }
480
+ this.quickToolObj = this.parent.quickToolbarModule;
481
+ var args = e.args;
482
+ var target = e.elements;
483
+ [].forEach.call(e.elements, function (element, index) {
484
+ if (index === 0) {
485
+ target = element;
486
+ }
487
+ });
488
+ if (this.isAudioElem(target)) {
489
+ addClass([target.querySelector('audio')], [classes.CLS_AUD_FOCUS]);
490
+ target.querySelector('audio').style.outline = '2px solid #4a90e2';
491
+ }
492
+ var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +
493
+ this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;
494
+ if (this.parent.quickToolbarModule.audioQTBar) {
495
+ if (e.isNotify) {
496
+ setTimeout(function () {
497
+ _this.parent.formatter.editorManager.nodeSelection.Clear(_this.contentModule.getDocument());
498
+ _this.parent.formatter.editorManager.nodeSelection.setSelectionContents(_this.contentModule.getDocument(), target);
499
+ _this.quickToolObj.audioQTBar.showPopup(args.pageX - 50, target.getBoundingClientRect().top + 34, target);
500
+ }, 400);
501
+ }
502
+ else {
503
+ this.quickToolObj.audioQTBar.showPopup(args.pageX - 50, target.getBoundingClientRect().top + 34, target);
504
+ }
505
+ }
506
+ };
507
+ Audio.prototype.hideAudioQuickToolbar = function () {
508
+ if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.' + classes.CLS_AUD_FOCUS))) {
509
+ removeClass([this.contentModule.getEditPanel().querySelector('.' + classes.CLS_AUD_FOCUS)], classes.CLS_AUD_FOCUS);
510
+ if (!isNOU(this.audEle)) {
511
+ this.audEle.style.outline = '';
512
+ }
513
+ if (this.quickToolObj && this.quickToolObj.audioQTBar && document.body.contains(this.quickToolObj.audioQTBar.element)) {
514
+ this.quickToolObj.audioQTBar.hidePopup();
515
+ }
516
+ }
517
+ };
518
+ Audio.prototype.insertingAudio = function (e) {
519
+ this.insertAudio(e);
520
+ if (!isNullOrUndefined(this.dialogObj)) {
521
+ this.dialogObj.element.style.maxHeight = 'inherit';
522
+ var dialogContent = this.dialogObj.element.querySelector('.e-audio-content');
523
+ if (!isNullOrUndefined(this.parent.insertAudioSettings.path) || this.parent.editorMode === 'HTML') {
524
+ document.getElementById(this.rteID + '_insertAudio').focus();
525
+ }
526
+ else {
527
+ dialogContent.querySelector('.e-audio-url').focus();
528
+ }
529
+ }
530
+ };
531
+ Audio.prototype.insertAudio = function (e) {
532
+ var _this = this;
533
+ if (this.dialogObj) {
534
+ this.dialogObj.hide({ returnValue: true });
535
+ return;
536
+ }
537
+ var audioDialog = this.parent.createElement('div', { className: 'e-rte-audio-dialog', id: this.rteID + '_audio' });
538
+ this.parent.element.appendChild(audioDialog);
539
+ var audioInsert = this.i10n.getConstant('dialogInsert');
540
+ var audiolinkCancel = this.i10n.getConstant('dialogCancel');
541
+ var audioHeader = this.i10n.getConstant('audioHeader');
542
+ var selection = e.selection;
543
+ var selectObj = { selfAudio: this, selection: e.selection, args: e.args, selectParent: e.selectParent };
544
+ var dialogModel = {
545
+ header: audioHeader,
546
+ cssClass: classes.CLS_RTE_ELEMENTS,
547
+ enableRtl: this.parent.enableRtl,
548
+ locale: this.parent.locale,
549
+ showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',
550
+ position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },
551
+ isModal: Browser.isDevice,
552
+ buttons: [{
553
+ click: this.insertAudioUrl.bind(selectObj),
554
+ buttonModel: { content: audioInsert, cssClass: 'e-flat e-insertAudio', isPrimary: true, disabled: true }
555
+ },
556
+ {
557
+ click: function (e) {
558
+ _this.cancelDialog(e);
559
+ },
560
+ buttonModel: { cssClass: 'e-flat e-cancel', content: audiolinkCancel }
561
+ }],
562
+ target: (Browser.isDevice) ? document.body : this.parent.element,
563
+ animationSettings: { effect: 'None' },
564
+ close: function (event) {
565
+ if (_this.isAudioUploaded) {
566
+ _this.uploadObj.removing();
567
+ }
568
+ _this.parent.isBlur = false;
569
+ if (event && event.event.returnValue) {
570
+ if (_this.parent.editorMode === 'HTML') {
571
+ selection.restore();
572
+ }
573
+ }
574
+ _this.dialogObj.destroy();
575
+ detach(_this.dialogObj.element);
576
+ _this.dialogRenderObj.close(event);
577
+ _this.dialogObj = null;
578
+ }
579
+ };
580
+ var dialogContent = this.parent.createElement('div', { className: 'e-audio-content' });
581
+ if (!isNullOrUndefined(this.parent.insertAudioSettings.path) || this.parent.editorMode === 'HTML') {
582
+ dialogContent.appendChild(this.audioUpload(e));
583
+ }
584
+ var linkHeader = this.parent.createElement('div', { className: 'e-audioheader' });
585
+ var linkHeaderText = this.i10n.getConstant('audioLinkHeader');
586
+ if (this.parent.editorMode === 'HTML') {
587
+ linkHeader.innerHTML = linkHeaderText;
588
+ }
589
+ dialogContent.appendChild(linkHeader);
590
+ dialogContent.appendChild(this.audioUrlPopup(e));
591
+ if (e.selectNode && e.selectNode[0].nodeType === 1 && this.isAudioElem(e.selectNode[0])) {
592
+ dialogModel.header = this.parent.localeObj.getConstant('editAudioHeader');
593
+ dialogModel.content = dialogContent;
594
+ }
595
+ else {
596
+ dialogModel.content = dialogContent;
597
+ }
598
+ this.dialogObj = this.dialogRenderObj.render(dialogModel);
599
+ this.dialogObj.createElement = this.parent.createElement;
600
+ this.dialogObj.appendTo(audioDialog);
601
+ if (e.selectNode && e.selectNode[0].nodeType === 1 && this.isAudioElem(e.selectNode[0]) && (e.name === 'insertAudio')) {
602
+ this.dialogObj.element.querySelector('.e-insertAudio').textContent = this.parent.localeObj.getConstant('dialogUpdate');
603
+ }
604
+ audioDialog.style.maxHeight = 'inherit';
605
+ if (this.quickToolObj) {
606
+ if (this.quickToolObj.audioQTBar && document.body.contains(this.quickToolObj.audioQTBar.element)) {
607
+ this.quickToolObj.audioQTBar.hidePopup();
608
+ }
609
+ if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
610
+ this.quickToolObj.inlineQTBar.hidePopup();
611
+ }
612
+ }
613
+ };
614
+ // eslint-disable-next-line
615
+ Audio.prototype.audioUrlPopup = function (e) {
616
+ var _this = this;
617
+ var audioUrl = this.parent.createElement('div', { className: 'audioUrl' });
618
+ var placeUrl = this.i10n.getConstant('audioUrl');
619
+ this.inputUrl = this.parent.createElement('input', {
620
+ className: 'e-input e-audio-url',
621
+ attrs: { placeholder: placeUrl, spellcheck: 'false' }
622
+ });
623
+ this.inputUrl.addEventListener('input', function () {
624
+ if (!isNOU(_this.inputUrl)) {
625
+ if (_this.inputUrl.value.length === 0) {
626
+ _this.dialogObj.getButtons(0).element.disabled = true;
627
+ }
628
+ else {
629
+ _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
630
+ }
631
+ }
632
+ });
633
+ audioUrl.appendChild(this.inputUrl);
634
+ return audioUrl;
635
+ };
636
+ Audio.prototype.audioUpload = function (e) {
637
+ var _this = this;
638
+ var save;
639
+ var selectParent;
640
+ // eslint-disable-next-line
641
+ var proxy = this;
642
+ var iframe = proxy.parent.iframeSettings.enable;
643
+ if (proxy.parent.editorMode === 'HTML' && (!iframe && isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '[id='
644
+ // eslint-disable-next-line
645
+ + "'" + this.parent.contentModule.getPanel().id + "'" + ']'))
646
+ || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {
647
+ this.contentModule.getEditPanel().focus();
648
+ var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
649
+ save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
650
+ selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);
651
+ }
652
+ else {
653
+ save = e.selection;
654
+ selectParent = e.selectParent;
655
+ }
656
+ var uploadParentEle = this.parent.createElement('div', { className: 'e-aud-uploadwrap e-droparea' });
657
+ var deviceAudioUpMsg = this.i10n.getConstant('audioDeviceUploadMessage');
658
+ var audioUpMsg = this.i10n.getConstant('audioUploadMessage');
659
+ var span = this.parent.createElement('span', { className: 'e-droptext' });
660
+ var spanMsg = this.parent.createElement('span', {
661
+ className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceAudioUpMsg : audioUpMsg)
662
+ });
663
+ span.appendChild(spanMsg);
664
+ var btnEle = this.parent.createElement('button', {
665
+ className: 'e-browsebtn', id: this.rteID + '_insertAudio', attrs: { autofocus: 'true', type: 'button' }
666
+ });
667
+ span.appendChild(btnEle);
668
+ uploadParentEle.appendChild(span);
669
+ var browserMsg = this.i10n.getConstant('browse');
670
+ var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });
671
+ button.isStringTemplate = true;
672
+ button.createElement = this.parent.createElement;
673
+ button.appendTo(btnEle);
674
+ var btnClick = (Browser.isDevice) ? span : btnEle;
675
+ EventHandler.add(btnClick, 'click', this.fileSelect, this);
676
+ var uploadEle = this.parent.createElement('input', {
677
+ id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }
678
+ });
679
+ uploadParentEle.appendChild(uploadEle);
680
+ var fileName;
681
+ var rawFile;
682
+ var selectArgs;
683
+ var filesData;
684
+ var beforeUploadArgs;
685
+ this.uploadObj = new Uploader({
686
+ asyncSettings: { saveUrl: this.parent.insertAudioSettings.saveUrl, removeUrl: this.parent.insertAudioSettings.removeUrl },
687
+ dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,
688
+ allowedExtensions: this.parent.insertAudioSettings.allowedTypes.toString(),
689
+ selected: function (e) {
690
+ proxy.isAudioUploaded = true;
691
+ selectArgs = e;
692
+ filesData = e.filesData;
693
+ if (_this.parent.isServerRendered) {
694
+ selectArgs = JSON.parse(JSON.stringify(e));
695
+ e.cancel = true;
696
+ rawFile = e.filesData;
697
+ selectArgs.filesData = rawFile;
698
+ }
699
+ _this.parent.trigger(events.fileSelected, selectArgs, function (selectArgs) {
700
+ if (!selectArgs.cancel) {
701
+ _this.checkExtension(selectArgs.filesData[0]);
702
+ fileName = selectArgs.filesData[0].name;
703
+ if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertAudioSettings.path)) {
704
+ var reader_1 = new FileReader();
705
+ // eslint-disable-next-line
706
+ reader_1.addEventListener('load', function (e) {
707
+ var url = _this.parent.insertAudioSettings.saveFormat === 'Base64' ? reader_1.result :
708
+ URL.createObjectURL(convertToBlob(reader_1.result));
709
+ proxy.uploadUrl = {
710
+ url: url, selection: save, fileName: fileName,
711
+ selectParent: selectParent
712
+ };
713
+ proxy.inputUrl.setAttribute('disabled', 'true');
714
+ if (isNullOrUndefined(proxy.parent.insertAudioSettings.saveUrl) && _this.isAllowedTypes
715
+ && !isNullOrUndefined(_this.dialogObj)) {
716
+ _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
717
+ }
718
+ });
719
+ reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);
720
+ }
721
+ if (_this.parent.isServerRendered) {
722
+ /* eslint-disable */
723
+ _this.uploadObj._internalRenderSelect(selectArgs, rawFile);
724
+ /* eslint-enable */
725
+ }
726
+ }
727
+ });
728
+ },
729
+ beforeUpload: function (args) {
730
+ if (_this.parent.isServerRendered) {
731
+ beforeUploadArgs = JSON.parse(JSON.stringify(args));
732
+ beforeUploadArgs.filesData = filesData;
733
+ args.cancel = true;
734
+ _this.parent.trigger(events.fileUploading, beforeUploadArgs, function (beforeUploadArgs) {
735
+ if (beforeUploadArgs.cancel) {
736
+ return;
737
+ }
738
+ /* eslint-disable */
739
+ _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
740
+ beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;
741
+ _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
742
+ beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;
743
+ _this.uploadObj.uploadFiles(rawFile, null);
744
+ /* eslint-enable */
745
+ });
746
+ }
747
+ else {
748
+ _this.parent.trigger(events.beforeFileUpload, args);
749
+ }
750
+ },
751
+ uploading: function (e) {
752
+ if (!_this.parent.isServerRendered) {
753
+ _this.parent.trigger(events.fileUploading, e);
754
+ }
755
+ },
756
+ success: function (e) {
757
+ _this.parent.trigger(events.fileUploadSuccess, e, function (e) {
758
+ if (!isNullOrUndefined(_this.parent.insertAudioSettings.path)) {
759
+ var url = _this.parent.insertAudioSettings.path + e.file.name;
760
+ // eslint-disable-next-line
761
+ var value = { url: url, selection: save };
762
+ proxy.uploadUrl = {
763
+ url: url, selection: save, fileName: fileName, selectParent: selectParent
764
+ };
765
+ proxy.inputUrl.setAttribute('disabled', 'true');
766
+ }
767
+ if (e.operation === 'upload' && !isNullOrUndefined(_this.dialogObj)) {
768
+ _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
769
+ }
770
+ });
771
+ },
772
+ failure: function (e) {
773
+ _this.parent.trigger(events.fileUploadFailed, e);
774
+ },
775
+ removing: function () {
776
+ // eslint-disable-next-line
777
+ _this.parent.trigger(events.fileRemoving, e, function (e) {
778
+ proxy.isAudioUploaded = false;
779
+ _this.dialogObj.getButtons(0).element.disabled = true;
780
+ proxy.inputUrl.removeAttribute('disabled');
781
+ if (proxy.uploadUrl) {
782
+ proxy.uploadUrl.url = '';
783
+ }
784
+ });
785
+ }
786
+ });
787
+ this.uploadObj.isStringTemplate = true;
788
+ this.uploadObj.createElement = this.parent.createElement;
789
+ this.uploadObj.appendTo(uploadEle);
790
+ return uploadParentEle;
791
+ };
792
+ Audio.prototype.checkExtension = function (e) {
793
+ if (this.uploadObj.allowedExtensions) {
794
+ if (this.uploadObj.allowedExtensions.toLocaleLowerCase().indexOf(('.' + e.type).toLocaleLowerCase()) === -1) {
795
+ this.dialogObj.getButtons(0).element.setAttribute('disabled', 'disabled');
796
+ this.isAllowedTypes = false;
797
+ }
798
+ else {
799
+ this.isAllowedTypes = true;
800
+ }
801
+ }
802
+ };
803
+ Audio.prototype.fileSelect = function () {
804
+ this.dialogObj.element.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();
805
+ return false;
806
+ };
807
+ // eslint-disable-next-line
808
+ Audio.prototype.cancelDialog = function (e) {
809
+ this.parent.isBlur = false;
810
+ this.dialogObj.hide({ returnValue: true });
811
+ if (this.isAudioUploaded) {
812
+ this.uploadObj.removing();
813
+ }
814
+ };
815
+ // eslint-disable-next-line
816
+ Audio.prototype.insertAudioUrl = function (e) {
817
+ var proxy = this.selfAudio;
818
+ //let audioSelectParent: Node = proxy.uploadUrl.selectParent[0];
819
+ proxy.isAudioUploaded = false;
820
+ var url = proxy.inputUrl.value;
821
+ if (proxy.parent.formatter.getUndoRedoStack().length === 0) {
822
+ proxy.parent.formatter.saveData();
823
+ }
824
+ if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {
825
+ proxy.uploadUrl.cssClass = (proxy.parent.insertAudioSettings.layoutOption === 'Inline' ?
826
+ classes.CLS_AUDIOINLINE : classes.CLS_AUDIOBREAK);
827
+ proxy.dialogObj.hide({ returnValue: false });
828
+ proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);
829
+ proxy.uploadUrl.url = '';
830
+ }
831
+ else if (url !== '') {
832
+ if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(
833
+ // eslint-disable-next-line
834
+ this.selection.range.startContainer.parentNode, '[id=' + "'" + proxy.contentModule.getPanel().id + "'" + ']'))) {
835
+ proxy.contentModule.getEditPanel().focus();
836
+ var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());
837
+ this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());
838
+ this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);
839
+ }
840
+ var name_1 = proxy.parent.editorMode === 'HTML' ? url.split('/')[url.split('/').length - 1] : '';
841
+ var value = {
842
+ cssClass: (proxy.parent.insertAudioSettings.layoutOption === 'Inline' ? classes.CLS_AUDIOINLINE : classes.CLS_AUDIOBREAK),
843
+ url: url, selection: this.selection, fileName: name_1,
844
+ selectParent: this.selectParent
845
+ };
846
+ proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);
847
+ proxy.dialogObj.hide({ returnValue: false });
848
+ }
849
+ };
850
+ /* eslint-disable */
851
+ /**
852
+ * Destroys the ToolBar.
853
+ *
854
+ * @method destroy
855
+ * @returns {void}
856
+ * @hidden
857
+
858
+ */
859
+ /* eslint-enable */
860
+ Audio.prototype.destroy = function () {
861
+ this.prevSelectedAudEle = undefined;
862
+ this.removeEventListener();
863
+ };
864
+ /**
865
+ * For internal use only - Get the module name.
866
+ *
867
+ * @returns {void}
868
+ * @hidden
869
+ */
870
+ Audio.prototype.getModuleName = function () {
871
+ return 'audio';
872
+ };
873
+ return Audio;
874
+ }());
875
+ export { Audio };