@syncfusion/ej2-richtexteditor 18.1.52 → 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.
- package/CHANGELOG.md +614 -572
- package/README.md +67 -67
- package/dist/ej2-richtexteditor.umd.min.js +1 -10
- package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es2015.js +353 -136
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +364 -147
- package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
- package/license +9 -9
- package/package.json +50 -73
- package/src/common/interface.d.ts +6 -6
- package/src/editor-manager/base/classes.d.ts +1 -1
- package/src/editor-manager/base/classes.js +1 -1
- package/src/editor-manager/base/editor-manager.d.ts +3 -3
- package/src/editor-manager/base/editor-manager.js +3 -3
- package/src/editor-manager/base/interface.d.ts +7 -7
- package/src/editor-manager/base/types.d.ts +1 -1
- package/src/editor-manager/plugin/alignments.d.ts +2 -2
- package/src/editor-manager/plugin/alignments.js +2 -2
- package/src/editor-manager/plugin/clearformat-exec.d.ts +2 -2
- package/src/editor-manager/plugin/clearformat-exec.js +2 -2
- package/src/editor-manager/plugin/clearformat.d.ts +1 -1
- package/src/editor-manager/plugin/clearformat.js +1 -1
- package/src/editor-manager/plugin/dom-node.d.ts +34 -34
- package/src/editor-manager/plugin/dom-node.js +34 -34
- package/src/editor-manager/plugin/formats.d.ts +2 -2
- package/src/editor-manager/plugin/formats.js +2 -2
- package/src/editor-manager/plugin/image.d.ts +3 -3
- package/src/editor-manager/plugin/image.js +3 -3
- package/src/editor-manager/plugin/indents.d.ts +2 -2
- package/src/editor-manager/plugin/indents.js +2 -2
- package/src/editor-manager/plugin/insert-methods.d.ts +4 -4
- package/src/editor-manager/plugin/insert-methods.js +4 -4
- package/src/editor-manager/plugin/insert-text.d.ts +2 -2
- package/src/editor-manager/plugin/insert-text.js +2 -2
- package/src/editor-manager/plugin/inserthtml-exec.d.ts +2 -2
- package/src/editor-manager/plugin/inserthtml-exec.js +2 -2
- package/src/editor-manager/plugin/inserthtml.d.ts +4 -2
- package/src/editor-manager/plugin/inserthtml.js +42 -6
- package/src/editor-manager/plugin/isformatted.d.ts +8 -8
- package/src/editor-manager/plugin/isformatted.js +8 -8
- package/src/editor-manager/plugin/link.d.ts +2 -2
- package/src/editor-manager/plugin/link.js +2 -2
- package/src/editor-manager/plugin/lists.d.ts +2 -2
- package/src/editor-manager/plugin/lists.js +4 -14
- package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -1
- package/src/editor-manager/plugin/ms-word-clean-up.js +1 -1
- package/src/editor-manager/plugin/nodecutter.d.ts +6 -6
- package/src/editor-manager/plugin/nodecutter.js +6 -6
- package/src/editor-manager/plugin/selection-commands.d.ts +1 -1
- package/src/editor-manager/plugin/selection-commands.js +1 -1
- package/src/editor-manager/plugin/selection-exec.d.ts +2 -2
- package/src/editor-manager/plugin/selection-exec.js +2 -2
- package/src/editor-manager/plugin/table.d.ts +2 -2
- package/src/editor-manager/plugin/table.js +2 -2
- package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
- package/src/editor-manager/plugin/toolbar-status.js +2 -2
- package/src/editor-manager/plugin/undo.d.ts +6 -6
- package/src/editor-manager/plugin/undo.js +6 -6
- package/src/markdown-parser/base/interface.d.ts +10 -10
- package/src/markdown-parser/base/markdown-parser.d.ts +3 -3
- package/src/markdown-parser/base/markdown-parser.js +3 -3
- package/src/markdown-parser/base/types.d.ts +1 -1
- package/src/markdown-parser/plugin/clearformat.d.ts +2 -2
- package/src/markdown-parser/plugin/clearformat.js +2 -2
- package/src/markdown-parser/plugin/formats.d.ts +2 -2
- package/src/markdown-parser/plugin/formats.js +2 -2
- package/src/markdown-parser/plugin/link.d.ts +2 -2
- package/src/markdown-parser/plugin/link.js +2 -2
- package/src/markdown-parser/plugin/markdown-selection.d.ts +14 -14
- package/src/markdown-parser/plugin/markdown-selection.js +14 -14
- package/src/markdown-parser/plugin/md-selection-formats.d.ts +2 -2
- package/src/markdown-parser/plugin/md-selection-formats.js +2 -2
- package/src/markdown-parser/plugin/table.d.ts +3 -3
- package/src/markdown-parser/plugin/table.js +3 -3
- package/src/markdown-parser/plugin/undo.d.ts +6 -6
- package/src/markdown-parser/plugin/undo.js +6 -6
- package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +9 -9
- package/src/rich-text-editor/actions/base-quick-toolbar.js +9 -9
- package/src/rich-text-editor/actions/base-toolbar.d.ts +3 -3
- package/src/rich-text-editor/actions/base-toolbar.js +3 -3
- package/src/rich-text-editor/actions/color-picker.d.ts +2 -2
- package/src/rich-text-editor/actions/color-picker.js +2 -2
- package/src/rich-text-editor/actions/count.d.ts +3 -3
- package/src/rich-text-editor/actions/count.js +3 -3
- package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
- package/src/rich-text-editor/actions/dropdown-buttons.js +2 -2
- package/src/rich-text-editor/actions/full-screen.d.ts +3 -3
- package/src/rich-text-editor/actions/full-screen.js +3 -3
- package/src/rich-text-editor/actions/html-editor.d.ts +3 -3
- package/src/rich-text-editor/actions/html-editor.js +3 -3
- package/src/rich-text-editor/actions/keyboard-model.d.ts +13 -13
- package/src/rich-text-editor/actions/keyboard.d.ts +1 -1
- package/src/rich-text-editor/actions/keyboard.js +1 -1
- package/src/rich-text-editor/actions/markdown-editor.d.ts +2 -2
- package/src/rich-text-editor/actions/markdown-editor.js +2 -2
- package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -1
- package/src/rich-text-editor/actions/paste-clean-up.js +34 -3
- package/src/rich-text-editor/actions/quick-toolbar.d.ts +19 -9
- package/src/rich-text-editor/actions/quick-toolbar.js +17 -7
- package/src/rich-text-editor/actions/toolbar.d.ts +13 -13
- package/src/rich-text-editor/actions/toolbar.js +13 -13
- package/src/rich-text-editor/base/classes.d.ts +102 -102
- package/src/rich-text-editor/base/classes.js +102 -102
- package/src/rich-text-editor/base/constant.d.ts +111 -101
- package/src/rich-text-editor/base/constant.js +111 -101
- package/src/rich-text-editor/base/enum.d.ts +1 -1
- package/src/rich-text-editor/base/enum.js +1 -1
- package/src/rich-text-editor/base/interface.d.ts +51 -40
- package/src/rich-text-editor/base/interface.js +1 -1
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +659 -641
- package/src/rich-text-editor/base/rich-text-editor.d.ts +84 -52
- package/src/rich-text-editor/base/rich-text-editor.js +100 -43
- package/src/rich-text-editor/base/util.d.ts +1 -1
- package/src/rich-text-editor/base/util.js +1 -1
- package/src/rich-text-editor/formatter/formatter.d.ts +9 -8
- package/src/rich-text-editor/formatter/formatter.js +10 -8
- package/src/rich-text-editor/formatter/html-formatter.d.ts +2 -2
- package/src/rich-text-editor/formatter/html-formatter.js +2 -2
- package/src/rich-text-editor/formatter/markdown-formatter.d.ts +2 -2
- package/src/rich-text-editor/formatter/markdown-formatter.js +2 -2
- package/src/rich-text-editor/models/iframe-settings-model.d.ts +21 -21
- package/src/rich-text-editor/models/inline-mode-model.d.ts +9 -9
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +228 -228
- package/src/rich-text-editor/renderer/content-renderer.d.ts +6 -6
- package/src/rich-text-editor/renderer/content-renderer.js +6 -6
- package/src/rich-text-editor/renderer/dialog-renderer.d.ts +3 -2
- package/src/rich-text-editor/renderer/dialog-renderer.js +8 -8
- package/src/rich-text-editor/renderer/iframe-content-renderer.d.ts +4 -4
- package/src/rich-text-editor/renderer/iframe-content-renderer.js +4 -4
- package/src/rich-text-editor/renderer/image-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/image-module.js +96 -29
- package/src/rich-text-editor/renderer/link-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/link-module.js +1 -1
- package/src/rich-text-editor/renderer/markdown-renderer.d.ts +6 -6
- package/src/rich-text-editor/renderer/markdown-renderer.js +6 -6
- package/src/rich-text-editor/renderer/popup-renderer.d.ts +5 -5
- package/src/rich-text-editor/renderer/popup-renderer.js +5 -5
- package/src/rich-text-editor/renderer/render.d.ts +2 -2
- package/src/rich-text-editor/renderer/render.js +2 -2
- package/src/rich-text-editor/renderer/table-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/table-module.js +5 -3
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +8 -8
- package/src/rich-text-editor/renderer/toolbar-renderer.js +21 -9
- package/src/rich-text-editor/renderer/view-source.d.ts +6 -6
- package/src/rich-text-editor/renderer/view-source.js +6 -6
- package/src/rich-text-editor/services/renderer-factory.d.ts +3 -3
- package/src/rich-text-editor/services/renderer-factory.js +3 -3
- package/src/rich-text-editor/services/service-locator.d.ts +3 -3
- package/src/rich-text-editor/services/service-locator.js +3 -3
- package/src/selection/selection.d.ts +22 -22
- package/src/selection/selection.js +22 -22
- package/styles/_all.scss +2 -2
- package/styles/rich-text-editor/_all.scss +2 -2
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +151 -151
- package/styles/rich-text-editor/_bootstrap-definition.scss +184 -184
- package/styles/rich-text-editor/_bootstrap4-definition.scss +307 -307
- package/styles/rich-text-editor/_fabric-dark-definition.scss +150 -150
- package/styles/rich-text-editor/_fabric-definition.scss +148 -148
- package/styles/rich-text-editor/_highcontrast-definition.scss +148 -148
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +148 -148
- package/styles/rich-text-editor/_layout.scss +1332 -1332
- package/styles/rich-text-editor/_material-dark-definition.scss +151 -151
- package/styles/rich-text-editor/_material-definition.scss +150 -150
- package/styles/rich-text-editor/_theme.scss +484 -484
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +285 -285
- package/styles/rich-text-editor/icons/_bootstrap.scss +284 -284
- package/styles/rich-text-editor/icons/_bootstrap4.scss +284 -284
- package/styles/rich-text-editor/icons/_fabric-dark.scss +284 -284
- package/styles/rich-text-editor/icons/_fabric.scss +284 -284
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +284 -284
- package/styles/rich-text-editor/icons/_highcontrast.scss +284 -284
- package/styles/rich-text-editor/icons/_material-dark.scss +284 -284
- package/styles/rich-text-editor/icons/_material.scss +284 -284
- package/dist/global/ej2-richtexteditor.min.js +0 -11
- package/dist/global/ej2-richtexteditor.min.js.map +0 -1
- 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 ? '<p><br/></p>' : '<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 === '<p><br></p>' || value === '') ? true : false;\n}\nexport function decode(value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/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 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 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 /* tslint:enable */\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 detach(dropElement);\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 + ')';\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, '"');\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 = '<br>';\n }\n else {\n start.innerHTML = '';\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 = '';\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 = '';\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 = nodeSelection.getInsertNodeCollection(range);\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 var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n var splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n splitedElm.parentNode.replaceChild(node, splitedElm);\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.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 = '​';\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 = '​';\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 = '​';\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 = '​';\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 === ' ' &&\n (allElements[i].innerHTML === ' ' && !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(), ' ');\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 ? ' ' : ' ';\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, '<');\n value = value.replace(/>/g, '>');\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 ? ' ' : ' ';\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 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 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 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 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, ' ') !== ' ') &&\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 if (this.parent.editorMode === 'HTML' && ((originalEvent.which === 8 && originalEvent.code === 'Backspace') ||\n (originalEvent.which === 46 && originalEvent.code === 'Delete'))) {\n var range_1 = this.parent.getRange();\n var isCursor = range_1.startContainer === range_1.endContainer && range_1.startOffset === range_1.endOffset;\n if ((originalEvent.which === 8 && originalEvent.code === 'Backspace' && isCursor)) {\n this.checkImageBack(range_1);\n }\n else if ((originalEvent.which === 46 && originalEvent.code === 'Delete' && isCursor)) {\n this.checkImageDel(range_1);\n }\n else if (!isCursor) {\n var nodes = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range_1);\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 }\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);\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 img: 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) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var args = { img: e.selectNode[0] };\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 this.parent.trigger(events.afterImageDelete, args);\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 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 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 });\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 }\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 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.contentModule.getEditPanel().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 if (isNOU(e.beforeOpen)) {\n e.beforeOpen = this.beforeOpen.bind(this);\n }\n if (isNOU(e.open)) {\n e.open = this.open.bind(this);\n }\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\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 /**\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) {\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].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 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 if (!(isBlazor() && this.isServerRendered)) {\n _super.prototype.destroy.call(this);\n }\n else {\n this.isDestroyed = true;\n }\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, \"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","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","parentNode","insertBefore","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","blockNode","splitedElm","replaceChild","isFirstTextNode","firstParaElm","placeCursorEnd","cursorPos","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","popupEle","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","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","range_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","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","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","isServerRendered","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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AC9C2W,IACIkF,WAAS,MACVorD,EAAejnE,UAAW,oBAAiB,IAC9C2W,IACIkF,WAAS,SACVorD,EAAejnE,UAAW,iBAAc,IAC3C2W,IACIkF,WAAS,OACVorD,EAAejnE,UAAW,gBAAa,IAC1C2W,IACIkF,YAAS,IACVorD,EAAejnE,UAAW,oBAAiB,IAC9C2W,IACIkF,YAAS,IACVorD,EAAejnE,UAAW,mBAAgB,IAC7C2W,IACIkF,YAAS,IACVorD,EAAejnE,UAAW,oBAAiB,IAC9C2W,IACIkF,YAAU,IACXorD,EAAejnE,UAAW,gBAAa,IAC1C2W,IACIgwD,aAAYL,KACbW,EAAejnE,UAAW,aAAU,IACvC2W,IACIgwD,aAAYP,KACba,EAAejnE,UAAW,iBAAc,IAC3C2W,IACIgwD,aAAYN,KACbY,EAAejnE,UAAW,eAAY,IACzC2W,IACIgwD,aAAYJ,KACbU,EAAejnE,UAAW,gBAAa,IAC1C2W,IACIgwD,aAAYH,KACbS,EAAejnE,UAAW,sBAAmB,IAChD2W,IACIkF,WAAS,OACVorD,EAAejnE,UAAW,oBAAiB,IAC9C2W,IACIkF,WAAS,MACVorD,EAAejnE,UAAW,mBAAgB,IAC7C2W,IACImF,WACDmrD,EAAejnE,UAAW,kBAAe,IAC5C2W,IACImF,WACDmrD,EAAejnE,UAAW,qBAAkB,IAC/C2W,IACImF,WACDmrD,EAAejnE,UAAW,uBAAoB,IACjD2W,IACImF,WACDmrD,EAAejnE,UAAW,iBAAc,IAC3C2W,IACImF,WACDmrD,EAAejnE,UAAW,kBAAe,IAC5C2W,IACImF,WACDmrD,EAAejnE,UAAW,6BAA0B,IACvD2W,IACImF,WACDmrD,EAAejnE,UAAW,uBAAoB,IACjD2W,IACImF,WACDmrD,EAAejnE,UAAW,wBAAqB,IAClD2W,IACImF,WACDmrD,EAAejnE,UAAW,0BAAuB,IACpD2W,IACImF,WACDmrD,EAAejnE,UAAW,oBAAiB,IAC9C2W,IACImF,WACDmrD,EAAejnE,UAAW,qBAAkB,IAC/C2W,IACImF,WACDmrD,EAAejnE,UAAW,yBAAsB,IACnD2W,IACImF,WACDmrD,EA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"}
|