@syncfusion/ej2-richtexteditor 18.1.57 → 18.2.44-4568

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 (177) hide show
  1. package/CHANGELOG.md +614 -600
  2. package/README.md +67 -67
  3. package/dist/ej2-richtexteditor.umd.min.js +1 -10
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +231 -106
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +236 -111
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/license +9 -9
  10. package/package.json +50 -73
  11. package/src/common/interface.d.ts +6 -6
  12. package/src/editor-manager/base/classes.d.ts +1 -1
  13. package/src/editor-manager/base/classes.js +1 -1
  14. package/src/editor-manager/base/editor-manager.d.ts +3 -3
  15. package/src/editor-manager/base/editor-manager.js +3 -3
  16. package/src/editor-manager/base/interface.d.ts +7 -7
  17. package/src/editor-manager/base/types.d.ts +1 -1
  18. package/src/editor-manager/plugin/alignments.d.ts +2 -2
  19. package/src/editor-manager/plugin/alignments.js +2 -2
  20. package/src/editor-manager/plugin/clearformat-exec.d.ts +2 -2
  21. package/src/editor-manager/plugin/clearformat-exec.js +2 -2
  22. package/src/editor-manager/plugin/clearformat.d.ts +1 -1
  23. package/src/editor-manager/plugin/clearformat.js +1 -1
  24. package/src/editor-manager/plugin/dom-node.d.ts +34 -34
  25. package/src/editor-manager/plugin/dom-node.js +34 -34
  26. package/src/editor-manager/plugin/formats.d.ts +2 -2
  27. package/src/editor-manager/plugin/formats.js +2 -2
  28. package/src/editor-manager/plugin/image.d.ts +3 -3
  29. package/src/editor-manager/plugin/image.js +3 -3
  30. package/src/editor-manager/plugin/indents.d.ts +2 -2
  31. package/src/editor-manager/plugin/indents.js +2 -2
  32. package/src/editor-manager/plugin/insert-methods.d.ts +4 -4
  33. package/src/editor-manager/plugin/insert-methods.js +4 -4
  34. package/src/editor-manager/plugin/insert-text.d.ts +2 -2
  35. package/src/editor-manager/plugin/insert-text.js +2 -2
  36. package/src/editor-manager/plugin/inserthtml-exec.d.ts +2 -2
  37. package/src/editor-manager/plugin/inserthtml-exec.js +2 -2
  38. package/src/editor-manager/plugin/inserthtml.d.ts +2 -2
  39. package/src/editor-manager/plugin/inserthtml.js +2 -2
  40. package/src/editor-manager/plugin/isformatted.d.ts +8 -8
  41. package/src/editor-manager/plugin/isformatted.js +8 -8
  42. package/src/editor-manager/plugin/link.d.ts +2 -2
  43. package/src/editor-manager/plugin/link.js +2 -2
  44. package/src/editor-manager/plugin/lists.d.ts +2 -2
  45. package/src/editor-manager/plugin/lists.js +4 -14
  46. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -1
  47. package/src/editor-manager/plugin/ms-word-clean-up.js +1 -1
  48. package/src/editor-manager/plugin/nodecutter.d.ts +6 -6
  49. package/src/editor-manager/plugin/nodecutter.js +6 -6
  50. package/src/editor-manager/plugin/selection-commands.d.ts +1 -1
  51. package/src/editor-manager/plugin/selection-commands.js +1 -1
  52. package/src/editor-manager/plugin/selection-exec.d.ts +2 -2
  53. package/src/editor-manager/plugin/selection-exec.js +2 -2
  54. package/src/editor-manager/plugin/table.d.ts +2 -2
  55. package/src/editor-manager/plugin/table.js +2 -2
  56. package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
  57. package/src/editor-manager/plugin/toolbar-status.js +2 -2
  58. package/src/editor-manager/plugin/undo.d.ts +6 -6
  59. package/src/editor-manager/plugin/undo.js +6 -6
  60. package/src/markdown-parser/base/interface.d.ts +10 -10
  61. package/src/markdown-parser/base/markdown-parser.d.ts +3 -3
  62. package/src/markdown-parser/base/markdown-parser.js +3 -3
  63. package/src/markdown-parser/base/types.d.ts +1 -1
  64. package/src/markdown-parser/plugin/clearformat.d.ts +2 -2
  65. package/src/markdown-parser/plugin/clearformat.js +2 -2
  66. package/src/markdown-parser/plugin/formats.d.ts +2 -2
  67. package/src/markdown-parser/plugin/formats.js +2 -2
  68. package/src/markdown-parser/plugin/link.d.ts +2 -2
  69. package/src/markdown-parser/plugin/link.js +2 -2
  70. package/src/markdown-parser/plugin/markdown-selection.d.ts +14 -14
  71. package/src/markdown-parser/plugin/markdown-selection.js +14 -14
  72. package/src/markdown-parser/plugin/md-selection-formats.d.ts +2 -2
  73. package/src/markdown-parser/plugin/md-selection-formats.js +2 -2
  74. package/src/markdown-parser/plugin/table.d.ts +3 -3
  75. package/src/markdown-parser/plugin/table.js +3 -3
  76. package/src/markdown-parser/plugin/undo.d.ts +6 -6
  77. package/src/markdown-parser/plugin/undo.js +6 -6
  78. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +9 -9
  79. package/src/rich-text-editor/actions/base-quick-toolbar.js +9 -9
  80. package/src/rich-text-editor/actions/base-toolbar.d.ts +3 -3
  81. package/src/rich-text-editor/actions/base-toolbar.js +3 -3
  82. package/src/rich-text-editor/actions/color-picker.d.ts +2 -2
  83. package/src/rich-text-editor/actions/color-picker.js +2 -2
  84. package/src/rich-text-editor/actions/count.d.ts +3 -3
  85. package/src/rich-text-editor/actions/count.js +3 -3
  86. package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
  87. package/src/rich-text-editor/actions/dropdown-buttons.js +2 -2
  88. package/src/rich-text-editor/actions/full-screen.d.ts +3 -3
  89. package/src/rich-text-editor/actions/full-screen.js +3 -3
  90. package/src/rich-text-editor/actions/html-editor.d.ts +3 -3
  91. package/src/rich-text-editor/actions/html-editor.js +3 -3
  92. package/src/rich-text-editor/actions/keyboard-model.d.ts +13 -13
  93. package/src/rich-text-editor/actions/keyboard.d.ts +1 -1
  94. package/src/rich-text-editor/actions/keyboard.js +1 -1
  95. package/src/rich-text-editor/actions/markdown-editor.d.ts +2 -2
  96. package/src/rich-text-editor/actions/markdown-editor.js +2 -2
  97. package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -1
  98. package/src/rich-text-editor/actions/paste-clean-up.js +24 -3
  99. package/src/rich-text-editor/actions/quick-toolbar.d.ts +19 -9
  100. package/src/rich-text-editor/actions/quick-toolbar.js +17 -7
  101. package/src/rich-text-editor/actions/toolbar.d.ts +13 -13
  102. package/src/rich-text-editor/actions/toolbar.js +13 -13
  103. package/src/rich-text-editor/base/classes.d.ts +102 -102
  104. package/src/rich-text-editor/base/classes.js +102 -102
  105. package/src/rich-text-editor/base/constant.d.ts +107 -102
  106. package/src/rich-text-editor/base/constant.js +107 -102
  107. package/src/rich-text-editor/base/enum.d.ts +1 -1
  108. package/src/rich-text-editor/base/enum.js +1 -1
  109. package/src/rich-text-editor/base/interface.d.ts +41 -40
  110. package/src/rich-text-editor/base/interface.js +1 -1
  111. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +659 -651
  112. package/src/rich-text-editor/base/rich-text-editor.d.ts +71 -48
  113. package/src/rich-text-editor/base/rich-text-editor.js +90 -35
  114. package/src/rich-text-editor/base/util.d.ts +1 -1
  115. package/src/rich-text-editor/base/util.js +1 -1
  116. package/src/rich-text-editor/formatter/formatter.d.ts +9 -8
  117. package/src/rich-text-editor/formatter/formatter.js +10 -8
  118. package/src/rich-text-editor/formatter/html-formatter.d.ts +2 -2
  119. package/src/rich-text-editor/formatter/html-formatter.js +2 -2
  120. package/src/rich-text-editor/formatter/markdown-formatter.d.ts +2 -2
  121. package/src/rich-text-editor/formatter/markdown-formatter.js +2 -2
  122. package/src/rich-text-editor/models/iframe-settings-model.d.ts +21 -21
  123. package/src/rich-text-editor/models/inline-mode-model.d.ts +9 -9
  124. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +228 -228
  125. package/src/rich-text-editor/renderer/content-renderer.d.ts +6 -6
  126. package/src/rich-text-editor/renderer/content-renderer.js +6 -6
  127. package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -2
  128. package/src/rich-text-editor/renderer/dialog-renderer.js +2 -2
  129. package/src/rich-text-editor/renderer/iframe-content-renderer.d.ts +4 -4
  130. package/src/rich-text-editor/renderer/iframe-content-renderer.js +4 -4
  131. package/src/rich-text-editor/renderer/image-module.d.ts +1 -1
  132. package/src/rich-text-editor/renderer/image-module.js +56 -14
  133. package/src/rich-text-editor/renderer/link-module.d.ts +1 -1
  134. package/src/rich-text-editor/renderer/link-module.js +1 -1
  135. package/src/rich-text-editor/renderer/markdown-renderer.d.ts +6 -6
  136. package/src/rich-text-editor/renderer/markdown-renderer.js +6 -6
  137. package/src/rich-text-editor/renderer/popup-renderer.d.ts +5 -5
  138. package/src/rich-text-editor/renderer/popup-renderer.js +5 -5
  139. package/src/rich-text-editor/renderer/render.d.ts +2 -2
  140. package/src/rich-text-editor/renderer/render.js +2 -2
  141. package/src/rich-text-editor/renderer/table-module.d.ts +1 -1
  142. package/src/rich-text-editor/renderer/table-module.js +1 -1
  143. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +8 -8
  144. package/src/rich-text-editor/renderer/toolbar-renderer.js +8 -8
  145. package/src/rich-text-editor/renderer/view-source.d.ts +6 -6
  146. package/src/rich-text-editor/renderer/view-source.js +6 -6
  147. package/src/rich-text-editor/services/renderer-factory.d.ts +3 -3
  148. package/src/rich-text-editor/services/renderer-factory.js +3 -3
  149. package/src/rich-text-editor/services/service-locator.d.ts +3 -3
  150. package/src/rich-text-editor/services/service-locator.js +3 -3
  151. package/src/selection/selection.d.ts +22 -22
  152. package/src/selection/selection.js +22 -22
  153. package/styles/_all.scss +2 -2
  154. package/styles/rich-text-editor/_all.scss +2 -2
  155. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +151 -151
  156. package/styles/rich-text-editor/_bootstrap-definition.scss +184 -184
  157. package/styles/rich-text-editor/_bootstrap4-definition.scss +307 -307
  158. package/styles/rich-text-editor/_fabric-dark-definition.scss +150 -150
  159. package/styles/rich-text-editor/_fabric-definition.scss +148 -148
  160. package/styles/rich-text-editor/_highcontrast-definition.scss +148 -148
  161. package/styles/rich-text-editor/_highcontrast-light-definition.scss +148 -148
  162. package/styles/rich-text-editor/_layout.scss +1332 -1332
  163. package/styles/rich-text-editor/_material-dark-definition.scss +151 -151
  164. package/styles/rich-text-editor/_material-definition.scss +150 -150
  165. package/styles/rich-text-editor/_theme.scss +484 -484
  166. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +285 -285
  167. package/styles/rich-text-editor/icons/_bootstrap.scss +284 -284
  168. package/styles/rich-text-editor/icons/_bootstrap4.scss +284 -284
  169. package/styles/rich-text-editor/icons/_fabric-dark.scss +284 -284
  170. package/styles/rich-text-editor/icons/_fabric.scss +284 -284
  171. package/styles/rich-text-editor/icons/_highcontrast-light.scss +284 -284
  172. package/styles/rich-text-editor/icons/_highcontrast.scss +284 -284
  173. package/styles/rich-text-editor/icons/_material-dark.scss +284 -284
  174. package/styles/rich-text-editor/icons/_material.scss +284 -284
  175. package/dist/global/ej2-richtexteditor.min.js +0 -11
  176. package/dist/global/ej2-richtexteditor.min.js.map +0 -1
  177. package/dist/global/index.d.ts +0 -14
@@ -1 +0,0 @@
1
- {"version":3,"file":"ej2-richtexteditor.min.js","sources":["../../src/rich-text-editor/models/items.js","../../src/rich-text-editor/base/util.js","../../src/common/util.js","../../src/rich-text-editor/actions/html-attributes.js","../../src/rich-text-editor/base/constant.js","../../src/rich-text-editor/base/classes.js","../../src/rich-text-editor/base/enum.js","../../src/rich-text-editor/models/default-locale.js","../../src/rich-text-editor/renderer/toolbar-renderer.js","../../src/rich-text-editor/actions/base-toolbar.js","../../src/rich-text-editor/actions/dropdown-buttons.js","../../src/rich-text-editor/services/service-locator.js","../../src/rich-text-editor/services/renderer-factory.js","../../src/rich-text-editor/actions/toolbar-action.js","../../src/rich-text-editor/actions/toolbar.js","../../src/rich-text-editor/actions/keyboard.js","../../src/rich-text-editor/actions/color-picker.js","../../src/rich-text-editor/actions/base-quick-toolbar.js","../../src/rich-text-editor/renderer/popup-renderer.js","../../src/rich-text-editor/actions/quick-toolbar.js","../../src/rich-text-editor/actions/count.js","../../src/markdown-parser/plugin/markdown-selection.js","../../src/rich-text-editor/actions/markdown-toolbar-status.js","../../src/rich-text-editor/actions/execute-command-callback.js","../../src/rich-text-editor/formatter/formatter.js","../../src/common/constant.js","../../src/markdown-parser/plugin/lists.js","../../src/markdown-parser/base/constant.js","../../src/markdown-parser/plugin/formats.js","../../src/markdown-parser/plugin/md-selection-formats.js","../../src/common/config.js","../../src/markdown-parser/plugin/undo.js","../../src/markdown-parser/plugin/link.js","../../src/markdown-parser/plugin/table.js","../../src/markdown-parser/plugin/clearformat.js","../../src/markdown-parser/base/markdown-parser.js","../../src/rich-text-editor/formatter/markdown-formatter.js","../../src/rich-text-editor/renderer/markdown-renderer.js","../../src/rich-text-editor/actions/markdown-editor.js","../../src/editor-manager/base/constant.js","../../src/selection/selection.js","../../src/editor-manager/plugin/dom-node.js","../../src/editor-manager/plugin/lists.js","../../src/editor-manager/plugin/insert-methods.js","../../src/editor-manager/plugin/nodecutter.js","../../src/editor-manager/plugin/formats.js","../../src/editor-manager/plugin/inserthtml.js","../../src/editor-manager/plugin/link.js","../../src/editor-manager/plugin/alignments.js","../../src/editor-manager/plugin/indents.js","../../src/editor-manager/base/classes.js","../../src/editor-manager/plugin/image.js","../../src/editor-manager/plugin/table.js","../../src/editor-manager/plugin/isformatted.js","../../src/editor-manager/plugin/selection-commands.js","../../src/editor-manager/plugin/selection-exec.js","../../src/editor-manager/plugin/inserthtml-exec.js","../../src/editor-manager/plugin/clearformat.js","../../src/editor-manager/plugin/clearformat-exec.js","../../src/editor-manager/plugin/undo.js","../../src/editor-manager/plugin/ms-word-clean-up.js","../../src/editor-manager/plugin/insert-text.js","../../src/editor-manager/base/editor-manager.js","../../src/rich-text-editor/formatter/html-formatter.js","../../src/editor-manager/plugin/toolbar-status.js","../../src/rich-text-editor/actions/html-toolbar-status.js","../../src/rich-text-editor/renderer/content-renderer.js","../../src/rich-text-editor/renderer/iframe-content-renderer.js","../../src/rich-text-editor/actions/xhtml-validation.js","../../src/rich-text-editor/actions/html-editor.js","../../src/rich-text-editor/actions/paste-clean-up.js","../../src/rich-text-editor/actions/resize.js","../../src/rich-text-editor/actions/full-screen.js","../../src/rich-text-editor/renderer/render.js","../../src/rich-text-editor/renderer/link-module.js","../../src/rich-text-editor/renderer/image-module.js","../../src/rich-text-editor/renderer/view-source.js","../../src/rich-text-editor/renderer/table-module.js","../../src/rich-text-editor/renderer/dialog-renderer.js","../../src/rich-text-editor/base/interface.js","../../src/rich-text-editor/models/toolbar-settings.js","../../src/rich-text-editor/models/iframe-settings.js","../../src/rich-text-editor/models/inline-mode.js","../../src/rich-text-editor/base/rich-text-editor.js","../../src/global.js"],"sourcesContent":["// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'createtable': {\n 'id': 'CreateTable',\n 'icon': 'e-create-table',\n 'tooltip': 'Create Table',\n 'command': 'Table',\n 'subCommand': 'CreateTable'\n },\n 'removetable': {\n 'id': 'removeTable',\n 'icon': 'e-remove-table',\n 'tooltip': 'Remove Table',\n 'command': 'removeTable',\n 'subCommand': 'removeTable'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditImageLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'Formats',\n 'subCommand': 'Pre'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n }\n};\nvar alignmentLocale = [\n { locale: 'alignmentsDropDownLeft', value: 'JustifyLeft' },\n { locale: 'alignmentsDropDownCenter', value: 'JustifyCenter' },\n { locale: 'alignmentsDropDownRight', value: 'JustifyRight' },\n { locale: 'alignmentsDropDownJustify', value: 'JustifyFull' }\n];\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nvar displayLocale = [\n { locale: 'imageDisplayDropDownInline', value: 'Inline' },\n { locale: 'imageDisplayDropDownBreak', value: 'Break' }\n];\nexport var imageDisplayItems = [\n { text: 'Inline', cssClass: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nvar tableRowLocale = [\n { locale: 'tableInsertRowDropDownBefore', value: 'InsertRowBefore' },\n { locale: 'tableInsertRowDropDownAfter', value: 'InsertRowAfter' },\n { locale: 'tableInsertRowDropDownDelete', value: 'DeleteRow' }\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nvar tableColumnLocale = [\n { locale: 'tableInsertColumnDropDownLeft', value: 'InsertColumnLeft' },\n { locale: 'tableInsertColumnDropDownRight', value: 'InsertColumnRight' },\n { locale: 'tableInsertColumnDropDownDelete', value: 'DeleteColumn' }\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nvar tableVerticalLocale = [\n { locale: 'tableVerticalAlignDropDownTop', value: 'AlignTop' },\n { locale: 'tableVerticalAlignDropDownMiddle', value: 'AlignMiddle' },\n { locale: 'tableVerticalAlignDropDownBottom', value: 'AlignBottom' }\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nvar tableStyleLocale = [\n { locale: 'tableStylesDropDownDashedBorder', value: 'Dashed' },\n { locale: 'tableStylesDropDownAlternateRows', value: 'Alternate' }\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', cssClass: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', cssClass: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\nfunction getLocale(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\nexport function updateDropDownLocale(self) {\n alignmentItems.forEach(function (item, i) {\n alignmentItems[i].text = getLocale(self, alignmentLocale, alignmentItems[i]);\n });\n imageDisplayItems.forEach(function (item, i) {\n imageDisplayItems[i].text = getLocale(self, displayLocale, imageDisplayItems[i]);\n });\n tableRowsItems.forEach(function (item, i) {\n tableRowsItems[i].text = getLocale(self, tableRowLocale, tableRowsItems[i]);\n });\n tableColumnsItems.forEach(function (item, i) {\n tableColumnsItems[i].text = getLocale(self, tableColumnLocale, tableColumnsItems[i]);\n });\n TableCellVerticalAlignItems.forEach(function (item, i) {\n TableCellVerticalAlignItems[i].text = getLocale(self, tableVerticalLocale, TableCellVerticalAlignItems[i]);\n });\n TableStyleItems.forEach(function (item, i) {\n TableStyleItems[i].text = getLocale(self, tableStyleLocale, TableStyleItems[i]);\n });\n}\n","/**\n * Defines util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll, createElement, Browser, detach } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nimport { SanitizeHtmlHelper, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar undoRedoItems = ['Undo', 'Redo'];\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n return value;\n}\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\nexport function setToolbarStatus(e, isPopToolbar) {\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist') ||\n (itemStr === 'pre' && key === 'insertcode')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats':\n if (isNOU(dropDown.formatDropDown) || isPopToolbar ||\n (!isNOU(dropDown.formatDropDown) && dropDown.formatDropDown.isDestroyed)) {\n return;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n var formatContent = isNOU(e.parent.format.default) ? formatItems[0].text :\n e.parent.format.default;\n dropDown.formatDropDown.content = ('<span style=\"display: inline-flex;' +\n 'width:' + e.parent.format.width + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">'\n + (isNOU(result) ? formatContent : result) +\n '</span></span>');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown) ||\n (!isNOU(dropDown.alignDropDown) && dropDown.alignDropDown.isDestroyed)) {\n return;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n case 'fontname':\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar ||\n (!isNOU(dropDown.fontNameDropDown) && dropDown.fontNameDropDown.isDestroyed)) {\n return;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var fontNameContent = isNOU(e.parent.fontFamily.default) ? fontNameItems[0].text :\n e.parent.fontFamily.default;\n var name_1 = (isNOU(result) ? fontNameContent : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('<span style=\"display: inline-flex;' +\n 'width:' + e.parent.fontFamily.width + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">'\n + name_1 + '</span></span>');\n dropDown.fontNameDropDown.dataBind();\n break;\n case 'fontsize':\n if (isNOU(dropDown.fontSizeDropDown) ||\n (!isNOU(dropDown.fontSizeDropDown) && dropDown.fontSizeDropDown.isDestroyed)) {\n return;\n }\n var fontSizeItems = e.parent.fontSize.items;\n var fontSizeContent = isNOU(e.parent.fontSize.default) ? fontSizeItems[1].text :\n e.parent.fontSize.default;\n result = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\\s/g, '') : value), 'value', 'text');\n dropDown.fontSizeDropDown.content = ('<span style=\"display: inline-flex;' +\n 'width:' + e.parent.fontSize.width + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">'\n + getFormattedFontSize(result) + '</span></span>');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'InsertCode' && toolbarItems[j].subCommand === 'Pre') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n * @hidden\n * @deprecated\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\nexport function parseHtml(value) {\n var tempNode = createElement('template');\n tempNode.innerHTML = value;\n if (tempNode.content instanceof DocumentFragment) {\n return tempNode.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n}\nexport function getTextNodesUnder(docElement, node) {\n var nodes = [];\n for (node = node.firstChild; node; node = node.nextSibling) {\n if (node.nodeType === 3) {\n nodes.push(node);\n }\n else {\n nodes = nodes.concat(getTextNodesUnder(docElement, node));\n }\n }\n return nodes;\n}\nexport function toObjectLowerCase(obj) {\n var convertedValue = {};\n var keys = Object.keys(obj);\n for (var i = 0; i < Object.keys(obj).length; i++) {\n convertedValue[keys[i].toLocaleLowerCase()] = obj[keys[i]];\n }\n return convertedValue;\n}\nexport function getEditValue(value, rteObj) {\n var val;\n if (value !== null && value !== '') {\n val = rteObj.enableHtmlEncode ? updateTextNode(decode(value)) : updateTextNode(value);\n rteObj.setProperties({ value: val }, true);\n }\n else {\n val = rteObj.enableHtmlEncode ? '&lt;p&gt;&lt;br/&gt;&lt;/p&gt;' : '<p><br/></p>';\n }\n return val;\n}\nexport function updateTextNode(value) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\nexport function isEditableValueEmpty(value) {\n return (value === '<p><br></p>' || value === '&lt;p&gt;&lt;br&gt;&lt;/p&gt;' || value === '') ? true : false;\n}\nexport function decode(value) {\n return value.replace(/&amp;/g, '&').replace(/&amp;lt;/g, '<')\n .replace(/&lt;/g, '<').replace(/&amp;gt;/g, '>')\n .replace(/&gt;/g, '>').replace(/&nbsp;/g, ' ')\n .replace(/&amp;nbsp;/g, ' ').replace(/&quot;/g, '');\n}\nexport function sanitizeHelper(value, parent) {\n if (parent.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n parent.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n}\n//Converting the base64 url to blob\nexport function convertToBlob(dataUrl) {\n var arr = dataUrl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n","/**\n * Defines common util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined, Browser, createElement, detach } from '@syncfusion/ej2-base';\nimport * as classes from '../rich-text-editor/base/classes';\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\nexport function setEditFrameFocus(editableElement, selector) {\n if (editableElement.nodeName === 'BODY' && !isNullOrUndefined(selector)) {\n var iframe = top.window.document.querySelector(selector);\n if (!isNullOrUndefined(iframe)) {\n iframe.contentWindow.focus();\n }\n }\n}\nexport function updateTextNode(value) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var tableElm = resultElm.querySelectorAll('table');\n for (var i = 0; i < tableElm.length; i++) {\n if (tableElm[i].getAttribute('border') === '0') {\n tableElm[i].removeAttribute('border');\n }\n var tdElm = tableElm[i].querySelectorAll('td');\n for (var j = 0; j < tdElm.length; j++) {\n tdElm[j].style.removeProperty('border');\n }\n if (!tableElm[i].classList.contains(classes.CLS_TABLE)) {\n tableElm[i].classList.add(classes.CLS_TABLE);\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\n","export function setAttributes(htmlAttributes, rte, isFrame, initial) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly(initial);\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'tabindex') {\n rte.inputElement.setAttribute('tabindex', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","/**\n * @hidden\n * @deprecated\n */\nexport var created = 'create';\n/**\n * @hidden\n * @deprecated\n */\nexport var destroyed = 'destroy';\n/**\n * @hidden\n * @deprecated\n */\nexport var load = 'load';\n/**\n * Specifies Rich Text Editor internal events\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var initialLoad = 'initial-load';\n/**\n * @hidden\n * @deprecated\n */\nexport var initialEnd = 'initial-end';\n/**\n * @hidden\n * @deprecated\n */\nexport var iframeMouseDown = 'iframe-click';\n/**\n * @hidden\n * @deprecated\n */\nexport var destroy = 'destroy';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarClick = 'toolbarClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarRefresh = 'toolbar-refresh';\n/**\n * @hidden\n * @deprecated\n */\nexport var refreshBegin = 'refresh-begin';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarUpdated = 'toolbar-updated';\n/**\n * @hidden\n * @deprecated\n */\nexport var bindOnEnd = 'bind-on-end';\n/**\n * @hidden\n * @deprecated\n */\nexport var renderColorPicker = 'render-color-picker';\n/**\n * @hidden\n * @deprecated\n */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/**\n * @hidden\n * @deprecated\n */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/**\n * @hidden\n * @deprecated\n */\nexport var destroyColorPicker = 'destroy-color-picker';\n/**\n * @hidden\n * @deprecated\n */\nexport var modelChanged = 'model-changed';\n/**\n * @hidden\n * @deprecated\n */\nexport var keyUp = 'keyUp';\n/**\n * @hidden\n * @deprecated\n */\nexport var keyDown = 'keyDown';\n/**\n * @hidden\n * @deprecated\n */\nexport var mouseUp = 'mouseUp';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarCreated = 'toolbarCreated';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/**\n * @hidden\n * @deprecated\n */\nexport var enableFullScreen = 'enableFullScreen';\n/**\n * @hidden\n * @deprecated\n */\nexport var disableFullScreen = 'disableFullScreen';\n/**\n * @hidden\n * @deprecated\n */\nexport var dropDownSelect = 'dropDownSelect';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/**\n * @hidden\n * @deprecated\n */\nexport var execCommandCallBack = 'execCommandCallBack';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageToolbarAction = 'image-toolbar-action';\n/**\n * @hidden\n * @deprecated\n */\nexport var linkToolbarAction = 'link-toolbar-action';\n/**\n * @hidden\n * @deprecated\n */\nexport var resizeStart = 'resizeStart';\n/**\n * @hidden\n * @deprecated\n */\nexport var onResize = 'resizing';\n/**\n * @hidden\n * @deprecated\n */\nexport var resizeStop = 'resizeStop';\n/**\n * @hidden\n * @deprecated\n */\nexport var undo = 'undo';\n/**\n * @hidden\n * @deprecated\n */\nexport var redo = 'redo';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertLink = 'insertLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var unLink = 'unLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var editLink = 'editLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var openLink = 'openLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionBegin = 'actionBegin';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionComplete = 'actionComplete';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarStatusUpdate = 'toolbarStatusUpdate';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionSuccess = 'actionSuccess';\n/**\n * @hidden\n * @deprecated\n */\nexport var updateToolbarItem = 'updateToolbarItem';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertImage = 'insertImage';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertCompleted = 'insertCompleted';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageLeft = 'justifyLeft';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageRight = 'justifyRight';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageCenter = 'justifyCenter';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageBreak = 'break';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageInline = 'inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageLink = 'insertImgLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageAlt = 'imgAltText';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageDelete = 'delete';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageCaption = 'caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageSize = 'imageSize';\n/**\n * @hidden\n * @deprecated\n */\nexport var sourceCode = 'sourceCode';\n/**\n * @hidden\n * @deprecated\n */\nexport var updateSource = 'updateSource';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarOpen = 'toolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectionSave = 'selection-save';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectionRestore = 'selection-restore';\n/**\n * @hidden\n * @deprecated\n */\nexport var expandPopupClick = 'expandPopupClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var count = 'count';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentFocus = 'contentFocus';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentBlur = 'contentBlur';\n/**\n * @hidden\n * @deprecated\n */\nexport var mouseDown = 'mouseDown';\n/**\n * @hidden\n * @deprecated\n */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/**\n * @hidden\n * @deprecated\n */\nexport var editAreaClick = 'editAreaClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var scroll = 'scroll';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentscroll = 'contentscroll';\n/**\n * @hidden\n * @deprecated\n */\nexport var colorPickerChanged = 'colorPickerChanged';\n/**\n * @hidden\n * @deprecated\n */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/**\n * @hidden\n * @deprecated\n */\nexport var focusChange = 'focusChange';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectAll = 'selectAll';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectRange = 'selectRange';\n/**\n * @hidden\n * @deprecated\n */\nexport var getSelectedHtml = 'getSelectedHtml';\n/**\n * @hidden\n * @deprecated\n */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var paste = 'paste-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var imgModule = 'imageModule';\n/**\n * @hidden\n * @deprecated\n */\nexport var rtlMode = 'rtl-mode';\n/**\n * @hidden\n * @deprecated\n */\nexport var createTable = 'createTable';\n/**\n * @hidden\n * @deprecated\n */\nexport var docClick = 'docClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var tableToolbarAction = 'table-toolbar-action';\n/**\n * @hidden\n * @deprecated\n */\nexport var checkUndo = 'checkUndoStack';\n/**\n * @hidden\n * @deprecated\n */\nexport var readOnlyMode = 'readOnlyMode';\n/**\n * @hidden\n * @deprecated\n */\nexport var pasteClean = 'pasteClean';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogOpen = 'beforeDialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogOpen = 'dialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogClose = 'beforeDialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogClose = 'dialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeQuickToolbarOpen = 'beforeQuickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarOpen = 'quickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarClose = 'quickToolbarClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var popupHide = 'popupHide';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageSelected = 'imageSelected';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploading = 'imageUploading';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadSuccess = 'imageUploadSuccess';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadFailed = 'imageUploadFailed';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageRemoving = 'imageRemoving';\n/**\n * @hidden\n * @deprecated\n */\nexport var afterImageDelete = 'afterImageDelete';\n/**\n * @hidden\n * @deprecated\n */\nexport var drop = 'drop';\n/**\n * @hidden\n * @deprecated\n */\nexport var xhtmlValidation = 'xhtmlValidation';\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE = 'e-richtexteditor';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTL = 'e-rtl';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CONTENT = 'e-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DISABLED = 'e-disabled';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE = 'e-rte-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POP = 'e-rte-pop';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POPUP = 'e-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SEPARATOR = 'e-separator';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_MINIMIZE = 'e-minimize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACK = 'e-back';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SHOW = 'e-show';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_HIDE = 'e-hide';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_VISIBLE = 'e-visible';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FOCUS = 'e-focused';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CAPTION = 'e-img-caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_CAPTION = 'e-rte-img-caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGINLINE = 'e-imginline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COUNT = 'e-rte-character-count';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_WARNING = 'e-warning';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ERROR = 'e-error';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ICONS = 'e-icons';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ACTIVE = 'e-active';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_HIDDEN = 'e-rte-hidden';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_KEEP_FORMAT = 'e-rte-keepformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_REMOVE_FORMAT = 'e-rte-removeformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_PLAIN_FORMAT = 'e-rte-plainformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_OK = 'e-rte-pasteok';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_CANCEL = 'e-rte-pastecancel';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DIALOG_MIN_HEIGHT = 'e-rte-dialog-minheight';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_HANDLE = 'e-resize-handle';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_EAST = 'e-south-east';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_IMAGE = 'e-rte-image';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RESIZE = 'e-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_FOCUS = 'e-img-focus';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DRAG_IMAGE = 'e-rte-drag-image';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_UPLOAD_POPUP = 'e-rte-upload-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POPUP_OPEN = 'e-popup-open';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_RESIZE = 'e-img-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPAREA = 'e-droparea';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_INNER = 'e-img-inner';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_UPLOAD_FILES = 'e-upload-files';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DIALOG_UPLOAD = 'e-rte-dialog-upload';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_CNT = 'e-rte-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CUSTOM_TILE = 'e-custom-tile';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_NOCOLOR_ITEM = 'e-nocolor-item';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE = 'e-rte-table';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE_BORDER = 'e-rte-table-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_TABLE_RESIZE = 'e-rte-table-resize';\n","/**\n * Defines types of Render\n * @hidden\n * @deprecated\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Popup */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as InlineToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n /** Defines RenderType as TableToolbar */\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines types to be used as Toolbar.\n */\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n /** Defines ToolbarType as Scrollable */\n ToolbarType[\"Scrollable\"] = \"Scrollable\";\n})(ToolbarType || (ToolbarType = {}));\n","// tslint:disable\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Hyperlink',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Title',\n 'linkWebUrl': 'Web Address',\n 'linkTitle': 'Enter a title',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'inserttablebtn': 'Insert Table',\n 'tabledialogHeader': 'Insert Table',\n 'tableWidth': 'Width',\n 'cellpadding': 'Cell Padding',\n 'cellspacing': 'Cell Spacing',\n 'columns': 'Number of columns',\n 'rows': 'Number of rows',\n 'tableRows': 'Table Rows',\n 'tableColumns': 'Table Columns',\n 'tableCellHorizontalAlign': 'Table Cell Horizontal Align',\n 'tableCellVerticalAlign': 'Table Cell Vertical Align',\n 'createTable': 'Create Table',\n 'removeTable': 'Remove Table',\n 'tableHeader': 'Table Header',\n 'tableRemove': 'Table Remove',\n 'tableCellBackground': 'Table Cell Background',\n 'tableEditProperties': 'Table Edit Properties',\n 'styles': 'Styles',\n 'insertColumnLeft': 'Insert Column Left',\n 'insertColumnRight': 'Insert Column Right',\n 'deleteColumn': 'Delete Column',\n 'insertRowBefore': 'Insert Row Before',\n 'insertRowAfter': 'Insert Row After',\n 'deleteRow': 'Delete Row',\n 'tableEditHeader': 'Edit Table',\n 'TableHeadingText': 'Heading',\n 'TableColText': 'Col',\n 'imageInsertLinkHeader': 'Insert Link',\n 'editImageHeader': 'Edit Image',\n \"alignmentsDropDownLeft\": 'Align Left',\n \"alignmentsDropDownCenter\": 'Align Center',\n \"alignmentsDropDownRight\": 'Align Right',\n \"alignmentsDropDownJustify\": 'Align Justify',\n \"imageDisplayDropDownInline\": 'Inline',\n \"imageDisplayDropDownBreak\": 'Break',\n \"tableInsertRowDropDownBefore\": 'Insert row before',\n \"tableInsertRowDropDownAfter\": 'Insert row after',\n \"tableInsertRowDropDownDelete\": 'Delete row',\n \"tableInsertColumnDropDownLeft\": 'Insert column left',\n \"tableInsertColumnDropDownRight\": 'Insert column right',\n \"tableInsertColumnDropDownDelete\": 'Delete column',\n \"tableVerticalAlignDropDownTop\": 'Align Top',\n \"tableVerticalAlignDropDownMiddle\": 'Align Middle',\n \"tableVerticalAlignDropDownBottom\": 'Align Bottom',\n \"tableStylesDropDownDashedBorder\": 'Dashed Borders',\n \"tableStylesDropDownAlternateRows\": 'Alternate Rows',\n 'pasteFormat': 'Paste Format',\n 'pasteFormatContent': 'Choose the formatting action',\n 'plainText': 'Plain Text',\n 'cleanFormat': 'Clean',\n 'keepFormat': 'Keep',\n 'pasteDialogOk': 'OK',\n 'pasteDialogCancel': 'Cancel'\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow'\n};\n","import { addClass, Browser, removeClass, EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll, detach } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM } from '../base/classes';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { hasClass } from '../base/util';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n * @deprecated\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n this.removePopupContainer();\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (!this.parent.enabled) {\n return;\n }\n if (!this.parent.readonly) {\n this.parent.notify(events.toolbarClick, args);\n }\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n this.onPopupOverlay();\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n this.popupModal(args.element.parentElement);\n }\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.removePopupContainer();\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.removePopupContainer = function () {\n if (Browser.isDevice && !isNullOrUndefined(this.popupContainer)) {\n var popupEle = this.popupContainer.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n this.popupContainer.parentNode.insertBefore(popupEle, this.popupContainer.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(this.popupContainer);\n this.popupContainer = undefined;\n }\n };\n /**\n * renderToolbar method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.isStringTemplate = true;\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n /**\n * renderDropDownButton method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n return dropDown;\n };\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n if (!isNullOrUndefined(this.popupOverlay)) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n this.popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(this.popupContainer, element);\n this.popupContainer.appendChild(element);\n this.popupContainer.style.zIndex = element.style.zIndex;\n this.popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n this.popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n this.popupOverlay = element.nextElementSibling;\n this.popupOverlay.style.display = 'block';\n addClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.style.backgroundColor === style) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n /**\n * renderColorPickerDropDown method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement, cssClass: css,\n enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n proxy.parent.notify(events.selectionRestore, {});\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n var parentNode = range.startContainer.parentNode;\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n (closest(range.startContainer.parentNode, 'td,th')) ||\n (proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')))\n && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n inst.dataBind();\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n _this.setColorPickerContentWidth(colorPicker);\n var focusEle;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n if (Browser.isDevice) {\n _this.popupModal(dropDownArgs.element.parentElement);\n }\n _this.pickerRefresh(dropDownArgs);\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n if (Browser.isDevice && !isNullOrUndefined(dropElement)) {\n var popupEle = dropElement.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n dropElement.parentNode.insertBefore(popupEle, dropElement.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(dropElement);\n proxy.popupContainer = undefined;\n }\n }\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n dropDown.element.onmousedown = function () { proxy.parent.notify(events.selectionSave, {}); };\n dropDown.element.onkeydown = function () { proxy.parent.notify(events.selectionSave, {}); };\n return dropDown;\n };\n ToolbarRenderer.prototype.pickerRefresh = function (dropDownArgs) {\n if (this.parent.backgroundColor.mode === 'Picker') {\n var popupElem = dropDownArgs.element.parentElement;\n popupElem.style.width = (popupElem.offsetWidth + 5).toString() + 'px';\n getInstance(popupElem, Popup).refreshPosition(popupElem);\n popupElem.style.width = (popupElem.offsetWidth - 5).toString() + 'px';\n }\n };\n ToolbarRenderer.prototype.popupModal = function (element) {\n var popupInst = getInstance(element, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupInst.dataBind();\n this.setIsModel(element);\n };\n ToolbarRenderer.prototype.setColorPickerContentWidth = function (colorPicker) {\n var colorPickerContent = colorPicker.element.nextSibling;\n if (colorPickerContent.style.width === '0px') {\n colorPickerContent.style.width = '';\n var borderWidth = parseInt(getComputedStyle(colorPickerContent).borderBottomWidth, 10);\n colorPickerContent.style.width = formatUnit(colorPickerContent.children[0].offsetWidth\n + borderWidth + borderWidth);\n }\n };\n /**\n * renderColorPicker method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var _this = this;\n var proxy = this;\n this.colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n _this.colorPicker.setProperties({ value: value });\n },\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n args.element.classList.add(CLS_CUSTOM_TILE);\n if (args.value === '') {\n args.element.classList.add(CLS_NOCOLOR_ITEM);\n }\n },\n change: function (colorPickerArgs) {\n var colorpickerValue = colorPickerArgs.currentValue.rgba;\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.parent.notify(events.selectionRestore, {});\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n _this.colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n this.colorPicker.isStringTemplate = true;\n this.colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n this.colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n this.colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n this.colorPicker.createElement = this.parent.createElement;\n this.colorPicker.appendTo(document.body.querySelector(args.target));\n return this.colorPicker;\n };\n /**\n * The function is used to render Rich Text Editor toolbar\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText, toObjectLowerCase } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand,\n template: this.parent.createElement(tagName, {\n id: this.parent.getID() + '_' + container\n + '_' + this.tools[itemStr.toLocaleLowerCase()].id\n }).outerHTML,\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n /**\n * getObject method\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + this.tools[itemStr.toLocaleLowerCase()].id,\n prefixIcon: this.tools[itemStr.toLocaleLowerCase()].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand\n };\n }\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n var _this = this;\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n var _loop_1 = function (item) {\n switch (typeof item) {\n case 'string':\n items.push(this_1.getObject(item, container));\n break;\n default:\n if (!isNullOrUndefined(item.click)) {\n var proxy_1 = item;\n var callback_1 = proxy_1.click;\n proxy_1.click = function () {\n if (proxy_1.undo && _this.parent.formatter.getUndoRedoStack().length === 0) {\n _this.parent.formatter.saveData();\n }\n callback_1.call(_this);\n if ((_this.parent.formatter.getUndoRedoStack()[_this.parent.formatter.getUndoRedoStack().length - 1].text.trim()\n === _this.parent.inputElement.innerHTML.trim())) {\n return;\n }\n if (proxy_1.undo) {\n _this.parent.formatter.saveData();\n }\n };\n }\n items.push(item);\n }\n };\n var this_1 = this;\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n _loop_1(item);\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n /**\n * render method\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, isNullOrUndefined, removeClass, select, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.cssClass) {\n addClass([args.element], item.cssClass);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('<span style=\"display: inline-flex;' + 'width:' + ((type === 'quick') ? 'auto' : width) + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">' + content + '</span></span>');\n };\n /**\n * renderDropDowns method\n * @hidden\n * @deprecated\n */\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n var formatContent = isNullOrUndefined(_this.parent.format.default) ? formatItem[0].text :\n _this.parent.format.default;\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, formatContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats', items: formatItem, element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem[0].text :\n _this.parent.fontFamily.default;\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, fontNameContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName', items: fontItem, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontFamily.default)) {\n _this.getEditNode().style.fontFamily = _this.parent.fontFamily.default;\n }\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize[1].text :\n _this.parent.fontSize.default;\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize', items: fontsize, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontSize.default)) {\n _this.getEditNode().style.fontSize = _this.parent.fontSize.default;\n }\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments', items: model.alignmentItems, element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.getUpdateItems = function (items, value) {\n var dropDownItems = items.slice();\n dropDownItems.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: (value === 'Format' ? 'Formats' : 'Font'), enumerable: true },\n subCommand: { value: (value === 'Format' ? item.value : value), enumerable: true }\n });\n });\n return dropDownItems;\n };\n DropDownButtons.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var type;\n var content;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontFamily':\n if (this.fontNameDropDown) {\n for (var _b = 0, _c = Object.keys(newProp.fontFamily); _b < _c.length; _b++) {\n var fontFamily = _c[_b];\n switch (fontFamily) {\n case 'default':\n case 'width':\n var fontItems = this.fontNameDropDown.items;\n type = !isNullOrUndefined(closest(this.fontNameDropDown.element, '.' + classes.CLS_QUICK_TB)) ?\n 'quick' : 'toolbar';\n var fontNameContent = isNullOrUndefined(this.parent.fontFamily.default) ? fontItems[0].text :\n this.parent.fontFamily.default;\n content = this.dropdownContent(this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItems, fontNameContent, 'text', 'text')));\n this.fontNameDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n this.getEditNode().style.fontFamily = this.parent.fontFamily.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-family');\n }\n break;\n case 'items':\n this.fontNameDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontFamily.items, 'FontName')\n });\n break;\n }\n }\n }\n break;\n case 'fontSize':\n if (this.fontSizeDropDown) {\n for (var _d = 0, _e = Object.keys(newProp.fontSize); _d < _e.length; _d++) {\n var fontSize = _e[_d];\n switch (fontSize) {\n case 'default':\n case 'width':\n var fontsize = this.fontSizeDropDown.items;\n type = !isNullOrUndefined(closest(this.fontSizeDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var fontSizeContent = isNullOrUndefined(this.parent.fontSize.default) ? fontsize[1].text :\n this.parent.fontSize.default;\n content = this.dropdownContent(this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text')));\n this.fontSizeDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n this.getEditNode().style.fontSize = this.parent.fontSize.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-size');\n }\n break;\n case 'items':\n this.fontSizeDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontSize.items, 'FontSize')\n });\n break;\n }\n }\n }\n break;\n case 'format':\n if (this.formatDropDown) {\n for (var _f = 0, _g = Object.keys(newProp.format); _f < _g.length; _f++) {\n var format = _g[_f];\n switch (format) {\n case 'default':\n case 'width':\n var formatItems = this.formatDropDown.items;\n type = !isNullOrUndefined(closest(this.formatDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var formatContent = isNullOrUndefined(this.parent.format.default) ? formatItems[0].text :\n this.parent.format.default;\n content = this.dropdownContent(this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItems, formatContent, 'text', 'text')));\n this.formatDropDown.setProperties({ content: content });\n break;\n case 'types':\n this.formatDropDown.setProperties({\n items: this.getUpdateItems(newProp.format.types, 'Format')\n });\n break;\n }\n }\n }\n break;\n }\n }\n };\n DropDownButtons.prototype.getEditNode = function () {\n return this.parent.contentModule.getEditPanel();\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n /**\n * destroyDropDowns method\n * @hidden\n * @deprecated\n */\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n * @deprecated\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n /**\n * register method\n * @hidden\n * @deprecated\n */\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n /**\n * getService method\n * @hidden\n * @deprecated\n */\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n * @deprecated\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n /**\n * addRenderer method\n * @hidden\n * @deprecated\n */\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n /**\n * getRenderer method\n * @hidden\n * @deprecated\n */\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n var value = e.item.controlParent && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar\n && this.parent.quickToolbarModule.tableQTBar.element.contains(e.item.controlParent.element) ? 'Table' : null;\n this.parent.formatter.process(this.parent, e, e.originalEvent, value);\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n model.updateDropDownLocale(this.parent);\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, model.tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = model.tools;\n }\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n if (!this.parent.inlineMode.enable) {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n }\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n case ToolbarType.Scrollable:\n tbMode = 'Scrollable';\n break;\n default:\n tbMode = 'MultiRow';\n }\n if (isIDevice() && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tbMode = ToolbarType.Scrollable;\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice || isIDevice()) {\n return false;\n }\n var tBarMode;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tBarMode = ToolbarType.MultiRow;\n }\n else {\n tBarMode = this.parent.toolbarSettings.type;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: tBarMode,\n target: ele\n });\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n if (!isNullOrUndefined(transformElements[i].contains) && transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && this.parent.iframeSettings.enable && this.parent.inputElement.ownerDocument === e.target) {\n scrollParent = e.target.body;\n }\n else if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable && !isIDevice()) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n var divEle = this.parent.element.querySelector('.e-rte-srctextarea');\n var iframeEle = this.parent.element.querySelector('.e-source-content');\n if ((!this.parent.iframeSettings.enable && (!isNOU(divEle) && divEle.style.display === 'block')) ||\n (this.parent.iframeSettings.enable && (!isNOU(iframeEle) && iframeEle.style.display === 'block'))) {\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n }\n };\n /**\n * addFixedTBarClass method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n /**\n * removeFixedTBarClass method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n /**\n * updateItem method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.updateItem = function (args) {\n var item = this.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = this.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n var prefixId = this.parent.inlineMode.enable ? '_quick_' : '_toolbar_';\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + prefixId + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n if (!this.tbElement || (this.parent.inlineMode.enable && (isIDevice() || !Browser.isDevice))) {\n return;\n }\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n setToolbarStatus(options, (this.parent.inlineMode.enable ? true : false));\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n /**\n * getBaseToolbar method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n /**\n * addTBarItem method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n /**\n * enableTBarItems method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable, muteToolbarUpdate) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element) && !muteToolbarUpdate) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * removeTBarItems method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.removeTBarItems = function (items) {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = (this.parent.inlineMode.enable) ? selectAll('.' + classes.CLS_TB_ITEM, this.baseToolbar.toolbarObj.element)\n : selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n /**\n * getExpandTBarPopHeight method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n /**\n * getToolbarHeight method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n /**\n * getToolbarElement method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n /**\n * refreshToolbarOverflow method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n removeClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (!isNullOrUndefined(tbWrapper)) {\n detach(tbWrapper);\n }\n else if (!isNullOrUndefined(tbElement)) {\n detach(tbElement);\n }\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating && this.getDOMVisibility(this.tbElement)) {\n this.toggleFloatClass(e.args);\n }\n }\n };\n Toolbar.prototype.getDOMVisibility = function (el) {\n if (!el.offsetParent && el.offsetWidth === 0 && el.offsetHeight === 0) {\n return false;\n }\n return true;\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.tbFocusHandler = function (e) {\n var activeElm = document.activeElement;\n var isToolbaractive = closest(activeElm, '.e-rte-toolbar');\n if (activeElm === this.parent.getToolbarElement() || isToolbaractive === this.parent.getToolbarElement()) {\n var toolbarItem = this.parent.getToolbarElement().querySelectorAll('.e-expended-nav');\n for (var i = 0; i < toolbarItem.length; i++) {\n if (isNOU(this.parent.getToolbarElement().querySelector('.e-insert-table-btn'))) {\n toolbarItem[i].setAttribute('tabindex', '0');\n }\n else {\n toolbarItem[i].setAttribute('tabindex', '1');\n }\n }\n }\n };\n Toolbar.prototype.tbKeydownHandler = function (e) {\n if (e.target.classList.contains('e-dropdown-btn') ||\n e.target.getAttribute('id') === this.parent.getID() + '_toolbar_CreateTable') {\n e.target.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.toolbarMouseDownHandler = function (e) {\n var trg = closest(e.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n if (this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n EventHandler.add(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler, this);\n EventHandler.add(this.tbElement, 'focusin', this.tbFocusHandler, this);\n EventHandler.add(this.tbElement, 'keydown', this.tbKeydownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'click mousedown', this.toolbarMouseDownHandler);\n EventHandler.remove(this.tbElement, 'focusin', this.tbFocusHandler);\n EventHandler.remove(this.tbElement, 'keydown', this.tbKeydownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.refreshBegin, this.onRefresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n };\n Toolbar.prototype.onRefresh = function () {\n this.refreshToolbarOverflow();\n this.parent.setContentHeight('', true);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n this.refreshToolbar();\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.refreshToolbar();\n };\n Toolbar.prototype.refreshToolbar = function () {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement || tbWrapper) {\n this.destroyToolbar();\n }\n if (this.parent.toolbarSettings.enable) {\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'> </div>;\n * <script>\n * let node: HTMLElement = document.querySelector('#testEle');\n * let kbInstance = new KeyboardEvents({\n * element: node,\n * keyConfigs:{ selectAll : 'ctrl+a' },\n * keyAction: function (e:KeyboardEvent, action:string) {\n * // handler function code\n * }\n * });\n * </script>\n * ```\n * @hidden\n * @deprecated\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { select, detach, extend } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex, toObjectLowerCase } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n /**\n * renderColorPickerInput method\n * @hidden\n * @deprecated\n */\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n var targetID;\n var options;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: ('#' + targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'fontcolor', _this.fontColorPicker);\n break;\n case 'backgroundcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: ('#' + targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n /**\n * destroyColorPicker method\n * @hidden\n * @deprecated\n */\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n var innerEle = this.fontColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n var innerEle = this.backgroundColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n ColorPickerInput.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontColor':\n if (this.fontColorPicker) {\n for (var _b = 0, _c = Object.keys(newProp.fontColor); _b < _c.length; _b++) {\n var font = _c[_b];\n switch (font) {\n case 'default':\n this.fontColorPicker.setProperties({ value: newProp.fontColor.default });\n element = this.fontColorDropDown.element;\n var fontBorder = element.querySelector('.' + this.tools['fontcolor'].icon);\n fontBorder.style.borderBottomColor = newProp.fontColor.default;\n break;\n case 'mode':\n this.fontColorPicker.setProperties({ mode: newProp.fontColor.mode });\n break;\n case 'columns':\n this.fontColorPicker.setProperties({ columns: newProp.fontColor.columns });\n break;\n case 'colorCode':\n this.fontColorPicker.setProperties({ presetColors: newProp.fontColor.colorCode });\n break;\n case 'modeSwitcher':\n this.fontColorPicker.setProperties({ modeSwitcher: newProp.fontColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n case 'backgroundColor':\n if (this.backgroundColorPicker) {\n for (var _d = 0, _e = Object.keys(newProp.backgroundColor); _d < _e.length; _d++) {\n var background = _e[_d];\n switch (background) {\n case 'default':\n this.backgroundColorPicker.setProperties({ value: newProp.backgroundColor.default });\n element = this.backgroundColorDropDown.element;\n var backgroundBorder = element.querySelector('.' + this.tools['backgroundcolor'].icon);\n backgroundBorder.style.borderBottomColor = newProp.backgroundColor.default;\n break;\n case 'mode':\n this.backgroundColorPicker.setProperties({ mode: newProp.backgroundColor.mode });\n break;\n case 'columns':\n this.backgroundColorPicker.setProperties({ columns: newProp.backgroundColor.columns });\n break;\n case 'colorCode':\n this.backgroundColorPicker.setProperties({ presetColors: newProp.backgroundColor.colorCode });\n break;\n case 'modeSwitcher':\n this.backgroundColorPicker.setProperties({ modeSwitcher: newProp.backgroundColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n }\n }\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU, isBlazor } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n /**\n * render method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.element.setAttribute('aria-owns', this.parent.getID());\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = (y >= 0) ? y : e.y + 5;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom':\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.x - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n /**\n * showPopup method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var _this = this;\n var eventArgs = isBlazor() ? { cancel: false, targetElement: target } :\n { popup: this.popupObj, cancel: false, targetElement: target };\n this.parent.trigger(events.beforeQuickToolbarOpen, eventArgs, function (beforeQuickToolbarArgs) {\n if (!beforeQuickToolbarArgs.cancel) {\n var editPanelTop = void 0;\n var editPanelHeight = void 0;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent_1 = _this.parent.element;\n var toolbarAvail = !isNullOrUndefined(_this.parent.getToolbar());\n var tbHeight = toolbarAvail && _this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && _this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([_this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice && !isIDevice()) {\n addClass([_this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (_this.parent.iframeSettings.enable) {\n var cntEle = _this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!_this.parent.inlineMode.enable && !closest(target, 'table')) {\n _this.parent.disableToolbarItem(_this.parent.toolbarSettings.items);\n _this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([_this.element], document.body);\n _this.popupObj.position.X = x + 20;\n _this.popupObj.position.Y = y + ((_this.parent.iframeSettings.enable) ? 35 : 20);\n _this.popupObj.dataBind();\n _this.popupObj.element.classList.add('e-popup-open');\n _this.dropDownButtons.renderDropDowns({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n _this.colorPickerObj.renderColorPickerInput({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: _this.popupObj.element,\n popHeight: _this.popupObj.element.offsetHeight,\n popWidth: _this.popupObj.element.offsetWidth,\n parentElement: parent_1,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent_1.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n _this.setPosition(showPopupData);\n }\n if (!_this.parent.inlineMode.enable) {\n _this.checkCollision(showPopupData, 'parent', '');\n }\n _this.checkCollision(showPopupData, 'document', ((_this.parent.inlineMode.enable) ? 'inline' : ''));\n _this.popupObj.element.classList.remove('e-popup-open');\n removeClass([_this.element], [classes.CLS_HIDE]);\n _this.popupObj.show({ name: 'ZoomIn', duration: (Browser.isIE ? 250 : 400) });\n setStyleAttribute(_this.element, {\n maxWidth: _this.parent.element.offsetWidth + 'px'\n });\n addClass([_this.element], [classes.CLS_POP]);\n _this.isDOMElement = true;\n }\n });\n };\n /**\n * hidePopup method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice && !isIDevice()) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n var args = isBlazor() ? { element: this.popupObj.element } : this.popupObj;\n this.parent.trigger(events.quickToolbarClose, args);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n /**\n * addEventListener method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n if (e.newProp.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n else {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n break;\n }\n }\n }\n };\n /**\n * removeEventListener method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport { isBlazor } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n * @deprecated\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.quickToolbarOpen = function () {\n var args = isBlazor() ? { element: this.popupObj.element } : this.popupObj;\n this.parent.trigger(events.quickToolbarOpen, args);\n };\n /**\n * renderPopup method\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.quickToolbarOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass, isIDevice } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n /**\n * createQTBar method\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n if (this.parent.inlineMode.enable && this.parent.inlineMode.onSelection && isIDevice()) {\n EventHandler.add(this.contentRenderer.getDocument(), 'selectionchange', this.selectionChangeHandler, this);\n }\n };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.textQTBar || this.tableQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n this.tableQTBar = this.createQTBar('Table', 'MultiRow', this.parent.quickToolbarSettings.table, RenderType.TableToolbar);\n this.renderFactory.addRenderer(RenderType.TableToolbar, this.tableQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n if (this.parent.readonly) {\n return;\n }\n this.inlineQTBar.showPopup(x, y, target);\n };\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n /**\n * Method for hidding the quick toolbar\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close') && document.body.contains(this.linkQTBar.element)) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close') && document.body.contains(this.textQTBar.element)) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close') && document.body.contains(this.imageQTBar.element)) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close') && document.body.contains(this.tableQTBar.element)) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n var coordinates = void 0;\n coordinates = e.args.touches ? e.args.changedTouches[0] : e.args;\n var range = this.parent.getRange();\n var target = e.args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n if (isIDevice() && e.touchData && e.touchData.prevClientX !== e.touchData.clientX\n && e.touchData.prevClientY !== e.touchData.clientY) {\n return;\n }\n this.hideInlineQTBar();\n this.offsetX = coordinates.pageX;\n this.offsetY = pageYOffset(coordinates, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n var closestAnchor = closest(target, 'a');\n target = closestAnchor ? closestAnchor : target;\n if (target.tagName !== 'IMG' && target.tagName !== 'A' && (!closest(target, 'td,th') || !range.collapsed)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n }\n };\n QuickToolbar.prototype.selectionChangeHandler = function (e) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.onSelectionChange(e); }, 1000);\n };\n QuickToolbar.prototype.onSelectionChange = function (e) {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n return;\n }\n var selection = this.contentRenderer.getDocument().getSelection();\n if (!selection.isCollapsed) {\n this.mouseUpHandler({ args: e });\n }\n };\n /**\n * getInlineBaseToolbar method\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n if (isIDevice()) {\n EventHandler.remove(document, 'selectionchange', this.selectionChangeHandler);\n }\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n /**\n * addEventListener\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n this.parent.on(events.drop, this.renderQuickToolbars, this);\n this.wireInlineQTBarEvents();\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n /**\n * removeEventListener\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n this.unWireInlineQTBarEvents();\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.rtlMode, this.setRtl);\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.quickToolbarSettings)) {\n for (var _i = 0, _a = Object.keys(e.newProp.quickToolbarSettings); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'actionOnScroll':\n if (e.newProp.quickToolbarSettings.actionOnScroll === 'none') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n else {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n this.addEventListener();\n };\n /**\n * renderCount method\n * @hidden\n * @deprecated\n */\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.parent.editorMode === 'Markdown' ? this.editPanel.value.trim() :\n this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Count.prototype.destroy = function () {\n if (this.element && !isNullOrUndefined(this.parent.element.querySelector('.' + CLS_COUNT))) {\n detach(this.element);\n }\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n * @hidden\n * @deprecated\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n /**\n * markdown getLineNumber method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n /**\n * markdown getSelectedText method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n /**\n * markdown getAllParents method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n /**\n * markdown getSelectedLine method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n /**\n * markdown getLine method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n /**\n * markdown getSelectedParentPoints method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n /**\n * markdown setSelection method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n /**\n * markdown save method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n /**\n * markdown restore method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n /**\n * markdown isStartWith method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n /**\n * markdown replaceSpecialChar method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n /**\n * markdown isClear method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n /**\n * markdown getSelectedInlinePoints method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.onRefreshHandler);\n };\n MarkdownToolbarStatus.prototype.onRefreshHandler = function (args) {\n var parentsLines = this.selection.getSelectedParentPoints(this.element);\n this.toolbarStatus = {\n orderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'OL'),\n unorderedlist: args.documentNode ? false : this.isListsApplied(parentsLines, 'UL'),\n formats: this.currentFormat(parentsLines, args.documentNode),\n bold: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Bold'),\n italic: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('Italic'),\n inlinecode: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode'),\n strikethrough: args.documentNode ? false :\n this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('StrikeThrough'),\n subscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SubScript'),\n superscript: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('SuperScript'),\n uppercase: args.documentNode ? false : this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('UpperCase')\n };\n if (this.parent.formatter.editorManager.mdSelectionFormats.isAppliedCommand('InlineCode')) {\n this.toolbarStatus.formats = 'pre';\n }\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n if (type === 'OL') {\n for (var i = 0; i < lines.length; i++) {\n var lineSplit = lines[i].text.trim().split(' ', 2)[0] + ' ';\n if (!/^[\\d.]+[ ]+$/.test(lineSplit)) {\n isApply = false;\n break;\n }\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines, documentNode) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n if (this.codeFormat()) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n MarkdownToolbarStatus.prototype.codeFormat = function () {\n var isFormat = false;\n var textArea = this.parent.inputElement;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdPre = this.parent.formatter.formatTags.pre;\n var selectedText = this.getSelectedText(textArea);\n if (selectedText !== '' && selectedText === selectedText.toLocaleUpperCase()) {\n return true;\n }\n else if (selectedText === '') {\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toLocaleUpperCase() && afterText === afterText.toLocaleUpperCase()) {\n return true;\n }\n }\n if ((this.isCode(splitText[0], cmdPre) && this.isCode(splitText[1], cmdPre)) &&\n (splitText[0].match(this.multiCharRegx(cmdPre)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdPre)).length % 2 === 1)) {\n isFormat = true;\n }\n return isFormat;\n };\n MarkdownToolbarStatus.prototype.getSelectedText = function (textarea) {\n return textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);\n };\n MarkdownToolbarStatus.prototype.isCode = function (text, cmd) {\n return text.search('\\\\' + cmd + '') !== -1;\n };\n MarkdownToolbarStatus.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, { args: args });\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","import { extend, isNullOrUndefined, Browser, isBlazor } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n * @deprecated\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {IItemCollectionArgs} value\n * @hidden\n * @deprecated\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var _this = this;\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n var saveSelection;\n if (self.editorMode === 'HTML') {\n saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());\n }\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (isNullOrUndefined(args)) {\n var action_1 = event.action;\n if (action_1 !== 'tab' && action_1 !== 'enter' && action_1 !== 'space' && action_1 !== 'escape') {\n args = {};\n if (self.editorMode === 'Markdown' && action_1 === 'insert-table') {\n value = {\n 'headingText': self.localeObj.getConstant('TableHeadingText'),\n 'colText': self.localeObj.getConstant('TableColText')\n };\n }\n var items = {\n originalEvent: event, cancel: false,\n requestType: action_1 || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n if (isBlazor()) {\n delete args.item;\n delete args.itemCollection;\n }\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n if (action_1 === 'paste' || action_1 === 'cut' || action_1 === 'copy') {\n event.preventDefault();\n }\n }\n });\n }\n var isTableModule = isNullOrUndefined(self.tableModule) ? true : self.tableModule ?\n self.tableModule.ensureInsideTableList : false;\n if ((event.which === 9 && isTableModule) || event.which !== 9) {\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value\n });\n }\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value }, true);\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n if (_this.getUndoRedoStack().length === 0 && actionBeginArgs.item.command !== 'Links'\n && actionBeginArgs.item.command !== 'Images') {\n _this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n if (self.editorMode === 'HTML') {\n saveSelection.restore();\n }\n var command = actionBeginArgs.item.subCommand.toLocaleLowerCase();\n if (command === 'paste' || command === 'cut' || command === 'copy') {\n self.clipboardAction(command, event);\n }\n else {\n _this.editorManager.observer.notify(CONSTANT.checkUndo, { subCommand: actionBeginArgs.item.subCommand });\n _this.editorManager.execCommand(actionBeginArgs.item.command, actionBeginArgs.item.subCommand, event, _this.onSuccess.bind(_this, self), actionBeginArgs.item.value, actionBeginArgs.item.subCommand === 'Pre' && args.name === 'dropDownSelect' ?\n { name: args.name } : value, ('#' + self.getID() + ' iframe'));\n }\n }\n });\n }\n if (isNullOrUndefined(event) || event && event.action !== 'copy') {\n this.enableUndo(self);\n }\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n /**\n * onKeyHandler method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n _this.enableUndo(self);\n }\n });\n };\n /**\n * onSuccess method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.onSuccess = function (self, events) {\n if (isNullOrUndefined(events.event) || (events && events.event.action !== 'copy')) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n }\n self.trigger(CONSTANT.actionComplete, events, function (callbackArgs) {\n self.setPlaceHolder();\n if (callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = callbackArgs;\n if (callbackArgs.requestType === 'Links' && callbackArgs.event &&\n callbackArgs.event.type === 'keydown' &&\n callbackArgs.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: callbackArgs.requestType, isNotify: true,\n elements: args.elements\n });\n }\n self.autoResize();\n });\n };\n /**\n * Save the data for undo and redo action.\n * @hidden\n * @deprecated\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n /**\n * getUndoRedoStack method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n /**\n * enableUndo method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n self.trigger(CONSTANT.toolbarStatusUpdate, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n self.trigger(CONSTANT.toolbarStatusUpdate, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Common\n */\n/**\n * Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/**\n * Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/**\n * Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/**\n * Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/**\n * List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/**\n * Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/**\n * Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/**\n * Model changed plugin event trigger\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/**\n * Model changed event trigger\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n/**\n * PasteCleanup plugin for MSWord content\n * @hidden\n */\nexport var MS_WORD_CLEANUP_PLUGIN = 'ms_word_cleanup_plugin';\n/**\n * PasteCleanup for MSWord content\n * @hidden\n */\nexport var MS_WORD_CLEANUP = 'ms_word_cleanup';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var listFormat = this.olListType();\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line - 1 : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey))) {\n var prevLineSplit = prevLine.split('. ');\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n if (event.event.shiftKey && splitTab.length === 1) {\n break;\n }\n if (this.currentAction === 'OL' && /^\\d+$/.test(prevLineSplit[0].trim()) && listFormat) {\n event.event.preventDefault();\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n var curTabSpace = this.getTabSpace(parents[i].text);\n var prevTabSpace = this.getTabSpace(prevLine);\n var splitText = parents[i].text.split('. ');\n if (curTabSpace === prevTabSpace) {\n this.changeTextAreaValue(splitText, this.nextOrderedListValue(prevLineSplit[0].trim()), event, textArea, parents, i, end);\n }\n else if (prevTabSpace < curTabSpace) {\n this.changeTextAreaValue(splitText, '1. ', event, textArea, parents, i, end);\n }\n else {\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n var prevLineSplit_1 = prevLine.trim().split('. ');\n if (/^\\d+$/.test(prevLineSplit_1[0])) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n this.changeTextAreaValue(splitText, this.nextOrderedListValue(prevLineSplit_1[0]), event, textArea, parents, i, end);\n break;\n }\n }\n }\n }\n }\n else if (this.currentAction === 'UL' && regex.test(prevLine.trim()) || !listFormat) {\n event.event.preventDefault();\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n }\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.changeTextAreaValue = function (splitText, prefixValue, event, textArea, parents, k, end) {\n var prefix = prefixValue;\n splitText.splice(0, 1);\n var textAreaLength = this.selection.getAllParents(textArea.value).length;\n var changedList = '';\n var curTabSpace = this.getTabSpace(parents[k].text);\n var prefixNumber = parseInt(prefix.split('.')[0], null);\n var nestedTabSpace = this.getTabSpace(parents[k].text);\n var nestedlistorder = true;\n var nestedListStart = true;\n var curTabSpaceLength;\n var nextPrefixValue = -1;\n var traversIncreased = true;\n var nextLineLength = 0;\n var lineBreak = '';\n changedList = (this.selection.getLine(textArea, parents[0].line + 1) !== '') ?\n '' : changedList + textArea.value.substr(parents[0].end, textArea.value.length);\n for (var i = 1; i < textAreaLength &&\n !isNullOrUndefined(this.selection.getLine(textArea, parents[0].line + i))\n && this.selection.getLine(textArea, parents[0].line + i) !== ''; i++) {\n var nextLine = this.selection.getLine(textArea, parents[0].line + i);\n var nextTabSpace = this.getTabSpace(nextLine);\n var nextLineSplit = nextLine.split('. ');\n if (nextLineSplit.length === 1) {\n changedList += textArea.value.substr(parents[0].end + nextLineLength, textArea.value.length);\n break;\n }\n else {\n nextLineLength += nextLine.length;\n var shiftTabTargetList = false;\n curTabSpaceLength = event.event.shiftKey ? curTabSpace.length + 1 : curTabSpace.length - 1;\n if (nextTabSpace.length > nestedTabSpace.length) {\n traversIncreased = false;\n }\n if (curTabSpace.length !== nextTabSpace.length && nextTabSpace.length < nestedTabSpace.length) {\n nestedListStart = true;\n nestedlistorder = false;\n shiftTabTargetList = event.event.shiftKey &&\n curTabSpace.length === nextTabSpace.length ? (nestedListStart = false, true) : false;\n }\n else if (traversIncreased && event.event.shiftKey &&\n curTabSpace.length === nextTabSpace.length && nextTabSpace.length === nestedTabSpace.length) {\n nestedListStart = false;\n shiftTabTargetList = true;\n }\n lineBreak = changedList === '' ? '' : '\\n';\n if (curTabSpaceLength === nextTabSpace.length && nestedListStart) {\n var nextPrefix = event.event.shiftKey ?\n (nextPrefixValue++, this.nextOrderedListValue(nextPrefixValue.toString()))\n : this.previousOrderedListValue(nextLineSplit[0]);\n nextLineSplit.splice(0, 1);\n changedList = changedList + lineBreak + nextTabSpace + nextPrefix + nextLineSplit.join('. ');\n }\n else if (curTabSpace.length === nextTabSpace.length && nestedlistorder || shiftTabTargetList) {\n var nextPrefix = this.nextOrderedListValue(prefixNumber.toString());\n prefixNumber++;\n nextLineSplit.splice(0, 1);\n changedList = changedList + lineBreak + nextTabSpace + nextPrefix + nextLineSplit.join('. ');\n }\n else {\n changedList = changedList + lineBreak + nextLine;\n nestedListStart = false;\n }\n nestedTabSpace = this.getTabSpace(nextLine);\n }\n }\n parents[k].text = this.getTabSpace(parents[k].text) + prefix + splitText.join('. ') + '\\n';\n textArea.value = textArea.value.substr(0, parents[k].start) + parents[k].text + changedList;\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n var regexFirstCondition;\n if (prevLine) {\n this.currentAction = this.getAction(prevLine);\n var prevLineSplit = prevLine.split('. ');\n regexFirstCondition = this.currentAction === 'OL' ? /^\\d+$/.test(prevLineSplit[0].trim()) : regex.test(prevLine.trim());\n }\n if (prevLine && regexFirstCondition) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n var prevLineSplit = prevLine.trim().split('. ');\n var regexSecondCondition = this.currentAction === 'OL' ?\n /^\\d+$/.test(prevLineSplit[0]) : regex.test(prevLine.trim());\n if (regexSecondCondition) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.split('. ')[0];\n var currentState = /^\\d+$/.test(ol.trim());\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL).trim() + ')'))[1];\n return (currentState ? 'OL' : ul ? 'UL' : 'NOTLIST');\n };\n MDLists.prototype.nextOrderedListValue = function (previousLine) {\n var currentValue = parseInt(previousLine, null);\n var nextValue = currentValue + 1;\n return nextValue.toString() + '. ';\n };\n MDLists.prototype.previousOrderedListValue = function (previousLine) {\n var currentValue = parseInt(previousLine, null);\n var nextValue = currentValue - 1;\n return nextValue.toString() + '. ';\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var listFormat = this.olListType();\n var regex = this.getListRegex();\n var prevLineSplit = [];\n if (!isNullOrUndefined(prevLine)) {\n prevLineSplit = prevLine.split('. ');\n this.currentAction = this.getAction(prevLine);\n }\n var addedLength = 0;\n if (this.currentAction === 'OL' && prevLineSplit.length > 1 && /^\\d+$/.test(prevLineSplit[0].trim()) && listFormat\n && prevLineSplit[1] !== '') {\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.nextOrderedListValue(prevLineSplit[0]);\n parents[0].text = tabSpace + prefix + parents[0].text;\n var textAreaLength = this.selection.getAllParents(textArea.value).length;\n var changedList = '\\n';\n var curTabSpace = this.getTabSpace(prevLine);\n var nestedTabSpace = this.getTabSpace(parents[0].text);\n var nestedListOrder = true;\n for (var i = 1; i < textAreaLength &&\n textArea.value.substr(parents[0].end, textArea.value.length) !== ''; i++) {\n var nextLine = this.selection.getLine(textArea, parents[0].line + i);\n if (isNullOrUndefined(nextLine)) {\n changedList = changedList + '';\n }\n else {\n var nextLineSplit = nextLine.split('. ');\n var nextTabSpace = this.getTabSpace(nextLine);\n if (nextTabSpace.length < nestedTabSpace.length) {\n nestedListOrder = false;\n }\n if (nextLineSplit.length > 1 && /^\\d+$/.test(nextLineSplit[0].trim()) &&\n curTabSpace.length === nextTabSpace.length && nestedListOrder) {\n var nextPrefix = this.nextOrderedListValue(nextLineSplit[0]);\n nextLineSplit.splice(0, 1);\n changedList = changedList + nextTabSpace + nextPrefix + nextLineSplit.join('. ') + '\\n';\n }\n else {\n changedList = changedList + nextLine + '\\n';\n nestedTabSpace = this.getTabSpace(nextLine);\n }\n }\n }\n textArea.value = textArea.value.substr(0, parents[0].start) + curTabSpace +\n prefix + this.selection.getLine(textArea, parents[0].line) + changedList;\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n }\n else if (this.currentAction === 'UL' && regex.test(prevLine.trim()) &&\n prevLine.trim().replace(regex, '') !== '' || this.currentAction === 'OL' && !listFormat) {\n var tabSpace = this.getTabSpace(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text +\n (parents[0].text.trim().length > 0 ? '\\n' : '');\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.olListType = function () {\n var olSyntaxList = this.syntax.OL.split('.,');\n var listType = olSyntaxList.length === 1 ? null :\n parseInt(olSyntaxList[2].trim(), null) - parseInt(olSyntaxList[0].trim(), null);\n if (listType) {\n return 1;\n }\n else {\n return 0;\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var startLength = 0;\n var endLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var listFormat;\n var regex;\n listFormat = this.olListType();\n var perfixObj = {};\n for (var i = 0; i < parents.length; i++) {\n if (listFormat) {\n regex = this.currentAction === 'OL' ? i + listFormat + '. ' : this.syntax[this.currentAction];\n }\n else {\n regex = this.currentAction === 'OL' ? this.syntax.OL : this.syntax[this.currentAction];\n }\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var preLineTabSpaceLength = !isNullOrUndefined(parents[i - 1]) ?\n this.getTabSpace(parents[i - 1].text).length : 0;\n var replace = this.appliedLine(parents[i].text, regex, perfixObj, preLineTabSpaceLength);\n prefix = replace.line ? prefix : regex;\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n this.restore(textArea, start, end + addedLength, null);\n }\n else {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end + endLength, textArea.value.length);\n endLength -= regex.length;\n startLength = regex.length;\n this.restore(textArea, start - startLength, end + endLength, null);\n }\n }\n this.restore(textArea, null, null, e);\n };\n MDLists.prototype.appliedLine = function (line, prefixPattern, perfixObj, preTabSpaceLength) {\n var points = {};\n var regex = new RegExp('^[' + this.syntax.UL.trim() + ']');\n var lineSplit = line.split('. ');\n var currentPrefix = lineSplit[0] + '. ';\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim() || /^\\d+$/.test(lineSplit[0].trim());\n var listFormat = this.olListType();\n var curTabSpaceLength = this.getTabSpace(line).length;\n if (this.currentAction === 'OL' && listFormat) {\n perfixObj[curTabSpaceLength.toString()] = !isNullOrUndefined(perfixObj[curTabSpaceLength.toString()]) ?\n perfixObj[curTabSpaceLength.toString()].valueOf() + 1 : 1;\n prefixPattern = perfixObj[curTabSpaceLength.toString()].valueOf().toString() + '. ';\n if (!isNullOrUndefined(preTabSpaceLength) && preTabSpaceLength > curTabSpaceLength) {\n perfixObj[preTabSpaceLength.toString()] = 0;\n }\n }\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (regex.test(line.trim())) {\n pattern = this.syntax.UL;\n replace = prefixPattern;\n points.space = prefixPattern.trim().length - this.syntax.UL.trim().length;\n }\n else if (/^\\d+$/.test(lineSplit[0].trim()) && listFormat) {\n pattern = lineSplit[0].trim() + '. ';\n replace = prefixPattern;\n points.space = this.syntax.UL.trim().length - currentPrefix.trim().length;\n }\n else if (/^\\d+$/.test(lineSplit[0].trim())) {\n pattern = lineSplit[0].trim() + '. ';\n replace = this.syntax.UL;\n points.space = this.syntax.UL.trim().length - currentPrefix.trim().length;\n }\n points.line = line.replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n if (!isNullOrUndefined(start) && !isNullOrUndefined(start)) {\n this.selection.save(start, end);\n }\n if (!isNullOrUndefined(event)) {\n this.selection.restore(textArea);\n }\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","/**\n * Constant values for Markdown Parser\n */\n/**\n * List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/**\n * selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/**\n * Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/**\n * Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n/**\n * Table plugin events\n * @hidden\n */\nexport var MD_TABLE = 'insert-table';\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n * @deprecated\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (this.isAppliedFormat(parents) === e.subCommand) {\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n return;\n }\n }\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n if ((e.subCommand === 'pre' && parents.length !== 1) || e.subCommand !== 'pre') {\n this.cleanFormat(textArea, e.subCommand);\n }\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start = this.selection.selectionStart + this.syntax[command].length;\n end = this.selection.selectionEnd + this.syntax[command].length - 1;\n }\n else {\n var cmd = this.syntax[command];\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n var startNo = textArea.value.substr(0, textArea.selectionStart).lastIndexOf(cmd);\n var endNo = textArea.value.substr(textArea.selectionEnd, textArea.selectionEnd).indexOf(cmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), cmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), cmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n start = this.selection.selectionStart - cmd.length;\n end = this.selection.selectionEnd - cmd.length;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.replaceAt = function (input, search, replace, start, end) {\n return input.slice(0, start)\n + input.slice(start, end).replace(search, replace)\n + input.slice(end);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDFormats.prototype.isAppliedFormat = function (lines, documentNode) {\n var format = 'p';\n var configKey = Object.keys(this.syntax);\n var keys = Object.keys(this.syntax);\n var direction = this.parent.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.syntax[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.parent.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.syntax[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.syntax[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n * @deprecated\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n /**\n * markdown isAppliedCommand method\n * @hidden\n * @deprecated\n */\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var selectedText = this.parent.markdownSelection.getSelectedText(textArea);\n if (selectedText !== '' && selectedText === selectedText.toLocaleUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n else if (selectedText === '') {\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toLocaleUpperCase() && afterText === afterText.toLocaleUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sub>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\<sub>/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sup>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\<sup>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sub>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\<sub>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sup>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\<sup>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (this.isAppliedCommand(e.subCommand) && selection.text !== '') {\n var startCmd = this.syntax[e.subCommand];\n var endCmd = e.subCommand === 'SubScript' ? '</sub>' :\n e.subCommand === 'SuperScript' ? '</sup>' : this.syntax[e.subCommand];\n var startLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 : startCmd.length;\n var startNo = textArea.value.substr(0, selection.start).lastIndexOf(startCmd);\n var endNo = textArea.value.substr(selection.end, textArea.value.length).indexOf(endCmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), startCmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), endCmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n this.restore(textArea, start - startLength, end - startLength, e);\n return;\n }\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('</' + this.syntax[e.subCommand].substring(1, 5))))) {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n repEnd = textArea.value.substr(selection.end, this.syntax[e.subCommand].length + 1);\n }\n else {\n repEnd = textArea.value.substr(selection.end, this.syntax[e.subCommand].length);\n }\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), repStart, '', selection.start - this.syntax[e.subCommand].length, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), repEnd, '', 0, repEnd.length);\n textArea.value = repStartText + selection.text + repEndText;\n this.restore(textArea, start - addedLength, end - addedLength, e);\n }\n else {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n selection.text = this.syntax[e.subCommand] + selection.text\n + '</' + this.syntax[e.subCommand].substring(1, 5);\n }\n else if (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') {\n selection.text = (e.subCommand === 'UpperCase') ? selection.text.toUpperCase()\n : selection.text.toLowerCase();\n }\n else {\n selection.text = this.syntax[e.subCommand] + selection.text + this.syntax[e.subCommand];\n }\n textArea.value = textArea.value.substr(0, selection.start) + selection.text +\n textArea.value.substr(selection.end, textArea.value.length);\n this.restore(textArea, start + addedLength, end + addedLength, e);\n }\n }\n else if (e.subCommand !== 'UpperCase' && e.subCommand !== 'LowerCase') {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n selection.text = this.textReplace(selection.text, e.subCommand);\n selection.text = this.syntax[e.subCommand] + selection.text\n + '</' + this.syntax[e.subCommand].substring(1, 5);\n }\n else {\n selection.text = this.textReplace(selection.text, e.subCommand);\n selection.text = this.syntax[e.subCommand] + selection.text + this.syntax[e.subCommand];\n }\n textArea.value = textArea.value.substr(0, selection.start)\n + selection.text + textArea.value.substr(selection.end, textArea.value.length);\n addedLength = this.syntax[e.subCommand].length;\n if (selection.start === selection.end) {\n this.restore(textArea, start + addedLength, end + addedLength, e);\n }\n else {\n this.restore(textArea, start + addedLength, end - addedLength, e);\n }\n }\n else {\n this.restore(textArea, start, end, e);\n }\n this.parent.undoRedoManager.saveData();\n };\n MDSelectionFormats.prototype.replaceAt = function (input, search, replace, start, end) {\n return input.slice(0, start)\n + input.slice(start, end).replace(search, replace)\n + input.slice(end);\n };\n MDSelectionFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDSelectionFormats.prototype.textReplace = function (text, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'Bold':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n text = text.replace(regx, '');\n break;\n case 'Italic':\n if (!this.isBold(text, this.syntax[command].substr(0, 1))) {\n text = text.replace(regx, '');\n }\n else {\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n var repText = text;\n repText = repText.replace(regxB, '$%@').replace(regx, '');\n var regxTemp = new RegExp('\\\\$%@', 'g');\n text = repText.replace(regxTemp, this.syntax[command].substr(0, 1) + this.syntax[command].substr(0, 1));\n }\n break;\n case 'StrikeThrough':\n text = text.replace(regx, '');\n break;\n case 'InlineCode':\n text = text.replace(regx, '');\n break;\n case 'SubScript':\n text = text.replace(/<sub>/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(/<sup>/g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '<sub>',\n 'SuperScript': '<sup>',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- ',\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': 'tab',\n 'delete': '46'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var pasteCleanupGroupingTags = {\n 'b': ['strong'],\n 'strong': ['b'],\n 'i': ['emp', 'cite'],\n 'emp': ['i', 'cite'],\n 'cite': ['i', 'emp']\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var listConversionFilters = {\n 'first': 'MsoListParagraphCxSpFirst',\n 'middle': 'MsoListParagraphCxSpMiddle',\n 'last': 'MsoListParagraphCxSpLast'\n};\n/**\n * Dom-Node Grouping of self closing tags\n * @hidden\n */\nexport var selfClosingTags = [\n 'BR',\n 'IMG'\n];\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoCommands.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n this.parent.observer.off(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * onAction method\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '![' + text + '](' + e.item.url + ')' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar MDTable = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDTable(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDTable.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.MD_TABLE, this.createTable, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n MDTable.prototype.removeEventListener = function () {\n this.parent.observer.off(CONSTANT.MD_TABLE, this.createTable);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n /**\n * markdown destroy method\n * @hidden\n * @deprecated\n */\n MDTable.prototype.destroy = function () {\n this.removeEventListener();\n };\n MDTable.prototype.onKeyDown = function (e) {\n if (e.event.action === 'insert-table') {\n e.item = e.value;\n this.createTable(e);\n }\n };\n MDTable.prototype.createTable = function (e) {\n this.element = this.parent.element;\n var start = this.element.selectionStart;\n var end = this.element.selectionEnd;\n var textAreaInitial;\n textAreaInitial = this.element.value;\n this.locale = e;\n this.selection.save(start, end);\n this.restore(this.element.selectionStart, this.element.selectionEnd, null);\n this.insertTable(start, end, textAreaInitial, e);\n };\n MDTable.prototype.getTable = function () {\n var table = '';\n table += this.textNonEmpty();\n table += this.tableHeader(this.locale);\n table += this.tableCell(this.locale);\n return table;\n };\n MDTable.prototype.tableHeader = function (e) {\n var text = '';\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n if (i === 1) {\n text += e.item.headingText + ' ' + j + '|';\n }\n else {\n text += '---------|';\n }\n }\n text += this.insertLine();\n }\n return text;\n };\n MDTable.prototype.tableCell = function (e) {\n var text = '';\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n text += e.item.colText + ' ' + this.convertToLetters(i) + j + '|';\n }\n text += this.insertLine();\n }\n text += this.insertLine();\n return text;\n };\n MDTable.prototype.insertLine = function () {\n var dummyElement = document.createElement('div');\n dummyElement.innerHTML = '\\n';\n return dummyElement.textContent;\n };\n MDTable.prototype.insertTable = function (start, end, textAreaInitial, e) {\n var parentText = this.selection.getSelectedParentPoints(this.element);\n var lastLineSplit = parentText[parentText.length - 1].text.split(' ', 2);\n var syntaxArr = this.getFormatTag();\n var syntaxCount = 0;\n if (lastLineSplit.length < 2) {\n this.element.value = this.updateValue(this.getTable());\n this.makeSelection(textAreaInitial, start, end);\n }\n else {\n if (this.ensureFormatApply(parentText[parentText.length - 1].text)) {\n this.checkValid(start, end, this.getTable(), textAreaInitial, e, lastLineSplit, parentText, syntaxArr);\n }\n else {\n this.element.value = this.updateValue(this.getTable());\n this.makeSelection(textAreaInitial, start, end);\n }\n }\n this.restore(this.element.selectionStart, this.element.selectionEnd, e);\n };\n MDTable.prototype.makeSelection = function (textAreaInitial, start, end) {\n end = start + (textAreaInitial.length > 0 ? 12 : 10); //end is added 12 or 10 because to make the table heading selected\n start += textAreaInitial.length > 0 ? 3 : 1; // Start is added 3 or 1 because new lines are added when inserting table\n this.selection.setSelection(this.element, start, end);\n };\n MDTable.prototype.getFormatTag = function () {\n var syntaxFormatKey = Object.keys(this.syntaxTag.Formats);\n var syntaxListKey = Object.keys(this.syntaxTag.List);\n var syntaxArr = [];\n for (var i = 0; i < syntaxFormatKey.length; i++) {\n syntaxArr.push(this.syntaxTag.Formats[syntaxFormatKey[i]]);\n }\n for (var j = 0; j < syntaxListKey.length; j++) {\n syntaxArr.push(this.syntaxTag.List[syntaxListKey[j]]);\n }\n return syntaxArr;\n };\n MDTable.prototype.ensureFormatApply = function (line) {\n var formatTags = this.getFormatTag();\n var formatSplitZero = line.trim().split(' ', 2)[0] + ' ';\n for (var i = 0; i < formatTags.length; i++) {\n if (formatSplitZero === formatTags[i] || /^[\\d.]+[ ]+$/.test(formatSplitZero)) {\n return true;\n }\n }\n return false;\n };\n MDTable.prototype.ensureStartValid = function (firstLine, parentText) {\n var firstLineSplit = parentText[0].text.split(' ', 2);\n for (var i = firstLine + 1; i <= firstLine + firstLineSplit[0].length + 1; i++) {\n if (this.element.selectionStart === i || this.element.selectionEnd === i) {\n return false;\n }\n }\n return true;\n };\n MDTable.prototype.ensureEndValid = function (lastLine, formatSplitLength) {\n for (var i = lastLine + 1; i <= lastLine + formatSplitLength + 1; i++) {\n if (this.element.selectionEnd === i) {\n return false;\n }\n }\n return true;\n };\n MDTable.prototype.updateValueWithFormat = function (formatSplit, text) {\n var textApplyFormat = this.element.value.substring(this.element.selectionEnd, this.element.value.length);\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n return this.element.value.substr(0, this.element.selectionStart) + text;\n };\n MDTable.prototype.updateValue = function (text) {\n return this.element.value.substr(0, this.element.selectionStart) + text +\n this.element.value.substr(this.element.selectionEnd, this.element.value.length);\n };\n MDTable.prototype.checkValid = function (start, end, text, textAreaInitial, e, formatSplit, parentText, syntaxArr) {\n if (this.ensureStartValid(parentText[0].start, parentText) &&\n this.ensureEndValid(parentText[parentText.length - 1].start, formatSplit[0].length)) {\n if (start === parentText[0].start) {\n if (start !== end && end !== (parentText[parentText.length - 1].end - 1)) {\n this.element.value = this.updateValueWithFormat(formatSplit, text);\n }\n else {\n this.element.value = this.updateValue(text);\n }\n }\n else if (end === parentText[parentText.length - 1].end - 1) {\n this.element.value = this.updateValue(text);\n }\n else {\n this.element.value = this.updateValueWithFormat(formatSplit, text);\n }\n this.makeSelection(textAreaInitial, start, end);\n }\n };\n MDTable.prototype.convertToLetters = function (rowNumber) {\n var baseChar = ('A').charCodeAt(0);\n var letters = '';\n do {\n rowNumber -= 1;\n letters = String.fromCharCode(baseChar + (rowNumber % 26)) + letters;\n rowNumber = (rowNumber / 26) >> 0;\n } while (rowNumber > 0);\n return letters;\n };\n MDTable.prototype.textNonEmpty = function () {\n var emptyText = '';\n if (this.isCursorBased() || this.isSelectionBased()) {\n if (this.element.value.length > 0) {\n emptyText += this.insertLine();\n emptyText += this.insertLine(); // to append two new line when textarea having content. \n }\n }\n return emptyText;\n };\n MDTable.prototype.isCursorBased = function () {\n return this.element.selectionStart === this.element.selectionEnd;\n };\n MDTable.prototype.isSelectionBased = function () {\n return this.element.selectionStart !== this.element.selectionEnd;\n };\n MDTable.prototype.restore = function (start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(this.element);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(this.element),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDTable;\n}());\nexport { MDTable };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n * @deprecated\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '<sup>') {\n regExp = new RegExp('<sup>(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '<sub>') {\n regExp = new RegExp('<sub>(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '<sup>' || data[key] === '<sub>') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n return this.clearFormatLines(lines);\n };\n ClearFormat.prototype.clearFormatLines = function (lines) {\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n lines[len] = this.clearFormatLines([lines[len]]);\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport { MDTable } from './../plugin/table';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n * @deprecated\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n * @deprecated\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.tableObj = new MDTable({ parent: this, syntaxTag: ({ Formats: this.formatTags, List: this.listTags }) });\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n };\n MarkdownParser.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n /**\n * markdown execCommand method\n * @hidden\n * @deprecated\n */\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.MD_TABLE, { subCommand: value, item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n * @deprecated\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n * @hidden\n * @deprecated\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","/**\n * Markdown module is used to render Rich Text Editor as Markdown editor content\n * @hidden\n * @deprecated\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n }\n /**\n * The function is used to render Rich Text Editor content div\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { id: this.parent.getID() + '_view', className: 'e-rte-content' });\n this.editableElement = this.parent.createElement('textarea', {\n className: 'e-content',\n id: this.parent.getID() + '_editable-content'\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n };\n MarkdownEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n this.parent.contentModule.getEditPanel().setAttribute('readonly', 'readonly');\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n this.parent.contentModule.getEditPanel().removeAttribute('readonly');\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n case 'CreateTable':\n var tableConstant = {\n 'headingText': this.parent.localeObj.getConstant('TableHeadingText'),\n 'colText': this.parent.localeObj.getConstant('TableColText')\n };\n this.parent.formatter.process(this.parent, args, args.originalEvent, tableConstant);\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n this.parent.off(events.readOnlyMode, this.updateReadOnly);\n };\n MarkdownEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/**\n * Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\n/**\n * Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/**\n * Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/** Constant tag names\n * @hidden\n */\nexport var DEFAULT_TAG = 'p';\n/**\n * @hidden\n */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video'];\n/**\n * @hidden\n */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/**\n * @hidden\n */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/**\n * Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/**\n * Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/**\n * Insert Text plugin events\n * @hidden\n */\nexport var INSERT_TEXT_TYPE = 'insert-text-type';\n/**\n * Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n /**\n * get method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n /**\n * save method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n /**\n * getIndex method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n /**\n * getNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if (startNode === endNode && startNode.childNodes.length === 0) {\n return [startNode];\n }\n if (range.startOffset === range.endOffset && range.startOffset !== 0 && range.startContainer.nodeName === 'PRE') {\n return [startNode.nodeName === 'BR' || startNode.nodeName === '#text' ? startNode : startNode.childNodes[0]];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n /**\n * getParentNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n /**\n * getParentNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer &&\n range.startContainer.parentNode !== range.endContainer.parentNode)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n /**\n * getSelectionNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n /**\n * getSelectionNodeCollection along with BR node method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodeCollectionBr = function (range) {\n return this.getSelectionNodesBr(this.getNodeCollection(range));\n };\n /**\n * getParentNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx)))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * Get selection text nodes with br method.\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodesBr = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeName !== 'BR' &&\n (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx))))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getInsertNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n /**\n * getInsertNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getNodeArray method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node && node.childNodes[num[index]];\n }\n if (node && constant >= 0) {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n /**\n * restore method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n /**\n * setRange method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n /**\n * setSelectionText method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionContents method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionNode method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n /**\n * getSelectedNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n /**\n * Clear method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n /**\n * insertParentNode method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n /**\n * setCursorPoint method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","import * as CONSTANT from './../base/constant';\nimport { append, detach, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { selfClosingTags } from '../../common/config';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n * @hidden\n * @deprecated\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n * @deprecated\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n /**\n * contents method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n /**\n * isBlockNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n /**\n * isLink method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n /**\n * blockParentNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n /**\n * rawAttributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n /**\n * attributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '&quot;');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n /**\n * clearAttributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n /**\n * openTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n /**\n * closeTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.closeTagString = function (element) {\n return '</' + element.tagName.toLowerCase() + '>';\n };\n /**\n * createTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '</' + tagName.toLowerCase() + '>';\n };\n /**\n * isList method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n /**\n * isElement method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n /**\n * isEditable method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n /**\n * hasClass method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n /**\n * replaceWith method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n /**\n * parseHTMLFragment method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint:disable */\n var temp = createElement('template');\n temp.innerHTML = value;\n if (temp.content instanceof DocumentFragment) {\n return temp.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n /* tslint:enable */\n };\n /**\n * wrap method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n /**\n * insertAfter method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n /**\n * wrapInner method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n /**\n * unWrap method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n /**\n * getSelectedNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n /**\n * nodeFinds method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n /**\n * isEditorArea method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n /**\n * getRangePoint method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n /**\n * getPreviousNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousElementSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousElementSibling;\n }\n return element;\n };\n /**\n * encode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * saveMarker method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.saveMarker = function (save, action) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n var startTextNode;\n var endTextNode;\n if (start.textContent === '' && isNullOrUndefined(end) && action !== 'tab') {\n if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {\n start.innerHTML = '&#65279;&#65279;<br>';\n }\n else {\n start.innerHTML = '&#65279;&#65279;';\n }\n }\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '<span class=\"' + className + '\">' + textContent + '</span>';\n };\n /**\n * setMarker method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var start = (range.startContainer.childNodes[range.startOffset]\n || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && (node.tagName === 'BR' || node.tagName === 'IMG')))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && ((start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) ||\n start.tagName === 'IMG')) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.ensureSelfClosingTag(end, markerClassName.endSelection, range);\n }\n }\n else {\n this.ensureSelfClosingTag(start, markerClassName.startSelection, range);\n }\n };\n /**\n * ensureSelfClosingTag method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.ensureSelfClosingTag = function (start, className, range) {\n var isTable = false;\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.tagName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n if (start.tagName === 'IMG') {\n var parNode = document.createElement('p');\n start.parentElement.insertBefore(parNode, start);\n parNode.appendChild(start);\n start = parNode.children[0];\n }\n if (start.tagName === 'TABLE') {\n isTable = true;\n if (start.textContent === '') {\n var tdNode = start.querySelectorAll('td');\n start = tdNode[tdNode.length - 1];\n start = !isNullOrUndefined(start.childNodes[0]) ? start.childNodes[0] : start;\n }\n else {\n var lastNode = start.lastChild;\n while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&\n lastNode.nodeName !== 'BR') {\n lastNode = lastNode.lastChild;\n }\n start = lastNode;\n }\n }\n for (var i = 0; i < selfClosingTags.length; i++) {\n start = (start.tagName === selfClosingTags[i] && !isTable) ? start.parentNode : start;\n }\n if (start.nodeType === 3 && start.nodeName === '#text') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.nodeName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.endSelection, this.encode(start.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(start);\n }\n else {\n var marker = this.marker(className, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n /**\n * createTempNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '></' + CONSTANT.DEFAULT_TAG + '>';\n var node = element.parentNode;\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.tagName.toLocaleLowerCase()) >= 0) {\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n }\n }\n else if (((element.nodeType !== Node.TEXT_NODE &&\n (element.classList.contains(markerClassName.startSelection) ||\n element.classList.contains(markerClassName.endSelection))) ||\n textContent.replace(/\\n/g, '').replace(/(^ *)|( *$)/g, '').length > 0 ||\n textContent.length && textContent.indexOf('\\n') < 0)) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '></' + CONSTANT.DEFAULT_TAG + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n /**\n * getImageTagInSelection method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getImageTagInSelection = function () {\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n return selection.focusNode.querySelectorAll('img');\n }\n return null;\n };\n /**\n * blockNodes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {\n collectionNodes.push(tempNode);\n }\n else {\n collectionNodes.push(this.createTempNode(tempNode));\n }\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && node.nodeType !== 8 && (node.tagName === 'BR' || (node.nodeType === Node.TEXT_NODE &&\n node.textContent.trim() !== '') || (node.nodeType !== Node.TEXT_NODE &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)))) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && node.nextSibling.nodeType !== 8 &&\n (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n if (node.nodeName === 'IMG' && node.parentElement.contentEditable === 'true') {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0 &&\n (!isNullOrUndefined(parentNode.previousElementSibling) && parentNode.previousElementSibling.tagName !== 'IMG')) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n * @hidden\n * @deprecated\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n * @deprecated\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.testList = function (elem) {\n var olListRegex = [/^[\\d]+[.]+$/,\n /^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})[.]$/gi,\n /^[a-zA-Z][.]+$/];\n var elementStart = !isNullOrUndefined(elem) ? elem.innerText.trim().split('.')[0] + '.' : null;\n if (!isNullOrUndefined(elementStart)) {\n for (var i = 0; i < olListRegex.length; i++) {\n if (olListRegex[i].test(elementStart)) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.testCurrentList = function (range) {\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(range.startContainer.textContent.slice(0, range.startOffset))) {\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(range.startContainer.textContent.slice(0, range.startOffset))) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.spaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n var preElement = startNode.previousElementSibling;\n var nextElement = startNode.nextElementSibling;\n var preElemULStart = !isNullOrUndefined(preElement) ?\n preElement.innerText.trim().substring(0, 1) : null;\n var nextElemULStart = !isNullOrUndefined(nextElement) ?\n nextElement.innerText.trim().substring(0, 1) : null;\n var startElementOLTest = this.testCurrentList(range);\n var preElementOLTest = this.testList(preElement);\n var nextElementOLTest = this.testList(nextElement);\n if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {\n if (startElementOLTest) {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n }\n else if (range.startContainer.textContent.slice(0, range.startOffset) === '*') {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n }\n }\n };\n Lists.prototype.enterList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if (startNode === endNode && !isNullOrUndefined(closest(startNode, 'li')) &&\n startNode.textContent.trim() === '' && startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n };\n Lists.prototype.backspaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;\n endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;\n if (startNode === endNode && !isNullOrUndefined(closest(startNode, 'li')) &&\n startNode.textContent.trim() === '' && startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n if (startNode === endNode && startNode.textContent === '') {\n if (startNode.closest('ul') || startNode.closest('ol')) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.firstElementChild === startNode && (parentList.children[1].tagName === 'OL' ||\n parentList.children[1].tagName === 'UL')) {\n if (parentList.tagName === parentList.children[1].tagName) {\n while (parentList.children[1].lastChild) {\n this.parent.domNode.insertAfter(parentList.children[1].lastChild, parentList.children[1]);\n }\n detach(parentList.children[1]);\n }\n else {\n parentList.parentElement.insertBefore(parentList.children[1], parentList);\n }\n }\n }\n }\n else if (startNode.firstChild.nodeName === 'BR' && (startNode.childNodes[1].nodeName === 'UL' ||\n startNode.childNodes[1].nodeName === 'OL')) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.tagName === startNode.childNodes[1].nodeName) {\n while (startNode.childNodes[1].lastChild) {\n this.parent.domNode.insertAfter(startNode.children[1].lastChild, startNode);\n }\n detach(startNode.childNodes[1]);\n }\n else {\n parentList.parentElement.insertBefore(startNode.children[1], parentList);\n }\n }\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 13) {\n this.enterList(e);\n }\n if (e.event.which === 32) {\n this.spaceList(e);\n }\n if (e.event.which === 8) {\n this.backspaceList(e);\n }\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n }\n var blockNodes = void 0;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if ((startNode === endNode && (startNode.nodeName === 'BR' || startNode.nodeName === '#text') &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(startNode.parentNode.tagName.toLocaleLowerCase()) >= 0)) {\n return;\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n this.domNode.setMarker(this.saveSelection);\n }\n blockNodes = this.domNode.blockNodes();\n }\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n else if (blockNodes[i].tagName === 'LI' && blockNodes[i].childNodes[0].tagName !== 'P' &&\n (blockNodes[i].childNodes[0].tagName !== 'OL' &&\n blockNodes[i].childNodes[0].tagName !== 'UL')) {\n nodes.push(blockNodes[i]);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n if (e.event && e.event.shiftKey && e.event.key === 'Tab') {\n e.event.action = 'tab';\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection, e.event.action);\n this.saveSelection.restore();\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.noPreviousElement = function (elements) {\n var firstNode;\n var firstNodeOL;\n var siblingListOL = elements.querySelectorAll('ol, ul');\n var siblingListLI = elements\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNode = siblingListLI[0];\n }\n else {\n firstNodeOL = siblingListOL[0];\n }\n if (firstNode) {\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNode);\n setStyleAttribute(elements, { 'list-style-type': 'none' });\n setStyleAttribute(firstNode, { 'list-style-type': '' });\n h = nextSibling;\n }\n }\n else if (firstNodeOL) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNodeOL);\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n prepend([firstNodeOL], elements.parentNode);\n detach(elements);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], firstNodeOL.parentNode);\n append([firstNodeOL], nestedElementLI);\n }\n else {\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], elements.parentNode);\n var nestedElement = createElement(elements.parentNode.tagName);\n prepend([nestedElement], nestedElementLI);\n append([elements], nestedElement);\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var firstNode = void 0;\n var firstNodeLI = void 0;\n var siblingListOL = elements[i].querySelectorAll('ol, ul');\n var siblingListLI = elements[i]\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNodeLI = siblingListLI[0];\n }\n else {\n firstNode = siblingListOL[0];\n }\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else if (firstNodeLI) {\n if (prevSibling.tagName === 'LI') {\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNodeLI);\n setStyleAttribute(elements[i], { 'list-style-type': 'none' });\n setStyleAttribute(firstNodeLI, { 'list-style-type': '' });\n h = nextSibling;\n }\n append([firstNodeLI.parentNode], prevSibling);\n detach(elements[i]);\n }\n }\n else {\n if (prevSibling.tagName === 'LI') {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n else {\n var element = elements[i];\n isNested = true;\n this.noPreviousElement(element);\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName === 'TABLE') {\n listsNodes.splice(i, 1);\n }\n if (listsNodes[i].tagName !== 'LI' && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction, e.selector);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.applyLists = function (elements, type, selector) {\n var isReverse = true;\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n this.removeEmptyListElements();\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if ('LI' !== elements[i].tagName) {\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + '>';\n var closeTag = '</' + type + '>';\n var newTag = 'li' + elemAtt;\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, selector);\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.removeEmptyListElements = function () {\n var listElem = this.parent.editableElement.querySelectorAll('ol, ul');\n for (var i = 0; i < listElem.length; i++) {\n if (listElem[i].textContent.trim() === '') {\n detach(listElem[i]);\n }\n }\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\n }\n }\n var parentList = [];\n for (var k = 0; k < nodesTemp.length; k++) {\n var nodesTempListParent = nodesTemp[k].closest('LI');\n if (!isNOU(nodesTempListParent) && (nodesTemp.indexOf(nodesTempListParent.parentElement) < 0)) {\n if (nodesTempListParent.parentElement.innerText === nodesTemp[k].innerText) {\n parentList.push(nodesTempListParent.parentElement);\n }\n }\n }\n nodesTemp = parentList.concat(nodesTemp);\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '</' + tagName.toLowerCase() + '>';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousElementSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousElementSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.findUnSelected = function (temp, elements) {\n temp = temp.slice().reverse();\n if (temp.length > 0) {\n var rightIndent = [];\n var indentElements = [];\n var lastElement = elements[elements.length - 1];\n var lastElementChild = [];\n var childElements = [];\n lastElementChild = (lastElement.childNodes);\n for (var z = 0; z < lastElementChild.length; z++) {\n if (lastElementChild[z].tagName === 'OL' || lastElementChild[z].tagName === 'UL') {\n var childLI = lastElementChild[z]\n .querySelectorAll('li');\n if (childLI.length > 0) {\n for (var y = 0; y < childLI.length; y++) {\n childElements.push(childLI[y]);\n }\n }\n }\n }\n for (var i = 0; i < childElements.length; i++) {\n var count = 0;\n for (var j = 0; j < temp.length; j++) {\n if (!childElements[i].contains((temp[j]))) {\n count = count + 1;\n }\n }\n if (count === temp.length) {\n indentElements.push(childElements[i]);\n }\n }\n if (indentElements.length > 0) {\n for (var x = 0; x < indentElements.length; x++) {\n if (this.domNode.contents(indentElements[x])[0].nodeName !== 'OL' &&\n this.domNode.contents(indentElements[x])[0].nodeName !== 'UL') {\n rightIndent.push(indentElements[x]);\n }\n }\n }\n if (rightIndent.length > 0) {\n this.nestedList(rightIndent);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n var temp = [];\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n temp.push(elements[i]);\n elements.splice(i, 1);\n break;\n }\n }\n }\n this.findUnSelected(temp, elements);\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {\n detach(this.domNode.contents(element)[0]);\n }\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (temp.length === 0) {\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var child = firstNode\n .querySelectorAll('li');\n if (child) {\n var nestedElement = createElement(firstNode.tagName);\n append([nestedElement], firstNode.parentNode);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n append([nestedElementLI], nestedElement);\n append([firstNode], nestedElementLI);\n }\n }\n }\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapperclass = isNullOrUndefined(className) ? ' class=\"e-rte-wrap-inner\"' :\n ' class=\"' + className + ' e-rte-wrap-inner\"';\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +\n this.domNode.attributes(parentNode) + '></' + CONSTANT.DEFAULT_TAG + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<span class=\"e-rte-list-close-([a-z]*)\"><\\/span>/g;\n var openTag = /<span class=\"e-rte-list-open-([a-z]*)\"><\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '</$1>');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('<span class=\"e-rte-list-open-' + type.toLowerCase() + '\"></span>');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('<span class=\"e-rte-list-close-' + type.toLowerCase() + '\"></span>');\n };\n return Lists;\n}());\nexport { Lists };\n","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n /**\n * WrapBefore method\n * @hidden\n * @deprecated\n */\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n /**\n * Wrap method\n * @hidden\n * @deprecated\n */\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n /**\n * unwrap method\n * @hidden\n * @deprecated\n */\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n /**\n * AppendBefore method\n * @hidden\n * @deprecated\n */\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n * @deprecated\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n /**\n * GetSpliceNode method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n /**\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '&#65279;&#65279;';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '&#65279;&#65279;';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.isImgElm = function (fragment) {\n var result = true;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG') {\n var firstChild = fragment.childNodes[0];\n for (var i = 0; !isNOU(firstChild.childNodes) && i < firstChild.childNodes.length; i++) {\n if (firstChild.childNodes[i].nodeName === 'IMG') {\n result = false;\n }\n }\n }\n else {\n result = true;\n }\n return result;\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName === '#text' &&\n fragment.childNodes[0].textContent === '' || fragment.textContent === '') {\n len = -1;\n }\n else {\n len = fragment.childNodes.length - 1;\n }\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n /**\n * GetCursorRange method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n /**\n * GetCursorNode method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n /**\n * TrimLineBreak method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined as isNOU, detach, createElement, closest } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { markerClassName } from './dom-node';\nimport { NodeCutter } from './nodecutter';\n/**\n * Formats internal component\n * @hidden\n * @deprecated\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Formats.prototype.getParentNode = function (node) {\n for (; node.parentNode && node.parentNode !== this.parent.editableElement; null) {\n node = node.parentNode;\n }\n return node;\n };\n Formats.prototype.onKeyDown = function (e) {\n if (e.event.which === 13) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startCon = (range.startContainer.textContent.length === 0 || range.startContainer.nodeName === 'PRE')\n ? range.startContainer : range.startContainer.parentElement;\n var endCon = (range.endContainer.textContent.length === 0 || range.endContainer.nodeName === 'PRE')\n ? range.endContainer : range.endContainer.parentElement;\n var preElem = closest(startCon, 'pre');\n var endPreElem = closest(endCon, 'pre');\n var liParent = !isNOU(preElem) && !isNOU(preElem.parentElement) && preElem.parentElement.tagName === 'LI';\n if (liParent) {\n return;\n }\n if (((isNOU(preElem) && !isNOU(endPreElem)) || (!isNOU(preElem) && isNOU(endPreElem)))) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, endCon, 0);\n }\n if (e.event.which === 13 && !isNOU(preElem) && !isNOU(endPreElem)) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var lastEmpty = range.startContainer.childNodes[range.endOffset];\n var lastBeforeBr = range.startContainer.childNodes[range.endOffset - 1];\n var startParent = range.startContainer;\n if (!isNOU(lastEmpty) && !isNOU(lastBeforeBr) && isNOU(lastEmpty.nextSibling) &&\n lastEmpty.nodeName === 'BR' && lastBeforeBr.nodeName === 'BR') {\n this.paraFocus(range.startContainer);\n }\n else if ((startParent.textContent.charCodeAt(0) === 8203 &&\n startParent.textContent.length === 1) || startParent.textContent.length === 0) {\n //Double enter with any parent tag for the node\n while (startParent.parentElement.nodeName !== 'PRE' &&\n (startParent.textContent.length === 1 || startParent.textContent.length === 0)) {\n startParent = startParent.parentElement;\n }\n if (!isNOU(startParent.previousSibling) && startParent.previousSibling.nodeName === 'BR' &&\n isNOU(startParent.nextSibling)) {\n this.paraFocus(startParent.parentElement);\n }\n else {\n this.isNotEndCursor(preElem, range);\n }\n }\n else {\n //Cursor at start and middle\n this.isNotEndCursor(preElem, range);\n }\n }\n }\n };\n Formats.prototype.removeCodeContent = function (range) {\n var regEx = new RegExp(String.fromCharCode(65279), 'g');\n if (!isNOU(range.endContainer.textContent.match(regEx))) {\n var pointer = range.endContainer.textContent.charCodeAt(range.endOffset - 1) === 65279 ?\n range.endOffset - 2 : range.endOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n if (range.endContainer.textContent === '') {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer.parentElement, 0);\n }\n else {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer, pointer);\n }\n }\n };\n Formats.prototype.deleteContent = function (range) {\n if (range.startContainer !== range.endContainer || range.startOffset !== range.endOffset) {\n range.deleteContents();\n }\n };\n Formats.prototype.paraFocus = function (referNode) {\n var pTag = createElement('p');\n pTag.innerHTML = '<br>';\n this.parent.domNode.insertAfter(pTag, referNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n detach(referNode.lastChild);\n };\n Formats.prototype.isNotEndCursor = function (preElem, range) {\n var nodeCutter = new NodeCutter();\n var isEnd = range.startOffset === preElem.lastChild.textContent.length &&\n preElem.lastChild.textContent === range.startContainer.textContent;\n //Cursor at start point\n if (preElem.textContent.indexOf(range.startContainer.textContent) === 0 &&\n ((range.startOffset === 0 && range.endOffset === 0) || range.startContainer.nodeName === 'PRE')) {\n this.insertMarker(preElem, range);\n var brTag = createElement('br');\n preElem.childNodes[range.endOffset].parentElement.insertBefore(brTag, preElem.childNodes[range.endOffset]);\n }\n else {\n //Cursor at middle\n var cloneNode = nodeCutter.SplitNode(range, preElem, true);\n this.insertMarker(preElem, range);\n var previousSib = preElem.previousElementSibling;\n if (previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '<br>' + cloneNode.innerHTML);\n detach(preElem);\n }\n }\n //To place the cursor position \n this.setCursorPosition(isEnd, preElem);\n };\n Formats.prototype.setCursorPosition = function (isEnd, preElem) {\n var isEmpty = false;\n var markerElem = this.parent.editableElement.querySelector('.tempSpan');\n var mrkParentElem = markerElem.parentElement;\n markerElem.parentNode.textContent === '' ? isEmpty = true :\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n if (isEnd) {\n if (isEmpty) {\n //Enter press when pre element is empty\n if (mrkParentElem === preElem) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n else {\n this.focusSelectionParent(markerElem, mrkParentElem);\n }\n }\n else {\n var brElm = createElement('br');\n this.parent.domNode.insertAfter(brElm, markerElem);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n }\n else {\n isEmpty ? this.focusSelectionParent(markerElem, mrkParentElem) : detach(markerElem);\n }\n };\n Formats.prototype.focusSelectionParent = function (markerElem, tempSpanPElem) {\n detach(markerElem);\n tempSpanPElem.innerHTML = '\\u200B';\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, tempSpanPElem, 0);\n };\n Formats.prototype.insertMarker = function (preElem, range) {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n if (range.startContainer.nodeName === 'PRE') {\n preElem.childNodes[range.endOffset].parentElement.insertBefore(tempSpan, preElem.childNodes[range.endOffset]);\n }\n else {\n range.startContainer.parentElement.insertBefore(tempSpan, range.startContainer);\n }\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var isSelectAll = false;\n if (this.parent.editableElement === range.endContainer &&\n !isNOU(this.parent.editableElement.children[range.endOffset - 1]) &&\n this.parent.editableElement.children[range.endOffset - 1].tagName === 'TABLE') {\n isSelectAll = true;\n }\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var formatsNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ||\n parentNode.tagName === 'TABLE' ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&\n (e.subCommand.toLowerCase() !== 'pre' ||\n (!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||\n isNOU(parentNode.parentNode) ||\n (parentNode.tagName === 'LI' && e.subCommand.toLowerCase() !== 'pre') ||\n (parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?\n 'p' : e.subCommand;\n var replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\\s+</g, '><'));\n if (parentNode.tagName === 'LI') {\n parentNode.innerHTML = '';\n parentNode.insertAdjacentHTML('beforeend', replaceTag);\n }\n else {\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n }\n this.preFormatMerge();\n var startNode = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endNode = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (!isNOU(startNode) && !isNOU(endNode)) {\n startNode = startNode.lastChild;\n endNode = endNode.lastChild;\n }\n save = this.parent.domNode.saveMarker(save, null);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n if (isSelectAll) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startNode, endNode, 0, endNode.textContent.length);\n }\n else {\n save.restore();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.preFormatMerge = function () {\n var preNodes = this.parent.editableElement.querySelectorAll('PRE');\n if (!isNOU(preNodes)) {\n for (var i = 0; i < preNodes.length; i++) {\n var previousSib = preNodes[i].previousElementSibling;\n if (!isNOU(previousSib) && previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '<br>' + preNodes[i].innerHTML);\n detach(preNodes[i]);\n }\n }\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport * as CONSTANT from './../base/constant';\nimport { detach, Browser, isNullOrUndefined as isNOU, createElement } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\nimport { updateTextNode } from './../../common/util';\n/**\n * Insert a HTML Node or Text\n * @hidden\n * @deprecated\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = isExternal ? divNode : divNode.firstChild;\n }\n else {\n if (isExternal && !(!isNOU(insertNode) && !isNOU(insertNode.classList) &&\n insertNode.classList.contains('pasteContent'))) {\n var divNode = document.createElement('div');\n divNode.appendChild(insertNode);\n node = divNode;\n }\n else {\n node = insertNode;\n }\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCursor = range.startOffset === range.endOffset && range.startOffset === 0 &&\n range.startContainer === range.endContainer;\n var isCollapsed = range.collapsed;\n var nodes = this.getNodeCollection(range, nodeSelection);\n var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];\n if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&\n node.classList.contains('pasteContent'))) {\n this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode);\n return;\n }\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n var preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n if (insertNode.tagName === 'TABLE') {\n this.removeEmptyElements(editNode);\n }\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n if (nodes[index].nodeName === 'IMG') {\n continue;\n }\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n var previousNode = null;\n while (parentNode !== editNode && parentNode.firstChild &&\n (parentNode.textContent.trim() === '')) {\n var parentNode1 = parentNode.parentNode;\n previousNode = parentNode;\n parentNode = parentNode1;\n }\n if (previousNode !== null) {\n parentNode = previousNode;\n }\n if (parentNode.firstChild && (parentNode !== editNode ||\n (node.nodeName === 'TABLE' && isCursor && parentNode === range.startContainer &&\n parentNode === range.endContainer))) {\n if (parentNode.textContent.trim() === '' && parentNode !== editNode) {\n InsertMethods.AppendBefore(node, parentNode, false);\n detach(parentNode);\n }\n else {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.deleteContents();\n if (isCursor && range.startContainer.textContent === '') {\n range.startContainer.innerHTML = '';\n }\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(node);\n range.insertNode(frag);\n }\n else {\n range.insertNode(node);\n }\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode) {\n var isCursor = range.startOffset === range.endOffset &&\n range.startContainer === range.endContainer;\n if (isCursor && range.startContainer === editNode && editNode.textContent === '') {\n var currentBlockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n nodeSelection.setSelectionText(docElement, currentBlockNode, currentBlockNode, 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var lasNode;\n var sibNode;\n var isSingleNode;\n var preNode;\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n isSingleNode = true;\n }\n else {\n lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n isSingleNode = false;\n }\n }\n var containsBlockNode = false;\n this.removingComments(node);\n var allChildNodes = node.childNodes;\n for (var i = 0; i < allChildNodes.length; i++) {\n if (CONSTANT.BLOCK_TAGS.indexOf(allChildNodes[i].nodeName.toLocaleLowerCase()) >= 0) {\n containsBlockNode = true;\n break;\n }\n }\n var lastSelectionNode;\n var fragment = document.createDocumentFragment();\n if (!containsBlockNode) {\n if (!isCursor) {\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n if (isSingleNode) {\n preNode.parentNode.replaceChild(fragment, preNode);\n }\n else {\n range.deleteContents();\n detach(lasNode);\n !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);\n }\n }\n else {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n tempSpan.parentNode.replaceChild(fragment, tempSpan);\n }\n }\n else {\n this.insertTempNode(range, node, nodes, nodeCutter, editNode);\n var isFirstTextNode = true;\n var isPreviousInlineElem = void 0;\n var paraElm = void 0;\n var previousParent = void 0;\n range.deleteContents();\n while (node.firstChild) {\n if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {\n detach(node.firstChild);\n continue;\n }\n if (node.firstChild.nodeName === '#text' && isFirstTextNode ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {\n lastSelectionNode = node.firstChild;\n if (isNOU(node.previousElementSibling)) {\n var firstParaElm = createElement('p');\n node.parentElement.insertBefore(firstParaElm, node);\n }\n node.previousElementSibling.appendChild(node.firstChild);\n }\n else {\n lastSelectionNode = node.firstChild;\n if (node.firstChild.nodeName === '#text' ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n paraElm.appendChild(node.firstChild);\n fragment.appendChild(paraElm);\n }\n else {\n previousParent.appendChild(node.firstChild);\n fragment.appendChild(previousParent);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else {\n fragment.appendChild(node.firstChild);\n isPreviousInlineElem = false;\n }\n isFirstTextNode = false;\n }\n }\n node.parentNode.replaceChild(fragment, node);\n }\n if (lastSelectionNode.nodeName === '#text') {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n else {\n this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n };\n InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? lastSelectionNode.previousSibling : lastSelectionNode;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n lastSelectionNode = isNOU(lastSelectionNode) ? node : lastSelectionNode;\n if (lastSelectionNode.nodeName === 'IMG') {\n this.imageFocus(lastSelectionNode, nodeSelection, docElement);\n }\n else {\n nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, lastSelectionNode.textContent.length, lastSelectionNode.textContent.length);\n }\n this.removeEmptyElements(editNode);\n };\n InsertHtml.getNodeCollection = function (range, nodeSelection) {\n var nodes = [];\n if (range.startOffset === range.endOffset && range.startContainer === range.endContainer &&\n range.startContainer.nodeName === 'TD') {\n nodes.push(range.startContainer.childNodes[range.endOffset]);\n }\n else {\n nodes = nodeSelection.getInsertNodeCollection(range);\n }\n return nodes;\n };\n InsertHtml.insertTempNode = function (range, node, nodes, nodeCutter, editNode) {\n if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset - 1]) &&\n range.startContainer.childNodes[range.endOffset - 1].nodeName === 'TABLE') {\n if (isNOU(range.startContainer.childNodes[range.endOffset - 1].nextSibling)) {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset - 1].nextSibling);\n }\n }\n else if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset]) &&\n range.startContainer.childNodes[range.endOffset].nodeName === 'TABLE') {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset]);\n }\n else {\n var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n if (blockNode.nodeName === 'TD' || blockNode.nodeName === 'TH') {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n tempSpan.parentNode.replaceChild(node, tempSpan);\n }\n else {\n var splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n splitedElm.parentNode.replaceChild(node, splitedElm);\n }\n }\n };\n InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode.classList.add('lastNode');\n editNode.innerHTML = updateTextNode(editNode.innerHTML);\n lastSelectionNode = editNode.querySelector('.lastNode');\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n lastSelectionNode.classList.remove('lastNode');\n if (lastSelectionNode.classList.length === 0) {\n lastSelectionNode.removeAttribute('class');\n }\n };\n InsertHtml.imageFocus = function (node, nodeSelection, docElement) {\n var focusNode = document.createTextNode(' ');\n node.parentNode.insertBefore(focusNode, node.nextSibling);\n nodeSelection.setSelectionText(docElement, node.nextSibling, node.nextSibling, 0, 0);\n };\n InsertHtml.getImmediateBlockNode = function (node, editNode) {\n do {\n node = node.parentNode;\n } while (CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n InsertHtml.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(/<!--[\\s\\S]*?-->/g, '');\n elm.innerHTML = innerElement;\n };\n InsertHtml.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' && element.parentElement.contentEditable !== 'true') {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n InsertHtml.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD') {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n InsertHtml.closestEle = function (element, editNode) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (el.parentNode === editNode ||\n (!isNOU(el.parentNode.tagName) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(el.parentNode.tagName.toLocaleLowerCase()) !== -1)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n };\n /**\n * Insert method\n * @hidden\n * @deprecated\n */\n InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from '../../selection/selection';\nimport { NodeCutter } from './nodecutter';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.linkCommand, this);\n };\n LinkCommand.prototype.linkCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\n case 'createlink':\n case 'editlink':\n this.createLink(e);\n break;\n case 'openlink':\n this.openLink(e);\n break;\n case 'removelink':\n this.removeLink(e);\n break;\n }\n };\n LinkCommand.prototype.createLink = function (e) {\n var closestAnchor = (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) &&\n closest(e.item.selectParent[0], 'a');\n closestAnchor = !isNOU(closestAnchor) ? closestAnchor :\n (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) ? (e.item.selectParent[0]) : null;\n if (!isNOU(closestAnchor) && closestAnchor.tagName === 'A') {\n var anchorEle = closestAnchor;\n var linkText = '';\n if (!isNOU(e.item.url)) {\n anchorEle.setAttribute('href', e.item.url);\n }\n if (!isNOU(e.item.title)) {\n anchorEle.setAttribute('title', e.item.title);\n }\n if (!isNOU(e.item.text)) {\n linkText = anchorEle.innerText;\n anchorEle.innerText = e.item.text;\n }\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n else {\n anchorEle.removeAttribute('target');\n }\n if (linkText === e.item.text) {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n e.item.selection.restore();\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchorEle.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle.childNodes[0], anchorEle.childNodes[0], startIndex, anchorEle.childNodes[0].textContent.length);\n }\n }\n else {\n var domSelection = new NodeSelection();\n var range = domSelection.getRange(this.parent.currentDocument);\n var text = isNOU(e.item.text) ? true : e.item.text.replace(/ /g, '').localeCompare(range.toString()\n .replace(/\\n/g, ' ').replace(/ /g, '')) < 0;\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13) || e.item.action === 'Paste' || range.collapsed || text) {\n var anchor = this.createAchorNode(e);\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13)) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.text);\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchor.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], startIndex, anchor.childNodes[0].textContent.length);\n }\n }\n else {\n this.createLinkNode(e);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n ;\n LinkCommand.prototype.createLinkNode = function (e) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = domSelection.getRange(this.parent.currentDocument);\n var nodes = this.getSelectionNodes(domSelection.getNodeCollection(range));\n var save = domSelection.save(range, this.parent.currentDocument);\n var txtArray = [];\n var inlineNodes = [];\n var currentNode;\n var removeNodes = [];\n var anchorNodes = [];\n var finalinlineNodes = [];\n var cloneNode;\n for (var index = 0; index < nodes.length; index++) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n txtArray[index] = nodes[index];\n }\n for (var i = 0; i < txtArray.length; i++) {\n var check = true;\n currentNode = txtArray[i];\n while (check === true) {\n if (currentNode.parentElement.nodeName === 'A') {\n var anchorEle = currentNode.parentElement;\n currentNode.parentElement.parentElement.insertBefore(anchorEle.firstChild, anchorEle);\n currentNode.parentElement.removeChild(anchorEle);\n }\n if (this.isBlockNode(currentNode.parentElement) || txtArray.length === 0 || i === 0 || i === txtArray.length - 1) {\n inlineNodes[i] = currentNode;\n check = false;\n }\n else {\n currentNode = currentNode.parentElement;\n }\n }\n }\n for (var i = 0, j_1 = 0; i < inlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[j_1] = inlineNodes[i];\n }\n if (inlineNodes.length > 1 && i < inlineNodes.length - 1) {\n if ((inlineNodes[i].parentElement === inlineNodes[i + 1].parentElement) && (inlineNodes[i] === inlineNodes[i + 1])) {\n continue;\n }\n else {\n finalinlineNodes[j_1 + 1] = inlineNodes[i + 1];\n j_1++;\n }\n }\n }\n var j = 0;\n anchorNodes[j] = this.createAchorNode(e);\n for (var i = 0; i < finalinlineNodes.length; i++) {\n if (i === 0) {\n cloneNode = finalinlineNodes[i].cloneNode(true);\n anchorNodes[i].appendChild(cloneNode);\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n var cln = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cln);\n }\n else {\n j = j + 1;\n anchorNodes[j] = this.createAchorNode(e);\n cloneNode = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cloneNode);\n }\n }\n }\n this.parent.nodeSelection.setRange(document, save.range);\n for (var i = 0, j_2 = 0, k = 0; i <= finalinlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[i].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i].nextSibling);\n if (this.parent.domNode.blockNodes().length === 1) {\n this.parent.nodeSelection.setSelectionNode(this.parent.currentDocument, anchorNodes[j_2]);\n }\n removeNodes[k] = finalinlineNodes[i];\n k++;\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n else {\n j_2 = j_2 + 1;\n finalinlineNodes[i + 1].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i + 1]);\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n }\n }\n for (var i = 0; i < removeNodes.length; i++) {\n if (removeNodes[i].parentNode) {\n removeNodes[i].parentNode.removeChild(removeNodes[i]);\n }\n }\n };\n LinkCommand.prototype.createAchorNode = function (e) {\n var anchorEle = createElement('a', {\n className: 'e-rte-anchor',\n attrs: {\n href: e.item.url,\n title: isNOU(e.item.title) || e.item.title === '' ? e.item.url : e.item.title\n }\n });\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n return anchorEle;\n };\n LinkCommand.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n if (nodeCollection[index].nodeName !== 'IMG') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n }\n return nodeCollection.reverse();\n };\n LinkCommand.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ') + ' ';\n };\n LinkCommand.prototype.openLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n LinkCommand.prototype.removeLink = function (e) {\n var blockNodes = this.parent.domNode.blockNodes();\n if (blockNodes.length < 2) {\n this.parent.domNode.setMarker(e.item.selection);\n var closestAnchor = closest(e.item.selectParent[0], 'a');\n var selectParent = closestAnchor ? closestAnchor : e.item.selectParent[0];\n var parent_1 = selectParent.parentNode;\n var child = [];\n for (; selectParent.firstChild; null) {\n child.push(parent_1.insertBefore(selectParent.firstChild, selectParent));\n }\n parent_1.removeChild(selectParent);\n if (child && child.length === 1) {\n e.item.selection.startContainer = e.item.selection.getNodeArray(child[child.length - 1], true);\n e.item.selection.endContainer = e.item.selection.startContainer;\n }\n e.item.selection = this.parent.domNode.saveMarker(e.item.selection);\n }\n else {\n for (var i = 0; i < blockNodes.length; i++) {\n var linkNode = blockNodes[i].querySelectorAll('a');\n for (var j = 0; j < linkNode.length; j++) {\n if (document.getSelection().containsNode(linkNode[j], true)) {\n linkNode[j].outerHTML = linkNode[j].innerHTML;\n }\n }\n }\n }\n e.item.selection.restore();\n this.callBack(e);\n };\n LinkCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute, closest } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Formats internal component\n * @hidden\n * @deprecated\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.getTableNode = function (range) {\n var startNode = range.startContainer.nodeType === Node.ELEMENT_NODE ? range.startContainer : range.startContainer.parentNode;\n var cellNode = closest(startNode, 'td,th');\n return [cellNode];\n };\n Alignments.prototype.applyAlignment = function (e) {\n var isTableAlign = e.value === 'Table' ? true : false;\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n if (!isTableAlign) {\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n var imageTags = this.parent.domNode.getImageTagInSelection();\n for (var i = 0; i < imageTags.length; i++) {\n var elementNode = [];\n elementNode.push(imageTags[i]);\n this.parent.imgObj.imageCommand({\n item: {\n selectNode: elementNode\n },\n subCommand: e.subCommand,\n value: e.subCommand,\n callBack: e.callBack,\n selector: e.selector\n });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save.restore();\n }\n else {\n setStyleAttribute(this.getTableNode(range)[0], { 'text-align': this.alignments[e.subCommand] });\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: (isTableAlign ? this.getTableNode(range) : this.parent.domNode.blockNodes())\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Indents internal component\n * @hidden\n * @deprecated\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () { return; },\n stopPropagation: function () { return; },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var CLASS_IMAGE_RIGHT = 'e-imgright';\nexport var CLASS_IMAGE_LEFT = 'e-imgleft';\nexport var CLASS_IMAGE_CENTER = 'e-imgcenter';\nexport var CLASS_IMAGE_BREAK = 'e-imgbreak';\nexport var CLASS_CAPTION = 'e-img-caption';\nexport var CLASS_RTE_CAPTION = 'e-rte-img-caption';\nexport var CLASS_CAPTION_INLINE = 'e-caption-inline';\nexport var CLASS_IMAGE_INLINE = 'e-imginline';\n","import { createElement, isNullOrUndefined as isNOU, detach, closest, addClass, removeClass, select, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.imageCommand, this);\n };\n /**\n * imageCommand method\n * @hidden\n * @deprecated\n */\n ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\n case 'image':\n case 'replace':\n this.createImage(e);\n break;\n case 'insertlink':\n this.insertImageLink(e);\n break;\n case 'openimagelink':\n this.openImageLink(e);\n break;\n case 'editimagelink':\n this.editImageLink(e);\n break;\n case 'removeimagelink':\n this.removeImageLink(e);\n break;\n case 'remove':\n this.removeImage(e);\n break;\n case 'alttext':\n this.insertAltTextImage(e);\n break;\n case 'dimension':\n this.imageDimension(e);\n break;\n case 'caption':\n this.imageCaption(e);\n break;\n case 'justifyleft':\n this.imageJustifyLeft(e);\n break;\n case 'justifycenter':\n this.imageJustifyCenter(e);\n break;\n case 'justifyright':\n this.imageJustifyRight(e);\n break;\n case 'inline':\n this.imageInline(e);\n break;\n case 'break':\n this.imageBreak(e);\n break;\n }\n };\n ImageCommand.prototype.createImage = function (e) {\n e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;\n if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n this.setStyle(imgEle, e);\n }\n else {\n var imgElement = createElement('img');\n this.setStyle(imgElement, e);\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n if (!isNOU(e.selector) && e.selector === 'pasteCleanupModule') {\n e.callBack({ requestType: 'Image',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [imgElement]\n });\n }\n else {\n InsertHtml.Insert(this.parent.currentDocument, imgElement, this.parent.editableElement);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n e.callBack({\n requestType: 'Image',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n ImageCommand.prototype.setStyle = function (imgElement, e) {\n if (!isNOU(e.item.url)) {\n imgElement.setAttribute('src', e.item.url);\n }\n imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass));\n if (!isNOU(e.item.altText)) {\n imgElement.setAttribute('alt', e.item.altText);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.width)) {\n imgElement.setAttribute('width', this.calculateStyleValue(e.item.width.width));\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.height)) {\n imgElement.setAttribute('height', this.calculateStyleValue(e.item.height.height));\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.minWidth)) {\n imgElement.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.maxWidth)) {\n imgElement.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.minHeight)) {\n imgElement.style.minHeight = this.calculateStyleValue(e.item.height.minHeight);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.maxHeight)) {\n imgElement.style.maxHeight = this.calculateStyleValue(e.item.height.maxHeight);\n }\n };\n ImageCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n ImageCommand.prototype.insertImageLink = function (e) {\n var anchor = createElement('a', {\n attrs: {\n href: e.item.url\n }\n });\n if (e.item.selectNode[0].parentElement.classList.contains('e-img-wrap')) {\n e.item.selection.restore();\n anchor.setAttribute('contenteditable', 'true');\n }\n anchor.appendChild(e.item.selectNode[0]);\n if (!isNOU(e.item.target)) {\n anchor.setAttribute('target', e.item.target);\n }\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.openImageLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n ImageCommand.prototype.removeImageLink = function (e) {\n var selectParent = e.item.selectParent[0];\n if (selectParent.classList.contains('e-img-caption')) {\n var capImgWrap = select('.e-img-wrap', selectParent);\n var textEle = select('.e-img-inner', selectParent);\n var newTextEle = textEle.cloneNode(true);\n detach(select('a', selectParent));\n detach(textEle);\n capImgWrap.appendChild(e.item.insertElement);\n capImgWrap.appendChild(newTextEle);\n }\n else {\n detach(selectParent);\n if (Browser.isIE) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.editImageLink = function (e) {\n e.item.selectNode[0].parentElement.href = e.item.url;\n if (isNOU(e.item.target)) {\n e.item.selectNode[0].parentElement.removeAttribute('target');\n }\n else {\n e.item.selectNode[0].parentElement.target = e.item.target;\n }\n this.callBack(e);\n };\n ImageCommand.prototype.removeImage = function (e) {\n if (closest(e.item.selectNode[0], 'a')) {\n if (e.item.selectNode[0].parentElement.nodeName === 'A' && !isNOU(e.item.selectNode[0].parentElement.innerText)) {\n detach(e.item.selectNode[0]);\n }\n else {\n detach(closest(e.item.selectNode[0], 'a'));\n }\n }\n else if (!isNOU(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION))) {\n detach(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION));\n }\n else {\n detach(e.item.selectNode[0]);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.insertAltTextImage = function (e) {\n e.item.selectNode[0].setAttribute('alt', e.item.altText);\n this.callBack(e);\n };\n ImageCommand.prototype.imageDimension = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.style.height = '';\n selectNode.style.width = '';\n selectNode.width = e.item.width;\n selectNode.height = e.item.height;\n this.callBack(e);\n };\n ImageCommand.prototype.imageCaption = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyLeft = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_CENTER);\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageInline = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLASS_IMAGE_INLINE);\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageBreak = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLASS_IMAGE_BREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, closest, detach, Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n if (!isNOU(e.item.width.width)) {\n table.style.width = this.calculateStyleValue(e.item.width.width);\n }\n if (!isNOU(e.item.width.minWidth)) {\n table.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width.maxWidth)) {\n table.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n var tdWid = parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.row; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table, this.parent.editableElement);\n this.removeEmptyNode();\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n table.querySelector('td').classList.add('e-cell-select');\n if (e.callBack) {\n e.callBack({\n requestType: 'Table',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [table]\n });\n }\n return table;\n };\n TableCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n TableCommand.prototype.removeEmptyNode = function () {\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty');\n for (var i = 0; i < emptyLiChild.length; i++) {\n detach(emptyLiChild[i]);\n if (emptyLiChild.length === i + 1) {\n emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty');\n i = -1;\n }\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.insertRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n var curRow = closest(selectedCell, 'tr');\n var newRow;\n if (selectedCell.nodeName.toLowerCase() !== 'th') {\n newRow = closest(selectedCell, 'tr').cloneNode(true);\n var tabCell = Array.prototype.slice.call(newRow.querySelectorAll('td'));\n Array.prototype.forEach.call(tabCell, function (cell) {\n cell.innerHTML = '';\n cell.appendChild(createElement('br'));\n cell.removeAttribute('class');\n });\n }\n else {\n var childNodes = curRow.childNodes;\n newRow = createElement('tr');\n for (var i = 0; i < childNodes.length; i++) {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n }\n }\n (e.item.subCommand === 'InsertRowBefore') ?\n curRow.parentElement.insertBefore(newRow, curRow) : this.insertAfter(newRow, curRow);\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n selectedCell = (selectedCell.nodeName !== 'TD') ? closest(selectedCell, 'td,th') : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest((curRow), 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll('th,td')).indexOf(selectedCell);\n var width = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);\n for (var j = 0; j < closest(curRow, 'table').querySelectorAll('th,td').length; j++) {\n closest(curRow, 'table').querySelectorAll('th,td')[j].style.width = width + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll('th,td')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedCellIndex = selectedCell.cellIndex;\n var parentTable = closest(selectedCell, 'table');\n var curRow = closest(selectedCell, 'tr');\n var allRows = closest(curRow, 'table').rows;\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (var i = 0; i < allRows.length; i++) {\n allRows[i].deleteCell(selectedCellIndex);\n if (Browser.isIE) {\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n var sContainer = this.parent.nodeSelection.getRange(this.parent.currentDocument).startContainer;\n if (sContainer.nodeName !== 'TD') {\n var startChildLength = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var focusNode = sContainer.children[startChildLength];\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, focusNode, 0);\n }\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedRowIndex = selectedCell.parentNode.rowIndex;\n var parentTable = closest(selectedCell, 'table');\n if (parentTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n if (selectedCell.tagName === 'TH') {\n detach(parentTable.querySelector('thead'));\n }\n else {\n parentTable.deleteRow(selectedRowIndex);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var seletedTable = closest(selectedCell.parentElement, 'table');\n if (seletedTable) {\n e.item.selection.restore();\n detach(seletedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var headerExit = false;\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n [].slice.call(table.childNodes).forEach(function (el) {\n if (el.nodeName === 'THEAD') {\n headerExit = true;\n }\n });\n if (table && !headerExit) {\n var cellCount = table.querySelector('tr').childElementCount;\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var i = 0; i < cellCount; i++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return TableCommand;\n}());\nexport { TableCommand };\n","/**\n * Is formatted or not.\n * @hidden\n * @deprecated\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n /**\n * getFormattedNode method\n * @hidden\n * @deprecated\n */\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n /**\n * isBold method\n * @hidden\n * @deprecated\n */\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isItalic method\n * @hidden\n * @deprecated\n */\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isUnderline method\n * @hidden\n * @deprecated\n */\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isStrikethrough method\n * @hidden\n * @deprecated\n */\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSuperscript method\n * @hidden\n * @deprecated\n */\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSubscript method\n * @hidden\n * @deprecated\n */\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined as isNOU, Browser, closest, detach } from '@syncfusion/ej2-base';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n /**\n * applyFormat method\n * @hidden\n * @deprecated\n */\n SelectionCommands.applyFormat = function (docElement, format, endNode, value, selector) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n if (format === 'backgroundcolor' && value === '') {\n value = 'transparent';\n }\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeName.toLowerCase() !== 'td') {\n var cursorNode = this.insertCursorNode(docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection);\n }\n else {\n nodes[index] = this.insertFormat(docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n save.restore();\n }\n };\n SelectionCommands.insertCursorNode = function (docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var cursorFormat = (cursorNodes.length > 0) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n if (nodes[index].nodeName !== 'BR') {\n cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?\n nodeCutter.SplitNode(range, formatNode, true)\n : nodeCutter.GetSpliceNode(range, formatNode);\n }\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (nodes[index].nodeName !== 'BR') {\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '&#8203;';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '&#8203;';\n nodes[index] = lastNode.firstChild;\n }\n }\n var fontStyle;\n if (format === 'backgroundcolor') {\n fontStyle = formatNode.style.fontSize;\n }\n var bgStyle;\n if (format === 'fontsize') {\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n bgStyle = bg.style.backgroundColor;\n }\n }\n var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value));\n }\n var currentNodeElem = nodes[index].parentElement;\n if (!isNOU(fontStyle) && fontStyle !== '') {\n currentNodeElem.style.fontSize = fontStyle;\n }\n if (!isNOU(bgStyle) && bgStyle !== '') {\n currentNodeElem.style.backgroundColor = bgStyle;\n }\n if ((format === 'backgroundcolor' && !isNOU(fontStyle) && fontStyle !== '') &&\n currentNodeElem.parentElement.innerHTML === currentNodeElem.outerHTML) {\n var curParentElem = currentNodeElem.parentElement;\n curParentElem.parentElement.insertBefore(currentNodeElem, curParentElem);\n detach(curParentElem);\n }\n if (format === 'fontsize') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n liElement.style.fontSize = value;\n }\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n if (nodes[index].nodeName !== 'BR') {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n }\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n if (format === 'fontsize') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n liElement.style.fontSize = value;\n }\n nodes[index] = this.applyStyles(nodes, index, element);\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n nodes[index].parentElement.style.backgroundColor = bg.style.backgroundColor;\n }\n }\n else {\n nodes[index] = this.applyStyles(nodes, index, element);\n }\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(docElement, range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.applyStyles = function (nodes, index, element) {\n nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?\n InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (docElement, range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '&#8203;';\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(element);\n range.insertNode(frag);\n }\n else {\n range.insertNode(element);\n }\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '&#8203;';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n node.style.color = value;\n node.style.textDecoration = 'inherit';\n return node;\n case 'fontname':\n node = document.createElement('span');\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n node.style.backgroundColor = value;\n return node;\n }\n };\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n * @hidden\n * @deprecated\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value, e.selector);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n * @hidden\n * @deprecated\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true);\n if (e.subCommand === 'pasteCleanup') {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n elements: e.value\n });\n }\n else {\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n /**\n * clear method\n * @hidden\n * @deprecated\n */\n ClearFormat.clear = function (docElement, endNode, selector) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = nodeCutter.GetSpliceNode(range, nodes[0]);\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var i = 1;\n var lastText = nodes[nodes.length - i];\n while (nodes[nodes.length - i].nodeName === 'BR') {\n i++;\n lastText = nodes[nodes.length - i];\n }\n var lasNode = nodeCutter.GetSpliceNode(range, lastText);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n this.reSelection(docElement, save, exactNodes);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !((parentNodes[index1].nodeName.toLocaleLowerCase() === 'blockquote'\n || parentNodes[index1].nodeName.toLocaleLowerCase() === 'li')\n && this.IGNORE_PARENT_TAGS.indexOf(parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase()) > -1)\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() !== 'p') {\n var blockNodes = this.removeParent([childNodes[index2]]);\n this.unWrap(docElement, blockNodes, nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].parentNode.nodeName.toLocaleLowerCase() === childNodes[index2].nodeName.toLocaleLowerCase()) {\n InsertMethods.unwrap(childNodes[index2]);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(childNodes[index2], docElement.createElement('p'));\n InsertMethods.unwrap(childNodes[index2]);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot', 'tr'];\n ClearFormat.IGNORE_PARENT_TAGS = ['ul', 'ol', 'table'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr',\n 'th', 'tfoot', 'figcaption', 'li'];\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n * @hidden\n * @deprecated\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement, e.selector);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoManager.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * onAction method\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === changEle.text.trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import * as EVENTS from '../../common/constant';\nimport { createElement, isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';\n/**\n * PasteCleanup for MsWord content\n * @hidden\n * @deprecated\n */\nvar MsWordPaste = /** @class */ (function () {\n function MsWordPaste(parent) {\n this.olData = [\n 'decimal',\n 'lower-alpha',\n 'lower-roman',\n 'upper-alpha',\n 'upper-roman',\n 'lower-greek'\n ];\n this.ulData = [\n 'disc',\n 'square',\n 'circle',\n 'disc',\n 'square',\n 'circle'\n ];\n this.ignorableNodes = ['A', 'APPLET', 'B', 'BLOCKQUOTE', 'BR',\n 'BUTTON', 'CENTER', 'CODE', 'COL', 'COLGROUP', 'DD', 'DEL', 'DFN', 'DIR', 'DIV',\n 'DL', 'DT', 'EM', 'FIELDSET', 'FONT', 'FORM', 'FRAME', 'FRAMESET', 'H1', 'H2',\n 'H3', 'H4', 'H5', 'H6', 'HR', 'I', 'IMG', 'IFRAME', 'INPUT', 'INS', 'LABEL',\n 'LI', 'OL', 'OPTION', 'P', 'PARAM', 'PRE', 'Q', 'S', 'SELECT', 'SPAN', 'STRIKE',\n 'STRONG', 'SUB', 'SUP', 'TABLE', 'TBODY', 'TD', 'TEXTAREA', 'TFOOT', 'TH',\n 'THEAD', 'TITLE', 'TR', 'TT', 'U', 'UL'];\n this.blockNode = ['div', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'address', 'blockquote', 'button', 'center', 'dd', 'dir', 'dl', 'dt', 'fieldset',\n 'frameset', 'hr', 'iframe', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript',\n 'object', 'ol', 'pre', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul',\n 'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];\n this.removableElements = ['o:p', 'style'];\n this.listContents = [];\n this.parent = parent;\n this.addEventListener();\n }\n MsWordPaste.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.MS_WORD_CLEANUP_PLUGIN, this.wordCleanup, this);\n };\n MsWordPaste.prototype.wordCleanup = function (e) {\n var wordPasteStyleConfig = e.allowedStylePropertiesArray;\n var listNodes = [];\n var tempHTMLContent = e.args.clipboardData.getData('text/HTML');\n var rtfData = e.args.clipboardData.getData('text/rtf');\n var elm = createElement('p');\n elm.setAttribute('id', 'MSWord-Content');\n elm.innerHTML = tempHTMLContent;\n var patern = /class='?Mso|style='[^ ]*\\bmso-/i;\n var patern2 = /class=\"?Mso|style=\"[^ ]*\\bmso-/i;\n var patern3 = /(class=\"?Mso|class='?Mso|class=\"?Xl|class='?Xl|class=Xl|style=\"[^\"]*\\bmso-|style='[^']*\\bmso-|w:WordDocument)/gi;\n if (patern.test(tempHTMLContent) || patern2.test(tempHTMLContent) || patern3.test(tempHTMLContent)) {\n this.imageConversion(elm, rtfData);\n tempHTMLContent = tempHTMLContent.replace(/<img[^>]+>/i, '');\n listNodes = this.cleanUp(elm, listNodes);\n if (!isNOU(listNodes[0]) && listNodes[0].parentElement.tagName !== 'UL' &&\n listNodes[0].parentElement.tagName !== 'OL') {\n this.listConverter(listNodes);\n }\n this.styleCorrection(elm, wordPasteStyleConfig);\n this.removingComments(elm);\n this.removeUnwantedElements(elm);\n this.removeEmptyElements(elm);\n this.breakLineAddition(elm);\n this.removeClassName(elm);\n e.callBack(elm.innerHTML);\n }\n else {\n e.callBack(elm.innerHTML);\n }\n };\n MsWordPaste.prototype.imageConversion = function (elm, rtfData) {\n this.checkVShape(elm);\n var imgElem = elm.querySelectorAll('img');\n var imgSrc = [];\n var base64Src = [];\n var imgName = [];\n if (imgElem.length > 0) {\n for (var i = 0; i < imgElem.length; i++) {\n imgSrc.push(imgElem[i].getAttribute('src'));\n imgName.push(imgElem[i].getAttribute('src').split('/')[imgElem[i].getAttribute('src').split('/').length - 1].split('.')[0]);\n }\n var hexValue = this.hexConversion(rtfData);\n for (var i = 0; i < hexValue.length; i++) {\n base64Src.push(this.convertToBase64(hexValue[i]));\n }\n for (var i = 0; i < imgElem.length; i++) {\n imgElem[i].setAttribute('src', base64Src[i]);\n imgElem[i].setAttribute('id', 'msWordImg-' + imgName[i]);\n }\n }\n };\n MsWordPaste.prototype.checkVShape = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var i = 0; i < allNodes.length; i++) {\n switch (allNodes[i].nodeName) {\n case 'V:SHAPETYPE':\n detach(allNodes[i]);\n break;\n case 'V:SHAPE':\n if (allNodes[i].firstElementChild.nodeName === 'V:IMAGEDATA') {\n var src = allNodes[i].firstElementChild.getAttribute('src');\n var imgElement = createElement('img');\n imgElement.setAttribute('src', src);\n allNodes[i].parentElement.insertBefore(imgElement, allNodes[i]);\n detach(allNodes[i]);\n }\n break;\n }\n }\n };\n MsWordPaste.prototype.convertToBase64 = function (hexValue) {\n var base64;\n var byteArr = this.conHexStringToBytes(hexValue.hex);\n var base64String = this.conBytesToBase64(byteArr);\n base64 = hexValue.type ? 'data:' + hexValue.type + ';base64,' + base64String : null;\n return base64;\n };\n MsWordPaste.prototype.conBytesToBase64 = function (byteArr) {\n var base64Str = '';\n var base64Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var byteArrLen = byteArr.length;\n for (var i = 0; i < byteArrLen; i += 3) {\n var array3 = byteArr.slice(i, i + 3);\n var array3length = array3.length;\n var array4 = [];\n if (array3length < 3) {\n for (var j = array3length; j < 3; j++) {\n array3[j] = 0;\n }\n }\n array4[0] = (array3[0] & 0xFC) >> 2;\n array4[1] = ((array3[0] & 0x03) << 4) | (array3[1] >> 4);\n array4[2] = ((array3[1] & 0x0F) << 2) | ((array3[2] & 0xC0) >> 6);\n array4[3] = array3[2] & 0x3F;\n for (var j = 0; j < 4; j++) {\n if (j <= array3length) {\n base64Str += base64Char.charAt(array4[j]);\n }\n else {\n base64Str += '=';\n }\n }\n }\n return base64Str;\n };\n MsWordPaste.prototype.conHexStringToBytes = function (hex) {\n var byteArr = [];\n var byteArrLen = hex.length / 2;\n for (var i = 0; i < byteArrLen; i++) {\n byteArr.push(parseInt(hex.substr(i * 2, 2), 16));\n }\n return byteArr;\n };\n MsWordPaste.prototype.hexConversion = function (rtfData) {\n var picHead = /\\{\\\\pict[\\s\\S]+?\\\\bliptag\\-?\\d+(\\\\blipupi\\-?\\d+)?(\\{\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s\\}]*?/;\n var pic = new RegExp('(?:(' + picHead.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\n var fullImg = rtfData.match(pic);\n var imgType;\n var result = [];\n for (var i = 0; i < fullImg.length; i++) {\n if (picHead.test(fullImg[i])) {\n if (fullImg[i].indexOf('\\\\pngblip') !== -1) {\n imgType = 'image/png';\n }\n else if (fullImg[i].indexOf('\\\\jpegblip') !== -1) {\n imgType = 'image/jpeg';\n }\n else {\n continue;\n }\n result.push({\n hex: imgType ? fullImg[i].replace(picHead, '').replace(/[^\\da-fA-F]/g, '') : null,\n type: imgType\n });\n }\n }\n return result;\n };\n MsWordPaste.prototype.removeClassName = function (elm) {\n var elmWithClass = elm.querySelectorAll('*[class]');\n for (var i = 0; i < elmWithClass.length; i++) {\n elmWithClass[i].removeAttribute('class');\n }\n };\n MsWordPaste.prototype.breakLineAddition = function (elm) {\n var allElements = elm.querySelectorAll('*');\n for (var i = 0; i < allElements.length; i++) {\n if (allElements[i].children.length === 0 && allElements[i].innerHTML === '&nbsp;' &&\n (allElements[i].innerHTML === '&nbsp;' && !allElements[i].closest('li'))) {\n var detachableElement = this.findDetachElem(allElements[i]);\n var brElement = createElement('br');\n if (!isNOU(detachableElement.parentElement)) {\n detachableElement.parentElement.insertBefore(brElement, detachableElement);\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.findDetachElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement) &&\n element.parentElement.textContent.trim() === '' && element.parentElement.tagName !== 'TD') {\n removableElement = this.findDetachElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n return removableElement;\n };\n MsWordPaste.prototype.removeUnwantedElements = function (elm) {\n var innerElement = elm.innerHTML;\n for (var i = 0; i < this.removableElements.length; i++) {\n var regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');\n var regExpEndElem = new RegExp('</' + this.removableElements[i] + '>', 'g');\n innerElement = innerElement.replace(regExpStartElem, '');\n innerElement = innerElement.replace(regExpEndElem, '');\n }\n elm.innerHTML = innerElement;\n elm.querySelectorAll(':empty');\n };\n MsWordPaste.prototype.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' &&\n element.parentElement.getAttribute('id') !== 'MSWord-Content' &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n MsWordPaste.prototype.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD') {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.styleCorrection = function (elm, wordPasteStyleConfig) {\n var styleElement = elm.querySelectorAll('style');\n if (styleElement.length > 0) {\n var styles = styleElement[0].innerHTML.match(/[\\S ]+\\s+{[\\s\\S]+?}/gi);\n var styleClassObject_1 = !isNOU(styles) ? this.findStyleObject(styles) : null;\n var keys = Object.keys(styleClassObject_1);\n var values = keys.map(function (key) { return styleClassObject_1[key]; });\n values = this.removeUnwantedStyle(values, wordPasteStyleConfig);\n this.filterStyles(elm, wordPasteStyleConfig);\n var resultElem = void 0;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i].split('.')[0] === '') {\n resultElem = elm.getElementsByClassName(keys[i].split('.')[1]);\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') >= 0) {\n continue;\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') < 0) {\n resultElem = elm.getElementsByTagName(keys[i]);\n }\n else {\n resultElem = elm.querySelectorAll(keys[i]);\n }\n for (var j = 0; j < resultElem.length; j++) {\n var styleProperty = resultElem[j].getAttribute('style');\n if (!isNOU(styleProperty) && styleProperty.trim() !== '') {\n var valueSplit = values[i].split(';');\n for (var k = 0; k < valueSplit.length; k++) {\n if (styleProperty.indexOf(valueSplit[k].split(':')[0]) >= 0) {\n valueSplit.splice(k, 1);\n k--;\n }\n }\n values[i] = valueSplit.join(';') + ';';\n var changedValue = values[i] + styleProperty;\n resultElem[j].setAttribute('style', changedValue);\n }\n else {\n resultElem[j].setAttribute('style', values[i]);\n }\n }\n }\n }\n };\n MsWordPaste.prototype.filterStyles = function (elm, wordPasteStyleConfig) {\n var elmWithStyles = elm.querySelectorAll('*[style]');\n for (var i = 0; i < elmWithStyles.length; i++) {\n var elemStyleProperty = elmWithStyles[i].getAttribute('style').split(';');\n var styleValue = '';\n for (var j = 0; j < elemStyleProperty.length; j++) {\n if (wordPasteStyleConfig.indexOf(elemStyleProperty[j].split(':')[0].trim()) >= 0) {\n styleValue += elemStyleProperty[j] + ';';\n }\n }\n elmWithStyles[i].setAttribute('style', styleValue);\n }\n };\n MsWordPaste.prototype.removeUnwantedStyle = function (values, wordPasteStyleConfig) {\n for (var i = 0; i < values.length; i++) {\n var styleValues = values[i].split(';');\n values[i] = '';\n for (var j = 0; j < styleValues.length; j++) {\n if (wordPasteStyleConfig.indexOf(styleValues[j].split(':')[0]) >= 0) {\n values[i] += styleValues[j] + ';';\n }\n }\n }\n return values;\n };\n MsWordPaste.prototype.findStyleObject = function (styles) {\n var styleClassObject = {};\n for (var i = 0; i < styles.length; i++) {\n var tempStyle = styles[i];\n var classNameCollection = tempStyle.replace(/([\\S ]+\\s+){[\\s\\S]+?}/gi, '$1');\n var stylesCollection = tempStyle.replace(/[\\S ]+\\s+{([\\s\\S]+?)}/gi, '$1');\n classNameCollection = classNameCollection.replace(/^[\\s]|[\\s]$/gm, '');\n stylesCollection = stylesCollection.replace(/^[\\s]|[\\s]$/gm, '');\n classNameCollection = classNameCollection.replace(/\\n|\\r|\\n\\r/g, '');\n stylesCollection = stylesCollection.replace(/\\n|\\r|\\n\\r/g, '');\n for (var classNames = classNameCollection.split(', '), j = 0; j < classNames.length; j++) {\n styleClassObject[classNames[j]] = stylesCollection;\n }\n }\n return styleClassObject;\n };\n MsWordPaste.prototype.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(/<!--[\\s\\S]*?-->/g, '');\n elm.innerHTML = innerElement;\n };\n MsWordPaste.prototype.cleanUp = function (node, listNodes) {\n var temp = '';\n var tempCleaner = [];\n var prevflagState;\n var allNodes = node.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (this.ignorableNodes.indexOf(allNodes[index].nodeName) === -1 ||\n (allNodes[index].nodeType === 3 && allNodes[index].textContent.trim() === '')) {\n tempCleaner.push(allNodes[index]);\n continue;\n }\n else if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1) {\n listNodes.push(allNodes[index]);\n }\n if (prevflagState && (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) &&\n !(allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1)) {\n listNodes.push(null);\n }\n if (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) {\n if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1) {\n prevflagState = true;\n }\n else {\n prevflagState = false;\n }\n }\n }\n if (listNodes.length && (listNodes[listNodes.length - 1] !== null)) {\n listNodes.push(null);\n }\n return listNodes;\n };\n MsWordPaste.prototype.listConverter = function (listNodes) {\n var level;\n var data = [];\n var collection = [];\n var content = '';\n var stNode;\n for (var i = 0; i < listNodes.length; i++) {\n if (listNodes[i] === null) {\n data.push({ content: this.makeConversion(collection), node: listNodes[i - 1] });\n collection = [];\n continue;\n }\n content = listNodes[i].getAttribute('style');\n if (content && content.indexOf('level') !== -1) {\n level = parseInt(content.charAt(content.indexOf('level') + 5), null);\n }\n else {\n level = 1;\n }\n this.listContents = [];\n this.getListContent(listNodes[i]);\n var type = void 0;\n if (!isNOU(this.listContents[0])) {\n type = this.listContents[0].trim().length > 1 ? 'ol' : 'ul';\n var tempNode = [];\n for (var j = 1; j < this.listContents.length; j++) {\n tempNode.push(this.listContents[j]);\n }\n collection.push({ listType: type, content: tempNode, nestedLevel: level });\n }\n }\n stNode = listNodes.shift();\n while (stNode) {\n var elemColl = [];\n for (var temp1 = 0; temp1 < data.length; temp1++) {\n if (data[temp1].node === stNode) {\n for (var index = 0; index < data[temp1].content.childNodes.length; index++) {\n elemColl.push(data[temp1].content.childNodes[index]);\n }\n for (var index = 0; index < elemColl.length; index++) {\n stNode.parentElement.insertBefore(elemColl[index], stNode);\n }\n break;\n }\n }\n stNode.remove();\n stNode = listNodes.shift();\n if (!stNode) {\n stNode = listNodes.shift();\n }\n }\n };\n MsWordPaste.prototype.makeConversion = function (collection) {\n var root = createElement('div');\n var temp;\n var pLevel = 1;\n var prevList;\n var listCount = 0;\n var elem;\n for (var index = 0; index < collection.length; index++) {\n var pElement = createElement('p');\n pElement.innerHTML = collection[index].content.join(' ');\n if ((collection[index].nestedLevel === 1) && listCount === 0 && collection[index].content) {\n root.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else if (collection[index].nestedLevel === pLevel) {\n if (prevList.parentElement.tagName.toLowerCase() === collection[index].listType) {\n prevList.parentElement.appendChild(prevList = createElement('li'));\n prevList.appendChild(pElement);\n }\n else {\n temp = createElement(collection[index].listType);\n prevList.parentElement.parentElement.appendChild(temp);\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n }\n }\n else if (collection[index].nestedLevel > pLevel) {\n if (!isNOU(prevList)) {\n for (var j = 0; j < collection[index].nestedLevel - pLevel; j++) {\n prevList.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li', { styles: 'list-style-type: none;' });\n temp.appendChild(prevList);\n }\n prevList.appendChild(pElement);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n temp.childNodes[0].style.listStyle =\n this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n }\n else if (collection[index].nestedLevel === 1) {\n if (root.lastChild.tagName.toLowerCase() === collection[index].listType) {\n temp = root.lastChild;\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n }\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else {\n elem = prevList;\n while (elem.parentElement) {\n elem = elem.parentElement;\n if (elem.attributes.getNamedItem('level')) {\n if (parseInt(elem.attributes.getNamedItem('level').textContent, null) === collection[index].nestedLevel) {\n prevList = createElement('li');\n prevList.appendChild(pElement);\n elem.appendChild(prevList);\n break;\n }\n else if (collection[index].nestedLevel > parseInt(elem.attributes.getNamedItem('level').textContent, null)) {\n elem.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n break;\n }\n }\n continue;\n }\n }\n pLevel = collection[index].nestedLevel;\n listCount++;\n }\n return root;\n };\n MsWordPaste.prototype.getListStyle = function (listType, nestedLevel) {\n nestedLevel = (nestedLevel > 0) ? nestedLevel - 1 : nestedLevel;\n if (listType === 'ol') {\n return (nestedLevel < this.olData.length ? this.olData[nestedLevel] : this.olData[0]);\n }\n else {\n return (nestedLevel < this.ulData.length ? this.ulData[nestedLevel] : this.ulData[0]);\n }\n };\n MsWordPaste.prototype.getListContent = function (elem) {\n var pushContent = '';\n if (elem.firstElementChild.textContent.trim() === '' &&\n !isNOU(elem.firstElementChild.firstElementChild) &&\n elem.firstElementChild.firstElementChild.nodeName === 'IMG') {\n pushContent = elem.innerHTML.trim();\n this.listContents.push('');\n this.listContents.push(pushContent);\n }\n else {\n pushContent = elem.firstElementChild.textContent.trim();\n this.listContents.push(pushContent);\n }\n detach(elem.firstElementChild);\n this.listContents.push(elem.innerHTML);\n };\n return MsWordPaste;\n}());\nexport { MsWordPaste };\n","import * as CONSTANT from '../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Insert a Text Node or Text\n * @hidden\n * @deprecated\n */\nvar InsertTextExec = /** @class */ (function () {\n /**\n * Constructor for creating the InsertText plugin\n * @hidden\n * @deprecated\n */\n function InsertTextExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertTextExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERT_TEXT_TYPE, this.insertText, this);\n };\n InsertTextExec.prototype.insertText = function (e) {\n var node = document.createTextNode(e.value);\n InsertHtml.Insert(this.parent.currentDocument, node);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertTextExec;\n}());\nexport { InsertTextExec };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport { MsWordPaste } from '../plugin/ms-word-clean-up';\nimport * as EVENTS from './../../common/constant';\nimport { InsertTextExec } from '../plugin/insert-text';\n/**\n * EditorManager internal component\n * @hidden\n * @deprecated\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n * @deprecated\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.insertTextObj = new InsertTextExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.msWordPaste = new MsWordPaste(this);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n this.observer.on(EVENTS.MS_WORD_CLEANUP, this.onWordPaste, this);\n };\n EditorManager.prototype.onWordPaste = function (e) {\n this.observer.notify(EVENTS.MS_WORD_CLEANUP_PLUGIN, e);\n };\n EditorManager.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n /**\n * execCommand\n * @hidden\n * @deprecated\n */\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue, selector) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, exeValue: exeValue\n });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, {\n subCommand: value, event: event, callBack: callBack,\n selector: selector,\n value: exeValue\n });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { command: command, value: value, item: exeValue, event: event, callBack: callBack });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: value, item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.TABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text, selector: selector });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'inserttext':\n this.observer.notify(CONSTANT.INSERT_TEXT_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n * @hidden\n * @deprecated\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n * @hidden\n * @deprecated\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\n/**\n * Update Toolbar Status\n * @hidden\n * @deprecated\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false,\n insertcode: false\n};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n /**\n * get method\n * @hidden\n * @deprecated\n */\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n var nodesLength = nodes.length;\n for (var index = 0; index < nodes.length; index++) {\n if ((nodes[index].nodeName !== 'BR' && nodes[index].nodeType !== 3) ||\n (nodesLength > 1 && nodes[index].nodeType === 3 && nodes[index].textContent.trim() === '')) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.insertcode) || !formatCollection.insertcode) {\n nodeCollection.insertcode = formatCollection.insertcode;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node) ||\n (node.nodeType === 3 && targetNode.nodeType !== 3 && targetNode.contains(node.parentNode))) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n if (formatCollection.formats === 'pre') {\n formatCollection.insertcode = true;\n }\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n var pattern = new RegExp(name, 'i');\n if ((value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) ||\n (value.search(pattern) > -1)) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n if (this.parent.readonly) {\n return;\n }\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","import { getEditValue } from '../base/util';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render Rich Text Editor content div\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = getEditValue(rteObj.value, rteObj);\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().textContent;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ContentRender } from '../renderer/content-renderer';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getEditValue } from '../base/util';\n/* tslint:disable */\nvar 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 {border: 0;cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\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;margin: 5px auto;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));position: relativetext-align: center;vertical-align: bottom;}\\n .e-img-inner {box-sizing: border-box;display: block;font-size: 16px;font-weight: initial;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 {float: left;margin: 0 5px 0 0;text-align: left;}\\n .e-imgright {float: right;margin: 0 0 0 5px;text-align: right;}\\n .e-imgcenter {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 {display: inline-block;float: none;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));vertical-align: bottom;}\\n .e-imgbreak {border: 0;cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\n .e-rte-image.e-img-focus:not(.e-resize) {border: solid 2px #4a90e2;}\\n img::selection { background: transparent;color: transparent;}\\n span.e-rte-imageboxmark { width: 10px; height: 10px; position: absolute; display: block; 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; 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 { z-index: 1000; }\\n .e-img-caption .e-img-inner { outline: 0; }\\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;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: 1em;font-weight: 400;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;font-size: inherit;line-height: inherit;margin: 0 0 10px;overflow: visible;padding: 0;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; 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; 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; border-top: 6px solid transparent; content: ''; display: block; height: 0; position: absolute; right: 4px; top: 4px; width: 20px; }\\n .e-reicon::after { border-bottom: 6px solid transparent; border-left: 6px solid; border-top: 6px solid transparent; content: ''; display: block; 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 </style>\\n </head>\";\n/* tslint:enable */\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render Rich Text Editor iframe\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = getEditValue(rteObj.value, rteObj);\n var iFrameBodyContent = '<body spellcheck=\"false\" autocorrect=\"off\" contenteditable=\"true\">' +\n rteContent + '</body></html>';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.body.setAttribute('aria-owns', this.parent.getID());\n iframe.contentDocument.open();\n iFrameContent = this.setThemeColor(iFrameContent, { color: '#333' });\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n if (rteObj.enableRtl) {\n this.contentPanel.contentDocument.body.setAttribute('class', 'e-rtl');\n }\n };\n IframeContentRender.prototype.setThemeColor = function (content, styles) {\n var fontColor = getComputedStyle(this.parent.element, '.e-richtexteditor').getPropertyValue('color');\n return content.replace(styles.color, fontColor);\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.getEditPanel = function () {\n var editNode;\n if (!isNullOrUndefined(this.contentPanel.contentDocument)) {\n editNode = this.contentPanel.contentDocument.body;\n }\n else {\n editNode = this.parent.inputElement;\n }\n return editNode;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { detach } from '@syncfusion/ej2-base';\n/**\n * XhtmlValidation module called when set enableXhtml as true\n */\nvar XhtmlValidation = /** @class */ (function () {\n function XhtmlValidation(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n XhtmlValidation.prototype.addEventListener = function () {\n this.parent.on(events.xhtmlValidation, this.enableXhtmlValidation, this);\n };\n XhtmlValidation.prototype.enableXhtmlValidation = function () {\n if (this.parent.enableXhtml) {\n this.clean(this.parent.inputElement);\n this.AddRootElement();\n this.ImageTags();\n this.removeTags();\n this.RemoveUnsupported();\n this.parent.setProperties({ value: this.parent.inputElement.innerHTML }, true);\n }\n };\n XhtmlValidation.prototype.AddRootElement = function () {\n if ((this.parent.inputElement.childNodes.length === 1 && this.parent.inputElement.firstChild.nodeName !== 'DIV') ||\n this.parent.inputElement.childNodes.length > 1) {\n var parentEle = this.parent.createElement('div');\n while (this.parent.inputElement.childNodes.length > 0) {\n parentEle.appendChild(this.parent.inputElement.childNodes[0]);\n }\n this.parent.inputElement.appendChild(parentEle);\n }\n };\n ;\n XhtmlValidation.prototype.clean = function (node) {\n for (var n = 0; n < node.childNodes.length; n++) {\n var child = node.childNodes[n];\n if (child.nodeType === 8 || child.nodeName === 'V:IMAGE') {\n node.removeChild(child);\n n--;\n }\n else if (child.nodeType === 1) {\n this.clean(child);\n }\n }\n return this.parent.inputElement.innerHTML;\n };\n XhtmlValidation.prototype.ImageTags = function () {\n var imgNodes = this.parent.inputElement.querySelectorAll('IMG');\n for (var i = imgNodes.length - 1; i >= 0; i--) {\n if (!imgNodes[i].hasAttribute('alt')) {\n var img = imgNodes[i];\n img.setAttribute('alt', '');\n }\n }\n };\n ;\n XhtmlValidation.prototype.removeTags = function () {\n var removeAttribute = [['br', 'ul'], ['br', 'ol'], ['table', 'span'], ['div', 'span'], ['p', 'span']];\n for (var i = 0; i < removeAttribute.length; i++) {\n this.RemoveElementNode(removeAttribute[i][0], removeAttribute[i][1]);\n }\n };\n ;\n XhtmlValidation.prototype.RemoveElementNode = function (rmvNode, parentNode) {\n var parentArray = this.parent.inputElement.querySelectorAll(parentNode);\n for (var i = 0; i < parentArray.length; i++) {\n var rmvArray = parentArray[i].querySelectorAll(rmvNode);\n for (var j = rmvArray.length; j > 0; j--) {\n detach(rmvArray[j - 1]);\n }\n }\n };\n ;\n XhtmlValidation.prototype.RemoveUnsupported = function () {\n var underlineEle = this.parent.inputElement.querySelectorAll('u');\n for (var i = underlineEle.length - 1; i >= 0; i--) {\n var spanEle = this.parent.createElement('span');\n spanEle.style.textDecoration = 'underline';\n spanEle.innerHTML = underlineEle[i].innerHTML;\n underlineEle[i].parentNode.insertBefore(spanEle, underlineEle[i]);\n detach(underlineEle[i]);\n }\n var strongEle = this.parent.inputElement.querySelectorAll('strong');\n for (var i = strongEle.length - 1; i >= 0; i--) {\n var boldEle = this.parent.createElement('b');\n boldEle.innerHTML = strongEle[i].innerHTML;\n strongEle[i].parentNode.insertBefore(boldEle, strongEle[i]);\n detach(strongEle[i]);\n }\n var attrArray = ['language', 'role', 'target', 'contenteditable', 'cellspacing',\n 'cellpadding', 'border', 'valign', 'colspan'];\n for (var i = 0; i <= attrArray.length; i++) {\n this.RemoveAttributeByName(attrArray[i]);\n }\n };\n ;\n XhtmlValidation.prototype.RemoveAttributeByName = function (attrName) {\n if (this.parent.inputElement.firstChild !== null) {\n if (this.parent.inputElement.firstChild.nodeType !== 3) {\n for (var i = 0; i < this.parent.inputElement.childNodes.length; i++) {\n var ele = this.parent.inputElement.childNodes[i];\n if (ele.nodeType !== 3 && ele.nodeName !== 'TABLE' && ele.nodeName !== 'TBODY' && ele.nodeName !== 'THEAD' &&\n ele.nodeName !== 'TH' && ele.nodeName !== 'TR' && ele.nodeName !== 'TD') {\n if (ele.hasAttribute(attrName)) {\n ele.removeAttribute(attrName);\n }\n if (ele.hasChildNodes()) {\n for (var j = 0; j < ele.childNodes.length; j++) {\n var childEle = ele.childNodes[j];\n if (childEle.nodeType !== 3 && childEle.nodeName !== 'TABLE' && childEle.nodeName !== 'TBODY' &&\n childEle.nodeName !== 'THEAD' && childEle.nodeName !== 'TH' && childEle.nodeName !== 'TR' &&\n childEle.nodeName !== 'TD' && childEle.hasAttribute(attrName)) {\n childEle.removeAttribute(attrName);\n }\n if (childEle.hasChildNodes()) {\n for (var k = 0; k < childEle.childNodes.length; k++) {\n if (childEle.childNodes[k].nodeType !== 3 && childEle.childNodes[k].nodeName !== 'TABLE' &&\n childEle.childNodes[k].nodeName !== 'TBODY' && childEle.childNodes[k].nodeName !== 'THEAD' &&\n childEle.childNodes[k].nodeName !== 'TH' && childEle.childNodes[k].nodeName !== 'TR'\n && childEle.childNodes[k].nodeName !== 'TD'\n && childEle.childNodes[k].hasAttribute(attrName)) {\n childEle.childNodes[k].removeAttribute(attrName);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n ;\n return XhtmlValidation;\n}());\nexport { XhtmlValidation };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\nimport { getTextNodesUnder, sanitizeHelper } from '../base/util';\nimport { isIDevice } from '../../common/util';\nimport { XhtmlValidation } from './xhtml-validation';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.xhtmlValidation = new XhtmlValidation(parent);\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.sanitizeHelper = function (value) {\n value = sanitizeHelper(value, this.parent);\n return value;\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n this.parent.on(events.paste, this.onPaste, this);\n };\n HtmlEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'false' });\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'true' });\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || e.items) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || closest(parentNode[0], 'li') ||\n closest(parentNode[0], 'table')) && range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '&nbsp;&nbsp;&nbsp;&nbsp;');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\n }\n };\n HtmlEditor.prototype.onPaste = function (e) {\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (e.text.match(regex)) {\n e.args.preventDefault();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var saveSelection = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var httpRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)))/gi);\n var wwwRegex = new RegExp(/([^\\S]|^)(((www\\.))(\\S+))/gi);\n var enterSplitText = e.text.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += '<p><br></p>';\n }\n else {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText[i].split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? '&nbsp;' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n contentInnerElem += '<p>' + contentWithSpace.trim() + '</p>';\n }\n }\n var divElement = this.parent.createElement('div');\n divElement.innerHTML = contentInnerElem;\n var paraElem = divElement.querySelectorAll('p');\n for (var i = 0; i < paraElem.length; i++) {\n var splitTextContent = paraElem[i].innerHTML.split(' ');\n var resultSplitContent = '';\n for (var j = 0; j < splitTextContent.length; j++) {\n if (splitTextContent[j].match(httpRegex) || splitTextContent[j].match(wwwRegex)) {\n resultSplitContent += '<a className=\"e-rte-anchor\" href=\"' + splitTextContent[j] +\n '\" title=\"' + splitTextContent[j] + '\">' + splitTextContent[j] + ' </a>';\n }\n else {\n resultSplitContent += splitTextContent[j] + ' ';\n }\n }\n paraElem[i].innerHTML = resultSplitContent.trim();\n }\n if (!isNullOrUndefined(this.parent.pasteCleanupModule)) {\n e.callBack(divElement.innerHTML);\n }\n else {\n this.parent.executeCommand('insertHTML', divElement);\n }\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent.substr(0, range.endOffset);\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var urlTextRange = range.startOffset - (text.length - splitText[splitText.length - 1].length);\n urlText = urlText.slice(0, urlTextRange);\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var url = urlText.indexOf('http') > -1 ? urlText : 'http://' + urlText;\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: url,\n selection: selection, selectParent: selectParent,\n text: urlText,\n title: '',\n target: '_blank'\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n if (isIDevice() && item.command === 'Images') {\n this.nodeSelectionObj.restore();\n }\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'CreateTable':\n this.parent.notify(events.createTable, {\n member: 'table', args: args, selection: save\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n this.parent.off(events.readOnlyMode, this.updateReadOnly);\n this.parent.off(events.paste, this.onPaste);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n var formatterClass = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n this.parent.setProperties({ formatter: formatterClass }, true);\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.enableXhtml) {\n this.parent.notify(events.xhtmlValidation, {});\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n var nodes = getTextNodesUnder(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel());\n if (nodes.length > 0) {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), nodes[0], nodes[nodes.length - 1], 0, nodes[nodes.length - 1].textContent.length);\n }\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import * as events from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined as isNOU, isNullOrUndefined, detach, isBlazor, extend, addClass, getUniqueID } from '@syncfusion/ej2-base';\nimport { CLS_RTE_PASTE_KEEP_FORMAT, CLS_RTE_PASTE_REMOVE_FORMAT, CLS_RTE_PASTE_PLAIN_FORMAT } from '../base/classes';\nimport { CLS_RTE_PASTE_OK, CLS_RTE_PASTE_CANCEL, CLS_RTE_DIALOG_MIN_HEIGHT } from '../base/classes';\nimport { pasteCleanupGroupingTags } from '../../common/config';\nimport { NodeSelection } from '../../selection/selection';\nimport * as EVENTS from './../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { sanitizeHelper, convertToBlob } from '../base/util';\n/**\n * PasteCleanup module called when pasting content in RichTextEditor\n */\nvar PasteCleanup = /** @class */ (function () {\n function PasteCleanup(parent, serviceLocator) {\n this.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n this.blockNode = ['div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'address', 'blockquote', 'button', 'center', 'dd', 'dir', 'dl', 'dt', 'fieldset',\n 'frameset', 'hr', 'iframe', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript',\n 'object', 'ol', 'pre', 'td', 'tr', 'th', 'tbody', 'tfoot', 'thead', 'table', 'ul',\n 'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];\n this.isNotFromHtml = false;\n this.containsHtml = false;\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.i10n = serviceLocator.getService('rteLocale');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n PasteCleanup.prototype.addEventListener = function () {\n this.nodeSelectionObj = new NodeSelection();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.pasteClean, this.pasteClean, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n PasteCleanup.prototype.destroy = function () {\n this.removeEventListener();\n };\n PasteCleanup.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pasteClean, this.pasteClean);\n this.parent.off(events.destroy, this.destroy);\n };\n PasteCleanup.prototype.pasteClean = function (e) {\n var _this = this;\n var args = {\n requestType: 'Paste',\n editorMode: this.parent.editorMode,\n event: e\n };\n var value = null;\n var imageproperties;\n if (e.args && !isNOU(e.args.clipboardData)) {\n value = e.args.clipboardData.getData('text/html');\n }\n if (e.args && value !== null && this.parent.editorMode === 'HTML') {\n if (value.length === 0) {\n var htmlRegex = new RegExp(/<\\/[a-z][\\s\\S]*>/i);\n value = e.args.clipboardData.getData('text/plain');\n this.isNotFromHtml = value !== '' ? true : false;\n value = value.replace(/</g, '&lt;');\n value = value.replace(/>/g, '&gt;');\n this.containsHtml = htmlRegex.test(value);\n var file = e && e.args.clipboardData &&\n e.args.clipboardData.items.length > 0 ?\n e.args.clipboardData.items[0].getAsFile() : null;\n this.parent.notify(events.paste, {\n file: file,\n args: e.args,\n text: value,\n callBack: function (b) {\n imageproperties = b;\n if (typeof (imageproperties) === 'object') {\n _this.parent.formatter.editorManager.execCommand('Images', 'Image', e.args, _this.imageFormatting.bind(_this, args), 'pasteCleanup', imageproperties, 'pasteCleanupModule');\n }\n else {\n value = imageproperties;\n }\n }\n });\n if (!htmlRegex.test(value)) {\n var divElement = this.parent.createElement('div');\n divElement.innerHTML = this.splitBreakLine(value);\n value = divElement.innerHTML;\n }\n }\n else if (value.length > 0) {\n this.parent.formatter.editorManager.observer.notify(EVENTS.MS_WORD_CLEANUP, {\n args: e.args,\n text: e.text,\n allowedStylePropertiesArray: this.parent.pasteCleanupSettings.allowedStyleProps,\n callBack: function (a) {\n value = a;\n }\n });\n }\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n if (this.parent.pasteCleanupSettings.prompt) {\n e.args.preventDefault();\n var tempDivElem = this.parent.createElement('div');\n tempDivElem.innerHTML = value;\n if (tempDivElem.textContent !== '' || !isNOU(tempDivElem.querySelector('img')) ||\n !isNOU(tempDivElem.querySelector('table'))) {\n this.pasteDialog(value, args);\n }\n }\n else if (this.parent.pasteCleanupSettings.plainText) {\n e.args.preventDefault();\n this.plainFormatting(value, args);\n }\n else if (this.parent.pasteCleanupSettings.keepFormat) {\n e.args.preventDefault();\n this.formatting(value, false, args);\n }\n else {\n e.args.preventDefault();\n this.formatting(value, true, args);\n }\n }\n };\n PasteCleanup.prototype.splitBreakLine = function (value) {\n var enterSplitText = value.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += '<p><br></p>';\n }\n else {\n var contentWithSpace = this.makeSpace(enterSplitText[i]);\n contentInnerElem += '<p>' + contentWithSpace.trim() + '</p>';\n }\n }\n return contentInnerElem;\n };\n PasteCleanup.prototype.makeSpace = function (enterSplitText) {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText.split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? '&nbsp;' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n return contentWithSpace;\n };\n PasteCleanup.prototype.imgUploading = function (elm) {\n var allImgElm = elm.querySelectorAll('.pasteContent_Img');\n if (this.parent.insertImageSettings.saveUrl && allImgElm.length > 0) {\n var base64Src = [];\n var imgName = [];\n var uploadImg = [];\n for (var i = 0; i < allImgElm.length; i++) {\n if (allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {\n base64Src.push(allImgElm[i].getAttribute('src'));\n imgName.push(getUniqueID('rte_image'));\n uploadImg.push(allImgElm[i]);\n }\n }\n var fileList = [];\n for (var i = 0; i < base64Src.length; i++) {\n fileList.push(this.base64ToFile(base64Src[i], imgName[i]));\n }\n for (var i = 0; i < fileList.length; i++) {\n this.uploadMethod(fileList[i], uploadImg[i]);\n }\n if (isNOU(this.parent.insertImageSettings.path) &&\n this.parent.insertImageSettings.saveFormat === 'Blob') {\n this.getBlob(allImgElm);\n }\n }\n else if (this.parent.insertImageSettings.saveFormat === 'Blob') {\n this.getBlob(allImgElm);\n }\n var allImgElmId = elm.querySelectorAll('.pasteContent_Img');\n for (var i = 0; i < allImgElmId.length; i++) {\n allImgElmId[i].classList.remove('pasteContent_Img');\n if (allImgElmId[i].getAttribute('class').trim() === '') {\n allImgElm[i].removeAttribute('class');\n }\n }\n };\n PasteCleanup.prototype.getBlob = function (allImgElm) {\n for (var i = 0; i < allImgElm.length; i++) {\n if (!isNOU(allImgElm[i].getAttribute('src')) &&\n allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {\n var blopUrl = URL.createObjectURL(convertToBlob(allImgElm[i].getAttribute('src')));\n allImgElm[i].setAttribute('src', blopUrl);\n }\n }\n };\n PasteCleanup.prototype.uploadMethod = function (fileList, imgElem) {\n var _this = this;\n var uploadEle = document.createElement('div');\n document.body.appendChild(uploadEle);\n uploadEle.setAttribute('display', 'none');\n imgElem.style.opacity = '0.5';\n var popupEle = this.parent.createElement('div');\n this.parent.element.appendChild(popupEle);\n var contentEle = this.parent.createElement('input', {\n id: this.parent.element.id + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n var offsetY = this.parent.iframeSettings.enable ? -50 : -90;\n var popupObj = new Popup(popupEle, {\n relateTo: imgElem,\n height: '85px',\n width: '300px',\n offsetY: offsetY,\n content: contentEle,\n viewPortElement: this.parent.element,\n position: { X: 'center', Y: 'top' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n popupObj.destroy();\n detach(popupObj.element);\n }\n });\n popupObj.element.style.display = 'none';\n addClass([popupObj.element], [classes.CLS_POPUP_OPEN, classes.CLS_RTE_UPLOAD_POPUP]);\n var timeOut = fileList.size > 1000000 ? 300 : 100;\n setTimeout(function () { _this.refreshPopup(imgElem, popupObj); }, timeOut);\n var uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl\n },\n cssClass: classes.CLS_RTE_DIALOG_UPLOAD,\n dropArea: this.parent.inputElement,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n success: function (e) {\n setTimeout(function () { _this.popupClose(popupObj, uploadObj, imgElem, e); }, 900);\n },\n uploading: function (e) {\n _this.parent.trigger(events.imageUploading, e);\n _this.parent.inputElement.contentEditable = 'false';\n },\n failure: function (e) {\n setTimeout(function () { _this.uploadFailure(imgElem, uploadObj, popupObj, e); }, 900);\n },\n canceling: function () {\n _this.parent.inputElement.contentEditable = 'true';\n if (imgElem.nextSibling.textContent === ' ') {\n detach(imgElem.nextSibling);\n }\n detach(imgElem);\n popupObj.close();\n },\n selected: function (e) {\n e.cancel = true;\n },\n removing: function () {\n _this.parent.inputElement.contentEditable = 'true';\n if (imgElem.nextSibling.textContent === ' ') {\n detach(imgElem.nextSibling);\n }\n detach(imgElem);\n popupObj.close();\n }\n });\n uploadObj.appendTo(popupObj.element.childNodes[0]);\n /* tslint:disable */\n var fileData = [{\n name: fileList.name,\n rawFile: fileList,\n size: fileList.size,\n type: fileList.type,\n validationMessages: { minSize: \"\", maxSize: \"\" },\n statusCode: '1'\n }];\n uploadObj.createFileList(fileData);\n uploadObj.filesData.push(fileData[0]);\n /* tslint:enable */\n uploadObj.upload(fileData);\n popupObj.element.getElementsByClassName('e-file-select-wrap')[0].style.display = 'none';\n detach(popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap'));\n };\n PasteCleanup.prototype.uploadFailure = function (imgElem, uploadObj, popupObj, e) {\n this.parent.inputElement.contentEditable = 'true';\n detach(imgElem);\n if (popupObj) {\n popupObj.close();\n }\n this.parent.trigger(events.imageUploadFailed, e);\n uploadObj.destroy();\n };\n PasteCleanup.prototype.popupClose = function (popupObj, uploadObj, imgElem, e) {\n var _this = this;\n this.parent.inputElement.contentEditable = 'true';\n this.parent.trigger(events.imageUploadSuccess, e, function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n imgElem.src = url;\n imgElem.setAttribute('alt', e.file.name);\n }\n });\n popupObj.close();\n imgElem.style.opacity = '1';\n uploadObj.destroy();\n };\n PasteCleanup.prototype.refreshPopup = function (imageElement, popupObj) {\n var imgPosition = this.parent.iframeSettings.enable ? this.parent.element.offsetTop +\n imageElement.offsetTop : imageElement.offsetTop;\n var rtePosition = this.parent.element.offsetTop + this.parent.element.offsetHeight;\n if (imgPosition > rtePosition) {\n popupObj.relateTo = this.parent.inputElement;\n popupObj.offsetY = this.parent.iframeSettings.enable ? -30 : -65;\n popupObj.element.style.display = 'block';\n }\n else {\n if (popupObj) {\n popupObj.refreshPosition(imageElement);\n popupObj.element.style.display = 'block';\n }\n }\n };\n PasteCleanup.prototype.base64ToFile = function (base64, filename) {\n var baseStr = base64.split(',');\n var typeStr = baseStr[0].match(/:(.*?);/)[1];\n var extension = typeStr.split('/')[1];\n var decodeStr = atob(baseStr[1]);\n var strLen = decodeStr.length;\n var decodeArr = new Uint8Array(strLen);\n while (strLen--) {\n decodeArr[strLen] = decodeStr.charCodeAt(strLen);\n }\n return new File([decodeArr], filename + '.' + (!isNOU(extension) ? extension : ''), { type: extension });\n };\n /**\n * Method for image formatting when pasting\n * @hidden\n * @deprecated\n */\n PasteCleanup.prototype.imageFormatting = function (pasteArgs, imgElement) {\n var imageElement = this.parent.createElement('span');\n imageElement.appendChild(imgElement.elements[0]);\n var imageValue = imageElement.innerHTML;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n if (this.parent.pasteCleanupSettings.prompt) {\n this.pasteDialog(imageValue, pasteArgs);\n }\n else if (this.parent.pasteCleanupSettings.plainText) {\n this.plainFormatting(imageValue, pasteArgs);\n }\n else if (this.parent.pasteCleanupSettings.keepFormat) {\n this.formatting(imageValue, false, pasteArgs);\n }\n else {\n this.formatting(imageValue, true, pasteArgs);\n }\n };\n PasteCleanup.prototype.radioRender = function () {\n var keepRadioButton = new RadioButton({ label: this.i10n.getConstant('keepFormat'), name: 'pasteOption', checked: true });\n keepRadioButton.isStringTemplate = true;\n var keepFormatElement = this.parent.element.querySelector('#keepFormating');\n keepRadioButton.appendTo(keepFormatElement);\n var cleanRadioButton = new RadioButton({ label: this.i10n.getConstant('cleanFormat'), name: 'pasteOption' });\n cleanRadioButton.isStringTemplate = true;\n var cleanFormatElement = this.parent.element.querySelector('#cleanFormat');\n cleanRadioButton.appendTo(cleanFormatElement);\n var plainTextRadioButton = new RadioButton({ label: this.i10n.getConstant('plainText'), name: 'pasteOption' });\n plainTextRadioButton.isStringTemplate = true;\n var plainTextElement = this.parent.element.querySelector('#plainTextFormat');\n plainTextRadioButton.appendTo(plainTextElement);\n };\n PasteCleanup.prototype.selectFormatting = function (value, args, keepChecked, cleanChecked) {\n if (keepChecked) {\n this.formatting(value, false, args);\n }\n else if (cleanChecked) {\n this.formatting(value, true, args);\n }\n else {\n this.plainFormatting(value, args);\n }\n };\n PasteCleanup.prototype.pasteDialog = function (value, args) {\n var _this = this;\n var isHeight = false;\n var preRTEHeight = this.parent.height;\n var dialogModel = {\n buttons: [\n {\n click: function () {\n if (!dialog.isDestroyed) {\n var keepChecked = _this.parent.element.querySelector('#keepFormating').checked;\n var cleanChecked = _this.parent.element.querySelector('#cleanFormat').checked;\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var argument = isBlazor() ? null : dialog;\n _this.dialogRenderObj.close(argument);\n dialog.destroy();\n _this.selectFormatting(value, args, keepChecked, cleanChecked);\n }\n },\n buttonModel: {\n isPrimary: true,\n cssClass: 'e-flat ' + CLS_RTE_PASTE_OK,\n content: this.i10n.getConstant('pasteDialogOk')\n }\n },\n {\n click: function () {\n if (!dialog.isDestroyed) {\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var args_1 = isBlazor() ? null : dialog;\n _this.dialogRenderObj.close(args_1);\n dialog.destroy();\n }\n },\n buttonModel: {\n cssClass: 'e-flat ' + CLS_RTE_PASTE_CANCEL,\n content: this.i10n.getConstant('pasteDialogCancel')\n }\n }\n ],\n header: this.i10n.getConstant('pasteFormat'),\n content: this.i10n.getConstant('pasteFormatContent') + '<br/><div><div style=\"padding-top:24px;\">' +\n '<input type=\"radio\" class=\"' + CLS_RTE_PASTE_KEEP_FORMAT + '\" id=\"keepFormating\"/>' +\n '</div><div style=\"padding-top:20px;\"><input type=\"radio\" class=\"' + CLS_RTE_PASTE_REMOVE_FORMAT + '\" id=\"cleanFormat\"/></div>' +\n '<div style=\"padding-top:20px;\"><input type=\"radio\" class=\"' + CLS_RTE_PASTE_PLAIN_FORMAT + '\" id=\"plainTextFormat\"/></div></div>',\n target: this.parent.element,\n width: '300px',\n height: '265px',\n cssClass: CLS_RTE_DIALOG_MIN_HEIGHT,\n isModal: true\n };\n var dialog = this.dialogRenderObj.render(dialogModel);\n var rteDialogWrapper = this.parent.element.querySelector('#' + this.parent.getID()\n + '_pasteCleanupDialog');\n if (rteDialogWrapper !== null && rteDialogWrapper.innerHTML !== '') {\n this.destroyDialog(rteDialogWrapper);\n }\n if (rteDialogWrapper === null) {\n rteDialogWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_pasteCleanupDialog'\n });\n this.parent.element.appendChild(rteDialogWrapper);\n }\n dialog.appendTo(rteDialogWrapper);\n this.radioRender();\n if (this.parent.element.offsetHeight < parseInt(dialog.height.split('px')[0], null)) {\n this.parent.height = parseInt(dialog.height.split('px')[0], null) + 40;\n isHeight = true;\n }\n dialog.show();\n };\n PasteCleanup.prototype.destroyDialog = function (rteDialogWrapper) {\n var rteDialogContainer = this.parent.element.querySelector('.e-dlg-container');\n detach(rteDialogContainer);\n var rteDialogWrapperChildLength = rteDialogWrapper.children.length;\n for (var i = 0; i < rteDialogWrapperChildLength; i++) {\n detach(rteDialogWrapper.children[0]);\n }\n };\n PasteCleanup.prototype.formatting = function (value, clean, args) {\n var _this = this;\n var clipBoardElem = this.parent.createElement('div', { className: 'pasteContent', styles: 'display:inline;' });\n if (this.isNotFromHtml && this.containsHtml) {\n value = this.splitBreakLine(value);\n }\n clipBoardElem.innerHTML = value;\n if (this.parent.pasteCleanupSettings.deniedTags !== null) {\n clipBoardElem = this.deniedTags(clipBoardElem);\n }\n if (clean) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n else if (this.parent.pasteCleanupSettings.deniedAttrs !== null) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n if (this.parent.pasteCleanupSettings.allowedStyleProps !== null) {\n clipBoardElem = this.allowedStyle(clipBoardElem);\n }\n this.saveSelection.restore();\n clipBoardElem.innerHTML = this.sanitizeHelper(clipBoardElem.innerHTML);\n var allImg = clipBoardElem.querySelectorAll('img');\n for (var i = 0; i < allImg.length; i++) {\n allImg[i].classList.add('pasteContent_Img');\n }\n if (clipBoardElem.textContent !== '' || !isNOU(clipBoardElem.querySelector('img')) ||\n !isNOU(clipBoardElem.querySelector('table'))) {\n this.parent.formatter.editorManager.execCommand('inserthtml', 'pasteCleanup', args, function (returnArgs) {\n extend(args, { elements: [returnArgs.elements] }, true);\n _this.parent.formatter.onSuccess(_this.parent, args);\n }, clipBoardElem);\n this.parent.notify(events.toolbarRefresh, {});\n this.imgUploading(this.parent.inputElement);\n }\n };\n PasteCleanup.prototype.sanitizeHelper = function (value) {\n value = sanitizeHelper(value, this.parent);\n return value;\n };\n //Plain Formatting\n PasteCleanup.prototype.plainFormatting = function (value, args) {\n var _this = this;\n var clipBoardElem = this.parent.createElement('div', { className: 'pasteContent', styles: 'display:inline;' });\n clipBoardElem.innerHTML = value;\n this.detachInlineElements(clipBoardElem);\n this.getTextContent(clipBoardElem);\n if (clipBoardElem.textContent.trim() !== '') {\n if (!isNOU(clipBoardElem.firstElementChild) && clipBoardElem.firstElementChild.tagName !== 'BR') {\n var firstElm = clipBoardElem.firstElementChild;\n if (!isNOU(clipBoardElem.firstElementChild)) {\n var spanElm = this.parent.createElement('span');\n for (var i = 0, j = 0; i < firstElm.childNodes.length; i++, j++) {\n if (firstElm.childNodes[i].nodeName === '#text') {\n spanElm.appendChild(firstElm.childNodes[i]);\n clipBoardElem.insertBefore(spanElm, clipBoardElem.firstElementChild);\n i--;\n }\n else if (firstElm.childNodes[i].nodeName !== '#text' && j === 0) {\n for (var k = 0; k < firstElm.childNodes[i].childNodes.length; k++) {\n spanElm.appendChild(firstElm.childNodes[i].childNodes[k]);\n clipBoardElem.insertBefore(spanElm, clipBoardElem.firstElementChild);\n k--;\n }\n i--;\n }\n else {\n break;\n }\n }\n if (!firstElm.hasChildNodes()) {\n detach(firstElm);\n }\n }\n }\n this.removeEmptyElements(clipBoardElem);\n this.saveSelection.restore();\n clipBoardElem.innerHTML = this.sanitizeHelper(clipBoardElem.innerHTML);\n this.parent.formatter.editorManager.execCommand('inserthtml', 'pasteCleanup', args, function (returnArgs) {\n extend(args, { elements: [] }, true);\n _this.parent.formatter.onSuccess(_this.parent, args);\n }, clipBoardElem);\n }\n else {\n this.saveSelection.restore();\n extend(args, { elements: [] }, true);\n this.parent.formatter.onSuccess(this.parent, args);\n }\n };\n PasteCleanup.prototype.getTextContent = function (clipBoardElem) {\n for (var i = 0; i < this.blockNode.length; i++) {\n var inElem = clipBoardElem.querySelectorAll(this.blockNode[i]);\n for (var j = 0; j < inElem.length; j++) {\n var parElem = void 0;\n for (var k = 0, l = 0, preNode = void 0; k < inElem[j].childNodes.length; k++, l++) {\n if (inElem[j].childNodes[k].nodeName === 'DIV' || inElem[j].childNodes[k].nodeName === 'P' ||\n (inElem[j].childNodes[k].nodeName === '#text' && (inElem[j].childNodes[k].nodeValue.replace(/\\u00a0/g, '&nbsp;') !== '&nbsp;') &&\n inElem[j].childNodes[k].textContent.trim() === '')) {\n parElem = inElem[j].childNodes[k].parentElement;\n inElem[j].childNodes[k].parentElement.parentElement.insertBefore(inElem[j].childNodes[k], inElem[j].childNodes[k].parentElement);\n k--;\n }\n else {\n parElem = inElem[j].childNodes[k].parentElement;\n if (preNode === 'text') {\n var previousElem = parElem.previousElementSibling;\n previousElem.appendChild(inElem[j].childNodes[k]);\n }\n else {\n var divElement = this.parent.createElement('div', { id: 'newDiv' });\n divElement.appendChild(inElem[j].childNodes[k]);\n parElem.parentElement.insertBefore(divElement, parElem);\n }\n k--;\n preNode = 'text';\n }\n }\n if (!isNOU(parElem)) {\n detach(parElem);\n }\n }\n }\n var allElems = clipBoardElem.querySelectorAll('*');\n for (var i = 0; i < allElems.length; i++) {\n var allAtr = allElems[i].attributes;\n for (var j = 0; j < allAtr.length; j++) {\n allElems[i].removeAttribute(allAtr[j].name);\n j--;\n }\n }\n };\n PasteCleanup.prototype.detachInlineElements = function (clipBoardElem) {\n for (var i = 0; i < this.inlineNode.length; i++) {\n var inElem = clipBoardElem.querySelectorAll(this.inlineNode[i]);\n for (var j = 0; j < inElem.length; j++) {\n var parElem = void 0;\n for (var k = 0; k < inElem[j].childNodes.length; k++) {\n parElem = inElem[j].childNodes[k].parentElement;\n inElem[j].childNodes[k].parentElement.parentElement.insertBefore(inElem[j].childNodes[k], inElem[j].childNodes[k].parentElement);\n k--;\n }\n if (!isNOU(parElem)) {\n detach(parElem);\n }\n }\n }\n };\n PasteCleanup.prototype.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' &&\n element.parentElement.getAttribute('class') !== 'pasteContent') {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n PasteCleanup.prototype.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (emptyElements[i].tagName !== 'BR') {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n //GroupingTags\n PasteCleanup.prototype.tagGrouping = function (deniedTags) {\n var groupingTags = deniedTags.slice();\n var keys = Object.keys(pasteCleanupGroupingTags);\n var values = keys.map(function (key) { return pasteCleanupGroupingTags[key]; });\n var addTags = [];\n for (var i = 0; i < groupingTags.length; i++) {\n //The value split using '[' because to reterive the tag name from the user given format which may contain tag with attributes\n if (groupingTags[i].split('[').length > 1) {\n groupingTags[i] = groupingTags[i].split('[')[0].trim();\n }\n if (keys.indexOf(groupingTags[i]) > -1) {\n for (var j = 0; j < values[keys.indexOf(groupingTags[i])].length; j++) {\n if (groupingTags.indexOf(values[keys.indexOf(groupingTags[i])][j]) < 0 &&\n addTags.indexOf(values[keys.indexOf(groupingTags[i])][j]) < 0) {\n addTags.push(values[keys.indexOf(groupingTags[i])][j]);\n }\n }\n }\n }\n return deniedTags = deniedTags.concat(addTags);\n };\n //Filter Attributes in Denied Tags\n PasteCleanup.prototype.attributesfilter = function (deniedTags) {\n for (var i = 0; i < deniedTags.length; i++) {\n if (deniedTags[i].split('[').length > 1) {\n var userAttributes = deniedTags[i].split('[')[1].split(']')[0].split(',');\n var allowedAttributeArray = [];\n var deniedAttributeArray = [];\n for (var j = 0; j < userAttributes.length; j++) {\n userAttributes[j].indexOf('!') < 0 ? allowedAttributeArray.push(userAttributes[j].trim())\n : deniedAttributeArray.push(userAttributes[j].split('!')[1].trim());\n }\n var allowedAttribute = allowedAttributeArray.length > 1 ?\n (allowedAttributeArray.join('][')) : (allowedAttributeArray.join());\n var deniedAttribute = deniedAttributeArray.length > 1 ? deniedAttributeArray.join('][') : (deniedAttributeArray.join());\n if (deniedAttribute.length > 0) {\n var select = allowedAttribute !== '' ? deniedTags[i].split('[')[0] +\n '[' + allowedAttribute + ']' : deniedTags[i].split('[')[0];\n deniedTags[i] = select + ':not([' + deniedAttribute + '])';\n }\n else {\n deniedTags[i] = deniedTags[i].split('[')[0] + '[' + allowedAttribute + ']';\n }\n }\n }\n return deniedTags;\n };\n //Denied Tags\n PasteCleanup.prototype.deniedTags = function (clipBoardElem) {\n var deniedTags = isNullOrUndefined(this.parent.pasteCleanupSettings.deniedTags) ? [] : this.parent.pasteCleanupSettings.deniedTags.slice();\n deniedTags = this.attributesfilter(deniedTags);\n deniedTags = this.tagGrouping(deniedTags);\n for (var i = 0; i < deniedTags.length; i++) {\n var removableElement = clipBoardElem.querySelectorAll(deniedTags[i]);\n for (var j = removableElement.length - 1; j >= 0; j--) {\n var parentElem = removableElement[j].parentNode;\n while (removableElement[j].firstChild) {\n parentElem.insertBefore(removableElement[j].firstChild, removableElement[j]);\n }\n parentElem.removeChild(removableElement[j]);\n }\n }\n return clipBoardElem;\n };\n //Denied Attributes\n PasteCleanup.prototype.deniedAttributes = function (clipBoardElem, clean) {\n var deniedAttrs = isNullOrUndefined(this.parent.pasteCleanupSettings.deniedAttrs) ? [] : this.parent.pasteCleanupSettings.deniedAttrs.slice();\n if (clean) {\n deniedAttrs.push('style');\n }\n for (var i = 0; i < deniedAttrs.length; i++) {\n var removableAttrElement = clipBoardElem.\n querySelectorAll('[' + deniedAttrs[i] + ']');\n for (var j = 0; j < removableAttrElement.length; j++) {\n removableAttrElement[j].removeAttribute(deniedAttrs[i]);\n }\n }\n return clipBoardElem;\n };\n //Allowed Style Properties\n PasteCleanup.prototype.allowedStyle = function (clipBoardElem) {\n var allowedStyleProps = isNullOrUndefined(this.parent.pasteCleanupSettings.allowedStyleProps) ? [] : this.parent.pasteCleanupSettings.allowedStyleProps.slice();\n allowedStyleProps.push('list-style-type', 'list-style');\n var styleElement = clipBoardElem.querySelectorAll('[style]');\n for (var i = 0; i < styleElement.length; i++) {\n var allowedStyleValue = '';\n var allowedStyleValueArray = [];\n var styleValue = styleElement[i].getAttribute('style').split(';');\n for (var k = 0; k < styleValue.length; k++) {\n if (allowedStyleProps.indexOf(styleValue[k].split(':')[0].trim()) >= 0) {\n allowedStyleValueArray.push(styleValue[k]);\n }\n }\n styleElement[i].removeAttribute('style');\n allowedStyleValue = allowedStyleValueArray.join(';').trim() === '' ?\n allowedStyleValueArray.join(';') : allowedStyleValueArray.join(';') + ';';\n if (allowedStyleValue) {\n styleElement[i].setAttribute('style', allowedStyleValue);\n }\n }\n return clipBoardElem;\n };\n /**\n * For internal use only - Get the module name.\n */\n PasteCleanup.prototype.getModuleName = function () {\n return 'pasteCleanup';\n };\n return PasteCleanup;\n}());\nexport { PasteCleanup };\n","import { EventHandler, Browser, isNullOrUndefined, isBlazor, detach } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\n/**\n * `Resize` module is used to resize the editor\n */\nvar Resize = /** @class */ (function () {\n function Resize(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderResizable, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n Resize.prototype.renderResizable = function () {\n this.resizer = this.parent.createElement('div', {\n id: this.parent.getID() + '-resizable', className: 'e-icons'\n + ' ' + classes.CLS_RTE_RES_HANDLE + ' ' + classes.CLS_RTE_RES_EAST\n });\n this.parent.element.classList.add(classes.CLS_RTE_RES_CNT);\n this.parent.element.appendChild(this.resizer);\n this.touchStartEvent = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(this.resizer, 'mousedown', this.resizeStart, this);\n EventHandler.add(this.resizer, this.touchStartEvent, this.resizeStart, this);\n };\n Resize.prototype.resizeStart = function (e) {\n var _this = this;\n if (e.cancelable) {\n e.preventDefault();\n }\n this.wireResizeEvents();\n var args = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.unwireResizeEvents();\n }\n });\n };\n Resize.prototype.performResize = function (e) {\n var _this = this;\n var args = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.unwireResizeEvents();\n }\n });\n var boundRect = this.parent.element.getBoundingClientRect();\n if (this.isMouseEvent(e)) {\n this.parent.element.style.height = e.clientY - boundRect.top + 'px';\n this.parent.element.style.width = e.clientX - boundRect.left + 'px';\n }\n else {\n var eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;\n this.parent.element.style.height = eventType.clientY - boundRect.top + 'px';\n this.parent.element.style.width = eventType.clientX - boundRect.left + 'px';\n }\n this.parent.refreshUI();\n };\n Resize.prototype.stopResize = function (e) {\n this.parent.refreshUI();\n this.unwireResizeEvents();\n var args = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.resizeStop, args);\n };\n Resize.prototype.getEventType = function (e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n };\n Resize.prototype.isMouseEvent = function (e) {\n var isMouse = false;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType) &&\n this.getEventType(e.pointerType) === 'mouse')) {\n isMouse = true;\n }\n return isMouse;\n };\n Resize.prototype.wireResizeEvents = function () {\n EventHandler.add(document, 'mousemove', this.performResize, this);\n EventHandler.add(document, 'mouseup', this.stopResize, this);\n this.touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n this.touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n EventHandler.add(document, this.touchMoveEvent, this.performResize, this);\n EventHandler.add(document, this.touchEndEvent, this.stopResize, this);\n };\n Resize.prototype.unwireResizeEvents = function () {\n EventHandler.remove(document, 'mousemove', this.performResize);\n EventHandler.remove(document, 'mouseup', this.stopResize);\n EventHandler.remove(document, this.touchMoveEvent, this.performResize);\n EventHandler.remove(document, this.touchEndEvent, this.stopResize);\n };\n Resize.prototype.destroy = function () {\n this.removeEventListener();\n };\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderResizable);\n this.parent.element.classList.remove(classes.CLS_RTE_RES_CNT);\n EventHandler.remove(this.resizer, 'mousedown', this.resizeStart);\n EventHandler.remove(this.resizer, this.touchStartEvent, this.resizeStart);\n if (this.resizer) {\n detach(this.resizer);\n }\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * For internal use only - Get the module name.\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}());\nexport { Resize };\n","import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * showFullScreen method\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.showFullScreen = function (event) {\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown') {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating &&\n !this.parent.inlineMode.enable && this.parent.toolbarSettings.enable) {\n this.parent.getToolbarElement().style.width = '100%';\n this.parent.getToolbarElement().style.top = '0px';\n }\n this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n this.toggleParentOverflow(true);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n if (Browser.isDevice) {\n this.parent.toolbarModule.removeFixedTBarClass();\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n /**\n * hideFullScreen method\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown') {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n };\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNullOrUndefined(this.scrollableParent)) {\n return;\n }\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n var elem = document.querySelector('body');\n addClass([elem], ['e-rte-overflow']);\n }\n else {\n var elem = this.scrollableParent[i];\n addClass([elem], ['e-rte-overflow']);\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * destroy method\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize Rich Text Editor header, content and footer rendering\n * @hidden\n * @deprecated\n */\n Render.prototype.render = function () {\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '<p><br/></p>';\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","import { EventHandler, detach, isNullOrUndefined, select, isBlazor, extend } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n };\n Link.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'OpenLink':\n this.parent.notify(events.openLink, args);\n break;\n case 'EditLink':\n this.parent.notify(events.editLink, args);\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, args);\n break;\n }\n };\n Link.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.insertLink, this.linkDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n if (e.args.action !== 'enter' && e.args.action !== 'space') {\n var pageX = void 0;\n var pageY = void 0;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var target_1;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target_1 = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target_1.getBoundingClientRect().top;\n var linkLeft = target_1.getBoundingClientRect().left;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageX = (this.parent.iframeSettings.enable) ? parentLeft + linkLeft : target_1.getBoundingClientRect().left;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ?\n (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n var args = void 0;\n args = e.args.touches ? e.args.changedTouches[0] : args = e.args;\n pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideLinkQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n target = this.getAnchorNode(target);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && (target.childNodes.length > 0 && target.childNodes[0].nodeName !== 'IMG') &&\n e.args.target.nodeName !== 'IMG') {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event.args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: originalEvent\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (e.selectParent.length > 0 &&\n !isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var selectText;\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var title = this.i10n.getConstant('linkTitle');\n var linkDialogEle = this.parent.createElement('div', { className: 'e-rte-link-dialog', id: this.rteID + '_rtelink' });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'\n });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '<label>' + linkTooltip +\n '</label></div><div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" placeholder = \"' + title + '\" class=\"e-input e-rte-linkTitle\"></div>' +\n '<div class=\"e-rte-label\"></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"checkbox\" class=\"e-rte-linkTarget\" data-role =\"none\"></div>' : '';\n var content = '<div class=\"e-rte-label\"><label>' + linkWebAddress + '</label></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" placeholder=\"' + urlPlace + '\" class=\"e-input e-rte-linkurl\"/></div>' +\n '<div class=\"e-rte-label\">' + '<label>' + linkDisplayText + '</label></div><div class=\"e-rte-field\"> ' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" class=\"e-input e-rte-linkText\" placeholder=\"' + textPlace + '\">' +\n '</div><div class=\"e-rte-label\">' + htmlTextbox;\n var contentElem = parseHtml(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n selectText = (this.parent.editorMode === 'HTML') ? e.selection.getRange(this.parent.contentModule.getDocument()).toString() :\n e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n var dialogModel = {\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'inherit',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat', content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n var args = isBlazor() ? null : _this.dialogObj;\n _this.dialogRenderObj.close(args);\n _this.dialogObj = null;\n },\n };\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'inherit';\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && isNullOrUndefined(inputDetails) && ((!isNullOrUndefined(selectText)\n && selectText !== '') && (e.selection.range.startOffset === 0) || e.selection.range.startOffset !==\n e.selection.range.endOffset)) || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : null;\n if (linkUrl === '') {\n this.selfLink.checkUrl(true);\n return;\n }\n if (!this.selfLink.isUrl(linkUrl)) {\n linkText = (linkText === '') ? linkUrl : linkText;\n if (!this.selfLink.parent.enableAutoUrl) {\n linkUrl = linkUrl.indexOf('http') > -1 ? linkUrl : 'http://' + linkUrl;\n }\n else {\n linkUrl = linkUrl;\n }\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\n if (Browser.isIE && proxy.parent.iframeSettings.enable) {\n this.selection.restore();\n }\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (document.body.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n if (isIDevice() && proxy.parent.iframeSettings.enable) {\n select('iframe', proxy.parent.element).contentWindow.focus();\n }\n if (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var argsValue;\n if (this.args.code === 'KeyK') {\n var originalEvent = this.args;\n extend(this.args, { item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent }, true);\n var argsVal = {\n item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent\n };\n argsValue = argsVal;\n }\n else {\n argsValue = this.args;\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, argsValue, this.args.originalEvent, value);\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (isIDevice() && this.parent.iframeSettings.enable) {\n select('iframe', this.parent.element).contentWindow.focus();\n }\n else {\n this.parent.contentModule.getEditPanel().focus();\n }\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: selectParentEle.href,\n target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n }\n };\n Link.prototype.getAnchorNode = function (element) {\n var selectParent = closest(element, 'a');\n return (selectParent ? selectParent : element);\n };\n Link.prototype.editLink = function (e) {\n var selectedNode = this.getAnchorNode(e.selectNode[0]);\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n selectParentEle = selectedNode.nodeName === 'A' ? selectedNode : selectParentEle;\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.getAttribute('href'), text: selectParentEle.innerText,\n title: selectParentEle.title, target: selectParentEle.target,\n header: this.i10n.getConstant('editLink'), btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n Link.prototype.cancelDialog = function (e) {\n this.selfLink.parent.isBlur = false;\n this.selfLink.dialogObj.hide({ returnValue: true });\n if (isIDevice()) {\n this.selection.restore();\n }\n else {\n this.selfLink.parent.contentModule.getEditPanel().focus();\n }\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (((this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target)) ||\n this.parent.inlineMode.enable && !closest(target, '#' + this.dialogObj.element.id)) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { addClass, detach, EventHandler, isNullOrUndefined, select, isBlazor } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml, hasClass, convertToBlob } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.isImgUploaded = false;\n this.pageX = null;\n this.pageY = null;\n this.deletedImg = [];\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.keyUp, this.onKeyUp, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.paste, this.imagePaste, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.keyUp, this.onKeyUp);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.paste, this.imagePaste);\n this.parent.off(events.destroy, this.removeEventListener);\n var dropElement = this.parent.iframeSettings.enable ? this.parent.inputElement.ownerDocument\n : this.parent.inputElement;\n dropElement.removeEventListener('drop', this.dragDrop.bind(this), true);\n dropElement.removeEventListener('dragstart', this.dragStart.bind(this), true);\n dropElement.removeEventListener('dragenter', this.dragEnter.bind(this), true);\n dropElement.removeEventListener('dragover', this.dragOver.bind(this), true);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick);\n this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n }\n }\n };\n Image.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Image.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n EventHandler.add(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick, this);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n }\n var dropElement = this.parent.iframeSettings.enable ? this.parent.inputElement.ownerDocument :\n this.parent.inputElement;\n dropElement.addEventListener('drop', this.dragDrop.bind(this), true);\n dropElement.addEventListener('dragstart', this.dragStart.bind(this), true);\n dropElement.addEventListener('dragenter', this.dragOver.bind(this), true);\n dropElement.addEventListener('dragover', this.dragOver.bind(this), true);\n };\n Image.prototype.undoStack = function (args) {\n if (args.subCommand.toLowerCase() === 'undo' || args.subCommand.toLowerCase() === 'redo') {\n for (var i = 0; i < this.parent.formatter.getUndoRedoStack().length; i++) {\n var temp = this.parent.createElement('div');\n var contentElem = parseHtml(this.parent.formatter.getUndoRedoStack()[i].text);\n temp.appendChild(contentElem);\n var img = temp.querySelectorAll('img');\n if (temp.querySelector('.e-img-resize') && img.length > 0) {\n for (var j = 0; j < img.length; j++) {\n img[j].style.outline = '';\n }\n detach(temp.querySelector('.e-img-resize'));\n this.parent.formatter.getUndoRedoStack()[i].text = temp.innerHTML;\n }\n }\n }\n };\n Image.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n this.imgEle.parentElement.style.cursor = 'auto';\n if (Browser.isDevice) {\n removeClass([e.target.parentElement], 'e-mob-span');\n }\n var args = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n var pageX = this.getPointX(e);\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;\n this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);\n this.parent.formatter.saveData();\n };\n Image.prototype.resizeStart = function (e, ele) {\n var _this = this;\n if (this.parent.readonly) {\n return;\n }\n var target = ele ? ele : e.target;\n if (target.tagName === 'IMG') {\n this.parent.preventDefaultResize(e);\n var img = target;\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n }\n this.imageResize(img);\n }\n if (target.classList.contains('e-rte-imageboxmark')) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n this.resizeBtnInit();\n if (this.quickToolObj) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n if (target.classList.contains('e-rte-topLeft')) {\n this.resizeBtnStat.topLeft = true;\n }\n if (target.classList.contains('e-rte-topRight')) {\n this.resizeBtnStat.topRight = true;\n }\n if (target.classList.contains('e-rte-botLeft')) {\n this.resizeBtnStat.botLeft = true;\n }\n if (target.classList.contains('e-rte-botRight')) {\n this.resizeBtnStat.botRight = true;\n }\n if (Browser.isDevice && this.contentModule.getEditPanel().contains(this.imgResizeDiv) &&\n !this.imgResizeDiv.classList.contains('e-mob-span')) {\n addClass([this.imgResizeDiv], 'e-mob-span');\n }\n else {\n var args = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.cancelResizeAction();\n }\n });\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n e.target.focus();\n }\n else {\n if (!this.parent.readonly) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n }\n if (e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.imageResize = function (e) {\n this.resizeBtnInit();\n this.imgEle = e;\n addClass([this.imgEle], 'e-resize');\n this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'\n }));\n if (Browser.isDevice) {\n addClass([this.imgResizeDiv], 'e-mob-rte');\n }\n e.style.outline = '2px solid #4a90e2';\n this.imgResizePos(e, this.imgResizeDiv);\n this.resizeImgDupPos(e);\n this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n };\n Image.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Image.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Image.prototype.imgResizePos = function (e, imgResizeDiv) {\n var pos = this.calcPos(e);\n var top = pos.top;\n var left = pos.left;\n var imgWid = e.width;\n var imgHgt = e.height;\n var borWid = (Browser.isDevice) ? (4 * parseInt((e.style.outline.slice(-3)), 10)) + 2 :\n (2 * parseInt((e.style.outline.slice(-3)), 10)) + 2; //span border width + image outline width\n var devWid = ((Browser.isDevice) ? 0 : 2); // span border width\n imgResizeDiv.querySelector('.e-rte-botLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-botLeft').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.top = (top - (borWid)) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.top = (top - borWid) + 'px';\n };\n Image.prototype.calcPos = function (elem) {\n var ignoreOffset = ['TD', 'TH', 'TABLE', 'A'];\n var parentOffset = { top: 0, left: 0 };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = ((elem.offsetParent && (elem.offsetParent.classList.contains('e-img-caption') ||\n ignoreOffset.indexOf(elem.offsetParent.tagName) > -1)) ?\n closest(elem, '#' + this.parent.getID() + '_rte-edit-view') : elem.offsetParent) || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? parseInt(img.style.width, 10) : img.width;\n var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;\n if (width > height) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = (width / height * expectedY) + 'px';\n img.style.height = expectedY + 'px';\n }\n else {\n img.setAttribute('width', (width / height * expectedY).toString());\n img.setAttribute('height', expectedY.toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = (height / width * expectedX) + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', (height / width * expectedX).toString());\n }\n }\n else {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = expectedX + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', expectedX.toString());\n }\n }\n };\n Image.prototype.pixToPerc = function (expected, parentEle) {\n return expected / parseFloat(getComputedStyle(parentEle).width) * 100;\n };\n Image.prototype.imgDupMouseMove = function (width, height, e) {\n var _this = this;\n var args = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.cancelResizeAction();\n }\n else {\n if ((parseInt(_this.parent.insertImageSettings.minWidth, 10) >= parseInt(width, 10) ||\n parseInt(_this.parent.insertImageSettings.maxWidth, 10) <= parseInt(width, 10))) {\n return;\n }\n if (!_this.parent.insertImageSettings.resizeByPercent &&\n (parseInt(_this.parent.insertImageSettings.minHeight, 10) >= parseInt(height, 10) ||\n parseInt(_this.parent.insertImageSettings.maxHeight, 10) <= parseInt(height, 10))) {\n return;\n }\n _this.imgEle.parentElement.style.cursor = 'pointer';\n _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10));\n _this.resizeImgDupPos(_this.imgEle);\n _this.imgResizePos(_this.imgEle, _this.imgResizeDiv);\n _this.parent.setContentHeight('', false);\n }\n });\n };\n Image.prototype.resizing = function (e) {\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.resizeBtnStat.topLeft || this.resizeBtnStat.topRight) ? -(pageY - this.pageY) : (pageY - this.pageY);\n var width = parseInt(this.imgDupPos.width, 10) + mouseX;\n var height = parseInt(this.imgDupPos.height, 10) + mouseY;\n this.pageX = pageX;\n this.pageY = pageY;\n if (this.resizeBtnStat.botRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.botLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topRight) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n else if (this.resizeBtnStat.topLeft) {\n this.imgDupMouseMove(width + 'px', height + 'px', e);\n }\n };\n Image.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.imgEle && this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n this.imgEle.style.outline = '';\n this.imgResizeDiv = null;\n this.pageX = null;\n this.pageY = null;\n }\n };\n Image.prototype.resizeImgDupPos = function (e) {\n this.imgDupPos = {\n width: (e.style.height !== '') ? this.imgEle.style.width : e.width + 'px',\n height: (e.style.height !== '') ? this.imgEle.style.height : e.height + 'px'\n };\n };\n Image.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { botLeft: false, botRight: false, topRight: false, topLeft: false };\n };\n Image.prototype.onToolbarAction = function (args) {\n if (isIDevice()) {\n this.parent.notify(events.selectionRestore, {});\n }\n var item = args.args.item;\n switch (item.subCommand) {\n case 'Replace':\n this.parent.notify(events.insertImage, args);\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: e.selectParent[0].parentNode.href, target: target, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n if (Browser.isIE) {\n this.contentModule.getEditPanel().focus();\n }\n e.selection.restore();\n var isCapLink = (this.contentModule.getEditPanel().contains(this.captionEle) && select('a', this.captionEle)) ?\n true : false;\n var selectParent = isCapLink ? [this.captionEle] : [e.selectNode[0].parentElement];\n this.parent.formatter.process(this.parent, e.args, e.args, {\n insertElement: e.selectNode[0], selectParent: selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (isCapLink) {\n select('.e-img-inner', this.captionEle).focus();\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n this.deletedImg = [];\n var isCursor;\n var keyCodeValues = [27, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,\n 44, 45, 9, 16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 91, 92, 93, 144, 145, 182, 183];\n if (this.parent.editorMode === 'HTML') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n isCursor = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n }\n if (!isCursor && this.parent.editorMode === 'HTML' && keyCodeValues.indexOf(originalEvent.which) < 0) {\n var nodes = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName === 'IMG') {\n this.deletedImg.push(nodes[i]);\n }\n }\n }\n if (this.parent.editorMode === 'HTML' && ((originalEvent.which === 8 && originalEvent.code === 'Backspace') ||\n (originalEvent.which === 46 && originalEvent.code === 'Delete'))) {\n var isCursor_1 = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n if ((originalEvent.which === 8 && originalEvent.code === 'Backspace' && isCursor_1)) {\n this.checkImageBack(range);\n }\n else if ((originalEvent.which === 46 && originalEvent.code === 'Delete' && isCursor_1)) {\n this.checkImageDel(range);\n }\n }\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) &&\n originalEvent.code !== 'KeyK') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);\n removeClass([selectParentEle[0]], 'e-img-focus');\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {\n this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });\n }\n if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {\n if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG') {\n originalEvent.preventDefault();\n var event_1 = {\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle,\n args: {\n item: { command: 'Images', subCommand: 'Remove' },\n originalEvent: originalEvent\n }\n };\n this.deleteImg(event_1, originalEvent.keyCode);\n }\n if (this.parent.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-image':\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.onKeyUp = function (event) {\n if (!isNOU(this.deletedImg) && this.deletedImg.length > 0) {\n for (var i = 0; i < this.deletedImg.length; i++) {\n var args = {\n element: this.deletedImg[i],\n src: this.deletedImg[i].getAttribute('src')\n };\n this.parent.trigger(events.afterImageDelete, args);\n }\n }\n };\n Image.prototype.checkImageBack = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === 0 &&\n !isNOU(range.startContainer.previousSibling) && range.startContainer.previousSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.previousSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset - 1]) &&\n range.startContainer.childNodes[range.startOffset - 1].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset - 1]);\n }\n };\n Image.prototype.checkImageDel = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === range.startContainer.textContent.length &&\n !isNOU(range.startContainer.nextSibling) && range.startContainer.nextSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.nextSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset]) &&\n range.startContainer.childNodes[range.startOffset].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset]);\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.justifyImageLeft(args);\n break;\n case 'JustifyCenter':\n this.justifyImageCenter(args);\n break;\n case 'JustifyRight':\n this.justifyImageRight(args);\n break;\n case 'Inline':\n this.inline(args);\n break;\n case 'Break':\n this.break(args);\n break;\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNodeEle[0]], 'e-img-focus');\n }\n this.cancelResizeAction();\n };\n Image.prototype.imageWithLinkQTBarItemUpdate = function () {\n var separator;\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n addClass([items[i]], 'e-link-groups');\n items[i].style.display = 'none';\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = '';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target = e.elements;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target && !closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () { _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target); }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideImageQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n if ((showOnRightClick && args.which === 1) && !isNullOrUndefined(args.target) &&\n args.target.tagName === 'IMG') {\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), args.target);\n }\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n if (isIDevice()) {\n this.parent.notify(events.selectionSave, e);\n }\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (closest(target, 'a')) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (!closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '<div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" class=\"e-input e-img-link\" spellcheck=\"false\" placeholder=\"' + linkUrl + '\"/></div>' +\n '<div class=\"e-rte-label\"></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"checkbox\" class=\"e-rte-linkTarget\" data-role =\"none\"></div>';\n var contentElem = parseHtml(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = null;\n }\n }\n });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var target_1 = this.checkBoxObj.checked ? '_blank' : null;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n args: e.args,\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'inherit',\n width: '290px',\n header: this.parent.localeObj.getConstant('imageInsertLinkHeader'),\n content: linkWrap,\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertlink(linkargs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '<div class=\"e-rte-field\">' +\n '<input type=\"text\" spellcheck=\"false\" value=\"' + getAlt + '\" class=\"e-input e-img-alt\" placeholder=\"' + altText + '\"/>' +\n '</div>';\n var contentElem = parseHtml(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = {\n args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode,\n alt: inputAlt\n };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertAlt(altArgs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var altText = e.alt.value;\n this.parent.formatter.process(this.parent, e.args, e.args, {\n altText: altText, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (url === '') {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n if (!this.isUrl(url)) {\n url = 'http://' + url;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n var proxy = e.selfImage;\n if (proxy.parent.editorMode === 'HTML') {\n e.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n proxy.dialogObj.hide({ returnValue: true });\n return;\n }\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand, selection: e.selection\n });\n var captionEle = closest(e.selectNode[0], '.e-img-caption');\n if (captionEle) {\n select('.e-img-inner', captionEle).focus();\n }\n proxy.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e, keyCode) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var args = {\n element: e.selectNode[0],\n src: e.selectNode[0].getAttribute('src')\n };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode,\n captionClass: classes.CLS_CAPTION,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n this.cancelResizeAction();\n if (isNullOrUndefined(keyCode)) {\n this.parent.trigger(events.afterImageDelete, args);\n }\n };\n Image.prototype.caption = function (e) {\n var selectNode = e.selectNode[0];\n if (selectNode.nodeName !== 'IMG') {\n return;\n }\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.cancelResizeAction();\n addClass([selectNode], 'e-rte-image');\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Caption';\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n if (Browser.isIE) {\n this.contentModule.getEditPanel().focus();\n e.selection.restore();\n }\n if (selectNode.parentElement.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode.parentElement, selectNode: e.selectNode, subCommand: subCommand });\n }\n else {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode, selectNode: e.selectNode, subCommand: subCommand });\n }\n }\n else {\n this.captionEle = this.parent.createElement('span', {\n className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION,\n attrs: { contenteditable: 'false', draggable: 'false' }\n });\n var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });\n var imgInner = this.parent.createElement('span', { className: 'e-img-inner', attrs: { contenteditable: 'true' } });\n var parent_1 = e.selectNode[0].parentElement;\n if (parent_1.tagName === 'A') {\n parent_1.setAttribute('contenteditable', 'true');\n }\n imgWrap.appendChild(parent_1.tagName === 'A' ? parent_1 : e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: this.captionEle, selectNode: e.selectNode, subCommand: subCommand });\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj_1 = { args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertSize(selectObj_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Break';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Inline';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageLeft = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyLeft';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageRight = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyRight';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.justifyImageCenter = function (e) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'JustifyCenter';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };\n var dialogModel = {\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n if (_this.isImgUploaded) {\n _this.uploadObj.removing();\n }\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogRenderObj.close(event);\n _this.dialogObj = null;\n },\n };\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n dialogModel.header = this.parent.localeObj.getConstant('editImageHeader');\n dialogModel.content = dialogContent;\n }\n else {\n dialogModel.content = dialogContent;\n }\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(imgDialog);\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG' && (e.name === 'insertImage')) {\n this.dialogObj.element.querySelector('.e-insertImage').textContent = this.parent.localeObj.getConstant('dialogUpdate');\n }\n imgDialog.style.maxHeight = 'inherit';\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n if (this.isImgUploaded) {\n this.uploadObj.removing();\n }\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (target.nodeName === 'IMG') {\n this.imgEle = target;\n }\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&\n this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&\n this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n if (target.tagName !== 'IMG' && this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.remvoeResizEle();\n this.contentModule.getEditPanel().querySelector('img').style.outline = '';\n }\n };\n Image.prototype.remvoeResizEle = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n detach(this.contentModule.getEditPanel().querySelector('.e-img-resize'));\n };\n Image.prototype.imageUrlPopup = function (e) {\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = this.parent.createElement('input', {\n className: 'e-input e-img-url',\n attrs: { placeholder: placeUrl, spellcheck: 'false' }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n proxy.isImgUploaded = false;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?\n classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.uploadUrl.url = '';\n if (proxy.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n proxy.imgEle.style.outline = '';\n proxy.remvoeResizEle();\n }\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);\n proxy.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.imgsizeInput = function (e) {\n var selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = (selectNode.getAttribute('width') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('width'))) ? selectNode.width : selectNode.getClientRects()[0].width;\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getClientRects()[0].height;\n var content = '<div class=\"e-rte-label\"><label>' + imgWidth +\n '</label></div><div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"imgwidth\" class=\"e-img-width\" value=' +\n widthVal\n + ' /></div>' +\n '<div class=\"e-rte-label\">' + '<label>' + imgHeight + '</label></div><div class=\"e-rte-field\"> ' +\n '<input type=\"text\" data-role =\"none\" id=\"imgheight\" class=\"e-img-height\" value=' +\n heightVal\n + ' /></div>';\n var contentElem = parseHtml(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minWidth,\n max: this.parent.insertImageSettings.maxWidth,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.isStringTemplate = true;\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minHeight,\n max: this.parent.insertImageSettings.maxHeight,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n heightNum.isStringTemplate = true;\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n e.selection.restore();\n var proxy = e.selfImage;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var dialogEle = proxy.dialogObj.element;\n var width = parseFloat(dialogEle.querySelector('.e-img-width').value);\n var height = parseFloat(dialogEle.parentElement.querySelector('.e-img-height').value);\n proxy.parent.formatter.process(this.parent, e.args, e.args, {\n width: width, height: height, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n if (this.imgResizeDiv) {\n proxy.imgResizePos(e.selectNode[0], this.imgResizeDiv);\n }\n proxy.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.element.style.maxHeight = 'inherit';\n var dialogContent = this.dialogObj.element.querySelector('.e-img-content');\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n var iframe = proxy.parent.iframeSettings.enable;\n if (proxy.parent.editorMode === 'HTML' && (!iframe && isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' +\n this.parent.contentModule.getPanel().id))\n || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n var spanMsg = this.parent.createElement('span', {\n className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)\n });\n span.appendChild(spanMsg);\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.isStringTemplate = true;\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n var rawFile;\n this.uploadObj = new Uploader({\n asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, },\n dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n selected: function (e) {\n if (isBlazor()) {\n e.cancel = true;\n rawFile = e.filesData;\n }\n proxy.isImgUploaded = true;\n _this.parent.trigger(events.imageSelected, e, function (e) {\n _this.checkExtension(e.filesData[0]);\n altText = e.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n reader_1.addEventListener('load', function (e) {\n var url = _this.parent.insertImageSettings.saveFormat === 'Base64' ? reader_1.result :\n URL.createObjectURL(convertToBlob(reader_1.result));\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText,\n selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n }, height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n });\n reader_1.readAsDataURL(e.filesData[0].rawFile);\n }\n if (isBlazor()) {\n e.cancel = false;\n /* tslint:disable */\n _this.uploadObj._internalRenderSelect(e, rawFile);\n /* tslint:enable */\n }\n });\n },\n uploading: function (e) {\n _this.parent.trigger(events.imageUploading, e);\n },\n success: function (e) {\n _this.parent.trigger(events.imageUploadSuccess, e, function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n var value = { url: url, selection: save };\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.insertImageSettings.maxWidth\n }, height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n }\n });\n },\n failure: function (e) {\n _this.parent.trigger(events.imageUploadFailed, e);\n },\n removing: function () {\n _this.parent.trigger(events.imageRemoving, e, function (e) {\n proxy.isImgUploaded = false;\n proxy.inputUrl.removeAttribute('disabled');\n if (proxy.uploadUrl) {\n proxy.uploadUrl.url = '';\n }\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n });\n }\n });\n this.uploadObj.isStringTemplate = true;\n this.uploadObj.createElement = this.parent.createElement;\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.checkExtension = function (e) {\n if (this.uploadObj.allowedExtensions) {\n if (this.uploadObj.allowedExtensions.toLocaleLowerCase().indexOf(('.' + e.type).toLocaleLowerCase()) === -1) {\n this.dialogObj.getButtons(0).element.setAttribute('disabled', 'disabled');\n }\n else {\n this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n }\n };\n Image.prototype.fileSelect = function () {\n this.dialogObj.element.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.dragStart = function (e) {\n if (e.target.nodeName === 'IMG') {\n this.parent.trigger(events.actionBegin, e, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n e.preventDefault();\n }\n else {\n e.dataTransfer.effectAllowed = 'copyMove';\n e.target.classList.add(classes.CLS_RTE_DRAG_IMAGE);\n }\n });\n }\n else {\n return true;\n }\n };\n ;\n Image.prototype.dragEnter = function (e) {\n e.dataTransfer.dropEffect = 'copy';\n e.preventDefault();\n };\n ;\n Image.prototype.dragOver = function (e) {\n if ((Browser.info.name === 'edge' && e.dataTransfer.items[0].type.split('/')[0].indexOf('image') > -1) ||\n (Browser.isIE && e.dataTransfer.types[0] === 'Files')) {\n e.preventDefault();\n }\n else {\n return true;\n }\n };\n ;\n /**\n * USed to set range When drop an image\n */\n Image.prototype.dragDrop = function (e) {\n var _this = this;\n var imgElement = this.parent.inputElement.ownerDocument.querySelector('.' + classes.CLS_RTE_DRAG_IMAGE);\n if ((imgElement && imgElement.tagName === 'IMG') || e.dataTransfer.files.length > 0) {\n this.parent.trigger(events.actionBegin, e, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n e.preventDefault();\n }\n else {\n if (closest(e.target, '#' + _this.parent.getID() + '_toolbar') ||\n _this.parent.inputElement.contentEditable === 'false') {\n e.preventDefault();\n return;\n }\n if (_this.parent.element.querySelector('.' + classes.CLS_IMG_RESIZE)) {\n detach(_this.imgResizeDiv);\n }\n e.preventDefault();\n var range = void 0;\n if (_this.contentModule.getDocument().caretRangeFromPoint) { //For chrome\n range = _this.contentModule.getDocument().caretRangeFromPoint(e.clientX, e.clientY);\n }\n else if ((e.rangeParent)) { //For mozilla firefox\n range = _this.contentModule.getDocument().createRange();\n range.setStart(e.rangeParent, e.rangeOffset);\n }\n else {\n range = _this.getDropRange(e.clientX, e.clientY); //For internet explorer\n }\n _this.parent.notify(events.selectRange, { range: range });\n var uploadArea = _this.parent.element.querySelector('.' + classes.CLS_DROPAREA);\n if (uploadArea) {\n return;\n }\n _this.insertDragImage(e);\n }\n });\n }\n else {\n return true;\n }\n };\n /**\n * Used to calculate range on internet explorer\n */\n Image.prototype.getDropRange = function (x, y) {\n var startRange = this.contentModule.getDocument().createRange();\n this.parent.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), startRange);\n var elem = this.contentModule.getDocument().elementFromPoint(x, y);\n var startNode = (elem.childNodes.length > 0 ? elem.childNodes[0] : elem);\n var startCharIndexCharacter = 0;\n if (this.parent.inputElement.firstChild.innerHTML === '<br>') {\n startRange.setStart(startNode, startCharIndexCharacter);\n startRange.setEnd(startNode, startCharIndexCharacter);\n }\n else {\n var rangeRect = void 0;\n do {\n startCharIndexCharacter++;\n startRange.setStart(startNode, startCharIndexCharacter);\n startRange.setEnd(startNode, startCharIndexCharacter + 1);\n rangeRect = startRange.getBoundingClientRect();\n } while (rangeRect.left < x && startCharIndexCharacter < startNode.length - 1);\n }\n return startRange;\n };\n Image.prototype.insertDragImage = function (e) {\n e.preventDefault();\n var activePopupElement = this.parent.element.querySelector('' + classes.CLS_POPUP_OPEN);\n this.parent.notify(events.drop, { args: e });\n if (activePopupElement) {\n activePopupElement.classList.add(classes.CLS_HIDE);\n }\n if (e.dataTransfer.files.length > 0) { //For external image drag and drop\n if (e.dataTransfer.files.length > 1) {\n return;\n }\n var imgFiles = e.dataTransfer.files;\n var fileName = imgFiles[0].name;\n var imgType = fileName.substring(fileName.lastIndexOf('.'));\n var allowedTypes = this.parent.insertImageSettings.allowedTypes;\n for (var i = 0; i < allowedTypes.length; i++) {\n if (imgType.toLocaleLowerCase() === allowedTypes[i].toLowerCase()) {\n if (this.parent.insertImageSettings.saveUrl) {\n this.onSelect(e);\n }\n else {\n var args = { args: e, text: '', file: imgFiles[0] };\n e.preventDefault();\n this.imagePaste(args);\n }\n }\n }\n }\n else { //For internal image drag and drop\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var imgElement = this.parent.inputElement.ownerDocument.querySelector('.' + classes.CLS_RTE_DRAG_IMAGE);\n if (imgElement && imgElement.tagName === 'IMG') {\n if (imgElement.nextElementSibling) {\n if (imgElement.nextElementSibling.classList.contains(classes.CLS_IMG_INNER)) {\n range.insertNode(imgElement.parentElement.parentElement);\n }\n else {\n range.insertNode(imgElement);\n }\n }\n else {\n range.insertNode(imgElement);\n }\n imgElement.classList.remove(classes.CLS_RTE_DRAG_IMAGE);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var args = e;\n this.resizeStart(args, imgElement);\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.onSelect = function (args) {\n var proxy = this;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var parentElement = this.parent.createElement('ul', { className: classes.CLS_UPLOAD_FILES });\n this.parent.element.appendChild(parentElement);\n var validFiles = {\n name: '',\n size: 0,\n status: '',\n statusCode: '',\n type: '',\n rawFile: args.dataTransfer.files[0],\n validationMessages: {}\n };\n var imageTag = this.parent.createElement('IMG');\n imageTag.style.opacity = '0.5';\n imageTag.classList.add(classes.CLS_RTE_IMAGE);\n imageTag.classList.add(classes.CLS_IMGINLINE);\n imageTag.classList.add(classes.CLS_RESIZE);\n var file = validFiles.rawFile;\n var reader = new FileReader();\n reader.addEventListener('load', function () {\n var url = URL.createObjectURL(convertToBlob(reader.result));\n imageTag.src = proxy.parent.insertImageSettings.saveFormat === 'Blob' ? url : reader.result;\n });\n if (file) {\n reader.readAsDataURL(file);\n }\n range.insertNode(imageTag);\n this.uploadMethod(args, imageTag);\n };\n /**\n * Rendering uploader and popup for drag and drop\n */\n Image.prototype.uploadMethod = function (dragEvent, imageElement) {\n var _this = this;\n var isUploading = false;\n var proxy = this;\n var popupEle = this.parent.createElement('div');\n this.parent.element.appendChild(popupEle);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n var offsetY = this.parent.iframeSettings.enable ? -50 : -90;\n this.popupObj = new Popup(popupEle, {\n relateTo: imageElement,\n height: '85px',\n width: '300px',\n offsetY: offsetY,\n content: uploadEle,\n viewPortElement: this.parent.element,\n position: { X: 'center', Y: 'top' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n this.popupObj.element.style.display = 'none';\n addClass([this.popupObj.element], classes.CLS_POPUP_OPEN);\n addClass([this.popupObj.element], classes.CLS_RTE_UPLOAD_POPUP);\n var timeOut = dragEvent.dataTransfer.files[0].size > 1000000 ? 300 : 100;\n setTimeout(function () { proxy.refreshPopup(imageElement); }, timeOut);\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n },\n cssClass: classes.CLS_RTE_DIALOG_UPLOAD,\n dropArea: this.parent.element,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n removing: function () {\n _this.parent.inputElement.contentEditable = 'true';\n isUploading = false;\n detach(imageElement);\n _this.popupObj.close();\n },\n canceling: function () {\n _this.parent.inputElement.contentEditable = 'true';\n isUploading = false;\n detach(imageElement);\n _this.popupObj.close();\n },\n uploading: function (e) {\n isUploading = true;\n _this.parent.trigger(events.imageUploading, e);\n _this.parent.inputElement.contentEditable = 'false';\n },\n selected: function (e) {\n if (isUploading) {\n e.cancel = true;\n }\n },\n failure: function (e) {\n isUploading = false;\n _this.parent.inputElement.contentEditable = 'true';\n var args = {\n args: dragEvent,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n setTimeout(function () { _this.uploadFailure(imageElement, args, e); }, 900);\n },\n success: function (e) {\n isUploading = false;\n _this.parent.inputElement.contentEditable = 'true';\n var args = {\n args: dragEvent,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n setTimeout(function () { _this.uploadSuccess(imageElement, dragEvent, args, e); }, 900);\n }\n });\n this.uploadObj.appendTo(this.popupObj.element.childNodes[0]);\n detach(this.popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap'));\n range.selectNodeContents(imageElement);\n this.parent.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), range);\n };\n Image.prototype.refreshPopup = function (imageElement) {\n var imgPosition = this.parent.iframeSettings.enable ? this.parent.element.offsetTop +\n imageElement.offsetTop : imageElement.offsetTop;\n var rtePosition = this.parent.element.offsetTop + this.parent.element.offsetHeight;\n if (imgPosition > rtePosition) {\n this.popupObj.relateTo = this.parent.inputElement;\n this.popupObj.offsetY = this.parent.iframeSettings.enable ? -30 : -65;\n this.popupObj.element.style.display = 'block';\n }\n else {\n if (this.popupObj) {\n this.popupObj.refreshPosition(imageElement);\n this.popupObj.element.style.display = 'block';\n }\n }\n };\n /**\n * Called when drop image upload was failed\n */\n Image.prototype.uploadFailure = function (imgEle, args, e) {\n detach(imgEle);\n if (this.popupObj) {\n this.popupObj.close();\n }\n this.parent.trigger(events.imageUploadFailed, e);\n this.uploadObj.destroy();\n };\n /**\n * Called when drop image upload was successful\n */\n Image.prototype.uploadSuccess = function (imageElement, dragEvent, args, e) {\n var _this = this;\n imageElement.style.opacity = '1';\n imageElement.classList.add(classes.CLS_IMG_FOCUS);\n this.parent.trigger(events.imageUploadSuccess, e, function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n imageElement.src = url;\n imageElement.setAttribute('alt', e.file.name);\n }\n });\n this.popupObj.close();\n this.showImageQuickToolbar(args);\n this.resizeStart(dragEvent, imageElement);\n this.uploadObj.destroy();\n };\n Image.prototype.imagePaste = function (args) {\n var _this = this;\n if (args.text.length === 0 && !isNullOrUndefined(args.file)) {\n var proxy_1 = this;\n var reader_2 = new FileReader();\n args.args.preventDefault();\n reader_2.addEventListener('load', function (e) {\n var url = {\n cssClass: (proxy_1.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: _this.parent.insertImageSettings.saveFormat === 'Base64' || !isNullOrUndefined(args.callBack) ?\n reader_2.result : URL.createObjectURL(convertToBlob(reader_2.result)),\n width: {\n width: proxy_1.parent.insertImageSettings.width, minWidth: proxy_1.parent.insertImageSettings.minWidth,\n maxWidth: proxy_1.parent.insertImageSettings.maxWidth\n },\n height: {\n height: proxy_1.parent.insertImageSettings.height, minHeight: proxy_1.parent.insertImageSettings.minHeight,\n maxHeight: proxy_1.parent.insertImageSettings.maxHeight\n }\n };\n if (!isNullOrUndefined(args.callBack)) {\n args.callBack(url);\n return;\n }\n else {\n proxy_1.parent.formatter.process(proxy_1.parent, { item: { command: 'Images', subCommand: 'Image' } }, args.args, url);\n _this.showPopupToolBar(args, url);\n }\n });\n reader_2.readAsDataURL(args.file);\n }\n };\n Image.prototype.showPopupToolBar = function (e, url) {\n var _this = this;\n var imageSrc = 'img[src=\"' + url.url + '\"]';\n var imageElement = this.parent.inputElement.querySelector(imageSrc);\n this.parent.quickToolbarModule.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n var args = {\n args: e.args,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n if (imageElement) {\n setTimeout(function () { _this.showImageQuickToolbar(args); _this.resizeStart(e.args, imageElement); }, 0);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Image.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\n","import { removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n };\n ViewSource.prototype.onInitialEnd = function () {\n this.parent.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ViewSource.prototype.removeEventListener = function () {\n this.unWireEvent();\n this.parent.off(events.sourceCode, this.sourceCode);\n this.parent.off(events.updateSource, this.updateSourceCode);\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n ViewSource.prototype.getSourceCode = function () {\n return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' });\n };\n ViewSource.prototype.wireEvent = function (element) {\n this.keyboardModule = new KeyboardEvents(element, {\n keyAction: this.previewKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n EventHandler.add(this.previewElement, 'mousedown', this.mouseDownHandler, this);\n };\n ViewSource.prototype.unWireEvent = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.previewElement) {\n EventHandler.remove(this.previewElement, 'mousedown', this.mouseDownHandler);\n }\n };\n ViewSource.prototype.wireBaseKeyDown = function () {\n this.parent.keyboardModule = new KeyboardEvents(this.contentModule.getEditPanel(), {\n keyAction: this.parent.keyDown.bind(this.parent), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n ViewSource.prototype.unWireBaseKeyDown = function () {\n this.parent.keyboardModule.destroy();\n };\n ViewSource.prototype.mouseDownHandler = function (e) {\n this.parent.notify(events.sourceCodeMouseDown, { args: e });\n };\n ViewSource.prototype.previewKeyDown = function (event) {\n switch (event.action) {\n case 'html-source':\n this.updateSourceCode(event);\n event.preventDefault();\n break;\n case 'toolbar-focus':\n if (this.parent.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.parent.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n }\n };\n ViewSource.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'html-source':\n e.event.preventDefault();\n this.sourceCode(e);\n e.callBack({\n requestType: 'SourceCode',\n editorMode: 'HTML',\n event: e.event\n });\n break;\n }\n };\n /**\n * sourceCode method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = this.parent.createElement('div', {\n className: 'e-source-content', id: this.parent.element.id + '_source-view'\n });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode', true);\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && !this.parent.iframeSettings.enable) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n /**\n * updateSourceCode method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n var serializeValue = this.parent.serializeValue(editHTML.value);\n var value = (serializeValue === null || serializeValue === '') ? '<p><br/></p>' : serializeValue;\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight('preview', true);\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.getTextAreaValue = function () {\n return (this.contentModule.getEditPanel().innerHTML === '<p><br></p>' ||\n this.contentModule.getEditPanel().innerHTML.length === 12) ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 7) ? '' : this.parent.value;\n };\n /**\n * getPanel method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * getViewPanel method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","import { detach, closest, Browser, isNullOrUndefined as isNOU, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, EventHandler, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { dispatchEvent, parseHtml, hasClass } from '../base/util';\n/**\n * `Table` module is used to handle table actions.\n */\nvar Table = /** @class */ (function () {\n function Table(parent, serviceLocator) {\n this.ensureInsideTableList = true;\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.l10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n Table.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.createTable, this.renderDlgContent, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.on(events.keyDown, this.keyDown, this);\n };\n Table.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.createTable, this.renderDlgContent);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.docClick, this.docClick);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.tableToolbarAction, this.onToolbarAction);\n this.parent.off(events.dropDownSelect, this.dropdownSelect);\n this.parent.off(events.mouseDown, this.cellSelect);\n this.parent.off(events.tableColorPickerChanged, this.setBGColor);\n this.parent.off(events.keyDown, this.keyDown);\n };\n Table.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.on(events.tableColorPickerChanged, this.setBGColor, this);\n this.parent.on(events.mouseDown, this.cellSelect, this);\n if (this.parent.tableSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n }\n if (!Browser.isDevice && this.parent.tableSettings.resize) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n };\n Table.prototype.dropdownSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Table') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = {\n args: e,\n selection: this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument()),\n selectParent: this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)\n };\n switch (item.subCommand) {\n case 'InsertRowBefore':\n case 'InsertRowAfter':\n this.addRow(args.selection, e);\n break;\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n this.addColumn(args.selection, e);\n break;\n case 'DeleteColumn':\n case 'DeleteRow':\n this.removeRowColumn(args.selection, e);\n break;\n case 'AlignTop':\n case 'AlignMiddle':\n case 'AlignBottom':\n this.verticalAlign(args, e);\n break;\n case 'Dashed':\n case 'Alternate':\n this.tableStyles(args, item.subCommand);\n break;\n }\n };\n Table.prototype.keyDown = function (e) {\n var event = e.args;\n var proxy = this;\n switch (event.action) {\n case 'escape':\n break;\n case 'insert-table':\n if (this.parent.editorMode === 'HTML') {\n var docElement = this.parent.contentModule.getDocument();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(docElement);\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, docElement);\n var args = {\n originalEvent: e.args,\n item: {\n command: 'Table',\n subCommand: 'CreateTable'\n }\n };\n this.insertTableDialog({\n self: this,\n args: args, selection: selection\n });\n }\n event.preventDefault();\n break;\n }\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) && this.contentModule\n && event.code !== 'KeyK') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46) ||\n (event.ctrlKey && event.keyCode === 88)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.removeResizeEle();\n }\n }\n if (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') {\n var closestTd = closest(ele, 'td');\n ele = !isNullOrUndefined(closestTd) && this.parent.inputElement.contains(closestTd) ? closestTd : ele;\n }\n if (ele && (ele.tagName === 'TD' || ele.tagName === 'TH')) {\n switch (event.keyCode) {\n case 9:\n case 37:\n case 39:\n proxy.tabSelection(event, selection, ele);\n break;\n case 40:\n case 38:\n proxy.tableArrowNavigation(event, selection, ele);\n break;\n }\n }\n }\n };\n Table.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'TableHeader':\n this.tableHeader(args.selection, args.args);\n break;\n case 'TableRemove':\n this.removeTable(args.selection, args.args);\n break;\n case 'TableEditProperties':\n this.editTable(args);\n break;\n }\n };\n Table.prototype.verticalAlign = function (args, e) {\n var tdEle = closest(args.selectParent[0], 'td') || closest(args.selectParent[0], 'th');\n if (tdEle) {\n this.parent.formatter.process(this.parent, e, e, { tableCell: tdEle, subCommand: e.item.subCommand });\n }\n };\n Table.prototype.tableStyles = function (args, command) {\n var table = closest(args.selectParent[0], 'table');\n if (command === 'Dashed') {\n (this.parent.element.classList.contains(classes.CLS_TB_DASH_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_DASH_BOR);\n (table.classList.contains(classes.CLS_TB_DASH_BOR)) ? table.classList.remove(classes.CLS_TB_DASH_BOR) :\n table.classList.add(classes.CLS_TB_DASH_BOR);\n }\n if (command === 'Alternate') {\n (this.parent.element.classList.contains(classes.CLS_TB_ALT_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_ALT_BOR) : this.parent.element.classList.add(classes.CLS_TB_ALT_BOR);\n (table.classList.contains(classes.CLS_TB_ALT_BOR)) ? table.classList.remove(classes.CLS_TB_ALT_BOR) :\n table.classList.add(classes.CLS_TB_ALT_BOR);\n }\n this.parent.formatter.saveData();\n this.parent.formatter.editorManager.nodeSelection.restore();\n };\n Table.prototype.insideList = function (range) {\n var blockNodes = this.parent.formatter.editorManager.domNode.blockNodes();\n var nodes = [];\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n else if (blockNodes[i].tagName === 'LI' && blockNodes[i].childNodes[0].tagName !== 'P' &&\n (blockNodes[i].childNodes[0].tagName !== 'OL' &&\n blockNodes[i].childNodes[0].tagName !== 'UL')) {\n nodes.push(blockNodes[i]);\n }\n }\n if (nodes.length > 1 || nodes.length && ((range.startOffset === 0 && range.endOffset === 0))) {\n this.ensureInsideTableList = true;\n return true;\n }\n else {\n this.ensureInsideTableList = false;\n return false;\n }\n };\n Table.prototype.tabSelection = function (event, selection, ele) {\n var insideList = this.insideList(selection.range);\n if ((event.keyCode === 37 || event.keyCode === 39) && selection.range.startContainer.nodeType === 3 ||\n insideList) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (!event.shiftKey && event.keyCode !== 37) {\n var nextElement = (!isNullOrUndefined(ele.nextSibling)) ? ele.nextSibling :\n (!isNullOrUndefined(closest(ele, 'tr').nextSibling) ? closest(ele, 'tr').nextSibling.childNodes[0] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ?\n (closest(ele, 'table').nextSibling.nodeName.toLowerCase() === 'td') ?\n closest(ele, 'table').nextSibling : ele : ele);\n if (ele === nextElement && ele.nodeName === 'TH') {\n nextElement = closest(ele, 'table').rows[1].cells[0];\n }\n if (event.keyCode === 39 && ele === nextElement) {\n nextElement = closest(ele, 'table').nextSibling;\n }\n if (nextElement) {\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n if (ele === nextElement && event.keyCode !== 39 && nextElement) {\n this.addRow(selection, event, true);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n }\n else {\n var prevElement = (!isNullOrUndefined(ele.previousSibling)) ? ele.previousSibling :\n (!isNullOrUndefined(closest(ele, 'tr').previousSibling) ?\n closest(ele, 'tr').previousSibling.childNodes[closest(ele, 'tr').previousSibling.childNodes.length - 1] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ?\n (closest(ele, 'table').previousSibling.nodeName.toLowerCase() === 'td') ? closest(ele, 'table').previousSibling :\n ele : ele);\n if (ele === prevElement && ele.cellIndex === 0 &&\n closest(ele, 'table').tHead) {\n var clsTble = closest(ele, 'table');\n prevElement = clsTble.rows[0].cells[clsTble.rows[0].cells.length - 1];\n }\n if (event.keyCode === 37 && ele === prevElement) {\n prevElement = closest(ele, 'table').previousSibling;\n }\n if (prevElement) {\n (prevElement.textContent.trim() !== '' && closest(prevElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), prevElement) :\n selection.setSelectionText(this.contentModule.getDocument(), prevElement, prevElement, 0, 0);\n }\n }\n };\n Table.prototype.tableArrowNavigation = function (event, selection, ele) {\n var selText = selection.range.startContainer;\n if ((event.keyCode === 40 && selText.nodeType === 3 && (selText.nextSibling && selText.nextSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD')) ||\n (event.keyCode === 38 && selText.nodeType === 3 && (selText.previousSibling && selText.previousSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD'))) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (event.keyCode === 40) {\n ele = (!isNullOrUndefined(closest(ele, 'tr').nextSibling)) ?\n closest(ele, 'tr').nextSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName === 'TH') ?\n closest(ele, 'table').rows[1].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ? closest(ele, 'table').nextSibling :\n ele;\n }\n else {\n ele = (!isNullOrUndefined(closest(ele, 'tr').previousSibling)) ?\n closest(ele, 'tr').previousSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName !== 'TH') ?\n closest(ele, 'table').tHead.rows[0].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ? closest(ele, 'table').previousSibling :\n ele;\n }\n if (ele) {\n selection.setSelectionText(this.contentModule.getDocument(), ele, ele, 0, 0);\n }\n };\n Table.prototype.setBGColor = function (args) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var selectedCell = selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? closest(selectedCell.parentNode, 'td,th') : closest(selectedCell, 'td, th');\n if (selectedCell && (selectedCell.nodeName === 'TD' || selectedCell.nodeName === 'TH')) {\n var items = closest(selectedCell, 'table').querySelectorAll('.' + classes.CLS_TABLE_SEL);\n for (var i = 0; i < items.length; i++) {\n items[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\n }\n };\n Table.prototype.hideTableQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.tableQTBar && document.body.contains(this.quickToolObj.tableQTBar.element)) {\n this.quickToolObj.tableQTBar.hidePopup();\n }\n };\n Table.prototype.tableHeader = function (selection, e) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, { selection: selection, subCommand: e.item.subCommand });\n };\n Table.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.tableQTBar.element.classList.contains('e-rte-pop');\n if (isPopupOpen) {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var closestTable = closest(target, 'table');\n if (target && target.nodeName !== 'A' && target.nodeName !== 'IMG' && (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.parent.contentModule.getEditPanel().contains(closestTable)))\n && !(range.startContainer.nodeType === 3 && !range.collapsed)) {\n var range_1 = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.save(range_1, this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n this.quickToolObj.tableQTBar.showPopup(args.pageX, pageY, target);\n this.parent.formatter.editorManager.nodeSelection.restore();\n }\n else {\n this.hideTableQuickToolbar();\n }\n }\n };\n Table.prototype.tableCellSelect = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement);\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var list = this.dlgDiv.querySelectorAll('.e-rte-tablecell');\n Array.prototype.forEach.call(list, function (item) {\n var parentIndex = Array.prototype.slice.call(item.parentElement.parentElement.children).indexOf(item.parentElement);\n var cellIndex = Array.prototype.slice.call(item.parentElement.children).indexOf(item);\n removeClass([item], 'e-active');\n if (parentIndex <= row && cellIndex <= col) {\n addClass([item], 'e-active');\n }\n });\n this.tblHeader.innerHTML = (col + 1) + 'x' + (row + 1);\n };\n Table.prototype.tableCellLeave = function (e) {\n removeClass(this.dlgDiv.querySelectorAll('.e-rte-tablecell'), 'e-active');\n addClass([this.dlgDiv.querySelector('.e-rte-tablecell')], 'e-active');\n this.tblHeader.innerHTML = 1 + 'x' + 1;\n };\n Table.prototype.tableCellClick = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement) + 1;\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target) + 1;\n this.self.tableInsert(row, col, e, this);\n };\n Table.prototype.tableInsert = function (row, col, e, selectionObj) {\n var proxy = (selectionObj.self) ? selectionObj.self : this;\n var startContainer = selectionObj.selection.range.startContainer;\n if (startContainer.nodeName === 'P' && startContainer.textContent.trim() === '' && !(startContainer.childNodes.length > 0)) {\n startContainer.innerHTML = '<br />';\n }\n var parentNode = startContainer.parentNode;\n if (proxy.parent.editorMode === 'HTML' &&\n ((proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')) ||\n (!proxy.parent.iframeSettings.enable && isNOU(closest(parentNode, '#' + proxy.contentModule.getPanel().id))))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n selectionObj.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n }\n var value = {\n row: row, columns: col, width: {\n minWidth: proxy.parent.tableSettings.minWidth,\n maxWidth: proxy.parent.tableSettings.maxWidth,\n width: proxy.parent.tableSettings.width,\n },\n selection: selectionObj.selection\n };\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n if (proxy.editdlgObj) {\n proxy.editdlgObj.hide();\n }\n proxy.parent.formatter.process(proxy.parent, selectionObj.args, selectionObj.args.originalEvent, value);\n proxy.contentModule.getEditPanel().focus();\n proxy.parent.on(events.mouseDown, proxy.cellSelect, proxy);\n };\n Table.prototype.cellSelect = function (e) {\n var target = e.args.target;\n var tdNode = closest(target, 'td,th');\n target = (target.nodeName !== 'TD' && tdNode && this.parent.contentModule.getEditPanel().contains(tdNode)) ?\n tdNode : target;\n removeClass(this.contentModule.getEditPanel().querySelectorAll('table td, table th'), classes.CLS_TABLE_SEL);\n if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {\n target.removeAttribute('class');\n addClass([target], classes.CLS_TABLE_SEL);\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n }\n };\n Table.prototype.resizeHelper = function (e) {\n if (this.parent.readonly) {\n return;\n }\n var target = e.target || e.targetTouches[0].target;\n var closestTable = closest(target, 'table');\n if (target.nodeName === 'TABLE' || target.nodeName === 'TD' || target.nodeName === 'TH') {\n this.curTable = (closestTable && this.parent.contentModule.getEditPanel().contains(closestTable))\n && (target.nodeName === 'TD' || target.nodeName === 'TH') ?\n closestTable : target;\n this.removeResizeEle();\n this.tableResizeEleCreation(this.curTable, e);\n }\n };\n Table.prototype.tableResizeEleCreation = function (table, e) {\n this.parent.preventDefaultResize(e);\n var columns = Array.prototype.slice.call(table.rows[0].cells, 1);\n var rows = [];\n for (var i = 0; i < table.rows.length; i++) {\n rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);\n }\n var height = parseInt(getComputedStyle(table).height, 10);\n var width = parseInt(getComputedStyle(table).width, 10);\n var pos = this.calcPos(table);\n for (var i = 0; columns.length > i; i++) {\n var colReEle = this.parent.createElement('span', {\n attrs: {\n 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n colReEle.classList.add(classes.CLS_RTE_TABLE_RESIZE, classes.CLS_TB_COL_RES);\n colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +\n 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';\n this.contentModule.getEditPanel().appendChild(colReEle);\n }\n for (var i = 0; rows.length > i; i++) {\n var rowReEle = this.parent.createElement('span', {\n attrs: {\n 'data-row': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n rowReEle.classList.add(classes.CLS_RTE_TABLE_RESIZE, classes.CLS_TB_ROW_RES);\n var rowPosLeft = !isNOU(table.getAttribute('cellspacing')) || table.getAttribute('cellspacing') !== '' ?\n 0 : this.calcPos(rows[i]).left;\n rowReEle.style.cssText = 'width: ' + width + 'px; height: 4px; top: ' +\n (this.calcPos(rows[i]).top + pos.top + rows[i].offsetHeight - 2) +\n 'px; left:' + (rowPosLeft + pos.left) + 'px;';\n this.contentModule.getEditPanel().appendChild(rowReEle);\n }\n var tableReBox = this.parent.createElement('span', {\n className: classes.CLS_TB_BOX_RES, attrs: {\n 'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n tableReBox.style.cssText = 'top: ' + (pos.top + height - 4) +\n 'px; left:' + (pos.left + width - 4) + 'px;';\n if (Browser.isDevice) {\n tableReBox.classList.add('e-rmob');\n }\n this.contentModule.getEditPanel().appendChild(tableReBox);\n };\n Table.prototype.removeResizeEle = function () {\n var item = this.parent.contentModule.getEditPanel().\n querySelectorAll('.e-column-resize, .e-row-resize, .e-table-box');\n if (item.length > 0) {\n for (var i = 0; i < item.length; i++) {\n detach(item[i]);\n }\n }\n };\n Table.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent.nodeName === 'TD' && elem.nodeName === 'TABLE') {\n offsetParent = closest(offsetParent, '.e-control');\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Table.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Table.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Table.prototype.resizeStart = function (e) {\n var _this = this;\n if (this.parent.readonly) {\n return;\n }\n if (Browser.isDevice) {\n this.resizeHelper(e);\n }\n var target = e.target;\n if (target.classList.contains(classes.CLS_TB_COL_RES) ||\n target.classList.contains(classes.CLS_TB_ROW_RES) ||\n target.classList.contains(classes.CLS_TB_BOX_RES)) {\n e.preventDefault();\n this.parent.preventDefaultResize(e);\n removeClass(this.curTable.querySelectorAll('td,th'), classes.CLS_TABLE_SEL);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n this.resizeBtnInit();\n this.hideTableQuickToolbar();\n if (target.classList.contains(classes.CLS_TB_COL_RES)) {\n this.resizeBtnStat.column = true;\n this.columnEle = this.curTable.rows[0].cells[parseInt(target.getAttribute('data-col'), 10)];\n this.colIndex = this.columnEle.cellIndex;\n this.moveEle = e.target;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_ROW_RES)) {\n this.rowEle = this.curTable.rows[parseInt(target.getAttribute('data-row'), 10)];\n this.resizeBtnStat.row = true;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.resizeBtnStat.tableBox = true;\n }\n if (Browser.isDevice && this.helper && !this.helper.classList.contains('e-reicon')) {\n this.helper.classList.add('e-reicon');\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = isBlazor() ? { requestType: 'Table' } : { event: e, requestType: 'Table' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.cancelResizeAction();\n }\n });\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Table.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains('e-reicon')) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n this.pageX = null;\n this.helper = null;\n }\n };\n Table.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: 'e-table-rhelper'\n });\n if (Browser.isDevice) {\n this.helper.classList.add('e-reicon');\n }\n this.contentModule.getEditPanel().appendChild(this.helper);\n this.setHelperHeight();\n };\n Table.prototype.setHelperHeight = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n this.helper.classList.add('e-column-helper');\n this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +\n pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';\n }\n else {\n this.helper.classList.add('e-row-helper');\n this.helper.style.cssText = 'width: ' + getComputedStyle(this.curTable).width + '; top: ' +\n (this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight) +\n 'px; left:' + (this.calcPos(this.rowEle).left + pos.left) + 'px;';\n }\n };\n Table.prototype.updateHelper = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n var left = pos.left + this.calcPos(this.columnEle).left - 1;\n this.helper.style.left = left + 'px';\n }\n else {\n var top_1 = this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight;\n this.helper.style.top = top_1 + 'px';\n }\n };\n Table.prototype.resizing = function (e) {\n var _this = this;\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);\n this.pageX = pageX;\n this.pageY = pageY;\n var args = isBlazor() ? { requestType: 'table' } : { event: e, requestType: 'table' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.cancelResizeAction();\n }\n else {\n var tableReBox = _this.contentModule.getEditPanel().querySelector('.e-table-box');\n var tableWidth = parseInt(getComputedStyle(_this.curTable).width, 10);\n var tableHeight = parseInt(getComputedStyle(_this.curTable).height, 10);\n var paddingSize = +getComputedStyle(_this.contentModule.getEditPanel()).paddingRight.match(/\\d/g).join('');\n var rteWidth = _this.contentModule.getEditPanel().offsetWidth - paddingSize * 2;\n if (_this.resizeBtnStat.column) {\n var cellColl = _this.curTable.rows[0].cells;\n var width = parseFloat(_this.columnEle.offsetWidth.toLocaleString());\n var actualwid = width - mouseX;\n var totalwid = parseFloat(_this.columnEle.offsetWidth.toLocaleString()) +\n parseFloat(cellColl[_this.colIndex - 1].offsetWidth.toLocaleString());\n for (var i = 0; i < _this.curTable.rows.length; i++) {\n if ((totalwid - actualwid) > 20 && actualwid > 20) {\n var leftColumnWidth = totalwid - actualwid;\n var rightColWidth = actualwid;\n _this.curTable.rows[i].cells[_this.colIndex - 1].style.width =\n _this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';\n _this.curTable.rows[i].cells[_this.colIndex].style.width =\n _this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';\n }\n }\n _this.updateHelper();\n }\n else if (_this.resizeBtnStat.row) {\n _this.parent.preventDefaultResize(e);\n var height = parseFloat(_this.rowEle.clientHeight.toString()) + mouseY;\n if (height > 20) {\n _this.rowEle.style.height = height + 'px';\n }\n _this.curTable.style.height = '';\n tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +\n 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';\n _this.updateHelper();\n }\n else if (_this.resizeBtnStat.tableBox) {\n if (!Browser.isDevice) {\n EventHandler.remove(_this.contentModule.getEditPanel(), 'mouseover', _this.resizeHelper);\n }\n var widthType = _this.curTable.style.width.indexOf('%') > -1;\n _this.curTable.style.width = widthType ? _this.convertPixelToPercentage(tableWidth + mouseX, rteWidth) + '%'\n : tableWidth + mouseX + 'px';\n _this.curTable.style.height = tableHeight + mouseY + 'px';\n tableReBox.classList.add('e-rbox-select');\n tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +\n 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';\n }\n }\n });\n };\n Table.prototype.convertPixelToPercentage = function (value, offsetValue) {\n return (value / offsetValue) * 100;\n };\n Table.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n this.removeResizeEle();\n };\n Table.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n if (this.contentModule.getEditPanel().querySelector('.e-table-box') &&\n this.contentModule.getEditPanel().contains(this.contentModule.getEditPanel().querySelector('.e-table-box'))) {\n if (!Browser.isDevice) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n this.removeResizeEle();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n this.helper = null;\n }\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n }\n var args = isBlazor() ? { requestType: 'table' } : { event: e, requestType: 'table' };\n this.parent.trigger(events.resizeStop, args);\n this.parent.formatter.saveData();\n };\n Table.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { column: false, row: false, tableBox: false };\n };\n Table.prototype.addRow = function (selectCell, e, tabkey) {\n var cmd;\n if (tabkey) {\n cmd = {\n item: { command: 'Table', subCommand: 'InsertRowAfter' }\n };\n }\n var value = {\n selection: selectCell,\n subCommand: (tabkey) ? cmd.item.subCommand : e.item.subCommand\n };\n this.parent.formatter.process(this.parent, (tabkey) ? cmd : e, e, value);\n };\n Table.prototype.addColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, width: this.parent.tableSettings.width, subCommand: e.item.subCommand });\n };\n Table.prototype.removeRowColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });\n this.hideTableQuickToolbar();\n };\n Table.prototype.removeTable = function (selection, args, delKey) {\n var cmd;\n if (delKey) {\n cmd = { item: { command: 'Table', subCommand: 'TableRemove' } };\n }\n var value = {\n selection: selection,\n subCommand: (delKey) ? cmd.item.subCommand : args.item.subCommand\n };\n this.parent.formatter.process(this.parent, (delKey) ? cmd : args, args.originalEvent, value);\n this.contentModule.getEditPanel().focus();\n this.removeResizeEle();\n this.hideTableQuickToolbar();\n };\n Table.prototype.renderDlgContent = function (args) {\n var _this = this;\n if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.insertTableDialog(args);\n return;\n }\n if (this.popupObj) {\n this.popupObj.hide();\n return;\n }\n this.hideTableQuickToolbar();\n var header = '1X1';\n var insertbtn = this.l10n.getConstant('inserttablebtn');\n this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup', id: this.rteID + '_table' });\n this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' });\n this.tblHeader.innerHTML = header;\n this.dlgDiv.appendChild(this.tblHeader);\n var tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });\n this.drawTable(tableDiv, args);\n this.dlgDiv.appendChild(tableDiv);\n this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));\n var btnEle = this.parent.createElement('button', {\n className: 'e-insert-table-btn', id: this.rteID + '_insertTable',\n attrs: { type: 'button', tabindex: '0' }\n });\n if (!isNOU(this.parent.getToolbarElement().querySelector('.e-expended-nav'))) {\n this.parent.getToolbarElement().querySelector('.e-expended-nav').setAttribute('tabindex', '1');\n }\n this.dlgDiv.appendChild(btnEle);\n var button = new Button({\n iconCss: 'e-icons e-create-table', content: insertbtn, cssClass: 'e-flat',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n button.isStringTemplate = true;\n button.appendTo(btnEle);\n EventHandler.add(btnEle, 'click', this.insertTableDialog, { self: this, args: args.args, selection: args.selection });\n this.parent.getToolbar().appendChild(this.dlgDiv);\n var target = args.args.originalEvent.target;\n target = target.classList.contains('e-toolbar-item') ? target.firstChild : target.parentElement;\n this.popupObj = new Popup(this.dlgDiv, {\n targetType: 'relative',\n relateTo: target,\n collision: { X: 'fit', Y: 'none' },\n offsetY: 8,\n viewPortElement: this.parent.element,\n position: { X: 'left', Y: 'bottom' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n addClass([this.popupObj.element], 'e-popup-open');\n this.popupObj.refreshPosition(target);\n };\n Table.prototype.docClick = function (e) {\n var target = e.args.target;\n if (target && target.classList && ((this.popupObj && !closest(target, '#' + this.popupObj.element.id) ||\n (this.editdlgObj && !closest(target, '#' + this.editdlgObj.element.id)))) && !target.classList.contains('e-create-table') &&\n target.offsetParent && !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown')) {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (this.editdlgObj) {\n this.editdlgObj.hide();\n }\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n var closestEle = closest(target, 'td');\n var isExist = closestEle && this.parent.contentModule.getEditPanel().contains(closestEle) ? true : false;\n if (target && target.tagName !== 'TD' && target.tagName !== 'TH' && !isExist &&\n closest(target, '.e-rte-quick-popup') === null && target.offsetParent &&\n !target.offsetParent.classList.contains('e-quick-dropdown') &&\n !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')\n && !closest(target, '.e-rte-elements')) {\n removeClass(this.parent.element.querySelectorAll('table td'), classes.CLS_TABLE_SEL);\n if (!Browser.isIE) {\n this.hideTableQuickToolbar();\n }\n }\n if (target && target.classList && !target.classList.contains(classes.CLS_TB_COL_RES) &&\n !target.classList.contains(classes.CLS_TB_ROW_RES) && !target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.removeResizeEle();\n }\n };\n Table.prototype.drawTable = function (tableDiv, args) {\n var rowDiv;\n var tableCell;\n for (var row = 0; row < 3; row++) {\n rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });\n for (var col = 0; col < 10; col++) {\n var display = (row > 2) ? 'none' : 'inline-block';\n tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });\n rowDiv.appendChild(tableCell);\n tableCell.style.display = display;\n if (col === 0 && row === 0) {\n addClass([tableCell], 'e-active');\n }\n EventHandler.add(tableCell, 'mousemove', this.tableCellSelect, this);\n EventHandler.add(rowDiv, 'mouseleave', this.tableCellLeave, this);\n EventHandler.add(tableCell, 'mouseup', this.tableCellClick, { self: this, args: args.args, selection: args.selection });\n }\n tableDiv.appendChild(rowDiv);\n }\n };\n Table.prototype.editTable = function (args) {\n var _this = this;\n this.createDialog(args);\n var editContent = this.tableDlgContent(args);\n var update = this.l10n.getConstant('dialogUpdate');\n var cancel = this.l10n.getConstant('dialogCancel');\n var editHeader = this.l10n.getConstant('tableEditHeader');\n this.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: editContent, header: editHeader,\n buttons: [{\n click: this.applyProperties.bind(this, args),\n buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n this.editdlgObj.element.style.maxHeight = 'none';\n this.editdlgObj.content.querySelector('input').focus();\n this.hideTableQuickToolbar();\n };\n Table.prototype.insertTableDialog = function (args) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n proxy.createDialog(args);\n var dlgContent = proxy.tableCellDlgContent();\n var insert = proxy.l10n.getConstant('dialogInsert');\n var cancel = proxy.l10n.getConstant('dialogCancel');\n proxy.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: dlgContent,\n buttons: [{\n click: proxy.customTable.bind(this, args),\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { proxy.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n proxy.editdlgObj.element.style.maxHeight = 'none';\n proxy.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.tableCellDlgContent = function () {\n var tableColumn = this.l10n.getConstant('columns');\n var tableRow = this.l10n.getConstant('rows');\n var tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });\n var content = '<div class=\"e-rte-field\"><input type=\"text\" '\n + ' data-role =\"none\" id=\"tableColumn\" class=\"e-table-column\"/></div>'\n + '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"tableRow\" class=\"e-table-row\" /></div>';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n this.columnTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableColumn,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.columnTextBox.isStringTemplate = true;\n this.columnTextBox.appendTo(tableWrap.querySelector('#tableColumn'));\n this.rowTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableRow,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.rowTextBox.isStringTemplate = true;\n this.rowTextBox.appendTo(tableWrap.querySelector('#tableRow'));\n return tableWrap;\n };\n Table.prototype.createDialog = function (args) {\n var _this = this;\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\n return;\n }\n var tableDialog = this.parent.createElement('div', { className: 'e-rte-edit-table', id: this.rteID + '_tabledialog' });\n this.parent.element.appendChild(tableDialog);\n var insert = this.l10n.getConstant('dialogInsert');\n var cancel = this.l10n.getConstant('dialogCancel');\n var header = this.l10n.getConstant('tabledialogHeader');\n var dialogModel = {\n header: header,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n _this.editdlgObj.destroy();\n detach(_this.editdlgObj.element);\n _this.dialogRenderObj.close(event);\n _this.editdlgObj = null;\n }\n };\n this.editdlgObj = this.dialogRenderObj.render(dialogModel);\n this.editdlgObj.appendTo(tableDialog);\n if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n };\n Table.prototype.customTable = function (args, e) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.rowTextBox.value && proxy.columnTextBox.value) {\n var argument = ((Browser.isDevice || (!isNullOrUndefined(args.args)\n && !isNullOrUndefined(args.args.originalEvent) &&\n args.args.originalEvent.action === 'insert-table')\n || proxy.parent.inlineMode.enable) ? args : this);\n proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);\n }\n };\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.applyProperties = function (args, e) {\n var dialogEle = this.editdlgObj.element;\n var table = closest(args.selectNode[0], 'table');\n table.style.width = dialogEle.querySelector('.e-table-width').value + 'px';\n if (dialogEle.querySelector('.e-cell-padding').value !== '') {\n var tdElm = table.querySelectorAll('td');\n for (var i = 0; i < tdElm.length; i++) {\n var padVal = '';\n if (tdElm[i].style.padding === '') {\n padVal = tdElm[i].getAttribute('style') + ' padding:' +\n dialogEle.querySelector('.e-cell-padding').value + 'px;';\n }\n else {\n tdElm[i].style.padding = dialogEle.querySelector('.e-cell-padding').value + 'px';\n padVal = tdElm[i].getAttribute('style');\n }\n tdElm[i].setAttribute('style', padVal);\n }\n }\n table.cellSpacing = dialogEle.querySelector('.e-cell-spacing').value;\n if (!isNOU(table.cellSpacing) || table.cellSpacing !== '0') {\n addClass([table], classes.CLS_TABLE_BORDER);\n }\n else {\n removeClass([table], classes.CLS_TABLE_BORDER);\n }\n this.parent.formatter.saveData();\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.tableDlgContent = function (e) {\n var selectNode = e.selectParent[0];\n var tableWidth = this.l10n.getConstant('tableWidth');\n var cellPadding = this.l10n.getConstant('cellpadding');\n var cellSpacing = this.l10n.getConstant('cellspacing');\n var tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });\n var widthVal = closest(selectNode, 'table').getClientRects()[0].width;\n var padVal = closest(selectNode, 'td').style.padding;\n var brdSpcVal = closest(selectNode, 'table').getAttribute('cellspacing');\n var content = '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"tableWidth\" class=\"e-table-width\" '\n + ' /></div>' + '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"cellPadding\" class=\"e-cell-padding\" />'\n + ' </div><div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"cellSpacing\" class=\"e-cell-spacing\" /></div>';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: widthVal,\n placeholder: tableWidth,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.isStringTemplate = true;\n widthNum.appendTo(tableWrap.querySelector('#tableWidth'));\n var padding = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: padVal !== '' ? parseInt(padVal, null) : 0,\n placeholder: cellPadding,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n padding.isStringTemplate = true;\n padding.appendTo(tableWrap.querySelector('#cellPadding'));\n var spacing = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: brdSpcVal !== '' && !isNOU(brdSpcVal) ? parseInt(brdSpcVal, null) : 0,\n placeholder: cellSpacing,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n spacing.isStringTemplate = true;\n spacing.appendTo(tableWrap.querySelector('#cellSpacing'));\n return tableWrap;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Table.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Table.prototype.getModuleName = function () {\n return 'table';\n };\n return Table;\n}());\nexport { Table };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Dialog Renderer\n */\nvar DialogRenderer = /** @class */ (function () {\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * dialog render method\n * @hidden\n * @deprecated\n */\n DialogRenderer.prototype.render = function (e) {\n var dlgObj;\n e.beforeOpen = this.beforeOpen.bind(this);\n e.open = this.open.bind(this);\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\n e.beforeClose = this.beforeClose.bind(this);\n dlgObj = new Dialog(e);\n dlgObj.isStringTemplate = true;\n return dlgObj;\n };\n DialogRenderer.prototype.beforeOpen = function (args) {\n this.parent.trigger(events.beforeDialogOpen, args);\n };\n DialogRenderer.prototype.open = function (args) {\n this.parent.trigger(events.dialogOpen, args);\n };\n DialogRenderer.prototype.beforeClose = function (args) {\n this.parent.trigger(events.beforeDialogClose, args);\n };\n /**\n * dialog close method\n * @hidden\n * @deprecated\n */\n DialogRenderer.prototype.close = function (args) {\n this.parent.trigger(events.dialogClose, args);\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","/**\n * @hidden\n * @deprecated\n */\nexport var executeGroup = {\n 'bold': {\n command: 'Style',\n subCommand: 'Bold',\n value: 'strong'\n },\n 'italic': {\n command: 'Style',\n subCommand: 'Italic',\n value: 'em'\n },\n 'underline': {\n command: 'Style',\n subCommand: 'Underline',\n value: 'span'\n },\n 'strikeThrough': {\n command: 'Style',\n subCommand: 'StrikeThrough',\n value: 'span'\n },\n 'insertCode': {\n command: 'Formats',\n subCommand: 'Pre',\n value: 'pre'\n },\n 'superscript': {\n command: 'Effects',\n subCommand: 'SuperScript',\n value: 'sup'\n },\n 'subscript': {\n command: 'Effects',\n subCommand: 'SubScript',\n value: 'sub'\n },\n 'uppercase': {\n command: 'Casing',\n subCommand: 'UpperCase'\n },\n 'lowercase': {\n command: 'Casing',\n subCommand: 'LowerCase'\n },\n 'fontColor': {\n command: 'font',\n subCommand: 'fontcolor',\n value: '#ff0000'\n },\n 'fontName': {\n command: 'font',\n subCommand: 'fontname',\n value: 'Segoe UI'\n },\n 'fontSize': {\n command: 'font',\n subCommand: 'fontsize',\n value: '10pt'\n },\n 'backColor': {\n command: 'font',\n subCommand: 'backgroundcolor',\n value: '#ffff00'\n },\n 'justifyCenter': {\n command: 'Alignments',\n subCommand: 'JustifyCenter'\n },\n 'justifyFull': {\n command: 'Alignments',\n subCommand: 'JustifyFull'\n },\n 'justifyLeft': {\n command: 'Alignments',\n subCommand: 'JustifyLeft'\n },\n 'justifyRight': {\n command: 'Alignments',\n subCommand: 'JustifyRight'\n },\n 'undo': {\n command: 'Actions',\n subCommand: 'Undo'\n },\n 'redo': {\n command: 'Actions',\n subCommand: 'Redo'\n },\n 'createLink': {\n command: 'Links',\n subCommand: 'createLink'\n },\n 'editLink': {\n command: 'Links',\n subCommand: 'createLink'\n },\n 'createImage': {\n command: 'Images',\n subCommand: 'Images'\n },\n 'formatBlock': {\n command: 'Formats',\n value: 'P'\n },\n 'heading': {\n command: 'Formats',\n value: 'H1'\n },\n 'indent': {\n command: 'Indents',\n subCommand: 'Indent'\n },\n 'outdent': {\n command: 'Indents',\n subCommand: 'Outdent'\n },\n 'insertHTML': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: ''\n },\n 'insertText': {\n command: 'InsertText',\n subCommand: 'InsertText',\n value: ''\n },\n 'insertHorizontalRule': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '<hr/>'\n },\n 'insertImage': {\n command: 'Images',\n subCommand: 'Image',\n },\n 'editImage': {\n command: 'Images',\n subCommand: 'Image',\n },\n 'insertTable': {\n command: 'Table',\n subCommand: 'CreateTable'\n },\n 'insertBrOnReturn': {\n command: 'InsertHTML',\n subCommand: 'InsertHTML',\n value: '<br/>'\n },\n 'insertOrderedList': {\n command: 'Lists',\n value: 'OL'\n },\n 'insertUnorderedList': {\n command: 'Lists',\n value: 'UL'\n },\n 'insertParagraph': {\n command: 'Formats',\n value: 'P'\n },\n 'removeFormat': {\n command: 'Clear',\n subCommand: 'ClearFormat'\n }\n};\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\nimport { ToolbarType } from '../base/enum';\nimport { TableStyleItems } from '../models/items';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', cssClass: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', cssClass: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', cssClass: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', cssClass: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', cssClass: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', cssClass: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', cssClass: 'e-verdana' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { text: 'Paragraph', value: 'P', cssClass: 'e-paragraph' },\n { text: 'Code', value: 'Pre', cssClass: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', cssClass: 'e-quote' },\n { text: 'Heading 1', value: 'H1', cssClass: 'e-h1' },\n { text: 'Heading 2', value: 'H2', cssClass: 'e-h2' },\n { text: 'Heading 3', value: 'H3', cssClass: 'e-h3' },\n { text: 'Heading 4', value: 'H4', cssClass: 'e-h4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26',\n ]\n};\n/**\n * Configures the toolbar settings of the RichTextEditor.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property({})\n ], ToolbarSettings.prototype, \"itemConfigs\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RichTextEditor.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('Blob')\n ], ImageSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], ImageSettings.prototype, \"resizeByPercent\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\nvar TableSettings = /** @class */ (function (_super) {\n __extends(TableSettings, _super);\n function TableSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('100%')\n ], TableSettings.prototype, \"width\", void 0);\n __decorate([\n Property(TableStyleItems)\n ], TableSettings.prototype, \"styles\", void 0);\n __decorate([\n Property(true)\n ], TableSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], TableSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], TableSettings.prototype, \"maxWidth\", void 0);\n return TableSettings;\n}(ChildProperty));\nexport { TableSettings };\n/**\n * Configures the quick toolbar settings of the RichTextEditor.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], QuickToolbarSettings.prototype, \"showOnRightClick\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n __decorate([\n Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])\n ], QuickToolbarSettings.prototype, \"table\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configures the Paste Cleanup settings of the RichTextEditor.\n */\nvar PasteCleanupSettings = /** @class */ (function (_super) {\n __extends(PasteCleanupSettings, _super);\n function PasteCleanupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"prompt\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedAttrs\", void 0);\n __decorate([\n Property(['background', 'background-color', 'border', 'border-bottom', 'border-left', 'border-radius', 'border-right', 'border-style', 'border-top', 'border-width', 'clear', 'color', 'cursor', 'direction', 'display', 'float', 'font', 'font-family', 'font-size', 'font-weight', 'font-style', 'height', 'left', 'line-height', 'margin', 'margin-top', 'margin-left', 'margin-right', 'margin-bottom', 'max-height', 'max-width', 'min-height', 'min-width', 'overflow', 'overflow-x', 'overflow-y', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'position', 'right', 'table-layout', 'text-align', 'text-decoration', 'text-indent', 'top', 'vertical-align', 'visibility', 'white-space', 'width'])\n ], PasteCleanupSettings.prototype, \"allowedStyleProps\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedTags\", void 0);\n __decorate([\n Property(true)\n ], PasteCleanupSettings.prototype, \"keepFormat\", void 0);\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"plainText\", void 0);\n return PasteCleanupSettings;\n}(ChildProperty));\nexport { PasteCleanupSettings };\n/**\n * Configures the font family settings of the RichTextEditor.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RichTextEditor.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RichTextEditor.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RichTextEditor.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RichTextEditor.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select, detach } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append, extend, debounce, isBlazor } from '@syncfusion/ej2-base';\nimport { Touch as EJ2Touch } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { TableSettings, PasteCleanupSettings } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent, getEditValue, isIDevice, decode, isEditableValueEmpty } from '../base/util';\nimport { DialogRenderer } from '../renderer/dialog-renderer';\n/**\n * Represents the Rich Text Editor component.\n * ```html\n * <textarea id=\"rte\"></textarea>\n * <script>\n * var rteObj = new RichTextEditor();\n * rteObj.appendTo(\"#rte\");\n * </script>\n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultResetValue = null;\n /**\n * @hidden\n * @deprecated\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n * @deprecated\n */\n _this.isRTE = false;\n /**\n * @hidden\n * @deprecated\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n * @return {ModuleDeclaration[]}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n modules.push({ member: 'pasteCleanup', args: [this, this.serviceLocator] });\n }\n if (this.enableResize) {\n modules.push({ member: 'resize', args: [this] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.setAttribute('aria-disabled', 'false');\n if (!isNOU(this.htmlAttributes.tabindex)) {\n this.inputElement.setAttribute('tabindex', this.htmlAttributes.tabindex);\n }\n else {\n this.inputElement.setAttribute('tabindex', '0');\n }\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n removeClass([this.getToolbar()], [classes.CLS_TB_FLOAT, classes.CLS_TB_ABS_FLOAT]);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n /**\n * setEnable method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.onBlurHandler = this.blurHandler.bind(this);\n this.onFocusHandler = this.focusHandler.bind(this);\n this.onResizeHandler = this.resizeHandler.bind(this);\n this.clickPoints = { clientX: 0, clientY: 0 };\n this.initialValue = this.value;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n this.persistData();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.persistData = function () {\n if (this.enablePersistence && this.originalElement.tagName === 'TEXTAREA') {\n this.element.id = this.originalElement.id + '_wrapper';\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNOU(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n }\n };\n ;\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n }\n if (this.element.hasAttribute('tabindex')) {\n this.htmlAttributes = { 'tabindex': this.element.getAttribute('tabindex') };\n this.element.removeAttribute('tabindex');\n }\n if (!this.isBlazor()) {\n this.element.innerHTML = '';\n }\n var invalidAttr = ['class', 'style', 'id', 'ejs-for'];\n var htmlAttr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(/^data-val/.test(this.element.attributes[a].name))) { // data-val for asp.net core data annotation validation.\n htmlAttr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(htmlAttr, this.htmlAttributes, htmlAttr);\n this.setProperties({ htmlAttributes: htmlAttr }, true);\n if (!isNOU(this.htmlAttributes.id)) {\n this.element.id = this.htmlAttributes.id;\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOuterWrapper = this.createElement('div', {\n className: this.element.getAttribute('class')\n });\n if (!this.isBlazor()) {\n this.element.innerHTML = '';\n }\n this.element.parentElement.insertBefore(rteOuterWrapper, this.element);\n if (isBlazor()) {\n rteOuterWrapper.appendChild(this.element);\n this.valueContainer = this.createElement('textarea', {\n id: this.element.id + '-value'\n });\n }\n else {\n this.valueContainer = this.element;\n }\n removeClass([this.valueContainer], this.element.getAttribute('class').split(' '));\n if (this.isBlazor()) {\n addClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n this.element = rteOuterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n addClass([this.valueContainer], classes.CLS_RTE_HIDDEN);\n this.element.appendChild(this.valueContainer);\n };\n /**\n * getPersistData method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the Rich Text Editor component\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n this.focusHandler({});\n }\n };\n /**\n * Blurs the Rich Text Editor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n this.blurHandler({});\n }\n };\n /**\n * Selects all the content in RichTextEditor\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n * @param {Range} range - Specify the range which you want to select within the content.\n * The method used to select a particular sentence or word or entire document.\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Executes the commands\n * @param {CommandName} CommandName - Specifies the name of the command to be executed.\n * @param {string | HTMLElement | ILinkCommandsArgs | IImageCommandsArgs} value - Specifies the value that you want to execute.\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value, option) {\n value = this.htmlPurifier(commandName, value);\n if (this.editorMode === 'HTML') {\n var range = this.getRange();\n if (this.iframeSettings.enable) {\n this.formatter.editorManager.nodeSelection.Clear(this.element.ownerDocument);\n }\n var toFocus = (this.iframeSettings.enable &&\n range.startContainer === this.inputElement) ? true : !this.inputElement.contains(range.startContainer);\n if (toFocus) {\n this.focusIn();\n }\n }\n var tool = executeGroup[commandName];\n if (option && option.undo) {\n if (option.undo && this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n }\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n if (option && option.undo) {\n this.formatter.saveData();\n this.formatter.enableUndo(this);\n }\n this.setPlaceHolder();\n };\n RichTextEditor.prototype.htmlPurifier = function (command, value) {\n if (this.editorMode === 'HTML') {\n switch (command) {\n case 'insertHTML':\n if (this.enableHtmlSanitizer) {\n if (typeof value === 'string') {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value.outerHTML);\n }\n }\n break;\n case 'insertTable':\n if (isNOU(value.width)) {\n value.width = { minWidth: this.tableSettings.minWidth,\n maxWidth: this.tableSettings.maxWidth, width: this.tableSettings.width };\n }\n break;\n case 'insertImage':\n var temp = this.createElement('img', {\n attrs: {\n src: value.url\n }\n });\n var imageValue = temp.outerHTML;\n if (this.enableHtmlSanitizer) {\n imageValue = this.htmlEditorModule.sanitizeHelper(temp.outerHTML);\n }\n var url = (imageValue !== '' && (this.createElement('div', {\n innerHTML: imageValue\n }).firstElementChild).getAttribute('src')) || null;\n url = !isNOU(url) ? url : '';\n value.url = url;\n if (isNOU(value.width)) {\n value.width = { minWidth: this.insertImageSettings.minWidth,\n maxWidth: this.insertImageSettings.maxWidth, width: this.insertImageSettings.width };\n }\n if (isNOU(value.height)) {\n value.height = { minHeight: this.insertImageSettings.minHeight,\n maxHeight: this.insertImageSettings.maxHeight, height: this.insertImageSettings.height };\n }\n break;\n case 'createLink':\n var tempNode = this.createElement('a', {\n attrs: {\n href: value.url\n }\n });\n var linkValue = tempNode.outerHTML;\n if (this.enableHtmlSanitizer) {\n linkValue = this.htmlEditorModule.sanitizeHelper(tempNode.outerHTML);\n }\n var href = (linkValue !== '' && (this.createElement('div', {\n innerHTML: linkValue\n }).firstElementChild).getAttribute('href')) || null;\n href = !isNOU(href) ? href : '';\n value.url = href;\n break;\n }\n }\n return value;\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.render = function () {\n if (this.value && !this.valueTemplate) {\n this.setProperties({ value: this.serializeValue(this.value) }, true);\n }\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n if (this.value !== null) {\n if (!this.isBlazor()) {\n this.valueContainer.defaultValue = this.value;\n }\n else {\n this.defaultResetValue = this.value;\n }\n }\n (!this.enabled) ? this.unWireEvents() : this.eventInitializer();\n this.renderComplete();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n this.restrict(e);\n if (this.editorMode === 'HTML' && ((e.which === 8 && e.code === 'Backspace') || (e.which === 46 && e.code === 'Delete'))) {\n var range = this.getRange();\n var startNode = range.startContainer.nodeName === '#text' ? range.startContainer.parentElement :\n range.startContainer;\n if (closest(startNode, 'pre') &&\n (e.which === 8 && range.startContainer.textContent.charCodeAt(range.startOffset - 1) === 8203) ||\n (e.which === 46 && range.startContainer.textContent.charCodeAt(range.startOffset) === 8203)) {\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer = e.which === 8 ? range.startOffset - 1 : range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, pointer);\n }\n else if ((e.code === 'Backspace' && e.which === 8) &&\n range.startContainer.textContent.charCodeAt(0) === 8203 && range.collapsed) {\n var parentEle = range.startContainer.parentElement;\n var index = void 0;\n var i = void 0;\n for (i = 0; i < parentEle.childNodes.length; i++) {\n if (parentEle.childNodes[i] === range.startContainer) {\n index = i;\n }\n }\n var bool = true;\n var removeNodeArray = [];\n for (i = index; i >= 0; i--) {\n if (parentEle.childNodes[i].nodeType === 3 && parentEle.childNodes[i].textContent.charCodeAt(0) === 8203 && bool) {\n removeNodeArray.push(i);\n }\n else {\n bool = false;\n }\n }\n if (removeNodeArray.length > 0) {\n for (i = removeNodeArray.length - 1; i > 0; i--) {\n parentEle.childNodes[removeNodeArray[i]].textContent = '';\n }\n }\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, range.startOffset);\n }\n }\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action !== 'insert-link' &&\n (e.action && e.action !== 'paste' || e.which === 9 ||\n (e.code === 'Backspace' && e.which === 8))) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n this.autoResize();\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n if (e.code === 'KeyX' && e.which === 88 && e.keyCode === 88 && e.ctrlKey && (this.inputElement.innerHTML === '' ||\n this.inputElement.innerHTML === '<br>')) {\n this.inputElement.innerHTML = getEditValue('<p><br></p>', this);\n }\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n this.setPlaceHolder();\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.serializeValue = function (value) {\n if (this.editorMode === 'HTML' && !isNOU(value)) {\n if (this.enableHtmlEncode) {\n value = this.htmlEditorModule.sanitizeHelper(decode(value));\n value = this.encode(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n }\n return value;\n };\n /**\n * This method will clean up the HTML against cross-site scripting attack and return the HTML as string.\n * It's only applicable to editorMode as `HTML`.\n * @param {string} value - Specifies the value that you want to sanitize.\n * @return {string}\n */\n RichTextEditor.prototype.sanitizeHtml = function (value) {\n return this.serializeValue(value);\n };\n /**\n * updateValue method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n var inputVal = this.inputElement.innerHTML;\n this.setProperties({ value: isEditableValueEmpty(inputVal) ? null : inputVal });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.triggerEditArea = function (e) {\n if (!isIDevice()) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n else {\n var touch = (e.touches ? e.changedTouches[0] : e);\n if (this.clickPoints.clientX === touch.clientX && this.clickPoints.clientY === touch.clientY) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n }\n };\n RichTextEditor.prototype.notifyMouseUp = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n this.notify(events.mouseUp, { member: 'mouseUp', args: e,\n touchData: { prevClientX: this.clickPoints.clientX, prevClientY: this.clickPoints.clientY,\n clientX: touch.clientX, clientY: touch.clientY }\n });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n this.triggerEditArea(e);\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n if (this.quickToolbarSettings.showOnRightClick && Browser.isDevice) {\n var target = e.target;\n var closestTable = closest(target, 'table');\n if (target && target.nodeName === 'A' || target.nodeName === 'IMG' || (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.contentModule.getEditPanel().contains(closestTable)))) {\n return;\n }\n }\n this.notifyMouseUp(e);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var evenArgs = {\n originalEvent: e,\n cancel: false,\n requestType: 'Paste'\n };\n this.trigger(events.actionBegin, evenArgs, function (pasteArgs) {\n var currentLength = _this.getText().length;\n var selectionLength = _this.getSelection().length;\n var pastedContentLength = (isNOU(e) || isNOU(e.clipboardData))\n ? 0 : e.clipboardData.getData('text/plain').length;\n var totalLength = (currentLength - selectionLength) + pastedContentLength;\n if (!pasteArgs.cancel && _this.inputElement.contentEditable === 'true' &&\n (_this.maxLength === -1 || totalLength < _this.maxLength)) {\n if (!isNOU(_this.pasteCleanupModule)) {\n _this.notify(events.pasteClean, { args: e });\n }\n else {\n var args_1 = { requestType: 'Paste', editorMode: _this.editorMode, event: e };\n var value = null;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n }\n var file = e && e.clipboardData && e.clipboardData.items.length > 0 ?\n e.clipboardData.items[0].getAsFile() : null;\n if (value !== null) {\n _this.notify(events.paste, {\n file: file,\n args: e,\n text: value\n });\n }\n setTimeout(function () { _this.formatter.onSuccess(_this, args_1); }, 0);\n }\n }\n else {\n e.preventDefault();\n }\n });\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.isRendered) {\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n if (isBlazor()) {\n detach(this.valueContainer);\n this.valueContainer = this.element.querySelector('.e-blazor-hidden.e-control.e-richtexteditor');\n }\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n detach(this.element);\n if (this.originalElement.innerHTML.trim() !== '') {\n if (!isBlazor()) {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n }\n else {\n this.valueContainer.value = !this.isBlazor() ? this.valueContainer.defaultValue : this.defaultResetValue;\n }\n this.element = this.valueContainer;\n for (var i = 0; i < this.originalElement.classList.length; i++) {\n addClass([this.element], this.originalElement.classList[i]);\n }\n removeClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper = null;\n }\n if (!isNOU(this.cssClass)) {\n removeClass([this.element], this.cssClass);\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n this.isRendered = false;\n if (this.enablePersistence) {\n window.localStorage.removeItem(this.getModuleName() + this.element.id);\n }\n }\n };\n RichTextEditor.prototype.removeHtmlAttributes = function () {\n if (this.htmlAttributes) {\n var keys = Object.keys(this.htmlAttributes);\n for (var i = 0; i < keys.length && this.element.hasAttribute(keys[i]); i++) {\n this.element.removeAttribute(keys[i]);\n }\n }\n };\n RichTextEditor.prototype.removeAttributes = function () {\n if (!this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n }\n if (this.enableRtl) {\n removeClass([this.element], classes.CLS_RTL);\n }\n if (this.readonly) {\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n if (this.element.style.width !== '' && this.originalElement.style.width === '') {\n this.element.style.removeProperty('width');\n }\n if (this.element.style.height !== '' && this.originalElement.style.height === '') {\n this.element.style.removeProperty('height');\n }\n this.element.removeAttribute('aria-disabled');\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n if (this.iframeSettings.enable && isBlazor()) {\n return this.inputElement;\n }\n else {\n return this.contentModule.getPanel();\n }\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * Returns the html value of the selected content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getSelectedHtml = function () {\n var range;\n var wrapperElm = this.createElement('div');\n var selection = this.contentModule.getDocument().getSelection();\n if (selection.rangeCount > 0) {\n range = selection.getRangeAt(0);\n var selectedHtml = range.cloneContents();\n wrapperElm.appendChild(selectedHtml);\n }\n return wrapperElm.innerHTML;\n };\n /**\n * For internal use only - Get the module name.\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n var val = void 0;\n var nVal = newProp[prop];\n val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;\n if (!isNOU(nVal) && nVal !== '') {\n this.value = this.serializeValue(((this.enableHtmlEncode) ? this.encode(decode(val)) : val));\n }\n this.updatePanelValue();\n this.setPlaceHolder();\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n if (this.toolbarSettings.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n this.resizeHandler();\n }\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n this.autoResize();\n break;\n case 'readonly':\n this.setReadOnly(false);\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false, false);\n break;\n case 'iframeSettings':\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'maxLength':\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'undoRedoSteps':\n case 'undoRedoTimer':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { newProp: newProp, oldProp: oldProp });\n break;\n case 'enableXhtml':\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n break;\n case 'quickToolbarSettings':\n newProp.quickToolbarSettings.showOnRightClick ? this.wireContextEvent() : this.unWireContextEvent();\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(decode(this.inputElement.innerHTML)) }, true);\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n detach(srcList[i]);\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value = this.value;\n value = (this.enableHtmlEncode && this.value) ? decode(value) : value;\n if (value) {\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n else if (this.editorMode === 'Markdown' && this.inputElement\n && this.inputElement.value.trim() !== value.trim()) {\n this.inputElement.value = value;\n }\n }\n else {\n if (this.editorMode === 'HTML') {\n this.inputElement.innerHTML = '<p><br/></p>';\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n };\n /**\n * setPlaceHolder method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (this.editorMode !== 'Markdown') {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 16px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length === 0 &&\n !isNOU(this.inputElement.firstChild) && this.inputElement.firstChild.nodeName === 'P' &&\n !isNOU(this.inputElement.firstChild.firstChild) && this.inputElement.firstChild.firstChild.nodeName === 'BR') {\n this.placeHolderWrapper.style.display = 'block';\n }\n else {\n this.placeHolderWrapper.style.display = 'none';\n }\n }\n else {\n this.inputElement.setAttribute('placeholder', this.placeholder);\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n this.element.classList.add(cssClass);\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n this.notify(events.rtlMode, { enableRtl: this.enableRtl });\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n this.notify(events.readOnlyMode, { editPanel: this.inputElement, mode: this.readonly });\n };\n /**\n * setReadOnly method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setReadOnly = function (initial) {\n this.updateReadOnly();\n if (!initial) {\n if (this.readonly && this.enabled) {\n this.unbindEvents();\n }\n else if (this.enabled) {\n this.bindEvents();\n }\n }\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var _this = this;\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs, function (printingArgs) {\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(_this.inputElement, printWind);\n if (!printingArgs.cancel) {\n var actionArgs = {\n requestType: 'print'\n };\n _this.trigger(events.actionComplete, actionArgs);\n }\n });\n };\n /**\n * Refresh the view of the editor.\n * @public\n */\n RichTextEditor.prototype.refreshUI = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the Rich Text Editor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n if (this.readonly) {\n return;\n }\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the Rich Text Editor component.\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be enable in Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true, muteToolbarUpdate);\n };\n /**\n * Disables the given toolbar items in the Rich Text Editor component.\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be disable in Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false, muteToolbarUpdate);\n };\n /**\n * Removes the give toolbar items from the Rich Text Editor component.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be remove from Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n * @public\n * @deprecated\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n this.serviceLocator.register('dialogRenderObject', new DialogRenderer(this));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false, true);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode && !isNOU(this.value)) {\n this.setProperties({ value: this.encode(decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true, false);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.isBlazor = function () {\n return (!isBlazor() ? false : true);\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else {\n var innerHtml = !isNOU(this.element.innerHTML) && this.element.innerHTML.replace(/<(\\/?|\\!?)(!--!--)>/g, '').trim();\n if (innerHtml !== '') {\n if (this.element.tagName === 'TEXTAREA') {\n this.setProperties({ value: decode(innerHtml) });\n }\n else {\n this.setProperties({ value: innerHtml });\n }\n }\n }\n };\n /**\n * setContentHeight method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var rteHeightPercent;\n var heightPercent;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n if (this.element.offsetHeight === 0 && this.height !== 'auto' && !this.getToolbar()) {\n rteHeight = parseInt(this.height, 10);\n heightPercent = typeof (this.height) === 'string' && this.height.indexOf('%') > -1;\n if (heightPercent) {\n rteHeightPercent = this.height;\n }\n }\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var rzHeight = this.enableResize ?\n this.element.querySelector('.' + classes.CLS_RTE_RES_HANDLE).offsetHeight + 8 : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto' && rzHeight === 0) ? 'auto' : rteHeight - (tbHeight + expandPopHeight + rzHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto' && !(this.element.classList.contains('e-rte-full-screen'))) {\n heightValue = 'auto';\n }\n else {\n heightValue = heightPercent ? rteHeightPercent : rteHeight - (tbHeight + rzHeight) + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n if (isExpand) {\n setStyleAttribute(this.getToolbar().parentElement, { height: (tbHeight + expandPopHeight) + 'px' });\n }\n else {\n setStyleAttribute(this.getToolbar().parentElement, { height: tbHeight + 'px' });\n }\n }\n if (rzHeight === 0) {\n this.autoResize();\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * Returns the maximum number of characters in the Rich Text Editor.\n * @public\n */\n RichTextEditor.prototype.getCharCount = function () {\n var htmlText = this.editorMode === 'Markdown' ? this.inputElement.value.trim() :\n this.inputElement.textContent.trim();\n return htmlText.length;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n /**\n * getID method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getID = function () {\n return (this.originalElement.tagName === 'TEXTAREA' ? this.valueContainer.id : this.element.id);\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n this.clickPoints = { clientX: touch.clientX, clientY: touch.clientY };\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n /**\n * preventDefaultResize method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = false;\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n isExpand = this.toolbarModule.baseToolbar.toolbarObj.element.classList.contains(classes.CLS_EXPAND_OPEN);\n }\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.contentScrollHandler = function (e) {\n this.notify(events.contentscroll, { args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if ((!this.isRTE || this.isFocusOut)) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '<p><br></p>') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n var active = document.activeElement;\n if (active === this.element || active === this.getToolbarElement() || active === this.contentModule.getEditPanel()\n || ((this.iframeSettings.enable && active === this.contentModule.getPanel()) &&\n e.target && !e.target.classList.contains('e-img-inner')\n && (e.target && e.target.parentElement\n && !e.target.parentElement.classList.contains('e-img-wrap')))\n || closest(active, '.e-rte-toolbar') === this.getToolbarElement()) {\n this.contentModule.getEditPanel().focus();\n if (!isNOU(this.getToolbarElement())) {\n this.getToolbarElement().setAttribute('tabindex', '-1');\n var items = this.getToolbarElement().querySelectorAll('[tabindex=\"0\"]');\n for (var i = 0; i < items.length; i++) {\n items[i].setAttribute('tabindex', '-1');\n }\n }\n }\n this.preventDefaultResize(e);\n this.trigger('focus', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.saveInterval) && this.saveInterval > 0) {\n this.timeInterval = setInterval(this.updateIntervalValue.bind(this), this.saveInterval);\n }\n EventHandler.add(document, 'mousedown', this.onDocumentClick, this);\n }\n if (!isNOU(this.getToolbarElement())) {\n var toolbarItem = this.getToolbarElement().querySelectorAll('input,select,button,a,[tabindex]');\n for (var i = 0; i < toolbarItem.length; i++) {\n if ((!toolbarItem[i].classList.contains('e-rte-dropdown-btn') &&\n !toolbarItem[i].classList.contains('e-insert-table-btn')) &&\n (!toolbarItem[i].hasAttribute('tabindex') ||\n toolbarItem[i].getAttribute('tabindex') !== '-1')) {\n toolbarItem[i].setAttribute('tabindex', '-1');\n }\n }\n }\n };\n RichTextEditor.prototype.getUpdatedValue = function () {\n var value;\n if (this.editorMode === 'HTML') {\n value = (this.inputElement.innerHTML === '<p><br></p>') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n }\n else {\n value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n return value;\n };\n RichTextEditor.prototype.updateIntervalValue = function () {\n this.setProperties({ value: this.getUpdatedValue() }, true);\n this.valueContainer.value = this.value;\n this.invokeChangeEvent();\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n var rteElement = closest(target, '.' + classes.CLS_RTE);\n if (!this.element.contains(e.target) && document !== e.target && rteElement !== this.element &&\n !closest(target, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n var rteElement = closest(trg, '.' + classes.CLS_RTE);\n if (rteElement && rteElement === this.element) {\n this.isBlur = false;\n if (trg === this.getToolbarElement()) {\n trg.setAttribute('tabindex', '-1');\n }\n }\n else if (closest(trg, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n var value = this.getUpdatedValue();\n this.setProperties({ value: value });\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n /**\n * invokeChangeEvent method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var eventArgs = {\n value: this.value\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.add(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler, this);\n }\n };\n RichTextEditor.prototype.wireContextEvent = function () {\n if (this.quickToolbarSettings.showOnRightClick) {\n EventHandler.add(this.inputElement, 'contextmenu', this.contextHandler, this);\n if (Browser.isDevice) {\n this.touchModule = new EJ2Touch(this.inputElement, { tapHold: this.touchHandler.bind(this), tapHoldThreshold: 500 });\n }\n }\n };\n RichTextEditor.prototype.unWireContextEvent = function () {\n EventHandler.remove(this.inputElement, 'contextmenu', this.contextHandler);\n if (Browser.isDevice && this.touchModule) {\n this.touchModule.destroy();\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.remove(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler);\n }\n };\n RichTextEditor.prototype.touchHandler = function (e) {\n this.notifyMouseUp(e.originalEvent);\n this.triggerEditArea(e.originalEvent);\n };\n RichTextEditor.prototype.contextHandler = function (e) {\n var closestElem = closest(e.target, 'a, table, img');\n if (this.inlineMode.onSelection === false || (!isNOU(closestElem) && this.inputElement.contains(closestElem)\n && (closestElem.tagName === 'IMG' || closestElem.tagName === 'TABLE' || closestElem.tagName === 'A'))) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n var defaultValue = this.valueContainer.defaultValue.trim();\n this.setProperties({ value: defaultValue === '' ? null : (this.isBlazor() ? this.defaultResetValue : defaultValue) });\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.autoResize = function () {\n var _this = this;\n if (this.height === 'auto') {\n if (this.editorMode === 'Markdown') {\n setTimeout(function () { _this.setAutoHeight(_this.inputElement); }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () { _this.setAutoHeight(iframeElement_1); }, 100);\n this.inputElement.style.overflow = 'hidden';\n }\n }\n else {\n this.inputElement.style.overflow = null;\n }\n };\n RichTextEditor.prototype.setAutoHeight = function (element) {\n if (!isNOU(element)) {\n element.style.height = '';\n element.style.height = this.inputElement.scrollHeight + 'px';\n element.style.overflow = 'hidden';\n }\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.element.addEventListener('focusin', this.onFocusHandler, true);\n this.element.addEventListener('focusout', this.onBlurHandler, true);\n if (this.readonly && this.enabled) {\n return;\n }\n this.bindEvents();\n };\n RichTextEditor.prototype.restrict = function (e) {\n if (this.maxLength >= 0) {\n var element = this.editorMode === 'Markdown' ? this.contentModule.getText() :\n e.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 46, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.which === array[i]) {\n if (e.ctrlKey && e.which === 65) {\n return;\n }\n else if (e.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.maxLength && this.maxLength !== -1) && e.which !== arrayKey) {\n e.preventDefault();\n }\n }\n };\n RichTextEditor.prototype.bindEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: __assign({}, this.formatter.keyConfig, this.keyConfig), eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30), this);\n EventHandler.add(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler, this);\n this.wireContextEvent();\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut' || e.event.action === 'delete')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n this.element.removeEventListener('focusin', this.onFocusHandler, true);\n this.element.removeEventListener('focusout', this.onBlurHandler, true);\n if (this.readonly && this.enabled) {\n return;\n }\n this.unbindEvents();\n };\n RichTextEditor.prototype.unbindEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30));\n EventHandler.remove(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler);\n this.unWireContextEvent();\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler);\n EventHandler.remove(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, PasteCleanupSettings)\n ], RichTextEditor.prototype, \"pasteCleanupSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Complex({}, TableSettings)\n ], RichTextEditor.prototype, \"tableSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableResize\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableXhtml\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableAutoUrl\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(10000)\n ], RichTextEditor.prototype, \"saveInterval\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeQuickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarStatusUpdate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploading\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadSuccess\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadFailed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageRemoving\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterImageDelete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStop\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","import * as index from './index';\nindex.RichTextEditor.Inject(index.Toolbar, index.Link, index.Image, index.Count, index.QuickToolbar, index.HtmlEditor, index.MarkdownEditor, index.Table, index.PasteCleanup, index.Resize);\nexport * from './index';\n"],"names":["getLocale","self","localeItems","item","i","length","value","subCommand","localeObj","getConstant","locale","text","updateDropDownLocale","alignmentItems","forEach","alignmentLocale","imageDisplayItems","displayLocale","tableRowsItems","tableRowLocale","tableColumnsItems","tableColumnLocale","TableCellVerticalAlignItems","tableVerticalLocale","TableStyleItems","tableStyleLocale","getIndex","val","items","index","some","toLocaleLowerCase","hasClass","element","className","classList","contains","getDropDownValue","type","returnType","data","result","k","isNOU","iconCss","isIDevice","Browser","isDevice","isIos","getFormattedFontSize","pageYOffset","e","parentElement","isIFrame","window","getBoundingClientRect","top","clientY","pageY","getTooltipText","serviceLocator","i10n","getService","itemLocale","toolsLocale","setToolbarStatus","isPopToolbar","dropDown","dropDownModule","args","_i","keys_1","Object","keys","key","j","tbItems","itemStr","addClass","tbElements","classes.CLS_ACTIVE","removeClass","parent","toolbarSettings","formatDropDown","isDestroyed","formatItems","format","types","formatContent","default","content","width","dataBind","alignDropDown","model.alignmentItems","fontNameDropDown","fontNameItems","fontFamily","fontNameContent","name_1","title","fontSizeDropDown","fontSizeItems","fontSize","fontSizeContent","replace","getCollection","getTBarItemsIndex","toolbarItems","itemsIndex","push","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","selectAll","classes.CLS_TB_ITEM","keys_2","target","enableItems","dispatchEvent","evt","document","createEvent","initEvent","parseHtml","tempNode","createElement","innerHTML","DocumentFragment","createRange","createContextualFragment","getTextNodesUnder","docElement","node","nodes","firstChild","nextSibling","nodeType","concat","toObjectLowerCase","obj","convertedValue","getEditValue","rteObj","updateTextNode","enableHtmlEncode","decode","setProperties","setAttribute","resultElm","childNodes","isPreviousInlineElem","previousParent","paraElm","nodeName","textContent","indexOf","trim","inlineNode","appendChild","detach","imageElm","querySelectorAll","classes.CLS_RTE_IMAGE","add","classes.CLS_IMGINLINE","classes.CLS_IMGBREAK","isEditableValueEmpty","sanitizeHelper","enableHtmlSanitizer","SanitizeHtmlHelper","beforeSanitize","beforeEvent","cancel","helper","extend","trigger","isNullOrUndefined","serializeValue","convertToBlob","dataUrl","arr","split","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","Blob","setEditFrameFocus","editableElement","selector","iframe","querySelector","contentWindow","focus","tableElm","getAttribute","removeAttribute","tdElm","style","removeProperty","classes.CLS_TABLE","setAttributes","htmlAttributes","rte","isFrame","initial","contentModule","getDocument","_a","htmlAttr","enabled","setEnable","readonly","setReadOnly","inputElement","placeholder","setPlaceHolder","valueContainer","initialEnd","destroy","modelChanged","keyUp","keyDown","selectionSave","mouseDown","paste","rtlMode","checkUndo","CLS_RTE","CLS_QUICK_TB","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_BTN","CLS_TB_ITEM","CLS_IMGBREAK","CLS_IMGINLINE","CLS_COUNT","CLS_ACTIVE","CLS_TB_ALT_BOR","CLS_RTE_IMAGE","CLS_TABLE","RenderType","ToolbarType","templateItems","tools","alignments","id","icon","tooltip","command","justifyleft","justifycenter","justifyright","justifyfull","fontname","fontsize","fontcolor","backgroundcolor","bold","italic","underline","strikethrough","clearformat","clearall","cut","copy","unorderedlist","orderedlist","indent","outdent","undo","redo","superscript","subscript","createlink","openlink","editlink","removelink","image","createtable","removetable","align","caption","remove","openimagelink","editimagelink","removeimagelink","insertlink","display","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","print","formats","sourcecode","preview","viewside","insertcode","tableheader","tableremove","tablerows","tablecolumns","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","styles","imageAlignItems","cssClass","defaultLocale","justifyLeft","justifyCenter","justifyRight","justifyFull","fontName","fontColor","backgroundColor","clearFormat","clearAll","unorderedList","orderedList","createLink","openLink","editLink","removeLink","insertLink","altText","lowerCase","upperCase","insertCode","linkText","linkTooltipLabel","linkWebUrl","linkTitle","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","browse","imageUrl","imageCaption","imageSizeHeader","imageHeight","imageWidth","textPlaceholder","inserttablebtn","tabledialogHeader","tableWidth","cellpadding","cellspacing","columns","rows","tableRows","tableColumns","tableCellHorizontalAlign","tableCellVerticalAlign","createTable","removeTable","tableHeader","tableRemove","tableCellBackground","tableEditProperties","insertColumnLeft","insertColumnRight","deleteColumn","insertRowBefore","insertRowAfter","deleteRow","tableEditHeader","TableHeadingText","TableColText","imageInsertLinkHeader","editImageHeader","alignmentsDropDownLeft","alignmentsDropDownCenter","alignmentsDropDownRight","alignmentsDropDownJustify","imageDisplayDropDownInline","imageDisplayDropDownBreak","tableInsertRowDropDownBefore","tableInsertRowDropDownAfter","tableInsertRowDropDownDelete","tableInsertColumnDropDownLeft","tableInsertColumnDropDownRight","tableInsertColumnDropDownDelete","tableVerticalAlignDropDownTop","tableVerticalAlignDropDownMiddle","tableVerticalAlignDropDownBottom","tableStylesDropDownDashedBorder","tableStylesDropDownAlternateRows","pasteFormat","pasteFormatContent","plainText","cleanFormat","keepFormat","pasteDialogOk","pasteDialogCancel","insertcolumnleft","insertcolumnright","deletecolumn","aligntop","alignmiddle","alignbottom","insertrowbefore","insertrowafter","deleterow","ToolbarRenderer","this","wireEvent","prototype","on","events.destroy","unWireEvent","off","popupOverlay","EventHandler","onPopupOverlay","removePopupContainer","toolbarBeforeCreate","mode","enableCollision","toolbarCreated","notify","toolbarClicked","dropDownSelected","beforeDropDownItemRender","dropDownOpen","popupModal","events.selectionSave","dropDownClose","popupContainer","popupEle","parentNode","insertBefore","undefined","renderToolbar","setPanel","renderPanel","overflowMode","rteToolbarObj","Toolbar","beforeCreate","bind","created","clicked","enablePersistence","enableRtl","isStringTemplate","appendTo","renderDropDownButton","css","_this","inlineMode","enable","proxy","DropDownButton","select","beforeOpen","divNode","close","open","beforeItemRender","tabIndex","getElementById","getID","closest","setIsModel","nextElementSibling","zIndex","position","parseInt","toString","paletteSelection","dropDownArgs","currentElement","ele","colorbox","slice","call","borderBottomColor","filter","renderColorPickerDropDown","colorPicker","CLS_RTE_ELEMENTS","range","inlineEle","event","currentDropdown","colorpickerValue","formatter","editorManager","nodeSelection","getRange","startContainer","iframeSettings","ownerDocument","collapsed","inst","getInstance","ColorPicker","showButtons","onclick","toggle","setColorPickerContentWidth","focusEle","pickerRefresh","beforeClose","dropElement","lastElementChild","onmousedown","onkeydown","popupElem","offsetWidth","Popup","refreshPosition","popupInst","relateTo","body","X","Y","targetType","collision","offsetY","colorPickerContent","borderWidth","getComputedStyle","borderBottomWidth","formatUnit","children","renderColorPicker","inline","modeSwitcher","beforeTileRender","change","colorPickerArgs","currentValue","rgba","beforeModeSwitch","presetColors","colorCode","getPanel","toolbarPanel","panel","BaseToolbar","locator","renderFactory","addEventListener","itemConfigs","events.rtlMode","setRtl","removeEventListener","getTemplateObject","container","tagName","template","outerHTML","tooltipText","getObject","toLowerCase","prefixIcon","getItems","this_1","tbItems_1","click","proxy_1","callback_1","getUndoRedoStack","saveData","getToolbarOptions","render","toolbarRenderer","getRenderer","DropDownButtons","initializeInstance","beforeRender","dropdownContent","renderDropDowns","containerType","tbElement","model.templateItems","targetElement","classes.CLS_DROPDOWN_BTN","formatItem","defineProperties","enumerable","classes.CLS_DROPDOWN_POPUP","itemName","fontItem","getEditNode","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","verticalAlignDropDown","tableStylesDropDown","getUpdateItems","dropDownItems","onPropertyChanged","model","newProp","_b","_c","fontItems","classes.CLS_QUICK_TB","_d","_e","_f","_g","getEditPanel","tableRowsDropDown","model.tableRowsItems","tableColumnsDropDown","model.tableColumnsItems","tableCellVerticalAlignDropDown","model.TableCellVerticalAlignItems","displayDropDown","model.imageDisplayItems","imageAlignDropDown","model.imageAlignItems","tableSettings","removeDropDownClasses","destroyDropDowns","onIframeMouseDown","events.modelChanged","ServiceLocator","services","register","name","RendererFactory","rendererMap","addRenderer","rName","getEnumValue","ToolbarAction","toolbarClick","dropDownSelect","renderSelection","controlParent","activeEle","quickToolbarModule","tableQTBar","process","originalEvent","isToolbar","isTransformChild","model.updateDropDownLocale","model.tools","contentRenderer","Content","editPanel","toolbarBindEvent","keyBoardModule","KeyboardEvents","getToolbarElement","keyAction","toolBarKeyDown","keyConfigs","keyConfig","eventName","action","createToolbarElement","enableFloating","tbWrapper","firstElementChild","getToolbarMode","tbMode","Expand","Scrollable","checkToolbarResponsive","tBarMode","MultiRow","addFixedTBarClass","wireEvents","checkIsTransformChild","transformElements","toggleFloatClass","topValue","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","tbHeight","getToolbarHeight","getExpandTBarPopHeight","scrollParentRelativeTop","trgHeight","offsetHeight","bodyStyle","parseFloat","marginTop","paddingTop","targetTop","scrollParentYOffset","isMSPointer","scrollTop","scrollParentRect","scrollParentTop","outOfRange","parent_1","innerHeight","bottom","setStyleAttribute","refreshToolbarOverflow","divEle","iframeEle","targetItem","updateItem","getBaseToolbarObject","disableToolbarItem","removeFixedTBarClass","showFixedTBar","hideFixedTBar","addTBarItem","prefixId","updateToolbarStatus","fullScreen","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","addItems","enableTBarItems","isEnable","muteToolbarUpdate","undoRedoManager","getUndoStatus","removeTBarItems","removeItems","popHeight","expandPopup","refreshOverflow","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","unWireEvents","scrollHandler","getDOMVisibility","el","offsetParent","mouseDownHandler","focusChangeHandler","dropDownBeforeOpenHandler","tbFocusHandler","activeElm","activeElement","isToolbaractive","toolbarItem","tbKeydownHandler","toolbarMouseDownHandler","trg","setContentHeight","toolbarActionModule","events.initialEnd","onRefresh","events.mouseDown","refreshToolbar","module","getModuleName","wireScrollElementsEvents","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","__decorate","decorators","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","keyCode","backspace","tab","enter","shift","control","alt","pause","capslock","space","escape","pageup","pagedown","end","home","leftarrow","uparrow","rightarrow","downarrow","insert","delete","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","semicolon","plus","comma","minus","dot","forwardslash","graveaccent","openbracket","backslash","closebracket","singlequote","]","[","=","_super","options","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","curkeyCode","which","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","unwireEvents","oldProp","config","configCache","keyData","Number","getKeyCode","keyVal","toUpperCase","Property","Event","NotifyPropertyChanges","Base","ColorPickerInput","renderColorPickerInput","targetID","suffixID","fontNode","fontColorPicker","fontColorDropDown","backNode","backgroundColorPicker","backgroundColorDropDown","destroyColorPicker","innerEle","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","popupId","getUniqueID","stringItems","createToolbar","renderPopup","quickTBarObj","refresh","setPosition","x","y","imgWrapper","targetOffsetTop","offsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","left","offsetLeft","popupObj","right","checkCollision","viewPort","parentTop","contentTop","windowY","isCollide","popup","windowHeight","windowWidth","bodyRightSpace","showPopup","eventArgs","isBlazor","beforeQuickToolbarArgs","editPanelTop","editPanelHeight","bodyRight","marginRight","paddingRight","innerWidth","toolbarAvail","getToolbar","toolbarModule","expTBHeight","tBarHeight","cntEle","enableToolbarItem","append","showPopupData","show","duration","isIE","maxWidth","hidePopup","viewSourcePanel","sourceCodeModule","getViewPanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","updateStatus","PopupRenderer","quickToolbarOpen","hide","popupPanel","QuickToolbar","formattedItems","getQTBarOptions","popType","renderType","createQTBar","qTBar","initializeQuickToolbars","onSelection","selectionChangeHandler","onMouseDown","isBlur","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","quickToolbarSettings","link","LinkToolbar","TextToolbar","ImageToolbar","table","TableToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","clearTimeout","deBouncer","setTimeout","mouseUpHandler","coordinates","touches","changedTouches","touchData","prevClientX","clientX","prevClientY","offsetX","pageX","closestAnchor","keyDownHandler","inlineQTBarMouseDownHandler","keyUpHandler","onSelectionChange","getSelection","isCollapsed","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","events.keyUp","unWireInlineQTBarEvents","toolbarUpdated","actionOnScroll","onKeyDown","Count","renderCount","appendCount","maxLength","charCountBackground","htmlLength","htmlText","editorMode","string","percentage","member","MarkdownSelection","getLineNumber","textarea","point","substr","getSelectedText","start","selectionStart","selectionEnd","substring","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","lines","parents","selectedPoints","selectedLine","startLength","join","firstPoint","line","points","lastPoint","setSelection","setSelectionRange","save","restore","textArea","isStartWith","isStart","RegExp","replaceSpecialChar","test","isClear","regex","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","selection","onRefreshHandler","parentsLines","documentNode","isListsApplied","currentFormat","mdSelectionFormats","isAppliedCommand","isApply","lineSplit","listTags","formatTags","checkLine","selectionDirection","codeFormat","isFormat","splitText","cmdPre","pre","selectedText","toLocaleUpperCase","beforeText","afterText","isCode","multiCharRegx","cmd","search","ExecCommandCallBack","commandCallBack","requestType","Formatter","saveSelection","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","action_1","headingText","colText","itemCollection","actionBeginArgs","preventDefault","isTableModule","tableModule","ensureInsideTableList","observer","callBack","onSuccess","clipboardAction","CONSTANT.checkUndo","execCommand","enableUndo","onKeyHandler","events","callbackArgs","isNotify","elements","autoResize","undoRedoStack","status","MDLists","markdownSelection","applyListsHandler","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","listFormat","olListType","getListRegex","currentAction","getAction","prevIndex","prevLine","prevLineSplit","tabSpaceLength","splitTab","splice","curTabSpace","getTabSpace","prevTabSpace","changeTextAreaValue","nextOrderedListValue","prevLineSplit_1","prefixValue","prefix","curTabSpaceLength","textAreaLength","changedList","prefixNumber","nestedTabSpace","nestedlistorder","nestedListStart","nextPrefixValue","traversIncreased","nextLineLength","lineBreak","nextLine","nextTabSpace","nextLineSplit","shiftTabTargetList","nextPrefix","previousOrderedListValue","tabs","regexFirstCondition","currentLine","ol","currentState","ul","syntax","UL","previousLine","tabSpace","nestedListOrder","olSyntaxList","OL","endLength","perfixObj","preLineTabSpaceLength","appliedLine","prefixPattern","preTabSpaceLength","currentPrefix","isExist","valueOf","pattern","configKey","MDFormats","applyFormats","isAppliedFormat","applyCodeBlock","clearRegex","removeLength","removeText","parentLines","firstPrevText","lastNextText","startNo","lastIndexOf","endNo","repStartText","replaceAt","repEndText","lastLine","input","MDSelectionFormats","applyCommands","isBold","isItalic","isMatch","matchText","Italic","InlineCode","StrikeThrough","singleCharRegx","cmdB","Bold","cmdI","startCmd","endCmd","isApplied","textReplace","repStart","repEnd","regx","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h2","h1","blockquote","markdownSelectionTags","SubScript","SuperScript","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","insert-table","indents","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","pasteCleanupGroupingTags","strong","emp","cite","listConversionFilters","first","middle","last","selfClosingTags","UndoRedoCommands","undoRedoSteps","undoRedoTimer","debounceListener","debounce","onAction","props","changEle","steps","removedContent","MDLink","startOffset","endOffset","url","MDTable","textAreaInitial","insertTable","getTable","textNonEmpty","tableCell","insertLine","convertToLetters","dummyElement","parentText","lastLineSplit","syntaxArr","getFormatTag","updateValue","makeSelection","ensureFormatApply","checkValid","syntaxFormatKey","syntaxTag","Formats","syntaxListKey","List","formatSplitZero","ensureStartValid","firstLine","firstLineSplit","ensureEndValid","formatSplitLength","updateValueWithFormat","formatSplit","textApplyFormat","rowNumber","baseChar","letters","String","fromCharCode","emptyText","isCursorBased","isSelectionBased","ClearFormat","clear","replaceRegex","clearSelectionTags","selectionTags","num","expString","regExp","startExp","endExp","clearFormatTags","clearFormatLines","tags","str","len","MarkdownParser","initialize","Observer","listObj","formatObj","linkObj","tableObj","clearObj","editorKeyDown","editorKeyUp","exeValue","MarkdownFormatter","updateFormatter","editElement","doc","MarkdownRender","div","contentPanel","getText","MarkdownEditor","instantiateRenderer","onToolbarClick","getSelectedHtml","onSelectionSave","onSelectionRestore","updateReadOnly","tableConstant","option","toolbarUpdate","IMAGE","TABLE","LINK","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","rootNode","documentFromRange","getNodeArray","endContainer","html","get","setStart","collapse","defaultView","previousSibling","isChildNode","nodeCollection","getNode","startNode","endNode","getNodeCollection","getParentNodeCollection","getParentNodes","reverse","getSelectionNodeCollection","getSelectionNodes","getSelectionNodeCollectionBr","getSelectionNodesBr","regEx","getInsertNodeCollection","getInsertNodes","root","array","setRangePoint","isvalid","size","constant","selectRange","setRange","removeAllRanges","addRange","setSelectionText","startIndex","endIndex","setEnd","setSelectionContents","selectNode","setSelectionNode","selectNodeContents","getSelectedNodes","Clear","insertParentNode","newNode","surroundContents","setCursorPoint","markerClassName","startSelection","endSelection","DOMNode","currentDocument","contents","isBlockNode","Node","ELEMENT_NODE","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","attributes","attr","orderRawAttr","sort","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","relativeElement","isList","isElement","isEditable","replaceWith","parseHTMLFragment","temp","wrap","wrapper","insertAfter","referenceNode","wrapInner","unWrap","unWrapNode","removeChild","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getRangePoint","ranges","f","getPreviousNode","previousElementSibling","encode","innerText","saveMarker","startTextNode","endTextNode","marker","setMarker","existNode","textNodes","CONSTANT.IGNORE_BLOCK_TAGS","ensureSelfClosingTag","isTable","parNode","tdNode","lastNode","lastChild","createTempNode","getImageTagInSelection","focusNode","blockNodes","collectionNodes","ignoreTableTag","contentEditable","listNodes","CONSTANT.TABLE_BLOCK_TAGS","Lists","domNode","testList","elem","olListRegex","elementStart","testCurrentList","olListStartRegex","spaceList","preElement","nextElement","preElemULStart","nextElemULStart","startElementOLTest","preElementOLTest","nextElementOLTest","enterList","backspaceList","parentList","isNested","ignoreDefault","stopPropagation","revertList","revertClean","nestedList","cleanNode","prevSibling","noPreviousElement","firstNode","firstNodeOL","siblingListOL","siblingListLI","siblingListLIFirst","h","prepend","list-style-type","nestedElement","nestedElementLI","firstNodeLI","listsNodes","applyLists","isRevert","removeEmptyListElements","checkLists","openTag","closeTag","newTag","replaceHTML","collectionString","listElem","nodesTemp","nodesTempListParent","liParents","contentNodes","findUnSelected","rightIndent","indentElements","childElements","z","childLI","count","viewNode","childNode","class","nodeInnerHtml","emptyUl","emptyLi","InsertMethods","WrapBefore","textNode","isAfter","AppendBefore","Wrap","unwrap","child","NodeCutter","GetSpliceNode","SplitNode","clone","setStartBefore","setEndAfter","fragment","extractContents","spliceEmptyNode","isEmpty","isImgElm","GetCursorStart","indexes","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","getParentNode","startCon","endCon","preElem","endPreElem","deleteContent","removeCodeContent","lastEmpty","lastBeforeBr","startParent","paraFocus","isNotEndCursor","pointer","deleteContents","referNode","pTag","nodeCutter","isEnd","insertMarker","brTag","cloneNode","previousSib","insertAdjacentHTML","setCursorPosition","markerElem","mrkParentElem","focusSelectionParent","brElm","tempSpanPElem","tempSpan","isSelectAll","formatsNodes","cleanFormats","replaceNode","replaceTag","preFormatMerge","preNodes","ignoreAttr","InsertHtml","Insert","insertNode","editNode","isExternal","isCursor","closestParentNode","closestEle","pasteInsertHTML","preNode","sibNode","lasNode","removeEmptyElements","previousNode","imageFocus","frag","createDocumentFragment","currentBlockNode","getImmediateBlockNode","isSingleNode","containsBlockNode","removingComments","allChildNodes","lastSelectionNode","insertTempNode","isFirstTextNode","firstParaElm","replaceChild","placeCursorEnd","cursorPos","blockNode","splitedElm","createTextNode","elm","innerElement","findDetachEmptyElem","emptyElements","detachableElement","LinkCommand","CONSTANT.LINK","linkCommand","selectParent","localeCompare","anchor","createAchorNode","createLinkNode","anchorEle","currentNode","domSelection","txtArray","inlineNodes","removeNodes","anchorNodes","finalinlineNodes","check","j_1","cln","j_2","attrs","href","linkNode","containsNode","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","applyAlignment","getTableNode","isTableAlign","text-align","alignmentNodes","imageTags","elementNode","imgObj","imageCommand","Indents","indentValue","applyIndents","indentsNodes","parentNodes","marginLeft","indentsValue","CLASS_CAPTION","ImageCommand","CONSTANT.IMAGE","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","src","imgElement","setStyle","imgEle","calculateStyleValue","height","minWidth","minHeight","maxHeight","capImgWrap","textEle","newTextEle","insertElement","TableCommand","CONSTANT.TABLE","insertRow","insertColumn","tableVerticalAlign","tblBody","tdWid","row","cell","removeEmptyNode","emptyLiChild","selectedCell","newRow","curRow","tabCell","tdElement","curCell","allRows","colIndex","colTemplate","selectedCellIndex","cellIndex","parentTable","deleteCell","sContainer","startChildLength","selectedRowIndex","rowIndex","seletedTable","headerExit","cellCount","childElementCount","createTHead","th","deleteTHead","verticalAlign","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","fontWeight","fontStyle","textDecoration","color","backColor","SelectionCommands","applyFormat","isFormatted","isFontStyle","cursorNode","insertCursorNode","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getInsertNode","splitNode","nodeIndex","pop","nodeValue","bgStyle","bg","GetFormatNode","currentNodeElem","curParentElem","liElement","applyStyles","getChildNode","SelectionBasedExec","validFormats","InsertHtmlExec","applyHtml","lastText","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","index1","index2","index3","parentIndex","elementIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","IGNORE_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","MsWordPaste","olData","ulData","ignorableNodes","removableElements","listContents","wordCleanup","wordPasteStyleConfig","allowedStylePropertiesArray","tempHTMLContent","clipboardData","getData","rtfData","patern2","patern3","imageConversion","cleanUp","listConverter","styleCorrection","removeUnwantedElements","breakLineAddition","removeClassName","checkVShape","imgElem","imgSrc","base64Src","imgName","hexValue","hexConversion","convertToBase64","allNodes","byteArr","conHexStringToBytes","hex","base64String","conBytesToBase64","base64Str","byteArrLen","array3","array3length","array4","charAt","imgType","picHead","pic","source","fullImg","elmWithClass","allElements","findDetachElem","brElement","regExpStartElem","regExpEndElem","styleElement","styleClassObject_1","findStyleObject","values","map","removeUnwantedStyle","filterStyles","resultElem","getElementsByClassName","getElementsByTagName","styleProperty","valueSplit","changedValue","elmWithStyles","elemStyleProperty","styleValue","styleValues","styleClassObject","tempStyle","classNameCollection","stylesCollection","classNames","prevflagState","tempCleaner","level","stNode","collection","getListContent","listType","nestedLevel","makeConversion","elemColl","temp1","prevList","pLevel","listCount","pElement","listStyle","getListStyle","getNamedItem","pushContent","InsertTextExec","insertText","EditorManager","alignmentObj","indentsObj","selectionObj","inserthtmlObj","insertTextObj","msWordPaste","onWordPaste","HTMLFormatter","statusCollection","ToolbarStatus","targetNode","formatCollection","JSON","parse","stringify","nodesLength","isOrderedList","isUnorderedList","isAlignment","isFormats","pos","textAlign","prop","getPropertyValue","HtmlToolbarStatus","ContentRender","rteContent","contenteditable","IframeContentRender","apply","iFrameContent","contentDocument","setThemeColor","write","XhtmlValidation","enableXhtmlValidation","enableXhtml","clean","AddRootElement","ImageTags","removeTags","RemoveUnsupported","parentEle","imgNodes","hasAttribute","RemoveElementNode","rmvNode","parentArray","rmvArray","underlineEle","spanEle","strongEle","boldEle","attrArray","RemoveAttributeByName","attrName","hasChildNodes","childEle","HtmlEditor","rangeCollection","xhtmlValidation","nodeSelectionObj","colorPickerModule","events.paste","onPaste","enableTabKey","textCont","spaceLink","httpRegex","wwwRegex","enterSplitText","contentInnerElem","contentWithSpace","spaceBetweenContent","spaceSplit","divElement","paraElem","splitTextContent","resultSplitContent","pasteCleanupModule","executeCommand","selectNodeEle","urlText","urlTextRange","selectParentEle","closestElement","linkDialog","imageDialog","formatterClass","PasteCleanup","isNotFromHtml","containsHtml","dialogRenderObj","pasteClean","imageproperties","htmlRegex","file","getAsFile","imageFormatting","splitBreakLine","pasteCleanupSettings","allowedStyleProps","a","prompt","tempDivElem","pasteDialog","plainFormatting","formatting","makeSpace","imgUploading","allImgElm","insertImageSettings","saveUrl","uploadImg","fileList","base64ToFile","uploadMethod","path","saveFormat","getBlob","allImgElmId","blopUrl","URL","createObjectURL","uploadEle","opacity","contentEle","viewPortElement","timeOut","refreshPopup","uploadObj","Uploader","asyncSettings","dropArea","allowedExtensions","allowedTypes","success","popupClose","uploading","failure","uploadFailure","canceling","selected","removing","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","createFileList","filesData","upload","imageElement","base64","filename","baseStr","extension","decodeStr","strLen","decodeArr","File","pasteArgs","imageValue","radioRender","keepRadioButton","RadioButton","label","checked","keepFormatElement","cleanRadioButton","cleanFormatElement","plainTextRadioButton","plainTextElement","selectFormatting","keepChecked","cleanChecked","isHeight","preRTEHeight","dialogModel","buttons","dialog","argument","buttonModel","isPrimary","args_1","header","isModal","rteDialogWrapper","destroyDialog","rteDialogContainer","rteDialogWrapperChildLength","clipBoardElem","deniedTags","deniedAttributes","deniedAttrs","allowedStyle","allImg","returnArgs","detachInlineElements","getTextContent","firstElm","spanElm","inElem","parElem","l","allElems","allAtr","tagGrouping","groupingTags","addTags","attributesfilter","userAttributes","allowedAttributeArray","deniedAttributeArray","allowedAttribute","deniedAttribute","removableElement","parentElem","removableAttrElement","allowedStyleValue","allowedStyleValueArray","Resize","renderResizable","resizer","touchStartEvent","info","resizeStart","cancelable","wireResizeEvents","resizeStartArgs","unwireResizeEvents","performResize","resizingArgs","boundRect","isMouseEvent","eventType","refreshUI","stopResize","getEventType","isMouse","pointerType","touchMoveEvent","touchEndEvent","FullScreen","scrollableParent","getScrollableParent","toggleParentOverflow","properties","isAdd","Render","renderer","Link","rteID","rendererFactory","showLinkQuickToolbar","onToolbarAction","editAreaClickHandler","dialogObj","returnValue","quickToolObj","target_1","parentLeft","linkTop","linkLeft","linkPos","pageXOffset","hideLinkQuickToolbar","showOnRightClick","getAnchorNode","isPopupOpen","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","CheckBox","linkInsert","linkCancel","selectObj","selfLink","showCloseIcon","closeOnEscape","cancelDialog","animationSettings","effect","btnText","checkUrl","onDocumentClick","linkEle","isUrl","enableAutoUrl","argsValue","code","selectedNode","linkUpdate","Image","isImgUploaded","deletedImg","onKeyUp","insertImage","showImageQuickToolbar","deleteImg","insertImgLink","insertAltText","imageSize","alignmentSelect","afterRender","imagePaste","dragDrop","dragStart","dragEnter","dragOver","imageClick","events.checkUndo","undoStack","resize","img","outline","resizeEnd","resizeBtnInit","cursor","getPointX","preventDefaultResize","imgResizeDiv","imageResize","getPointY","stopImmediatePropagation","resizeBtnStat","topLeft","topRight","botLeft","botRight","cancelResizeAction","imgResizePos","resizeImgDupPos","resizing","calcPos","imgWid","imgHgt","borWid","devWid","ignoreOffset","parentOffset","offset","documentElement","setAspectRatio","expectedX","expectedY","resizeByPercent","pixToPerc","expected","imgDupMouseMove","mouseX","mouseY","imgDupPos","openImgLink","editImgLink","removeImgLink","isCapLink","captionEle","keyCodeValues","isCursor_1","checkImageBack","checkImageDel","prev","remvoeResizEle","event_1","justifyImageLeft","justifyImageCenter","justifyImageRight","break","imageWithLinkQTBarItemUpdate","newItems","Math","round","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","captionClass","classes.CLS_CAPTION","draggable","imgWrap","imgInner","imgCaption","imgSizeHeader","dialogContent","imgsizeInput","selectObj_1","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","imgUpload","linkHeaderText","imageUrlPopup","imgUrl","placeUrl","inputUrl","spellcheck","uploadUrl","matchUrl","imgHeight","imgWidth","imgSizeWrap","getClientRects","widthNum","NumericTextBox","min","max","heightNum","dialogEle","uploadParentEle","deviceImgUpMsg","imgUpMsg","span","spanMsg","btnEle","autofocus","browserMsg","button","Button","btnClick","fileSelect","multiple","checkExtension","reader_1","FileReader","readAsDataURL","_internalRenderSelect","getButtons","dataTransfer","effectAllowed","dropEffect","files","caretRangeFromPoint","rangeParent","rangeOffset","getDropRange","insertDragImage","startRange","elementFromPoint","startCharIndexCharacter","rangeRect","activePopupElement","imgFiles","fileName","onSelect","validFiles","imageTag","reader","dragEvent","isUploading","uploadSuccess","reader_2","showPopupToolBar","imageSrc","ViewSource","sourceCode","onInitialEnd","updateSourceCode","getSourceCode","keyboardModule","previewKeyDown","previewElement","wireBaseKeyDown","unWireBaseKeyDown","updateValueData","getTextAreaValue","invokeChangeEvent","editHTML","Table","moveEle","l10n","renderDlgContent","docClick","dropdownSelect","cellSelect","setBGColor","resizeHelper","addRow","addColumn","removeRowColumn","tableStyles","insertTableDialog","removeResizeEle","closestTd","tabSelection","tableArrowNavigation","editTable","tdEle","classes.CLS_TB_ALT_BOR","insideList","prevElement","tHead","clsTble","cells","selText","hideTableQuickToolbar","closestTable","range_1","tableCellSelect","col","list","dlgDiv","tblHeader","tableCellLeave","tableCellClick","tableInsert","editdlgObj","curTable","targetTouches","tableResizeEleCreation","colReEle","data-col","unselectable","cssText","rowReEle","data-row","rowPosLeft","tableReBox","column","columnEle","appendHelper","rowEle","tableBox","removeHelper","setHelperHeight","updateHelper","top_1","tableHeight","paddingSize","rteWidth","cellColl","actualwid","toLocaleString","totalwid","leftColumnWidth","rightColWidth","convertPixelToPercentage","clientHeight","widthType","offsetValue","selectCell","tabkey","delKey","insertbtn","tableDiv","drawTable","tabindex","rowDiv","data-column","data-cell","createDialog","editContent","tableDlgContent","update","editHeader","applyProperties","dlgContent","tableCellDlgContent","customTable","tableColumn","tableRow","tableWrap","columnTextBox","floatLabelType","rowTextBox","tableDialog","padVal","padding","cellSpacing","cellPadding","widthVal","brdSpcVal","spacing","DialogRenderer","dlgObj","Dialog","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","editImage","insertBrOnReturn","insertOrderedList","insertUnorderedList","insertParagraph","predefinedItems","Custom","ToolbarSettings","ChildProperty","ImageSettings","TableSettings","QuickToolbarSettings","PasteCleanupSettings","FontFamily","FontSize","Format","FontColor","BackgroundColor","Resources","IFrameSettings","Complex","InlineMode","__assign","assign","t","s","RichTextEditor","defaultResetValue","isFocusOut","needsID","requiredModules","modules","showCharCount","enableResize","updateEnable","eventInitializer","preRender","onBlurHandler","blurHandler","onFocusHandler","focusHandler","onResizeHandler","resizeHandler","clickPoints","initialValue","initializeServices","setContainer","persistData","role","originalElement","localStorage","getItem","valueTemplate","setValue","invalidAttr","rteOuterWrapper","getPersistData","addOnPersist","focusIn","focusOut","blur","txt","commandName","htmlPurifier","tool","htmlEditorModule","linkValue","renderModule","RTERender","defaultValue","renderComplete","restrict","bool","removeNodeArray","allowedKeys","sanitizeHtml","inputVal","triggerEditArea","touch","notifyMouseUp","mouseUp","ensureModuleInjected","getInjectedModules","onCopy","onCut","evenArgs","totalLength","isRendered","destroyDependentModules","timeInterval","clearInterval","placeHolderWrapper","removeHtmlAttributes","removeAttributes","removeItem","getContent","wrapperElm","selectedHtml","cloneContents","nVal","updatePanelValue","countModule","setWidth","setHeight","setCssClass","updateRTL","frameSetting","resources","scripts","removeSheets","setIframeSettings","wireContextEvent","unWireContextEvent","srcList","unbindEvents","bindEvents","printWind","printArgs","printingArgs","outerHeight","outerWidth","resizeTo","screen","availWidth","availHeight","printWindow","actionArgs","removeToolbarItem","L10n","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledString","compiledTemplate","compile","innerHtml","isExpand","heightValue","rteHeightPercent","heightPercent","rteHeight","rzHeight","expandPopHeight","codeElement","getHtml","showSourceCode","getCharCount","preventImgResize","defaultResize","contentScrollHandler","cloneValue","active","isInteracted","saveInterval","setInterval","updateIntervalValue","getUpdatedValue","rteElement","classes.CLS_RTE","relatedTarget","scrollParentElements","contextHandler","touchModule","EJ2Touch","tapHold","touchHandler","tapHoldThreshold","closestElem","resetHandler","setAutoHeight","iframeElement_1","overflow","scrollHeight","currentTarget","arrayKey","formElement","Component","index.RichTextEditor","Inject","index.Toolbar","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","index.Table","index.PasteCleanup","index.Resize"],"mappings":"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"}