@syncfusion/ej2-richtexteditor 19.3.45 → 19.3.53-6125
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 +1019 -977
- 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 +217 -137
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +326 -246
- package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
- package/helpers/e2e/index.js +3 -3
- package/license +9 -9
- package/package.json +75 -75
- package/src/common/interface.d.ts +7 -7
- 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 +2 -2
- package/src/editor-manager/plugin/inserthtml.js +13 -3
- 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 +2 -2
- 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 +19 -2
- 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 +1 -1
- package/src/markdown-parser/plugin/md-selection-formats.js +1 -1
- 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 +12 -2
- package/src/rich-text-editor/actions/enter-key.js +1 -0
- 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 +16 -16
- package/src/rich-text-editor/actions/keyboard.d.ts +1 -1
- package/src/rich-text-editor/actions/keyboard.js +20 -20
- 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 +1 -1
- package/src/rich-text-editor/actions/quick-toolbar.d.ts +10 -9
- package/src/rich-text-editor/actions/quick-toolbar.js +29 -11
- 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/actions/xhtml-validation.d.ts +1 -1
- package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
- package/src/rich-text-editor/base/classes.d.ts +107 -107
- package/src/rich-text-editor/base/classes.js +107 -107
- package/src/rich-text-editor/base/constant.d.ts +120 -120
- package/src/rich-text-editor/base/constant.js +120 -120
- 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 +47 -45
- package/src/rich-text-editor/base/interface.js +1 -1
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +851 -851
- package/src/rich-text-editor/base/rich-text-editor.d.ts +53 -53
- package/src/rich-text-editor/base/rich-text-editor.js +65 -66
- 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 +8 -8
- package/src/rich-text-editor/formatter/formatter.js +11 -11
- package/src/rich-text-editor/formatter/html-formatter.d.ts +2 -2
- package/src/rich-text-editor/formatter/html-formatter.js +15 -15
- package/src/rich-text-editor/formatter/markdown-formatter.d.ts +2 -2
- package/src/rich-text-editor/formatter/markdown-formatter.js +15 -15
- package/src/rich-text-editor/models/iframe-settings-model.d.ts +26 -26
- package/src/rich-text-editor/models/iframe-settings.js +19 -19
- package/src/rich-text-editor/models/inline-mode-model.d.ts +11 -11
- package/src/rich-text-editor/models/inline-mode.js +19 -19
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +439 -439
- package/src/rich-text-editor/models/toolbar-settings.d.ts +1 -1
- package/src/rich-text-editor/models/toolbar-settings.js +19 -19
- 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 +2 -2
- package/src/rich-text-editor/renderer/dialog-renderer.js +2 -2
- package/src/rich-text-editor/renderer/iframe-content-renderer.d.ts +4 -4
- package/src/rich-text-editor/renderer/iframe-content-renderer.js +17 -17
- package/src/rich-text-editor/renderer/image-module.d.ts +3 -1
- package/src/rich-text-editor/renderer/image-module.js +24 -3
- package/src/rich-text-editor/renderer/link-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/link-module.js +4 -3
- 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 +4 -3
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +9 -9
- package/src/rich-text-editor/renderer/toolbar-renderer.js +12 -11
- 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 +24 -23
- package/styles/_all.scss +2 -2
- package/styles/bootstrap-dark.css +4 -0
- package/styles/bootstrap.css +4 -0
- package/styles/bootstrap4.css +4 -0
- package/styles/bootstrap5-dark.css +4 -0
- package/styles/bootstrap5.css +4 -0
- package/styles/fabric-dark.css +4 -0
- package/styles/fabric.css +4 -0
- package/styles/highcontrast-light.css +4 -0
- package/styles/highcontrast.css +4 -0
- package/styles/material-dark.css +4 -0
- package/styles/material.css +4 -0
- package/styles/rich-text-editor/_all.scss +2 -2
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +187 -187
- package/styles/rich-text-editor/_bootstrap-definition.scss +244 -244
- package/styles/rich-text-editor/_bootstrap4-definition.scss +370 -370
- package/styles/rich-text-editor/_bootstrap5-definition.scss +168 -168
- package/styles/rich-text-editor/_fabric-dark-definition.scss +168 -168
- package/styles/rich-text-editor/_fabric-definition.scss +167 -167
- package/styles/rich-text-editor/_highcontrast-definition.scss +167 -167
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +167 -167
- package/styles/rich-text-editor/_layout.scss +1639 -1635
- package/styles/rich-text-editor/_material-dark-definition.scss +172 -172
- package/styles/rich-text-editor/_material-definition.scss +169 -169
- package/styles/rich-text-editor/_tailwind-definition.scss +167 -167
- package/styles/rich-text-editor/_theme.scss +626 -626
- package/styles/rich-text-editor/bootstrap-dark.css +4 -0
- package/styles/rich-text-editor/bootstrap.css +4 -0
- package/styles/rich-text-editor/bootstrap4.css +4 -0
- package/styles/rich-text-editor/bootstrap5-dark.css +4 -0
- package/styles/rich-text-editor/bootstrap5.css +4 -0
- package/styles/rich-text-editor/fabric-dark.css +4 -0
- package/styles/rich-text-editor/fabric.css +4 -0
- package/styles/rich-text-editor/highcontrast-light.css +4 -0
- package/styles/rich-text-editor/highcontrast.css +4 -0
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +304 -304
- package/styles/rich-text-editor/icons/_bootstrap.scss +304 -304
- package/styles/rich-text-editor/icons/_bootstrap4.scss +304 -304
- package/styles/rich-text-editor/icons/_bootstrap5.scss +303 -303
- package/styles/rich-text-editor/icons/_fabric-dark.scss +304 -304
- package/styles/rich-text-editor/icons/_fabric.scss +304 -304
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +304 -304
- package/styles/rich-text-editor/icons/_highcontrast.scss +304 -304
- package/styles/rich-text-editor/icons/_material-dark.scss +304 -304
- package/styles/rich-text-editor/icons/_material.scss +304 -304
- package/styles/rich-text-editor/icons/_tailwind.scss +304 -304
- package/styles/rich-text-editor/material-dark.css +4 -0
- package/styles/rich-text-editor/material.css +4 -0
- package/styles/rich-text-editor/tailwind-dark.css +4 -0
- package/styles/rich-text-editor/tailwind.css +4 -0
- package/styles/tailwind-dark.css +4 -0
- package/styles/tailwind.css +4 -0
- package/.eslintrc.json +0 -244
- 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
- package/tslint.json +0 -111
|
@@ -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/file-manager.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/actions/enter-key.js","../../src/rich-text-editor/base/rich-text-editor.js","../../src/global.js"],"sourcesContent":["/* eslint-disable */\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecell', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles', 'numberformatlist', 'bulletformatlist'];\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 'numberformatlist': {\n 'id': 'NumberFormatList',\n 'icon': 'e-order-list',\n 'tooltip': 'Number Format List',\n 'command': 'NumberFormatList',\n 'subCommand': 'NumberFormatList'\n },\n 'bulletformatlist': {\n 'id': 'BulletFormatList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bullet Format List',\n 'command': 'BulletFormatList',\n 'subCommand': 'BulletFormatList'\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 'filemanager': {\n 'id': 'FileManager',\n 'icon': 'e-rte-file-manager',\n 'tooltip': 'File Manager',\n 'command': 'Files',\n 'subCommand': 'File'\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-img-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 'tablecell': {\n 'id': 'TableCell',\n 'icon': 'e-table-cell',\n 'tooltip': 'Table Cell',\n 'command': 'Table',\n 'subCommand': 'TableCell'\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];\nexport var tableCellItems = [\n { iconCss: 'e-icons e-cell-merge', text: 'Merge cells', command: 'Table', subCommand: 'Merge' },\n { iconCss: 'e-icons e-cell-horizontal-split', text: 'Horizontal split', command: 'Table', subCommand: 'HorizontalSplit' },\n { iconCss: 'e-icons e-cell-vertical-split', text: 'Vertical split', command: 'Table', subCommand: 'VerticalSplit' },\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];\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { cssClass: 'e-segoe-ui', text: 'Segoe UI', command: 'Font', subCommand: 'FontName', value: 'Segoe UI' },\n { cssClass: 'e-arial', text: 'Arial', command: 'Font', subCommand: 'FontName', value: 'Arial,Helvetica,sans-serif' },\n { cssClass: 'e-georgia', text: 'Georgia', command: 'Font', subCommand: 'FontName', value: 'Georgia,serif' },\n { cssClass: 'e-impact', text: 'Impact', command: 'Font', subCommand: 'FontName', value: 'Impact,Charcoal,sans-serif' },\n { cssClass: 'e-tahoma', text: 'Tahoma', command: 'Font', subCommand: 'FontName', value: 'Tahoma,Geneva,sans-serif' },\n { cssClass: 'e-times-new-roman', text: 'Times New Roman', command: 'Font', subCommand: 'FontName', value: 'Times New Roman,Times,serif' },\n { cssClass: 'e-verdana', text: 'Verdana', command: 'Font', subCommand: 'FontName', value: 'Verdana,Geneva,sans-serif' }\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 { cssClass: 'e-paragraph', text: 'Paragraph', command: 'Formats', subCommand: 'P', value: 'P' },\n { cssClass: 'e-code', text: 'Code', command: 'Formats', subCommand: 'Pre', value: 'Pre' },\n { cssClass: 'e-quote', text: 'Quotation', command: 'Formats', subCommand: 'BlockQuote', value: 'BlockQuote' },\n { cssClass: 'e-h1', text: 'Heading 1', command: 'Formats', subCommand: 'H1', value: 'H1' },\n { cssClass: 'e-h2', text: 'Heading 2', command: 'Formats', subCommand: 'H2', value: 'H2' },\n { cssClass: 'e-h3', text: 'Heading 3', command: 'Formats', subCommand: 'H3', value: 'H3' },\n { cssClass: 'e-h4', text: 'Heading 4', command: 'Formats', subCommand: 'H4', value: '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};\nexport var numberFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'NumberFormatList', value: 'none' },\n { text: 'Number', command: 'Lists', subCommand: 'NumberFormatList', value: 'decimal' },\n { text: 'Lower Greek', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerGreek' },\n { text: 'Lower Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerRoman' },\n { text: 'Upper Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperAlpha' },\n { text: 'Lower Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerAlpha' },\n { text: 'Upper Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperRoman' },\n];\nexport var bulletFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'BulletFormatList', value: 'none' },\n { text: 'Disc', command: 'Lists', subCommand: 'BulletFormatList', value: 'disc' },\n { text: 'Circle', command: 'Lists', subCommand: 'BulletFormatList', value: 'circle' },\n { text: 'Square', command: 'Lists', subCommand: 'BulletFormatList', value: 'square' },\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 } from '@syncfusion/ej2-base';\nimport { Browser, detach, SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale, fontNameLocale, formatsLocale, numberFormatListLocale, bulletFormatListLocale } from '../models/default-locale';\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'];\n/**\n * @param {string} val - specifies the string value\n * @param {string} items - specifies the value\n * @returns {number} - returns the number value\n * @hidden\n */\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}\n/**\n * @param {Element} element - specifies the element\n * @param {string} className - specifies the string value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\n/**\n * @param {IDropDownItemModel} items - specifies the item model\n * @param {string} value - specifies the string value\n * @param {string} type - specifies the string value\n * @param {string} returnType - specifies the return type\n * @returns {string} - returns the string value\n * @hidden\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}\n/**\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n return value;\n}\n/**\n * @param {MouseEvent} e - specifies the mouse event\n * @param {HTMLElement} parentElement - specifies the parent element\n * @param {boolean} isIFrame - specifies the boolean value\n * @returns {number} - returns the number\n * @hidden\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}\n/**\n * @param {string} item - specifies the string\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n * @returns {string} - returns the string\n * @hidden\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}\n/**\n * @param {ISetToolbarStatusArgs} e - specifies the e element\n * @param {boolean} isPopToolbar - specifies the boolean value\n * @param {IRichTextEditor} self - specifies the parent element\n * @returns {void}\n * @hidden\n */\nexport function setToolbarStatus(e, isPopToolbar, self) {\n updateDropDownFontFormatLocale(self);\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 break;\n }\n var formatItems = e.parent.format.types;\n var formatContent = isNOU(e.parent.format.default) ? formatItems[0].text :\n e.parent.format.default;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\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 }\n case 'alignments': {\n if (isNOU(dropDown.alignDropDown) ||\n (!isNOU(dropDown.alignDropDown) && dropDown.alignDropDown.isDestroyed)) {\n break;\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 }\n case 'fontname': {\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar ||\n (!isNOU(dropDown.fontNameDropDown) && dropDown.fontNameDropDown.isDestroyed)) {\n break;\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 }\n case 'fontsize': {\n if (isNOU(dropDown.fontSizeDropDown) ||\n (!isNOU(dropDown.fontSizeDropDown) && dropDown.fontSizeDropDown.isDestroyed)) {\n break;\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 }\n}\n/**\n * @param {string} items - specifies the string value\n * @returns {string[]} - returns the array value\n * @hidden\n */\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\n/**\n * @param {string[]} items - specifies the array of string value\n * @param {IToolbarItemModel} toolbarItems - specifies the tool bar model\n * @returns {number} - returns the number\n * @hidden\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] === 'FileManager' && toolbarItems[j].subCommand === 'File') {\n itemsIndex.push(j);\n break;\n }\n else if (typeof (items[i]) === 'object' && items[i].command === 'Custom') {\n itemsIndex.push(i);\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}\n/**\n * @param {BaseToolbar} baseToolbar - specifies the base\n * @param {boolean} undoRedoStatus - specifies the boolean value\n * @returns {void}\n * @hidden\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 *\n * @param {Element} element - specifies the element.\n * @param {string} type - specifies the string type.\n * @returns {void}\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}\n/**\n * To parse the HTML\n *\n * @param {string} value - specifies the string value\n * @returns {DocumentFragment} - returns the document\n * @hidden\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}\n/**\n * @param {Document} docElement - specifies the document element\n * @param {Element} node - specifies the node\n * @returns {Node[]} - returns the node array\n * @hidden\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}\n/**\n * @param {IToolsItemConfigs} obj - specifies the configuration\n * @returns {void}\n * @hidden\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}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the string\n * @hidden\n */\nexport function getEditValue(value, rteObj) {\n var val;\n if (value !== null && value !== '') {\n val = rteObj.enableHtmlEncode ? updateTextNode(decode(value), rteObj) : updateTextNode(value, rteObj);\n rteObj.setProperties({ value: val }, true);\n }\n else {\n if (rteObj.enterKey === 'DIV') {\n val = rteObj.enableHtmlEncode ? '<div><br/></div>' : '<div><br/></div>';\n }\n else if (rteObj.enterKey === 'BR') {\n val = rteObj.enableHtmlEncode ? '<br/>' : '<br/>';\n }\n else {\n val = rteObj.enableHtmlEncode ? '<p><br/></p>' : '<p><br/></p>';\n }\n }\n return val;\n}\n/**\n * @param {string} value - specifies the value\n * @param {IRichTextEditor} rteObj - specifies the rich text editor instance.\n * @returns {string} - returns the string\n * @hidden\n */\nexport function updateTextNode(value, rteObj) {\n var tempNode = document.createElement('div');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var insertElem = void 0;\n while (tempNode.firstChild) {\n if (rteObj.enterKey !== 'BR' && ((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 if (rteObj.enterKey === 'DIV') {\n insertElem = createElement('div');\n }\n else {\n insertElem = createElement('p');\n }\n resultElm.appendChild(insertElem);\n insertElem.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = insertElem;\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}\n/**\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the value based on enter configuration.\n * @hidden\n */\nexport function getDefaultValue(rteObj) {\n var currentVal;\n if (rteObj.enterKey === 'DIV') {\n currentVal = rteObj.enableHtmlEncode ? '<div><br/></div>' : '<div><br/></div>';\n }\n else if (rteObj.enterKey === 'BR') {\n currentVal = rteObj.enableHtmlEncode ? '<br/>' : '<br/>';\n }\n else {\n currentVal = rteObj.enableHtmlEncode ? '<p><br/></p>' : '<p><br/></p>';\n }\n return currentVal;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isEditableValueEmpty(value) {\n return (value === '<p><br></p>' || value === '<p><br></p>'\n || value === '<div><br></div>' || value === '<div><br></div>'\n || value === '<br>' || value === '<br>'\n || value === '') ? true : false;\n}\n/**\n * @param {string} value - specifies the string value\n * @returns {string} - returns the string\n * @hidden\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}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} parent - specifies the rte\n * @returns {string} - returns the string value\n * @hidden\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 && !isNOU(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/**\n * @param {string} dataUrl - specifies the string value\n * @returns {BaseToolbar} - returns the value\n * @hidden\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 * @param {IRichTextEditor} self - specifies the rte\n * @param {string} localeItems - specifies the locale items\n * @param {IDropDownItemModel} item - specifies the dropdown item\n * @returns {string} - returns the value\n * @hidden\n */\nexport function getLocaleFontFormat(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.value || localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\n/**\n * @param {IRichTextEditor} self - specifies the rte\n * @returns {void}\n * @hidden\n */\nexport function updateDropDownFontFormatLocale(self) {\n model.fontFamily.forEach(function (item, i) {\n model.fontFamily[i].text = getLocaleFontFormat(self, fontNameLocale, model.fontFamily[i]);\n });\n model.formatItems.forEach(function (item, i) {\n model.formatItems[i].text = getLocaleFontFormat(self, formatsLocale, model.formatItems[i]);\n });\n model.numberFormatList.forEach(function (item, i) {\n model.numberFormatList[i].text = getLocaleFontFormat(self, numberFormatListLocale, model.numberFormatList[i]);\n });\n model.bulletFormatList.forEach(function (item, i) {\n model.bulletFormatList[i].text = getLocaleFontFormat(self, bulletFormatListLocale, model.bulletFormatList[i]);\n });\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'];\n/**\n * @returns {void}\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {Element} editableElement - specifies the editable element.\n * @param {string} selector - specifies the string values.\n * @returns {void}\n * @hidden\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}\n/**\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\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 if (tdElm[j].style.borderLeft === 'none') {\n tdElm[j].style.removeProperty('border-left');\n }\n if (tdElm[j].style.borderRight === 'none') {\n tdElm[j].style.removeProperty('border-right');\n }\n if (tdElm[j].style.borderBottom === 'none') {\n tdElm[j].style.removeProperty('border-bottom');\n }\n if (tdElm[j].style.borderTop === 'none') {\n tdElm[j].style.removeProperty('border-top');\n }\n if (tdElm[j].style.border === 'none') {\n tdElm[j].style.removeProperty('border');\n }\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/**\n * @param {Node} startChildNodes - specifies the node\n * @returns {void}\n * @hidden\n */\nexport function getLastTextNode(startChildNodes) {\n var finalNode = startChildNodes;\n do {\n if (finalNode.childNodes.length > 0) {\n finalNode = finalNode.childNodes[0];\n }\n } while (finalNode.childNodes.length > 0);\n return finalNode;\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultHtmlTbStatus() {\n return {\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 };\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultMDTbStatus() {\n return {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n lowercase: false,\n inlinecode: false,\n unorderedlist: false,\n formats: null\n };\n}\n","/**\n * @param {string} htmlAttributes - specifies the string value\n * @param {IRichTextEditor} rte - specifies the rte value\n * @param {boolean} isFrame - specifies the boolean value\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\n * @hidden\n */\nexport 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 contentChanged = 'content-changed';\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 windowResize = 'resize';\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 updatedToolbarStatus = 'updatedToolbarStatus';\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 enterHandler = 'enterHandler';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogOpen = 'beforeDialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var clearDialogObj = 'clearDialogObj';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogOpen = 'dialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogClose = 'beforeDialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogClose = 'dialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeQuickToolbarOpen = 'beforeQuickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarOpen = 'quickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarClose = 'quickToolbarClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var popupHide = 'popupHide';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageSelected = 'imageSelected';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploading = 'imageUploading';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadSuccess = 'imageUploadSuccess';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadFailed = 'imageUploadFailed';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageRemoving = 'imageRemoving';\n/**\n * @hidden\n * @deprecated\n */\nexport var afterImageDelete = 'afterImageDelete';\n/**\n * @hidden\n * @deprecated\n */\nexport var drop = 'drop';\n/**\n * @hidden\n * @deprecated\n */\nexport var xhtmlValidation = 'xhtmlValidation';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeImageUpload = 'beforeImageUpload';\n/**\n * @hidden\n * @deprecated\n */\nexport var resizeInitialized = 'resizeInitialized';\n/**\n * @hidden\n * @deprecated\n */\nexport var renderFileManager = 'renderFileManager';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeImageDrop = 'beforeImageDrop';\n/**\n * @hidden\n * @deprecated\n */\nexport var dynamicModule = 'dynamicModule';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforePasteCleanup = 'beforePasteCleanup';\n/**\n * @hidden\n * @deprecated\n */\nexport var afterPasteCleanup = 'afterPasteCleanup';\n/**\n * @hidden\n * @deprecated\n */\nexport var updateTbItemsStatus = 'updateTbItemsStatus';\n/**\n * @hidden\n * @deprecated\n */\nexport var showLinkDialog = 'showLinkDialog';\n/**\n * @hidden\n * @deprecated\n */\nexport var closeLinkDialog = 'closeLinkDialog';\n/**\n * @hidden\n * @deprecated\n */\nexport var showImageDialog = 'showImageDialog';\n/**\n * @hidden\n * @deprecated\n */\nexport var closeImageDialog = 'closeImageDialog';\n/**\n * @hidden\n * @deprecated\n */\nexport var showTableDialog = 'showTableDialog';\n/**\n * @hidden\n * @deprecated\n */\nexport var closeTableDialog = 'closeTableDialog';\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_TB_STATIC = 'e-tb-static';\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_LIST_PRIMARY_CONTENT = 'e-rte-list-primary-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_NUMBERFORMATLIST_TB_BTN = 'e-rte-numberformatlist-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BULLETFORMATLIST_TB_BTN = 'e-rte-bulletformatlist-dropdown';\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 * @hidden\n * @deprecated\n */\nexport var CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_TB_ENABLED = 'e-rte-toolbar-enabled';\n","/**\n * Defines types of Render\n *\n * @hidden\n * @deprecated\n */\nexport var RenderType;\n(function (RenderType) {\n /* eslint-disable */\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 /* eslint-enable */\n})(RenderType || (RenderType = {}));\n/**\n * Defines types to be used as Toolbar.\n */\nexport var ToolbarType;\n(function (ToolbarType) {\n /* eslint-disable */\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 /* eslint-enable */\n})(ToolbarType || (ToolbarType = {}));\n/**\n * Defines the type of dialog, which open or close in the Rich Text Editor.\n */\nexport var DialogType;\n(function (DialogType) {\n /* eslint-disable */\n /** Defines ToolbarType as Standard */\n DialogType[\"InsertLink\"] = \"InsertLink\";\n /** Defines ToolbarType as MultiRow */\n DialogType[\"InsertImage\"] = \"InsertImage\";\n /** Defines ToolbarType as Scrollable */\n DialogType[\"InsertTable\"] = \"InsertTable\";\n /* eslint-enable */\n})(DialogType || (DialogType = {}));\n","/* eslint-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 Link',\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 'fileManager': 'File Manager',\n 'fileDialogHeader': 'File Browser',\n \"formatsDropDownParagraph\": 'Paragraph',\n 'formatsDropDownCode': 'Code',\n 'formatsDropDownQuotation': 'Quotation',\n 'formatsDropDownHeading1': 'Heading 1',\n 'formatsDropDownHeading2': 'Heading 2',\n 'formatsDropDownHeading3': 'Heading 3',\n 'formatsDropDownHeading4': 'Heading 4',\n 'fontNameSegoeUI': 'Segoe UI',\n 'fontNameArial': 'Arial',\n 'fontNameGeorgia': 'Georgia',\n 'fontNameImpact': 'Impact',\n 'fontNameTahoma': 'Tahoma',\n 'fontNameTimesNewRoman': 'Times New Roman',\n 'fontNameVerdana': 'Verdana',\n 'numberFormatListNumber': 'Number',\n 'numberFormatListLowerAlpha': 'LowerAlpha',\n 'numberFormatListUpperAlpha': 'UpperAlpha',\n 'numberFormatListLowerRoman': 'LowerRoman',\n 'numberFormatListUpperRoman': 'UpperRoman',\n 'numberFormatListLowerGreek': 'LowerGreek',\n 'bulletFormatListDisc': 'Disc',\n 'bulletFormatListCircle': 'Circle',\n 'bulletFormatListSquare': 'Square',\n 'numberFormatListNone': 'None',\n 'bulletFormatListNone': 'None'\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};\nexport var fontNameLocale = [\n { locale: 'fontNameSegoeUI', value: 'Segoe UI' },\n { locale: 'fontNameArial', value: 'Arial,Helvetica,sans-serif' },\n { locale: 'fontNameGeorgia', value: 'Georgia,serif' },\n { locale: 'fontNameImpact', value: 'Impact,Charcoal,sans-serif' },\n { locale: 'fontNameTahoma', value: 'Tahoma,Geneva,sans-serif' },\n { locale: 'fontNameTimesNewRoman', value: 'Times New Roman,Times,serif' },\n { locale: 'fontNameVerdana', value: 'Verdana,Geneva,sans-serif' }\n];\nexport var formatsLocale = [\n { locale: 'formatsDropDownParagraph', value: 'P' },\n { locale: 'formatsDropDownCode', value: 'Pre' },\n { locale: 'formatsDropDownQuotation', value: 'BlockQuote' },\n { locale: 'formatsDropDownHeading1', value: 'H1' },\n { locale: 'formatsDropDownHeading2', value: 'H2' },\n { locale: 'formatsDropDownHeading3', value: 'H3' },\n { locale: 'formatsDropDownHeading4', value: 'H4' }\n];\nexport var numberFormatListLocale = [\n { locale: 'numberFormatListNone', value: 'none' },\n { locale: 'numberFormatListNumber', value: 'decimal' },\n { locale: 'numberFormatListLowerAlpha', value: 'lower-alpha' },\n { locale: 'numberFormatListUpperAlpha', value: 'upper-alpha' },\n { locale: 'numberFormatListLowerRoman', value: 'lower-roman' },\n { locale: 'numberFormatListUpperRoman', value: 'upper-roman' },\n { locale: 'numberFormatListLowerGreek', value: 'lower-greek' }\n];\nexport var bulletFormatListLocale = [\n { locale: 'bulletFormatListNone', value: 'none' },\n { locale: 'bulletFormatListDisc', value: 'disc' },\n { locale: 'bulletFormatListCircle', value: 'circle' },\n { locale: 'bulletFormatListSquare', value: 'square' },\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, CLS_BULLETFORMATLIST_TB_BTN, CLS_NUMBERFORMATLIST_TB_BTN, CLS_LIST_PRIMARY_CONTENT } 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 *\n * @hidden\n * @deprecated\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\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 || isNullOrUndefined(args.item)) {\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 (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1) {\n var listEle = args.element.querySelectorAll('li');\n if (this.parent.inputElement.querySelectorAll('.e-cell-select').length === 1) {\n addClass([listEle[0]], 'e-disabled');\n removeClass([listEle[1], listEle[2]], 'e-disabled');\n }\n else if (this.parent.inputElement.querySelectorAll('.e-cell-select').length > 1) {\n removeClass([listEle[0]], 'e-disabled');\n addClass([listEle[1], listEle[2]], 'e-disabled');\n }\n }\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n this.popupModal(args.element.parentElement);\n }\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.removePopupContainer();\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.removePopupContainer = function () {\n if (Browser.isDevice && !isNullOrUndefined(this.popupContainer)) {\n var popupEle = this.popupContainer.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n this.popupContainer.parentNode.insertBefore(popupEle, this.popupContainer.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(this.popupContainer);\n this.popupContainer = undefined;\n }\n };\n /**\n * renderToolbar method\n *\n * @param {IToolbarOptions} args - specifies the arguments.\n * @returns {void}\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 *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 /**\n * renderListDropDown method\n *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderListDropDown = function (args) {\n // eslint-disable-next-line\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((args.itemName === 'NumberFormatList') ? CLS_NUMBERFORMATLIST_TB_BTN : CLS_BULLETFORMATLIST_TB_BTN));\n var content = proxy.parent.createElement('span', { className: CLS_LIST_PRIMARY_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n items: args.items,\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 var element = (args.event) ? args.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n if (args.event && args.event.type === 'click' && (element.classList.contains(CLS_LIST_PRIMARY_CONTENT)\n || element.parentElement.classList.contains(CLS_LIST_PRIMARY_CONTENT))) {\n args.cancel = true;\n return;\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 if (args.element.childElementCount === 1) {\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n }\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n return dropDown;\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 *\n * @param {IColorPickerModel} args - specifies the arguments.\n * @param {string} item - specifies the item.\n * @param {ColorPicker} colorPicker - specifies the colorpicker.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n // eslint-disable-next-line\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, {\n item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n inst.dataBind();\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n _this.setColorPickerContentWidth(colorPicker);\n var focusEle;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n if (Browser.isDevice) {\n _this.popupModal(dropDownArgs.element.parentElement);\n }\n _this.pickerRefresh(dropDownArgs);\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: {\n command: args.command, subCommand: args.subCommand,\n value: colorpickerValue\n }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n if (Browser.isDevice && !isNullOrUndefined(dropElement)) {\n var popupEle = dropElement.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n dropElement.parentNode.insertBefore(popupEle, dropElement.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(dropElement);\n proxy.popupContainer = undefined;\n }\n }\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n args.element.setAttribute('role', 'button');\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 () {\n proxy.parent.notify(events.selectionSave, {});\n };\n dropDown.element.onkeydown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\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 *\n * @param {IColorPickerModel} args - specifies the arguments\n * @param {string} item - specifies the string values\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n // eslint-disable-next-line\n var proxy = this;\n var value;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n value: '#fff',\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n 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' || range.startContainer.nodeName === 'BODY' ||\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 value = colorPicker.value;\n if (value === '') {\n colorPicker.setProperties({ value: ((args.mode === 'Picker') ? '#008000ff' : '') }, true);\n }\n colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n colorPicker.isStringTemplate = true;\n colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n colorPicker.createElement = this.parent.createElement;\n colorPicker.appendTo(document.getElementById(args.target));\n return colorPicker;\n };\n /**\n * The function is used to render Rich Text Editor toolbar\n *\n * @returns {void}\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 *\n * @returns {Element} - specifies the 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 *\n * @returns {void}\n * @param {Element} panel - specifies the element.\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.getClass = function (item) {\n var classes;\n switch (item) {\n case 'fontsize':\n classes = 'e-rte-inline-size-template';\n break;\n case 'fontcolor':\n case 'backgroundcolor':\n classes = 'e-rte-inline-color-template';\n break;\n default:\n classes = 'e-rte-inline-template';\n break;\n }\n return classes;\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n case 'numberformatlist':\n case 'bulletformatlist':\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 cssClass: this.parent.inlineMode.enable ? this.getClass(itemStr) : '',\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n /**\n * getObject method\n *\n * @param {string} item - specifies the string value\n * @param {string} container - specifies the value of string\n * @returns {IToolbarItemModel} - returns the model element\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 * @param {string} tbItems - specifies the string value\n * @param {string} container - specifies the container value\n * @returns {ItemModel} - retunrs the model element\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 *\n * @param {IToolbarRenderOptions} args - specifies the toolbar options\n * @returns {void}\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 *\n * @param {IDropDownRenderArgs} args - specifies the arguments\n * @returns {void}\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 'numberformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_NumberFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatOLItem = _this.parent.numberFormatList.types.slice();\n formatOLItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'NumberFormatList', enumerable: true }\n });\n });\n _this.numberFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-order-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'NumberFormatList', items: formatOLItem, element: targetElement\n });\n break;\n }\n case 'bulletformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_BulletFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatULItem = _this.parent.bulletFormatList.types.slice();\n formatULItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'BulletFormatList', enumerable: true }\n });\n });\n _this.bulletFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-unorder-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'BulletFormatList', items: formatULItem, element: targetElement\n });\n break;\n }\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 }\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 }\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 }\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 'tablecell':\n _this.cellDropDown(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 }\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 }\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 }\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.cellDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCell', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCell',\n items: model.tableCellItems,\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 *\n * @returns {void}\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 if (this.numberFormatListDropDown) {\n this.removeDropDownClasses(this.numberFormatListDropDown.element);\n this.numberFormatListDropDown.destroy();\n }\n if (this.bulletFormatListDropDown) {\n this.removeDropDownClasses(this.bulletFormatListDropDown.element);\n this.bulletFormatListDropDown.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 if (this.numberFormatListDropDown) {\n this.numberFormatListDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.bulletFormatListDropDown) {\n this.bulletFormatListDropDown.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 *\n * @hidden\n * @deprecated\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n /* eslint-disable */\n /**\n * register method\n *\n * @param {string} name - specifies the name.\n * @param {T} type - specifies the type.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n /* eslint-enable */\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 *\n * @param {string} name - specifies the name.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n // eslint-disable-next-line\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 *\n * @hidden\n * @deprecated\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n /**\n * addRenderer method\n *\n * @param {RenderType} name - specifies the render type\n * @param {IRenderer} type - specifies the renderer.\n * @returns {void}\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 *\n * @param {RenderType} name - specifies the render type\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n if (args.item.command === 'NumberFormatList' || args.item.command === 'BulletFormatList') {\n if (args.originalEvent.target.classList.contains('e-order-list') || args.originalEvent.target.classList.contains('e-unorder-list')) {\n args.item.command = 'Lists';\n args.item.subCommand = args.item.subCommand === 'NumberFormatList' ? 'OL' : 'UL';\n }\n }\n if (args.item.command === 'Lists') {\n if (args.originalEvent.target.classList.contains('e-caret') &&\n (args.originalEvent.target.parentElement.classList.contains('e-rte-bulletformatlist-dropdown') || args.originalEvent.target.parentElement.classList.contains('e-rte-numberformatlist-dropdown'))) {\n args.item.command = args.item.subCommand = null;\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 if (e.item.command === 'Lists') {\n var listItem = { listStyle: e.item.value, listImage: e.item.listImage, type: e.item.subCommand };\n this.parent.formatter.process(this.parent, e, e.originalEvent, listItem);\n }\n else {\n this.parent.formatter.process(this.parent, e, e.originalEvent, value);\n }\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 { updateDropDownFontFormatLocale } 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 updateDropDownFontFormatLocale(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))\n + 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 addClass([this.parent.element], [classes.CLS_RTE_TB_ENABLED]);\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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n /**\n * removeFixedTBarClass method\n *\n * @returns {void}\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 // eslint-disable-next-line\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n /**\n * updateItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @returns {void}\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), this.parent);\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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n /**\n * addTBarItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @param {number} index - specifies the index value.\n * @returns {void}\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 *\n * @param {BaseToolbar} baseToolbar - specifies the toolbar.\n * @param {string} items - specifies the string value.\n * @param {boolean} isEnable - specifies the boolean value.\n * @param {boolean} muteToolbarUpdate - specifies the toolbar.\n * @returns {void}\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 *\n * @param {string} items - specifies the string value.\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n /**\n * getToolbarElement method\n *\n * @returns {void}\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 *\n * @returns {void}\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_TB_ENABLED]);\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 *\n * @function destroy\n * @returns {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 // eslint-disable-next-line\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.toolbarClickHandler = function (e) {\n var trg = closest(e.originalEvent.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, 'focusin', this.tbFocusHandler, this);\n EventHandler.add(this.tbElement, 'keydown', this.tbKeydownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\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 if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n }\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.refreshBegin, this.onRefresh);\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 if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n }\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 *\n * @param {RichTextEditorModel} e - specifies the string value\n * @returns {void}\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 this.parent.notify(events.dynamicModule, {});\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @hidden\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 *\n * @hidden\n * @deprecated\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element - specifies the elements.\n * @param {KeyboardEventsModel} options - specify the 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 * @param {KeyboardEventArgs} e - specifies the event arguments.\n * @returns {void}\n */\n _this.keyPressHandler = function (e) {\n /* eslint-disable */\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var isMetaKey = e.metaKey;\n /* eslint-enable */\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 || isMetaKey) &&\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 *\n * @returns {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 *\n * @param {KeyboardEventsModel} newProp - specifies the keyboard event.\n * @param {KeyboardEventsModel} oldProp - specifies the old property.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} - specifies the key data\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 *\n * @param {IColorPickerRenderArgs} args - specify the arguments.\n * @returns {void}\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 }\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 };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n /**\n * destroyColorPicker method\n *\n * @returns {void}\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 }\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 }\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 } 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 *\n * @param {IQuickToolbarOptions} args - specifies the arguments\n * @returns {void}\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 }\n case 'right':\n if (type === 'inline') {\n x = window.pageXOffset + (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 *\n * @param {number} x - specifies the x value\n * @param {number} y - specifies the y value\n * @param {Element} target - specifies the element\n * @returns {void}\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var _this = this;\n var eventArgs = { 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 + 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: window.outerWidth + 'px'\n });\n addClass([_this.element], [classes.CLS_POP]);\n _this.isDOMElement = true;\n }\n });\n };\n /**\n * hidePopup method\n *\n * @returns {void}\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 * @param {string} item - specifies the string value\n * @param {number} index - specifies the index value\n * @returns {void}\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 * @param {number} index - specifies the index value\n * @returns {void}\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 = 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, this.parent);\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 *\n * @function destroy\n * @returns {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 *\n * @returns {void}\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 *\n * @param {RichTextEditorModel} e - specifies the model element\n * @returns {void}\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 *\n * @returns {void}\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 * as events from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n *\n * @hidden\n * @deprecated\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent.\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.quickToolbarOpen = function () {\n var args = this.popupObj;\n this.parent.trigger(events.quickToolbarOpen, args);\n };\n /**\n * renderPopup method\n *\n * @param {BaseQuickToolbar} args - specifies the arguments.\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {Element} - specifies the 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 *\n * @returns {void}\n * @param {Element} panel - specifies the element\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 *\n * @param {string} popupType - specifies the string value\n * @param {string} mode - specifies the string value.\n * @param {string} items - specifies the string.\n * @param {RenderType} type - specifies the render type.\n * @returns {BaseQuickToolbar} - specifies the quick toolbar\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 // eslint-disable-next-line\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 /**\n * Method for showing the inline quick toolbar\n *\n * @param {number} x -specifies the value of x.\n * @param {number} y - specifies the y valu.\n * @param {HTMLElement} target - specifies the target element.\n * @returns {void}\n * @hidden\n * @deprecated\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 /**\n * Method for hidding the inline quick toolbar\n *\n * @returns {void}\n * @hidden\n * @deprecated\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 *\n * @returns {void}\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 () {\n _this.showInlineQTBar(x, y, target);\n }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n var args = e.args.touches ?\n 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 var parentLeft = this.parent.element.getBoundingClientRect().left;\n this.offsetX = this.parent.iframeSettings.enable ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n this.offsetY = pageYOffset(args, 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 () {\n _this.onSelectionChange(e);\n }, 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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {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 // eslint-disable-next-line\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 *\n * @returns {void}\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 *\n * @returns {void}\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.parent.off(events.drop, this.renderQuickToolbars);\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 *\n * @param {RichTextEditorModel} e - specifies the element.\n * @returns {void}\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 * @returns {void}\n * @hidden\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 *\n * @returns {void}\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 if (this.parent.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n this.htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n this.htmlLength = htmlText.length;\n }\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 * @returns {void}\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 *\n * @function destroy\n * @returns {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 * @returns {string} - returns the string value\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n *\n * @hidden\n * @deprecated\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n /**\n * markdown getLineNumber method\n *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @param {number} point - specifies the number value\n * @returns {number} - returns the value\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 *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @returns {string} - specifies the string value\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 *\n * @param {string} value - specifies the string value\n * @returns {string[]} - returns the string value\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n /**\n * markdown getSelectedLine method\n *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @returns {string} - returns the string value\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 *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @param {number} index - specifies the number value\n * @returns {string} - returns the string value\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 *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @returns {string} - returns the string value\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 *\n * @param {HTMLTextAreaElement} textarea - specifies the text area element\n * @param {number} start - specifies the start vaulue\n * @param {number} end - specifies the end value\n * @returns {void}\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 *\n * @param {number} start - specifies the start vaulue\n * @param {number} end - specifies the end value\n * @returns {void}\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 *\n * @param {HTMLTextAreaElement} textArea - specifies the text area element\n * @returns {void}\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 *\n * @param {string} line - specifies the string value\n * @param {string} command - specifies the string value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {string} value - specifies the string value\n * @returns {string} - returns the value\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n // eslint-disable-next-line\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n /**\n * markdown isClear method\n *\n * @param {string} parents - specifies the parent element\n * @param {string} regex - specifies the regex value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {HTMLTextAreaElement} textarea - specifies the text area\n * @returns {void}\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';\nimport { getDefaultMDTbStatus } from '../../common/util';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = this.prevToolbarStatus = getDefaultMDTbStatus();\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.removeEventListener);\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 var tbStatusString = JSON.stringify(this.toolbarStatus);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n if (JSON.stringify(this.prevToolbarStatus) !== tbStatusString) {\n this.parent.notify(events.updateTbItemsStatus, { html: null, markdown: JSON.parse(tbStatusString) });\n this.prevToolbarStatus = JSON.parse(tbStatusString);\n }\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 } 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 *\n * @hidden\n * @deprecated\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {ActionBeginEventArgs} args - specifies the event arguments.\n * @param {MouseEvent|KeyboardEvent} event - specifies the keyboard event.\n * @param {IItemCollectionArgs} value - specifies the collection arguments\n * @returns {void}\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 && args.item.command !== 'Files'\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 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 if (event.which === 13 && self.editorMode === 'HTML') {\n value = {\n 'enterAction': self.enterKey\n };\n }\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 enterAction: self.enterKey\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'), self.enterKey);\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 *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\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 self.notify(CONSTANT.contentChanged, {});\n _this.enableUndo(self);\n }\n });\n };\n /**\n * onSuccess method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {IMarkdownFormatterCallBack} events - specifies the event call back\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Formatter.prototype.onSuccess = function (self, events) {\n self.notify(CONSTANT.contentChanged, {});\n if (events && (isNullOrUndefined(events.event) || 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 *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n /**\n * getUndoStatus method\n *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n /* eslint-disable */\n /**\n * getUndoRedoStack method\n *\n * @param {IHtmlUndoRedoData} - specifies the redo data.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n /* eslint-enable */\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n /**\n * enableUndo method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @returns {void}\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 }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Common\n */\n/**\n * Keydown event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/**\n * Undo and Redo action HTML plugin events\n *\n * @hidden\n */\nexport var ACTION = 'action';\n/**\n * Formats plugin events\n *\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/**\n * Keydown handler event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/**\n * List plugin events\n *\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/**\n * Keyup handler event trigger\n *\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/**\n * Keyup event trigger\n *\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/**\n * Model changed plugin event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/**\n * Model changed event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n/**\n * PasteCleanup plugin for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP_PLUGIN = 'ms_word_cleanup_plugin';\n/**\n * PasteCleanup for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP = 'ms_word_cleanup';\n/**\n * ActionBegin event callback\n *\n * @hidden\n */\nexport var ON_BEGIN = 'onBegin';\n/**\n * Callback for spacelist action\n *\n * @hidden\n */\nexport var SPACE_ACTION = 'actionBegin';\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 *\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n *\n * @param {IMDFormats} options - specifies the options\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, \n // eslint-disable-next-line\n 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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n var currentValue = parseInt(previousLine, null);\n var nextValue = currentValue + 1;\n return nextValue.toString() + '. ';\n };\n MDLists.prototype.previousOrderedListValue = function (previousLine) {\n // eslint-disable-next-line\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' && (prevLine && 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 // eslint-disable-next-line\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 = this.olListType();\n var regex;\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 // eslint-disable-next-line\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 *\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/**\n * selectioncommand plugin events\n *\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/**\n * Link plugin events\n *\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/**\n * Clear plugin events\n *\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n/**\n * Table plugin events\n *\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 *\n * @hidden\n * @deprecated\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {IMDFormats} options - specifies the formats\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 (this.selection.getSelectedText(textArea).length === 0) {\n parents[i].text = this.syntax[e.subCommand];\n textArea.value = textArea.value.substr(0, parents[i].start) + this.syntax[e.subCommand] +\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 }\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 *\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 MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n // eslint-disable-next-line\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 /* eslint-disable */\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 /* eslint-enable */\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 /* eslint-disable */\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 /* eslint-enable */\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 }\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 *\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 *\n * @function destroy\n * @returns {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * onAction method\n *\n * @param {IMarkdownSubCommands} e - specifies the sub commands\n * @returns {void}\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 // eslint-disable-next-line\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 *\n * @param {KeyboardEvent} e - specifies the key board event\n * @function saveData\n * @returns {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 *\n * @param {IMarkdownSubCommands} e - specifies the sub commands\n * @function undo\n * @returns {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 *\n * @param {IMarkdownSubCommands} e - specifies the sub commands\n * @function redo\n * @returns {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 *\n * @returns {boolean} - returns the boolean value\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 *\n * @hidden\n * @deprecated\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {MarkdownParser} parent - specifies the parent element\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 *\n * @hidden\n * @deprecated\n */\nvar MDTable = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {IMDTable} options - specifies the options\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 *\n * @returns {void}\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 = 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 // eslint-disable-next-line\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, \n // eslint-disable-next-line\n 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 *\n * @hidden\n * @deprecated\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n *\n * @param {MarkdownParser} parent - specifies the parent element\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 /* eslint-disable */\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 /* eslint-enable */\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 // eslint-disable-next-line\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = data[key].length;\n var endExp = (data[key] === '<sup>' || data[key] === '<sub>') ? data[key].length + 1 : data[key].length;\n if (data[key] === '<sup>') {\n // eslint-disable-next-line\n regExp = new RegExp('<sup>(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '<sub>') {\n // eslint-disable-next-line\n regExp = new RegExp('<sub>(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\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 // eslint-disable-next-line\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 *\n * @hidden\n * @deprecated\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n *\n * @param {IMarkdownParserModel} options - specifies the options\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 /* eslint-disable */\n /**\n * markdown execCommand method\n *\n * @param {MarkdownExecCommand} command - specifies the command\n * @param {T} - specifies the value\n * @param {Event} event - specifies the event\n * @param {Function} callBack - specifies the call back function\n * @param {string} text - specifies the string value\n * @param {T} exeValue - specifies the value\n * @returns {void}\n * @hidden\n * @deprecated\n */\n /* eslint-enable */\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 *\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 *\n * @param {Element} editElement - specifies the edit element.\n * @param {Document} doc - specifies the document.\n * @param {number} options - specifies the options\n * @returns {void}\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 *\n * @hidden\n * @deprecated\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent.\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n }\n /**\n * The function is used to render Rich Text Editor content div\n *\n * @returns {void}\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 *\n * @returns {Element} - specifies the 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 *\n * @returns {Element} - specifies the 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 *\n * @returns {string} - specifies the string values.\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n *\n * @param {Element} panel - specifies the element.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {void}\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 *\n * @function destroy\n * @returns {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 // eslint-disable-next-line\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 item = args.item;\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n var startOffset = textArea.selectionStart;\n var endOffset = textArea.selectionEnd;\n var 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 }\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 *\n * @param {RichTextEditorModel} e - specifies the editor model\n * @returns {void}\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,\n 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 * @returns {void}\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n *\n * @returns {void}\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 *\n * @param {NotifyArgs} e - specifies the arguments.\n * @returns {void}\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 *\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';\nexport var TABLE_MERGE = 'TABLE_MERGE';\nexport var TABLE_VERTICAL_SPLIT = 'TABLE_VERTICAL_SPLIT';\nexport var TABLE_HORIZONTAL_SPLIT = 'TABLE_HORIZONTAL_SPLIT';\nexport var TABLE_MOVE = 'TABLE_MOVE';\n/**\n * Alignments plugin events\n *\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/**\n * Indents plugin events\n *\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/**\n * Constant tag names\n *\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', 'body'];\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 *\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/**\n * Insert HTML plugin events\n *\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/**\n * Insert Text plugin events\n *\n * @hidden\n */\nexport var INSERT_TEXT_TYPE = 'insert-text-type';\n/**\n * Clear Format HTML plugin events\n *\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\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 *\n * @param {Document} docElement - specifies the get function\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n /**\n * save method\n *\n * @param {Range} range - range value.\n * @param {Document} docElement - specifies the document.\n * @returns {void}\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 *\n * @param {Node} node - specifies the node value.\n * @returns {void}\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 //eslint-disable-next-line\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 *\n * @param {Range} range -specifies the range.\n * @returns {void}\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 *\n * @param {Range} range - specifies the range value.\n * @returns {void}\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 *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @param {Range} range - specifies the range values.\n * @returns {void}\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 *\n * @param {Range} range - specifies the range value.\n * @returns {void}\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 *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodeCollectionBr = function (range) {\n return this.getSelectionNodesBr(this.getNodeCollection(range));\n };\n /**\n * getParentNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\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 *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\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 *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n /**\n * getInsertNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\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 *\n * @param {Node} node - specifies the node content.\n * @param {boolean} isStart - specifies the boolean value.\n * @param {Document} root - specifies the root document.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n // eslint-disable-next-line\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n if (isNullOrUndefined(node)) {\n break;\n }\n // eslint-disable-next-line\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 && node.nodeName !== 'html') {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n /**\n * restore method\n *\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the document.\n * @param {Range} range - specifies the range.\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the documrent\n * @param {Node} startNode - specifies the starting node.\n * @param {Node} endNode - specifies the the end node.\n * @param {number} startIndex - specifies the starting index.\n * @param {number} endIndex - specifies the end index.\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n /**\n * Clear method\n *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n /**\n * insertParentNode method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} newNode - specicfies the new node.\n * @param {Range} range - specifies the range.\n * @returns {void}\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 *\n * @param {Document} docElement - specifies the document.\n * @param {Element} element - specifies the element.\n * @param {number} point - specifies the point.\n * @returns {void}\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';\nimport { getLastTextNode } from '../../common/util';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n *\n * @hidden\n * @deprecated\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n *\n * @param {Element} parent - specifies the parent element\n * @param {Document} currentDocument - specifies the current document.\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 *\n * @param {Element} element - specifies the element.\n * @returns {void}\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 *\n * @param {Element} element - specifies the node element.\n * @returns {boolean} - sepcifies the boolean value\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 *\n * @param {Element} element - specifies the element\n * @returns {boolean} - specifies the boolean value\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 *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element value\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 *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\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 *\n * @param {Element} element - sepcifies the element.\n * @returns {string} - returns the string value.\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 /* eslint-disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* eslint-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 *\n * @param {Element} element - specifies the element\n * @returns {void}\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 *\n * @param {Element} element - specifies the element.\n * @returns {string} - returns the string\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 *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.closeTagString = function (element) {\n return '</' + element.tagName.toLowerCase() + '>';\n };\n /**\n * createTagString method\n *\n * @param {string} tagName - specifies the tag name\n * @param {Element} relativeElement - specifies the relative element\n * @param {string} innerHTML - specifies the string value\n * @returns {string} - returns the string value.\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 *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n /**\n * isEditable method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Element} element - specifes the element.\n * @param {string} className - specifies the class name value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Element} element - specifes the element.\n * @param {string} value - specifies the string value\n * @returns {void}\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 *\n * @param {string} value - specifies the string value\n * @returns {Element} - returns the element\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* eslint-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 /* eslint-enable */\n };\n /**\n * wrap method\n *\n * @param {Element} element - specifies the element\n * @param {Element} wrapper - specifies the element.\n * @returns {Element} - returns the element\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 *\n * @param {Element} newNode - specifies the new node element\n * @param {Element} referenceNode - specifies the referenece node\n * @returns {void}\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 *\n * @param {Element} parent - specifies the parent element.\n * @param {Element} wrapper - specifies the wrapper element.\n * @returns {Element} - returns the element\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 *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element.\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 *\n * @param {Element} element - specifies the element\n * @param {number} index - specifies the index value.\n * @returns {Element} - returns the element\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 *\n * @param {Element} element - specifies the element.\n * @param {Element[]} elements - specifies the array of elements\n * @returns {Element[]} - returnts the array elements\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 *\n * @returns {boolean} - returns the boolean value\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 *\n * @param {number} point - specifies the number value.\n * @returns {Range} - returns the range.\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 *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element\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 *\n * @param {string} value - specifies the string value\n * @returns {string} - specifies the string value\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n // eslint-disable-next-line\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * saveMarker method\n *\n * @param {NodeSelection} save - specifies the node selection,\n * @param {string} action - specifies the action value.\n * @returns {NodeSelection} - returns the value\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 *\n * @param {NodeSelection} save - specifies the node selection.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var startChildNodes = range.startContainer.childNodes;\n var isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';\n var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :\n startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || 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 *\n * @param {Element} start - specifies the element.\n * @param {string} className - specifes the class name string value\n * @param {Range} range - specifies the range value\n * @returns {void}\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(className, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + className);\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 *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element\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 *\n * @returns {void}\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 *\n * @returns {Node[]} - returns the node array values\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 *\n * @hidden\n * @deprecated\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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 this.parent.observer.on(EVENTS.SPACE_ACTION, this.spaceKeyAction, 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.replace(/\\u200B/g, '').slice(0, range.startOffset).trim())) {\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 // eslint-disable-next-line\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.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||\n range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '-') {\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 = range.startContainer.nodeName === 'LI' ? range.startContainer :\n range.startContainer.parentElement.closest('LI');\n var endNode = range.endContainer.nodeName === 'LI' ? range.endContainer :\n range.endContainer.parentElement.closest('LI');\n if (!isNOU(startNode) && !isNOU(endNode) && startNode === endNode && startNode.tagName === 'LI' && startNode.textContent.trim() === '') {\n if (startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n var startNodeParent = startNode.parentElement;\n if (isNOU(startNodeParent.parentElement.closest('UL')) && isNOU(startNodeParent.parentElement.closest('OL'))) {\n if (!isNOU(startNode.nextElementSibling)) {\n var nearBlockNode = this.parent.domNode.blockParentNode(startNode);\n this.parent.nodeCutter.GetSpliceNode(range, nearBlockNode);\n }\n var insertTag = void 0;\n if (e.enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '<br>';\n }\n else if (e.enterAction === 'P') {\n insertTag = createElement('p');\n insertTag.innerHTML = '<br>';\n }\n else {\n insertTag = createElement('br');\n }\n this.parent.domNode.insertAfter(insertTag, startNodeParent);\n e.event.preventDefault();\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);\n if (startNodeParent.textContent === '') {\n detach(startNodeParent);\n }\n else {\n detach(startNode);\n }\n }\n }\n };\n // eslint-disable-next-line\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.length === 1 && startNode.textContent.charCodeAt(0) === 8203))) {\n startNode.textContent = '';\n }\n if (startNode === endNode && startNode.textContent === '') {\n if (startNode.parentElement.tagName === 'LI' && endNode.parentElement.tagName === 'LI') {\n detach(startNode);\n }\n else 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 && !isNOU(parentList.children[1]) &&\n (parentList.children[1].tagName === 'OL' || 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 (!isNOU(startNode.firstChild) && startNode.firstChild.nodeName === 'BR' &&\n (!isNullOrUndefined(startNode.childNodes[1]) && (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 === 46 && e.event.action === 'delete') {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var commonAncestor = range.commonAncestorContainer;\n var startEle = range.startContainer;\n var endEle = range.endContainer;\n var startNode = startEle.nodeType === 3 ? startEle.parentElement : startEle;\n var endNode = endEle.nodeType === 3 ? endEle.parentElement : endEle;\n if ((commonAncestor.nodeName === 'UL' || commonAncestor.nodeName === 'OL') && startNode !== endNode\n && (!isNullOrUndefined(closest(startNode, 'ul')) || !isNullOrUndefined(closest(startNode, 'ol')))\n && (!isNullOrUndefined(closest(endNode, 'ul')) || !isNullOrUndefined(closest(endNode, 'ol')))\n && (commonAncestor.lastElementChild === closest(endNode, 'li')) && !range.collapsed) {\n detach(commonAncestor);\n }\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.spaceKeyAction = function (e) {\n if (e.event.which === 32) {\n this.spaceList(e);\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.currentAction = e.subCommand = this.currentAction === 'NumberFormatList' ? 'OL' : this.currentAction === 'BulletFormatList' ? 'UL' : this.currentAction;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(listsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('p');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n listsNodes = this.parent.domNode.blockNodes();\n }\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName === 'TABLE' && !range.collapsed) {\n listsNodes.splice(i, 1);\n }\n if (listsNodes.length > 0 && listsNodes[i].tagName !== 'LI'\n && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction, e.selector, e.item);\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.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\n }\n };\n Lists.prototype.applyLists = function (elements, type, selector, item) {\n var isReverse = true;\n if (this.isRevert(elements, type) && isNOU(item)) {\n this.revertList(elements);\n this.removeEmptyListElements();\n }\n else {\n this.checkLists(elements, type, item);\n for (var i = 0; i < elements.length; i++) {\n if (!isNOU(item) && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(elements[i], { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(elements[i], { 'list-style-image': 'none' });\n setStyleAttribute(elements[i], { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if (elements[i].getAttribute('contenteditable') === 'true'\n && elements[i].childNodes.length === 1 && elements[i].childNodes[0].nodeName === 'TABLE') {\n var listEle = document.createElement(type);\n listEle.innerHTML = '<li><br/></li>';\n elements[i].appendChild(listEle);\n }\n else if ('LI' !== elements[i].tagName && isNOU(item)) {\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 else if (!isNOU(item) && 'LI' !== elements[i].tagName) {\n // eslint-disable-next-line\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + elemAtt + '>';\n var closeTag = '</' + type + '>';\n var newTag = 'li';\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, item) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (!isNOU(item) && 'LI' === nodes[i].tagName && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(node, { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(node, { 'list-style-image': 'none' });\n setStyleAttribute(node, { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if ((nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) ||\n (nodes[i].tagName === 'LI' && node.tagName === tagName && nodesTemp.indexOf(node) < 0 && item !== null)) {\n nodesTemp.push(node);\n }\n }\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 // eslint-disable-next-line\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 *\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n /**\n * WrapBefore method\n *\n * @param {Text} textNode - specifies the text node\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {Text} - returns the text value\n * @hidden\n * @deprecated\n */\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n //eslint-disable-next-line\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 *\n * @param {HTMLElement} childNode - specifies the child node\n * @param {HTMLElement} parentNode - specifies the parent node.\n * @returns {HTMLElement} - returns the element\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 *\n * @param {Node} node - specifies the node element.\n * @returns {Node[]} - returns the array of value\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 *\n * @param {HTMLElement} textNode - specifies the element\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {void}\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 *\n * @hidden\n * @deprecated\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.enterAction = 'P';\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n /**\n * GetSpliceNode method\n *\n * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @returns {Node} - returns the node value\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 * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @param {boolean} isCollapsed - specifies the boolean value\n * @returns {HTMLElement} - returns the element\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 // eslint-disable-next-line\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.trim() === '') ? 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 *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Range} - returns the range value\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 *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Node} - returns the node value\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 *\n * @param {string} line - specifies the string value.\n * @returns {string} - returns the string\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 *\n * @hidden\n * @deprecated\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\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_UP_HANDLER, this.onKeyUp, 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.onKeyUp = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var endCon = range.endContainer;\n var lastChild = endCon.lastChild;\n if (e.event.which === 13 && range.startContainer === endCon && endCon.nodeType !== 3) {\n var pTag = createElement('p');\n pTag.innerHTML = '<br>';\n if (!isNOU(lastChild) && lastChild && lastChild.nodeName === 'BR' && (lastChild.previousSibling && lastChild.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, lastChild);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n else {\n var brNode = this.parent.nodeSelection.getSelectionNodeCollectionBr(range)[0];\n if (!isNOU(brNode) && brNode.nodeName === 'BR' && (brNode.previousSibling && brNode.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, brNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n }\n }\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, e.enterAction);\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, enterAction) {\n var insertTag;\n if (enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '<br>';\n }\n else if (enterAction === 'BR') {\n insertTag = createElement('br');\n }\n else {\n insertTag = createElement('p');\n insertTag.innerHTML = '<br>';\n }\n this.parent.domNode.insertAfter(insertTag, referNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 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 // eslint-disable-next-line\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 // eslint-disable-next-line\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' && !range.collapsed) {\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 if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(formatsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('div');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n formatsNodes = this.parent.domNode.blockNodes();\n }\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 === '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.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\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, closest } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\nimport { updateTextNode } from './../../common/util';\n/**\n * Insert a HTML Node or Text\n *\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 if (range.startContainer === editNode && range.startContainer === range.endContainer && range.startOffset === 0 &&\n range.startOffset === range.endOffset && editNode.textContent.length === 0 && editNode.children[0].tagName === 'P') {\n nodeSelection.setSelectionText(docElement, range.startContainer.children[0], range.startContainer.children[0], 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var isCursor = range.startOffset === range.endOffset && range.startOffset === 0 &&\n range.startContainer === range.endContainer;\n var isCollapsed = range.collapsed;\n var nodes = this.getNodeCollection(range, nodeSelection, node);\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 || (node.nodeName.toLowerCase() === 'table' && preNode.childElementCount === 0)) {\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 === '' && range.startContainer.nodeName !== 'BR') {\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 if (range.startContainer.nodeType === 1 && range.startContainer.nodeName.toLowerCase() === 'hr'\n && range.endContainer.nodeName.toLowerCase() === 'hr') {\n var paraElem = range.startContainer.nextElementSibling;\n if (paraElem) {\n if (paraElem.querySelector('br')) {\n detach(paraElem.querySelector('br'));\n }\n paraElem.appendChild(node);\n }\n }\n else {\n if (range.startContainer.nodeName === 'BR') {\n range.startContainer.parentElement.insertBefore(node, range.startContainer);\n }\n else {\n range.insertNode(node);\n }\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 // eslint-disable-next-line\n !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);\n }\n }\n else {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n var nearestAnchor = closest(range.startContainer.parentElement, 'a');\n if (range.startContainer.nodeType === 3 && nearestAnchor) {\n var immediateBlockNode = this.getImmediateBlockNode(range.startContainer, editNode);\n if (immediateBlockNode.querySelectorAll('br').length > 0) {\n detach(immediateBlockNode.querySelector('br'));\n }\n var rangeElement = closest(nearestAnchor, 'span');\n rangeElement.appendChild(tempSpan);\n }\n else {\n range.insertNode(tempSpan);\n }\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n tempSpan.parentNode.replaceChild(fragment, tempSpan);\n }\n }\n else {\n this.insertTempNode(range, node, nodes, nodeCutter, editNode);\n var isFirstTextNode = true;\n var isPreviousInlineElem = void 0;\n var paraElm = void 0;\n var previousParent = void 0;\n range.deleteContents();\n while (node.firstChild) {\n if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {\n detach(node.firstChild);\n continue;\n }\n if (node.firstChild.nodeName === '#text' && isFirstTextNode ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {\n lastSelectionNode = node.firstChild;\n if (isNOU(node.previousElementSibling)) {\n var firstParaElm = createElement('p');\n node.parentElement.insertBefore(firstParaElm, node);\n }\n node.previousElementSibling.appendChild(node.firstChild);\n }\n else {\n lastSelectionNode = node.firstChild;\n if (node.firstChild.nodeName === '#text' ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n paraElm.appendChild(node.firstChild);\n fragment.appendChild(paraElm);\n }\n else {\n previousParent.appendChild(node.firstChild);\n fragment.appendChild(previousParent);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else {\n fragment.appendChild(node.firstChild);\n isPreviousInlineElem = false;\n }\n isFirstTextNode = false;\n }\n }\n node.parentNode.replaceChild(fragment, node);\n }\n if (lastSelectionNode.nodeName === '#text') {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n else {\n this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n };\n InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? (isNOU(lastSelectionNode.previousSibling) ? lastSelectionNode.parentNode\n : lastSelectionNode.previousSibling) : lastSelectionNode;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR' && lastSelectionNode.nodeName !== 'HR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n lastSelectionNode = isNOU(lastSelectionNode) ? node : lastSelectionNode;\n if (lastSelectionNode.nodeName === 'IMG') {\n this.imageFocus(lastSelectionNode, nodeSelection, docElement);\n }\n else {\n nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, lastSelectionNode.textContent.length, lastSelectionNode.textContent.length);\n }\n this.removeEmptyElements(editNode);\n };\n InsertHtml.getNodeCollection = function (range, nodeSelection, node) {\n var nodes = [];\n if (range.startOffset === range.endOffset && range.startContainer === range.endContainer\n && (range.startContainer.nodeName === 'TD' || (range.startContainer.nodeType !== 3 &&\n node.classList && node.classList.contains('pasteContent')))) {\n nodes.push(range.startContainer.childNodes[range.endOffset]);\n }\n else {\n nodes = nodeSelection.getInsertNodeCollection(range);\n }\n return nodes;\n };\n InsertHtml.insertTempNode = function (range, node, nodes, nodeCutter, editNode) {\n if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset - 1]) &&\n range.startContainer.childNodes[range.endOffset - 1].nodeName === 'TABLE') {\n if (isNOU(range.startContainer.childNodes[range.endOffset - 1].nextSibling)) {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset - 1].nextSibling);\n }\n }\n else if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset]) &&\n range.startContainer.childNodes[range.endOffset].nodeName === 'TABLE') {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset]);\n }\n else if (range.startContainer === range.endContainer && range.startContainer.nodeType !== 3\n && node.firstChild.nodeName === 'HR') {\n if (range.startContainer.classList.contains('e-content') || range.startContainer.nodeName === 'BODY') {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.parentNode.insertBefore(node, range.startContainer);\n }\n }\n else {\n var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n if ((isNOU(blockNode) || isNOU(blockNode.parentElement)) && range.endContainer.nodeType !== 3) {\n blockNode = range.endContainer;\n range.setEnd(blockNode, range.endContainer.textContent.length);\n }\n if (blockNode.nodeName === 'BODY' && range.startContainer === range.endContainer && range.startContainer.nodeType === 1) {\n blockNode = range.startContainer;\n }\n if (blockNode.closest('LI') && node && node.firstElementChild &&\n ((node).firstElementChild.tagName === 'OL' || node.firstElementChild.tagName === 'UL')) {\n var liNode = void 0;\n while (node.firstElementChild.lastElementChild && node.firstElementChild.lastElementChild.tagName === 'LI') {\n liNode = node.firstElementChild.lastElementChild;\n liNode.style.removeProperty('margin-left');\n liNode.style.removeProperty('margin-top');\n liNode.style.removeProperty('margin-bottom');\n node.firstElementChild.insertAdjacentElement('afterend', liNode);\n }\n }\n if (blockNode.nodeName === 'TD' || blockNode.nodeName === 'TH') {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n tempSpan.parentNode.replaceChild(node, tempSpan);\n }\n else {\n var splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n splitedElm.parentNode.replaceChild(node, splitedElm);\n }\n }\n };\n InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode.classList.add('lastNode');\n editNode.innerHTML = updateTextNode(editNode.innerHTML);\n lastSelectionNode = editNode.querySelector('.lastNode');\n if (!isNOU(lastSelectionNode)) {\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 };\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 // eslint-disable-next-line\n InsertHtml.getImmediateBlockNode = function (node, editNode) {\n do {\n node = node.parentNode;\n } while (node && 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 emptyElements[i].tagName !== 'SOURCE' && emptyElements[i].tagName !== 'HR') {\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 *\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 * as CONSTANT from './../base/constant';\nimport { NodeSelection } from '../../selection/selection';\nimport { NodeCutter } from './nodecutter';\nimport { InsertHtml } from './inserthtml';\nimport { createElement, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Link internal component\n *\n * @hidden\n * @deprecated\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the editor manager\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) && 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 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.parentNode.nodeName === 'A') {\n var anchorEle = currentNode.parentNode;\n currentNode.parentNode.parentNode.insertBefore(anchorEle.firstChild, anchorEle);\n currentNode.parentNode.removeChild(anchorEle);\n }\n if (this.isBlockNode(currentNode.parentNode) || txtArray.length === 0 || i === 0 || i === txtArray.length - 1\n || range.startContainer.nodeType === 3) {\n inlineNodes[i] = currentNode;\n check = false;\n }\n else {\n currentNode = currentNode.parentNode;\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 *\n * @hidden\n * @deprecated\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\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\n ? 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 *\n * @hidden\n * @deprecated\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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 editEle = this.parent.editableElement;\n var isRtl = editEle.classList.contains('e-rtl');\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 () {\n return;\n },\n stopPropagation: function () {\n return;\n },\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 marginLeftOrRight = isRtl ? parentNode.style.marginRight : parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n /* eslint-disable */\n indentsValue = marginLeftOrRight === '' ? this.indentValue + 'px' : parseInt(marginLeftOrRight, null) + this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n }\n else {\n indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n /* eslint-enable */\n }\n }\n editEle.focus();\n if (isIDevice()) {\n setEditFrameFocus(editEle, 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, formatUnit } 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 *\n * @hidden\n * @deprecated\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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 *\n * @param {IHtmlItem} e - specifies the element\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLowerCase()) {\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 var _this = this;\n var isReplaced = false;\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 isReplaced = true;\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: 'Images',\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 var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];\n var imgElm_1 = (e.value === 'Replace' || isReplaced) ? e.item.selectParent[0] :\n (Browser.isIE ? selectedNode.previousSibling : selectedNode.previousElementSibling);\n imgElm_1.addEventListener('load', function () {\n if (e.value !== 'Replace' || !isReplaced) {\n e.callBack({\n requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),\n elements: [imgElm_1]\n });\n }\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 if (e.item.width !== 'auto') {\n selectNode.style.width = formatUnit(e.item.width);\n }\n else {\n selectNode.removeAttribute('width');\n }\n if (e.item.height !== 'auto') {\n selectNode.style.height = formatUnit(e.item.height);\n }\n else {\n selectNode.removeAttribute('height');\n }\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 if (!isNOU(selectNode)) {\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 addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\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 };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\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 addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\n }\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 *\n * @hidden\n * @deprecated\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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 this.parent.observer.on(CONSTANT.TABLE_MERGE, this.cellMerge, this);\n this.parent.observer.on(CONSTANT.TABLE_HORIZONTAL_SPLIT, this.HorizontalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_SPLIT, this.VerticalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_MOVE, this.tableMove, 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) > 100 ?\n 100 / e.item.columns : parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.rows; 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 if (table.nextElementSibling === null) {\n var insertElem = void 0;\n if (e.enterAction === 'DIV') {\n insertElem = createElement('div');\n insertElem.appendChild(createElement('br'));\n }\n else if (e.enterAction === 'BR') {\n insertElem = createElement('br');\n }\n else {\n insertElem = createElement('p');\n insertElem.appendChild(createElement('br'));\n }\n this.insertAfter(insertElem, table);\n }\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.getSelectedCellMinMaxIndex = function (e) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var a = 0;\n var minI = e.length;\n var maxI = 0;\n var minJ = e[0].length;\n var maxJ = 0;\n //eslint-disable-next-line\n for (var i = 0; a < selectedCells.length; a++) {\n var selectedCellIndex = this.getCorrespondingIndex(selectedCells[a], e);\n var minMaxIndex = this.FindIndex(selectedCellIndex[0], selectedCellIndex[1], e);\n //eslint-disable-next-line\n minI = Math.min(selectedCellIndex[0], minI),\n maxI = Math.max(minMaxIndex[0], maxI),\n minJ = Math.min(selectedCellIndex[1], minJ),\n maxJ = Math.max(minMaxIndex[1], maxJ);\n }\n return {\n startRow: minI,\n endRow: maxI,\n startColumn: minJ,\n endColumn: maxJ\n };\n };\n TableCommand.prototype.insertRow = function (e) {\n var isBelow = e.item.subCommand === 'InsertRowBefore' ? false : true;\n var selectedCell = e.item.selection.range.startContainer;\n if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length === 0) {\n var lastRow = this.curTable.rows[this.curTable.rows.length - 1];\n var cloneRow = lastRow.cloneNode(true);\n cloneRow.removeAttribute('rowspan');\n this.insertAfter(cloneRow, lastRow);\n }\n else {\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minVal = isBelow ? minMaxIndex.endRow : minMaxIndex.startRow;\n var newRow = createElement('tr');\n var isHeaderSelect = this.curTable.querySelectorAll('th.e-cell-select').length > 0;\n for (var i = 0; i < allCells[minVal].length; i++) {\n if (isBelow && minVal < allCells.length - 1 && allCells[minVal][i] === allCells[minVal + 1][i] ||\n !isBelow && 0 < minVal && allCells[minVal][i] === allCells[minVal - 1][i]) {\n if (0 === i || 0 < i && allCells[minVal][i] !== allCells[minVal][i - 1]) {\n allCells[minVal][i].setAttribute('rowspan', (parseInt(allCells[minVal][i].getAttribute('rowspan'), 10) + 1).toString());\n }\n }\n else {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n tdElement.setAttribute('style', allCells[(isHeaderSelect && isBelow) ? (minVal + 1) : minVal][i].getAttribute('style'));\n }\n }\n // eslint-disable-next-line\n var selectedRow = void 0;\n if (isHeaderSelect && isBelow) {\n selectedRow = this.curTable.querySelector('tbody').childNodes[0];\n }\n else {\n selectedRow = this.curTable.rows[minVal];\n }\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertRowBefore') ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n (isHeaderSelect ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n this.insertAfter(newRow, selectedRow));\n }\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 if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\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(':scope > td, :scope > th')).indexOf(selectedCell);\n var previousWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length);\n var currentWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length + 1);\n var currentTabElm = closest(curRow, 'table');\n var thTdElm = closest(curRow, 'table').querySelectorAll('th,td');\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].dataset.oldWidth = (thTdElm[i].offsetWidth / currentTabElm.offsetWidth * 100) + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll(':scope > td, :scope > th')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n colTemplate.removeAttribute('colspan');\n colTemplate.removeAttribute('rowspan');\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n colTemplate.style.width = currentWidth.toFixed(4) + '%';\n delete colTemplate.dataset.oldWidth;\n }\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].style.width = (Number(thTdElm[i].dataset.oldWidth.split('%')[0]) * currentWidth / previousWidth).toFixed(4) + '%';\n delete thTdElm[i].dataset.oldWidth;\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 if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var tBodyHeadEle = closest(selectedCell, selectedCell.tagName === 'TH' ? 'thead' : 'tbody');\n var rowIndex = tBodyHeadEle && Array.prototype.indexOf.call(tBodyHeadEle.childNodes, selectedCell.parentNode);\n this.curTable = closest(selectedCell, 'table');\n var curRow = closest(selectedCell, 'tr');\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n var deleteIndex = void 0;\n var allCells = this.getCorrespondingColumns();\n //eslint-disable-next-line\n var selectedMinMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minCol = selectedMinMaxIndex.startColumn;\n var maxCol = selectedMinMaxIndex.endColumn;\n for (var i = 0; i < allCells.length; i++) {\n var currentRow = allCells[i];\n for (var j = 0; j < currentRow.length; j++) {\n var currentCell = currentRow[j];\n //eslint-disable-next-line\n var currentCellIndex = this.getCorrespondingIndex(currentCell, allCells);\n var colSpanVal = parseInt(currentCell.getAttribute('colspan'), 10) || 1;\n if (currentCellIndex[1] + (colSpanVal - 1) >= minCol && currentCellIndex[1] <= maxCol) {\n if (colSpanVal > 1) {\n currentCell.setAttribute('colspan', (colSpanVal - 1).toString());\n }\n else {\n detach(currentCell);\n deleteIndex = j;\n if (Browser.isIE) {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n }\n }\n if (deleteIndex > -1) {\n var rowHeadEle = tBodyHeadEle.children[rowIndex];\n var nextFocusCell = rowHeadEle &&\n rowHeadEle.children[(deleteIndex <= rowHeadEle.children.length - 1 ? deleteIndex : deleteIndex - 1)];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.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 if (focusNode) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, focusNode, 0);\n }\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 if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var colIndex = Array.prototype.indexOf.call(selectedCell.parentNode.childNodes, selectedCell);\n this.curTable = closest(selectedCell, 'table');\n var currentRow;\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var maxI;\n var j;\n if (this.curTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (maxI = minMaxIndex.endRow; maxI >= minMaxIndex.startRow; maxI--) {\n currentRow = this.curTable.rows[maxI];\n for (j = 0; j < allCells[maxI].length; j++) {\n if (j === 0 || allCells[maxI][j] !== allCells[maxI][j - 1]) {\n if (1 < parseInt(allCells[maxI][j].getAttribute('rowspan'), 10)) {\n var rowSpanVal = parseInt(allCells[maxI][j].getAttribute('rowspan'), 10) - 1;\n //eslint-disable-next-line\n 1 === rowSpanVal ? allCells[maxI][j].removeAttribute('rowspan') : allCells[maxI][j].setAttribute('rowspan', rowSpanVal.toString());\n }\n }\n if (maxI < allCells.length - 1 && allCells[maxI][j] === allCells[maxI + 1][j] && (0 === maxI ||\n allCells[maxI][j] !== allCells[maxI - 1][j])) {\n var element = allCells[maxI][j];\n var index = void 0;\n for (index = j; 0 < index && allCells[maxI][index] === allCells[maxI][index - 1]; index--) {\n if (index === 0) {\n this.curTable.rows[maxI + 1].prepend(element);\n }\n else {\n allCells[maxI + 1][index - 1].insertAdjacentElement('afterend', element);\n }\n }\n }\n }\n var deleteIndex = currentRow.rowIndex;\n this.curTable.deleteRow(deleteIndex);\n var focusTrEle = !isNOU(this.curTable.rows[deleteIndex]) ? this.curTable.querySelectorAll('tbody tr')[deleteIndex]\n : this.curTable.querySelectorAll('tbody tr')[deleteIndex - 1];\n var nextFocusCell = focusTrEle && focusTrEle.querySelectorAll('td')[colIndex];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.classList.add('e-cell-select');\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\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 selectedTable = closest(selectedCell.parentElement, 'table');\n if (selectedTable) {\n e.item.selection.restore();\n detach(selectedTable);\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 colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(table.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var j = 0; j < colSpanCount; j++) {\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 TableCommand.prototype.cellMerge = function (e) {\n if (isNOU(this.curTable)) {\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n }\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (selectedCells.length < 2) {\n return;\n }\n this.mergeCellContent();\n var minMaxIndexes = this.getSelectedMinMaxIndexes(this.getCorrespondingColumns());\n var firstCell = selectedCells[0];\n var rowSelectedCells = firstCell.parentElement.querySelectorAll('.e-cell-select');\n if (minMaxIndexes.startColumn < minMaxIndexes.endColumn) {\n firstCell.setAttribute('colspan', (minMaxIndexes.endColumn - minMaxIndexes.startColumn + 1).toString());\n }\n if (minMaxIndexes.startRow < minMaxIndexes.endRow) {\n firstCell.setAttribute('rowspan', (minMaxIndexes.endRow - minMaxIndexes.startRow + 1).toString());\n }\n var totalWidth = 0;\n for (var j = rowSelectedCells.length - 1; j >= 0; j--) {\n totalWidth = totalWidth + parseFloat(rowSelectedCells[j].style.width);\n }\n firstCell.style.width = totalWidth + '%';\n for (var i = 1; i <= selectedCells.length - 1; i++) {\n detach(selectedCells[i]);\n }\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if (this.curTable.rows[i].innerHTML === '') {\n detach(this.curTable.rows[i]);\n }\n }\n this.updateRowSpanStyle(minMaxIndexes.startRow, minMaxIndexes.endRow, this.getCorrespondingColumns());\n this.updateColSpanStyle(minMaxIndexes.startColumn, minMaxIndexes.endColumn, this.getCorrespondingColumns());\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (this.parent.nodeSelection.range) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, \n // eslint-disable-next-line\n this.parent.nodeSelection.range.endContainer, 0);\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.updateColSpanStyle = function (min, max, elements) {\n var colValue;\n var colIndex;\n var colMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = elements;\n //eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray[0].length - 1))) {\n for (colIndex === min; colIndex <= max; colIndex++) {\n // eslint-disable-next-line\n if (!(min < colIndex && eleArray[0][colIndex] === eleArray[0][colIndex - 1]) && 1 < (index =\n Math.min(parseInt(eleArray[0][colIndex].getAttribute('colspan'), 10) || 1, max - min + 1)) &&\n eleArray[0][colIndex] === eleArray[0][colIndex + 1]) {\n for (count = index - 1, colValue = 1; colValue < eleArray.length; colValue++) {\n if (eleArray[colValue][colIndex] !== eleArray[colValue - 1][colIndex]) {\n /* eslint-disable */\n for (colMin = colIndex; colMin < colIndex + index; colMin++) {\n if (1 < (attrValue = parseInt(eleArray[colValue][colMin].getAttribute('colspan'), 10) || 1) &&\n eleArray[colValue][colMin] === eleArray[colValue][colMin + 1]) {\n colMin += count = Math.min(count, attrValue - 1);\n }\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n /* eslint-enable */\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'colspan', 0, eleArray.length - 1, min, max);\n }\n }\n };\n TableCommand.prototype.updateRowSpanStyle = function (min, max, ele) {\n var rowValue;\n var colIndex;\n var rowMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = ele;\n // eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray.length - 1))) {\n for (rowValue = min; rowValue <= max; rowValue++) {\n // eslint-disable-next-line\n if (!(min < rowValue && eleArray[rowValue][0] === eleArray[rowValue - 1][0]) && 1 < (index = Math.min(parseInt(eleArray[rowValue][0].getAttribute('rowspan'), 10) || 1, max - min + 1)) && eleArray[rowValue][0] === eleArray[rowValue + 1][0]) {\n for (count = index - 1, colIndex = 1; colIndex < eleArray[0].length; colIndex++) {\n if (eleArray[rowValue][colIndex] !== eleArray[rowValue][colIndex - 1]) {\n for (rowMin = rowValue; rowMin < rowValue + index; rowMin++) {\n // eslint-disable-next-line\n if (1 < (attrValue = parseInt(eleArray[rowMin][colIndex].getAttribute('rowspan'), 10) || 1) && eleArray[rowMin][colIndex] === eleArray[rowMin + 1][colIndex]) {\n rowMin += count = Math.min(count, attrValue - 1);\n }\n // eslint-disable-next-line\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'rowspan', min, max, 0, eleArray[0].length - 1);\n }\n }\n };\n TableCommand.prototype.updateCellAttribute = function (elements, index, attr, min, max, firstIndex, length) {\n var rowIndex;\n var colIndex;\n var spanCount;\n for (rowIndex = min; rowIndex <= max; rowIndex++) {\n for (colIndex = firstIndex; colIndex <= length; colIndex++) {\n // eslint-disable-next-line\n min < rowIndex && elements[rowIndex][colIndex] === elements[rowIndex - 1][colIndex] ||\n firstIndex < colIndex && elements[rowIndex][colIndex] === elements[rowIndex][colIndex - 1] ||\n 1 < (spanCount = parseInt(elements[rowIndex][colIndex].getAttribute(attr), 10) || 1) &&\n (1 < spanCount - index ? elements[rowIndex][colIndex].setAttribute(attr, (spanCount - index).toString()) :\n elements[rowIndex][colIndex].removeAttribute(attr));\n }\n }\n };\n TableCommand.prototype.mergeCellContent = function () {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var innerHtml = selectedCells[0].innerHTML;\n for (var i = 1; i < selectedCells.length - 1; i++) {\n if ('<br>' !== selectedCells[i].innerHTML) {\n innerHtml = innerHtml + selectedCells[i].innerHTML;\n }\n }\n selectedCells[0].innerHTML = innerHtml;\n };\n TableCommand.prototype.getSelectedMinMaxIndexes = function (correspondingCells) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (0 < selectedCells.length) {\n var minRow = correspondingCells.length;\n var maxRow = 0;\n var minCol = correspondingCells[0].length;\n var maxCol = 0;\n for (var i = 0; i < selectedCells.length; i++) {\n var currentRowCol = this.getCorrespondingIndex(selectedCells[i], correspondingCells);\n var targetRowCol = this.FindIndex(currentRowCol[0], currentRowCol[1], correspondingCells);\n minRow = Math.min(currentRowCol[0], minRow);\n maxRow = Math.max(targetRowCol[0], maxRow);\n minCol = Math.min(currentRowCol[1], minCol);\n maxCol = Math.max(targetRowCol[1], maxCol);\n }\n return {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n };\n }\n return null;\n };\n TableCommand.prototype.HorizontalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '</br>';\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingCells = this.getCorrespondingColumns();\n var activeCellRowSpan = this.activeCell.getAttribute('rowspan') ? parseInt(this.activeCell.getAttribute('rowspan'), 10) : 1;\n if (activeCellRowSpan > 1) {\n var avgCount = Math.ceil(activeCellRowSpan / 2);\n // eslint-disable-next-line\n 1 < avgCount ? this.activeCell.setAttribute('rowspan', avgCount.toString()) :\n this.activeCell.removeAttribute('rowspan');\n // eslint-disable-next-line\n 1 < (activeCellRowSpan - avgCount) ? newCell.setAttribute('rowspan', (activeCellRowSpan - avgCount).toString()) : newCell.removeAttribute('rowspan');\n var avgRowIndex = void 0;\n var colIndex = void 0;\n for (avgRowIndex = activeCellIndex[0] + Math.ceil(activeCellRowSpan / 2),\n colIndex = 0 === activeCellIndex[1] ? activeCellIndex[1]\n : activeCellIndex[1] - 1; 0 <= colIndex && (correspondingCells[avgRowIndex][colIndex] ===\n correspondingCells[avgRowIndex][colIndex - 1] || 0 < avgRowIndex && correspondingCells[avgRowIndex][colIndex]\n === correspondingCells[avgRowIndex - 1][colIndex]);) {\n colIndex--;\n }\n if (colIndex === -1) {\n // eslint-disable-next-line\n this.curTable.rows[avgRowIndex].firstChild ? this.curTable.rows[avgRowIndex].prepend(newCell) : this.curTable.appendChild(newCell);\n }\n else {\n correspondingCells[avgRowIndex][colIndex].insertAdjacentElement('afterend', newCell);\n }\n }\n else {\n var newTrEle = createElement('tr');\n newTrEle.appendChild(newCell);\n var selectedRow = correspondingCells[activeCellIndex[0]];\n for (var j = 0; j <= selectedRow.length - 1; j++) {\n if (selectedRow[j] !== selectedRow[j - 1] && selectedRow[j] !== this.activeCell) {\n selectedRow[j].setAttribute('rowspan', ((parseInt(selectedRow[j].getAttribute('rowspan'), 10) ?\n parseInt(selectedRow[j].getAttribute('rowspan'), 10) : 1) + 1).toString());\n }\n }\n this.activeCell.parentNode.insertAdjacentElement('afterend', newTrEle);\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.VerticalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var allRows = this.curTable.rows;\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '</br>';\n var avgWidth = parseFloat(this.activeCell.style.width) / 2;\n if (this.activeCell.tagName === 'TH' && isNaN(avgWidth)) {\n var cellCount = this.curTable.querySelector('tr').childElementCount;\n var colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(this.curTable.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n avgWidth = parseFloat((((this.activeCell.offsetWidth / 2) / this.curTable.offsetWidth) * 100).toFixed(1));\n }\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingColumns = this.getCorrespondingColumns();\n var activeCellcolSpan = parseInt(this.activeCell.getAttribute('colspan'), 10);\n if (activeCellcolSpan > 1) {\n // eslint-disable-next-line\n 1 < Math.ceil(activeCellcolSpan / 2) ? this.activeCell.setAttribute('colspan', (activeCellcolSpan / 2).toString())\n : this.activeCell.removeAttribute('colspan');\n // eslint-disable-next-line\n 1 < (activeCellcolSpan - activeCellcolSpan / 2) ? newCell.setAttribute('colspan', \n // eslint-disable-next-line\n (activeCellcolSpan - activeCellcolSpan / 2).toString()) : newCell.removeAttribute('colspan');\n }\n else {\n for (var i = 0; i <= allRows.length - 1; i++) {\n if (0 === i || correspondingColumns[i][activeCellIndex[1]] !== correspondingColumns[i - 1][activeCellIndex[1]]) {\n var currentCell = correspondingColumns[i][activeCellIndex[1]];\n if (currentCell !== this.activeCell) {\n currentCell.setAttribute('colspan', ((parseInt(currentCell.getAttribute('colspan'), 10) ?\n parseInt(currentCell.getAttribute('colspan'), 10) : 1) + 1).toString());\n }\n }\n }\n }\n this.activeCell.style.width = avgWidth + '%';\n newCell.style.width = avgWidth + '%';\n this.activeCell.parentNode.insertBefore(newCell, this.activeCell.nextSibling);\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.getCorrespondingColumns = function () {\n var elementArray = [];\n // eslint-disable-next-line\n var _this = this;\n var colspan = 0;\n var allRows = _this.curTable.rows;\n for (var i = 0; i <= allRows.length - 1; i++) {\n var ele = allRows[i];\n var index = 0;\n for (var j = 0; j <= ele.children.length - 1; j++) {\n /* eslint-disable */\n var colEle = ele.children[j];\n for (var ele_1 = colEle, colspan_1 = parseInt(ele_1.getAttribute('colspan'), 10) || 1, rowSpan = parseInt(ele_1.getAttribute('rowspan'), 10) || 1, rowIndex = i; rowIndex < i + rowSpan; rowIndex++) {\n for (var colIndex = index; colIndex < index + colspan_1; colIndex++) {\n elementArray[rowIndex] || (elementArray[rowIndex] = []);\n elementArray[rowIndex][colIndex] ? index++ : elementArray[rowIndex][colIndex] = colEle;\n }\n }\n index += colspan;\n }\n /* eslint-enable */\n }\n return elementArray;\n };\n // eslint-disable-next-line\n TableCommand.prototype.FindIndex = function (rowIndex, columnIndex, cells) {\n var nextIndex;\n var nextCol;\n for (nextIndex = rowIndex + 1, nextCol = columnIndex + 1; nextIndex < cells.length;) {\n if (cells[nextIndex][columnIndex] !== cells[rowIndex][columnIndex]) {\n nextIndex--;\n break;\n }\n nextIndex++;\n }\n for (nextIndex === cells.length && nextIndex--; nextCol < cells[rowIndex].length;) {\n if (cells[rowIndex][nextCol] !== cells[rowIndex][columnIndex]) {\n nextCol--;\n break;\n }\n nextCol++;\n }\n return nextCol === cells[rowIndex].length && nextCol--,\n [\n nextIndex,\n nextCol\n ];\n };\n TableCommand.prototype.getCorrespondingIndex = function (cell, allCells) {\n //let value: RowCol = new RowCol();\n for (var i = 0; i < allCells.length; i++) {\n for (var j = 0; j < allCells[i].length; j++) {\n if (allCells[i][j] === cell) {\n return [i, j];\n }\n }\n }\n return [];\n };\n TableCommand.prototype.highlightCells = function (minRow, maxRow, minCol, maxCol, eleArray) {\n var j;\n var k;\n var startCell;\n var endCell;\n var minRowIndex = minRow;\n var maxRowIndex = maxRow;\n var minColIndex = minCol;\n var maxColIndex = maxCol;\n var minMaxValues = new MinMax();\n for (j = minRowIndex; j <= maxRowIndex; j++) {\n /* eslint-disable */\n if ((1 < (parseInt(eleArray[j][minColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][minColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][minColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[j][maxColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][maxColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][maxColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n for (k = minColIndex; k <= maxColIndex; k++) {\n if ((1 < (parseInt(eleArray[minRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[minRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[minRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[maxRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n }\n minMaxValues = minRowIndex === minRow && maxRowIndex === maxRow && minColIndex === minCol && maxColIndex === maxCol ? {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n } : this.highlightCells(minRowIndex, maxRowIndex, minColIndex, maxColIndex, eleArray);\n }\n return minMaxValues;\n /* eslint-enable */\n };\n TableCommand.prototype.tableMove = function (e) {\n this.activeCell = e.selectNode[0];\n var target = e.event.target;\n var activeCellTag = this.activeCell.tagName;\n var targetCellTag = target.tagName;\n this.curTable = closest(target, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n this.parent.nodeSelection.Clear(this.parent.currentDocument);\n }\n if ((target.tagName !== 'TD' && target.tagName !== 'TH') && activeCellTag !== targetCellTag) {\n return;\n }\n var activeRowIndex = Array.prototype.slice.call((this.activeCell).parentElement.parentElement.children)\n .indexOf((this.activeCell).parentElement);\n var activeColumnIndex = Array.prototype.slice.call((this.activeCell).parentElement.children).indexOf(this.activeCell);\n var targetRowIndex = Array.prototype.slice.call(target.parentElement.parentElement.children)\n .indexOf(target.parentElement);\n var targetColumnIndex = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var activeCellList = this.curTable.querySelectorAll('.e-cell-select');\n for (var i = activeCellList.length - 1; i >= 0; i--) {\n if (this.activeCell !== activeCellList[i]) {\n activeCellList[i].classList.remove('e-cell-select');\n }\n }\n if (activeRowIndex === targetRowIndex && activeColumnIndex === targetColumnIndex) {\n return;\n }\n var correspondingCells = this.getCorrespondingColumns();\n var activeIndexes = this.getCorrespondingIndex(this.activeCell, correspondingCells);\n var targetIndexes = this.getCorrespondingIndex(target, correspondingCells);\n var minMaxIndexes = this.highlightCells(Math.min(activeIndexes[0], targetIndexes[0]), Math.max(activeIndexes[0], \n /* eslint-disable */\n targetIndexes[0]), Math.min(activeIndexes[1], targetIndexes[1]), Math.max(activeIndexes[1], targetIndexes[1]), correspondingCells);\n for (var rowIndex = minMaxIndexes.startRow; rowIndex <= minMaxIndexes.endRow; rowIndex++) {\n for (var colIndex = minMaxIndexes.startColumn; colIndex <= minMaxIndexes.endColumn; colIndex++) {\n correspondingCells[rowIndex][colIndex].classList.add('e-cell-select');\n }\n }\n if (this.parent.nodeSelection.range) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, this.parent.nodeSelection.range.endContainer, 0, 0);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, 0);\n }\n };\n ;\n return TableCommand;\n}());\nexport { TableCommand };\nvar MinMax = /** @class */ (function () {\n function MinMax() {\n }\n return MinMax;\n}());\n","/**\n * Is formatted or not.\n *\n * @hidden\n * @deprecated\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n /**\n * getFormattedNode method\n *\n * @param {Node} node - specifies the node.\n * @param {string} format - specifies the string value.\n * @param {Node} endNode - specifies the end node\n * @returns {Node} - returns the node\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\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 'del'\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';\nimport { DOMNode } from './dom-node';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n /**\n * applyFormat method\n *\n * @param {Document} docElement - specifies the document\n * @param {string} format - specifies the string value\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} value - specifies the string value\n * @param {string} selector - specifies the string\n * @returns {void}\n * @hidden\n * @deprecated\n */\n SelectionCommands.applyFormat = function (docElement, format, endNode, enterAction, value, selector) {\n this.enterAction = enterAction;\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 domNode = new DOMNode(endNode, docElement);\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 preventRestore = 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.nodeType === 3 && range.startContainer.parentElement.childElementCount > 0 &&\n range.startOffset > 0 && range.startContainer.parentElement.firstElementChild.tagName.toLowerCase() !== 'br') {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, range.startContainer);\n nodes.push(range.startContainer);\n }\n else {\n var cursorNode = this.insertCursorNode(docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n var childNodes = cursorNode.nodeName === 'BR' && cursorNode.parentNode.childNodes;\n if (!isNOU(childNodes) && childNodes.length === 1 && childNodes[0].nodeName === 'BR' && nodes.length === 0) {\n domSelection.setSelectionText(docElement, range.startContainer, range.endContainer, 0, 0);\n preventRestore = true;\n }\n else {\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n if (cursorNode.nodeName === 'BR' && cursorNode.parentNode.textContent.length === 0) {\n preventRestore = true;\n }\n }\n }\n isCursor = range.collapsed;\n var isSubSup = false;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (formatNode === null) {\n if (format === 'subscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'superscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n else if (format === 'superscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'subscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n }\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, endNode, domNode);\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 if (!preventRestore) {\n save.restore();\n }\n if (isSubSup) {\n this.applyFormat(docElement, format, endNode, enterAction);\n }\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) ?\n (cursorNodes.length > 1 && range.startContainer === range.endContainer) ?\n this.getCursorFormat(isFormatted, cursorNodes, format, endNode) :\n isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n if (cursorFormat.firstChild.textContent.charCodeAt(0) === 8203) {\n var isCursorEqual = false;\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var emptySpaceNode = void 0;\n if (cursorFormat.firstChild === cursorNode) {\n cursorNode.textContent = cursorNode.textContent.replace(regEx, '');\n emptySpaceNode = cursorNode;\n isCursorEqual = true;\n }\n else {\n cursorFormat.firstChild.textContent = cursorFormat.firstChild.textContent.replace(regEx, '');\n emptySpaceNode = cursorFormat.firstChild;\n }\n var pointer = void 0;\n if (emptySpaceNode.textContent.length === 0) {\n if (!isNOU(emptySpaceNode.previousSibling)) {\n cursorNode = emptySpaceNode.previousSibling;\n pointer = emptySpaceNode.textContent.length - 1;\n domSelection.setCursorPoint(docElement, emptySpaceNode, pointer);\n }\n else if (!isNOU(emptySpaceNode.parentElement) && emptySpaceNode.parentElement.textContent.length === 0) {\n var brElem = document.createElement('BR');\n emptySpaceNode.parentElement.appendChild(brElem);\n detach(emptySpaceNode);\n cursorNode = brElem;\n domSelection.setCursorPoint(docElement, cursorNode.parentElement, 0);\n }\n }\n }\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n if (cursorNodes.length > 1 && range.startOffset > 0 && (cursorNodes[0].firstElementChild &&\n cursorNodes[0].firstElementChild.tagName.toLowerCase() === 'br')) {\n cursorNodes[0].innerHTML = '';\n }\n if (cursorNodes.length === 1 && range.startOffset === 0 && (cursorNodes[0].nodeName === 'BR' ||\n cursorNodes[0].nextSibling.nodeName === 'BR')) {\n detach(cursorNodes[0].nodeName === '#text' ? cursorNodes[0].nextSibling : cursorNodes[0]);\n }\n cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.getCursorFormat = function (isFormatted, cursorNodes, format, endNode) {\n var currentNode;\n for (var index = 0; index < cursorNodes.length; index++) {\n currentNode = cursorNodes[index].lastElementChild ?\n cursorNodes[index].lastElementChild : cursorNodes[index];\n }\n return isFormatted.getFormattedNode(currentNode, format, endNode);\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection, endNode, domNode) {\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 formatNodeStyles = formatNode.getAttribute('style');\n var formatNodeTagName = formatNode.tagName;\n var child = InsertMethods.unwrap(formatNode);\n if (child[0] && !isFontStyle) {\n var nodeTraverse = child[index] ? child[index] : child[0];\n var textNode = nodeTraverse;\n for (; nodeTraverse && nodeTraverse.parentElement && nodeTraverse.parentElement !== endNode; \n // eslint-disable-next-line\n nodeTraverse = nodeTraverse) {\n if (nodeTraverse.parentElement && nodeTraverse.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase() &&\n (nodeTraverse.parentElement.childElementCount > 1 || range.startOffset > 1)) {\n if (textNode.parentElement && textNode.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase()) {\n if ((range.startOffset === range.endOffset) && textNode.nodeType !== 1 &&\n !isNOU(textNode.textContent) && textNode.parentElement.childElementCount > 1) {\n range.setStart(textNode, 0);\n range.setEnd(textNode, textNode.textContent.length);\n nodeCutter.SplitNode(range, textNode.parentElement, false);\n }\n }\n if (nodeTraverse.parentElement.tagName.toLocaleLowerCase() === 'span') {\n if (formatNode.style.textDecoration === 'underline' &&\n nodeTraverse.parentElement.style.textDecoration !== 'underline') {\n nodeTraverse = nodeTraverse.parentElement;\n continue;\n }\n }\n InsertMethods.unwrap(nodeTraverse.parentElement);\n nodeTraverse = !isNOU(nodeTraverse.parentElement) && !domNode.isBlockNode(nodeTraverse.parentElement) ? textNode :\n nodeTraverse.parentElement;\n }\n else {\n nodeTraverse = nodeTraverse.parentElement;\n }\n }\n }\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n if (child[num].nodeType !== 3 || (child[num].textContent && child[num].textContent.trim().length > 0)) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value, formatNodeTagName, formatNodeStyles));\n if (num === 0) {\n range.setStartBefore(child[num]);\n }\n else if (num === child.length - 1) {\n range.setEndAfter(child[num]);\n }\n }\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' || format === 'fontcolor') {\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 if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\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' || format === 'fontcolor') {\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 if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n nodes[index] = this.applyStyles(nodes, index, element);\n if (format === 'fontsize') {\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 }\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 if (!(nodes[index].nodeName === 'BR' && this.enterAction === 'BR')) {\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 }\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, tagName, styles) {\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 this.updateStyles(node, tagName, styles);\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\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 this.updateStyles(node, tagName, styles);\n node.style.color = value;\n node.style.textDecoration = 'inherit';\n return node;\n case 'fontname':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.backgroundColor = value;\n return node;\n }\n };\n SelectionCommands.updateStyles = function (ele, tag, styles) {\n if (styles !== null && tag === 'SPAN') {\n ele.setAttribute('style', styles);\n }\n };\n SelectionCommands.enterAction = 'P';\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 *\n * @hidden\n * @deprecated\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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, e.enterAction);\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.enterAction, 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 *\n * @hidden\n * @deprecated\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - sepcifies the parent element\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 var pastedElements = this.parent.editableElement.querySelectorAll('.pasteContent_RTE');\n var allPastedElements = [].slice.call(pastedElements);\n var imgElements = this.parent.editableElement.querySelectorAll('.pasteContent_Img');\n var allImgElm = [].slice.call(imgElements);\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n elements: allPastedElements,\n imgElem: allImgElm\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 { closest } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { DOMNode } from './dom-node';\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 *\n * @param {Document} docElement - specifies the document element.\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} selector - specifies the string value\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ClearFormat.clear = function (docElement, endNode, enterAction, selector) {\n this.domNode = new DOMNode(endNode, docElement);\n this.defaultTag = enterAction === 'P' ? this.defaultTag : 'div';\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 = void 0;\n if (nodes[0].nodeName === 'BR' && closest(nodes[0], 'table')) {\n preNode = nodeCutter.GetSpliceNode(range, closest(nodes[0], 'table'));\n }\n else {\n preNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length > 1 && nodes[0].nodeName === 'IMG' ? 1 : 0]);\n }\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.length <= i && 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(this.defaultTag));\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(this.defaultTag));\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(this.defaultTag));\n InsertMethods.unwrap(childNodes[index2]);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, \n // eslint-disable-next-line\n endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n var currentInlineNode = textNodes[index];\n var currentNode = void 0;\n while (!this.domNode.isBlockNode(currentInlineNode)) {\n currentNode = currentInlineNode;\n currentInlineNode = currentInlineNode.parentElement;\n }\n if (currentNode &&\n IsFormatted.inlineTags.indexOf(currentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, currentNode);\n this.removeInlineParent(currentNode);\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', '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', 'th', 'tfoot', 'figcaption', 'li'];\n ClearFormat.defaultTag = 'p';\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 *\n * @hidden\n * @deprecated\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\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, enterAction: e.enterAction });\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.enterAction, 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 *\n * @param {IHtmlSubCommands} e - specifies the sub command\n * @returns {void}\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 *\n * @function destroy\n * @returns {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 // eslint-disable-next-line\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 *\n * @function saveData\n * @param {KeyboardEvent} e - specifies the keyboard event\n * @returns {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 *\n * @function undo\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @returns {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 *\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @function redo\n * @returns {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 *\n * @returns {boolean} - returns the boolean value\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 *\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.borderStyle = ['border-top', 'border-right', 'border-bottom', 'border-left'];\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 var pattern4 = /style='mso-width-source:/i;\n if (patern.test(tempHTMLContent) || patern2.test(tempHTMLContent) || patern3.test(tempHTMLContent) ||\n pattern4.test(tempHTMLContent)) {\n this.imageConversion(elm, rtfData);\n tempHTMLContent = tempHTMLContent.replace(/<img[^>]+>/i, '');\n this.addListClass(elm);\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 if (pattern4.test(tempHTMLContent)) {\n this.addTableBorderClass(elm);\n }\n e.callBack(elm.innerHTML);\n }\n else {\n e.callBack(elm.innerHTML);\n }\n };\n MsWordPaste.prototype.addListClass = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (!isNOU(allNodes[index].getAttribute('style')) && allNodes[index].getAttribute('style').replace(/ /g, '').replace('\\n', '').indexOf('mso-list:l') >= 0 &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') === -1 && allNodes[index].tagName.charAt(0) !== 'H') {\n allNodes[index].classList.add('msolistparagraph');\n }\n }\n };\n MsWordPaste.prototype.addTableBorderClass = function (elm) {\n var allTableElm = elm.querySelectorAll('table');\n var hasTableBorder = false;\n for (var i = 0; i < allTableElm.length; i++) {\n for (var j = 0; j < this.borderStyle.length; j++) {\n if (allTableElm[i].innerHTML.indexOf(this.borderStyle[j]) >= 0) {\n hasTableBorder = true;\n break;\n }\n }\n if (hasTableBorder) {\n allTableElm[i].classList.add('e-rte-table-border');\n hasTableBorder = false;\n }\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 // eslint-disable-next-line\n var linkRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\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 if (imgSrc[i].match(linkRegex)) {\n imgElem[i].setAttribute('src', imgSrc[i]);\n }\n else {\n imgElem[i].setAttribute('src', base64Src[i]);\n }\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 byteArr = this.conHexStringToBytes(hexValue.hex);\n var base64String = this.conBytesToBase64(byteArr);\n var 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 // eslint-disable-next-line\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 if (!isNOU(fullImg)) {\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 }\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 !allElements[i].closest('td')) {\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 isNOU(element.parentElement.querySelector('img'))) {\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 (!isNOU(emptyElements[i].closest('td')) &&\n !isNOU(emptyElements[i].closest('td').querySelector('.MsoNormal'))) {\n emptyElements[i].innerHTML = '-';\n }\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&\n emptyElements[i].tagName !== 'HR') {\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) {\n return styleClassObject_1[key];\n });\n values = this.removeUnwantedStyle(values, wordPasteStyleConfig);\n this.filterStyles(elm, wordPasteStyleConfig);\n var resultElem = void 0;\n var fromClass = false;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i].split('.')[0] === '') {\n resultElem = elm.getElementsByClassName(keys[i].split('.')[1]);\n fromClass = true;\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 if (!fromClass) {\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 }\n values[i] = valueSplit.join(';') + ';';\n var changedValue = styleProperty + values[i];\n resultElem[j].setAttribute('style', changedValue);\n }\n else {\n values[i] = values[i].replace(/text-indent:-(.*?)(?=;|$)/gm, '');\n resultElem[j].setAttribute('style', values[i]);\n }\n }\n fromClass = false;\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 // eslint-disable-next-line\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 allNodes[index].childElementCount !== 1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\n if (allNodes[index].className.indexOf('MsoListParagraphCxSpFirst') >= 0 && listNodes.length > 0 &&\n listNodes[listNodes.length - 1] !== null) {\n listNodes.push(null);\n }\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 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0)) {\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 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\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 var currentListStyle = '';\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 if (listNodes[i].getAttribute('style') && listNodes[i].getAttribute('style').indexOf('mso-outline-level') !== -1) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('mso-outline-level', 'mso-outline'));\n }\n content = listNodes[i].getAttribute('style');\n if (content && content.indexOf('level') !== -1) {\n // eslint-disable-next-line\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 var currentClassName = void 0;\n if (!isNOU(listNodes[i].className)) {\n currentClassName = listNodes[i].className;\n }\n if (!isNOU(listNodes[i].getAttribute('style'))) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('text-align:start;', ''));\n if (listNodes[i].style.textAlign !== '') {\n listNodes[i].setAttribute('style', 'text-align:' + listNodes[i].style.textAlign);\n currentListStyle = listNodes[i].getAttribute('style');\n }\n }\n collection.push({ listType: type, content: tempNode, nestedLevel: level, class: currentClassName,\n listStyle: currentListStyle });\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 prevList.setAttribute('class', collection[index].class);\n var currentStyle = prevList.getAttribute('style');\n prevList.setAttribute('style', (!isNOU(currentStyle) ? currentStyle : '') + collection[index].listStyle);\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 var firstChild = elem.firstElementChild;\n if (firstChild.textContent.trim() === '' && !isNOU(firstChild.firstElementChild) &&\n firstChild.firstElementChild.nodeName === 'IMG') {\n pushContent = elem.innerHTML.trim();\n this.listContents.push('');\n this.listContents.push(pushContent);\n }\n else {\n var styleNodes = ['b', 'em'];\n if (firstChild.childNodes.length > 0 && (firstChild.querySelectorAll('b').length > 0\n || firstChild.querySelectorAll('em').length > 0)) {\n for (var i = 0; i < firstChild.childNodes.length; i++) {\n var nodeName = firstChild.childNodes[i].nodeName.toLowerCase();\n if (firstChild.childNodes[i].textContent.trim().length > 1 && styleNodes.indexOf(nodeName) !== -1) {\n pushContent = '<' + nodeName + '>' + firstChild.childNodes[i].textContent + '</' + nodeName + '>';\n this.listContents.push(pushContent);\n }\n else if (firstChild.childNodes[i].textContent.trim().length === 1) {\n this.listContents.push(firstChild.childNodes[i].textContent.trim());\n }\n }\n }\n else {\n pushContent = firstChild.textContent.trim();\n this.listContents.push(pushContent);\n }\n }\n detach(firstChild);\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 *\n * @hidden\n * @deprecated\n */\nvar InsertTextExec = /** @class */ (function () {\n /**\n * Constructor for creating the InsertText plugin\n *\n * @param {EditorManager} parent - specifies the parent element\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';\nimport { NodeCutter } from '../plugin/nodecutter';\n/**\n * EditorManager internal component\n *\n * @hidden\n * @deprecated\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n *\n * @hidden\n * @deprecated\n * @param {ICommandModel} options - specifies the command Model\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.nodeCutter = new NodeCutter();\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 this.observer.on(EVENTS.ON_BEGIN, this.onBegin, 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 EditorManager.prototype.onBegin = function (e) {\n this.observer.notify(EVENTS.SPACE_ACTION, e);\n };\n /* eslint-disable */\n /**\n * execCommand\n *\n * @param {ExecCommand} command - specifies the execution command\n * @param {T} value - specifes the value.\n * @param {Event} event - specifies the call back event\n * @param {Function} callBack - specifies the function\n * @param {string} text - specifies the string value\n * @param {T} exeValue - specifies the values to be executed\n * @param {string} selector - specifies the selector values\n * @returns {void}\n * @hidden\n * @deprecated\n */\n /* eslint-enable */\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue, selector, enterAction) {\n switch (command.toLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, item: exeValue, enterAction: enterAction });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, exeValue: exeValue, enterAction: enterAction\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 'files':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: 'Image', item: exeValue, event: event, callBack: callBack, selector: selector\n });\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, enterAction: enterAction });\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 case 'merge':\n this.observer.notify(CONSTANT.TABLE_MERGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'horizontalsplit':\n this.observer.notify(CONSTANT.TABLE_HORIZONTAL_SPLIT, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'verticalsplit':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_SPLIT, { 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, enterAction: enterAction });\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, enterAction: enterAction });\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 *\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 *\n * @param {Element} editElement - specifies the edit element.\n * @param {Document} doc - specifies the doucment\n * @param {number} options - specifies the options\n * @returns {void}\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';\nimport { getDefaultHtmlTbStatus } from './../../common/util';\n/**\n * Update Toolbar Status\n *\n * @hidden\n * @deprecated\n */\nexport var statusCollection = getDefaultHtmlTbStatus();\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n /**\n * get method\n *\n * @param {Document} docElement - specifies the document element\n * @param {Node} targetNode - specifies the target node\n * @param {string[]} formatNode - specifies the format node\n * @param {string[]} fontSize - specifies the font size\n * @param {string[]} fontName - specifies the font name.\n * @param {Node} documentNode - specifies the document node.\n * @returns {IToolbarStatus} - returns the toolbar status\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 var isNodeChanged = false;\n var range = nodeSelection.getRange(docElement);\n for (var index = 0; index < nodes.length; index++) {\n while (nodes[index].nodeType === 3 && range.startContainer.nodeType === 3 && nodes[index].parentNode &&\n nodes[index].parentNode.lastElementChild && nodes[index].parentNode.lastElementChild.nodeName !== 'BR' &&\n (this.getImmediateBlockNode(nodes[index].parentNode)).textContent.replace(/\\u200B/g, '').length === 0 &&\n range.startContainer.textContent.replace(/\\u200B/g, '').length === 0 &&\n nodeSelection.get(docElement).toString().replace(/\\u200B/g, '').length === 0) {\n nodes[index] = nodes[index].parentNode.lastElementChild.firstChild;\n isNodeChanged = true;\n }\n if (isNodeChanged && nodes[index]) {\n nodeSelection.setCursorPoint(docElement, nodes[index], nodes[index].textContent.length);\n isNodeChanged = false;\n }\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 if ((index === 0 && formatCollection.numberFormatList) || !formatCollection.numberFormatList) {\n nodeCollection.numberFormatList = formatCollection.numberFormatList;\n }\n if ((index === 0 && formatCollection.bulletFormatList) || !formatCollection.bulletFormatList) {\n nodeCollection.bulletFormatList = formatCollection.bulletFormatList;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getImmediateBlockNode = function (node) {\n do {\n node = node.parentNode;\n } while (node && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\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 if (!formatCollection.numberFormatList) {\n formatCollection.numberFormatList = this.isNumberFormatList(node);\n }\n if (!formatCollection.bulletFormatList) {\n formatCollection.bulletFormatList = this.isBulletFormatList(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 ToolbarStatus.isNumberFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'lower-alpha') {\n return 'Lower Alpha';\n }\n else if (list === 'number') {\n return 'Number';\n }\n else if (list === 'upper-alpha') {\n return 'Upper Alpha';\n }\n else if (list === 'lower-roman') {\n return 'Lower Roman';\n }\n else if (list === 'upper-roman') {\n return 'Upper Roman';\n }\n else if (list === 'lower-greek') {\n return 'Lower Greek';\n }\n else if (list === 'none') {\n return 'None';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isBulletFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'circle') {\n return 'Circle';\n }\n else if (list === 'square') {\n return 'Square';\n }\n else if (list === 'none') {\n return 'None';\n }\n else if (list === 'disc') {\n return 'Disc';\n }\n else {\n return null;\n }\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\nimport { getDefaultHtmlTbStatus } from '../../common/util';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.toolbarStatus = this.prevToolbarStatus = getDefaultHtmlTbStatus();\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 this.parent.off(events.destroy, this.removeEventListener);\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) {\n fontsize.push(item.value);\n });\n this.parent.fontFamily.items.forEach(function (item) {\n fontName.push(item.value);\n });\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 var tbStatusString = JSON.stringify(this.toolbarStatus);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n if (JSON.stringify(this.prevToolbarStatus) !== tbStatusString) {\n this.parent.notify(events.updateTbItemsStatus, { html: JSON.parse(tbStatusString), markdown: null });\n this.prevToolbarStatus = JSON.parse(tbStatusString);\n }\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 *\n * @hidden\n * @deprecated\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} serviceLocator - specifies the service.\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {Element} - specifies the 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 *\n * @returns {Element} - specifies the 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 *\n * @returns {string} - specifies the string element.\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().innerText;\n };\n /**\n * Set the content div element of RichTextEditor\n *\n * @param {Element} panel - specifies the panel element.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {Document} - specifies the 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';\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:\\n 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;\\n margin: 5px auto;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));\\n position: relativetext-align: center;vertical-align: bottom;}\\n .e-img-inner {box-sizing: border-box;display: block;font-size: 16px;font-weight: initial;\\n margin: auto;opacity: .9;text-align: center;width: 100%;}\\n .e-img-wrap {display: inline-block;margin: auto;padding: 0;text-align: center;width: 100%;}\\n .e-imgleft {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;\\n max-width: calc(100% - (2 * 5px));vertical-align: bottom;}\\n .e-imgbreak {border: 0;cursor: pointer;\\n display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\n .e-rte-image.e-img-focus:not(.e-resize) {border: solid 2px #4a90e2;}\\n img.e-img-focus::selection { background: transparent;color: transparent;}\\n span.e-rte-imageboxmark { width: 10px; height: 10px; position: absolute; display: block;\\n background: #4a90e2; border: 1px solid #fff; z-index: 1000;}\\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\\n .e-mob-rte span.e-rte-imageboxmark { background: #fff; border: 1px solid #4a90e2;\\n border-radius: 15px; height: 20px; width: 20px; }\\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\\n .e-rte-content .e-content img.e-resize { z-index: 1000; }\\n .e-img-caption .e-img-inner { outline: 0; }\\n .e-img-caption a:focus-visible { outline: none; }\\n .e-img-caption .e-rte-image.e-imgright, .e-img-caption .e-rte-image.e-imgleft { float: none; margin: 0;}\\n body{box-sizing: border-box;min-height: 100px;outline: 0 solid transparent;\\n overflow-x: auto;padding: 16px;position: relative;text-align: inherit;z-index: 2;}\\n p{margin: 0 0 10px;margin-bottom: 10px;}\\n li{margin-bottom: 10px;}\\n h1{font-size: 2.17em;font-weight: 400;line-height: 1;margin: 10px 0;}\\n h2{font-size: 1.74em;font-weight: 400;margin: 10px 0;}\\n h3{font-size: 1.31em;font-weight: 400;margin: 10px 0;}\\n h4{font-size: 16px;font-weight: 400;line-height: 1.5;margin: 0;}\\n h5{font-size: 00.8em;font-weight: 400;margin: 0;}\\n h6{font-size: 00.65em;font-weight: 400;margin: 0;}\\n blockquote{margin: 10px 0;margin-left: 0;padding-left: 5px;border-left: solid 2px #5c5c5c;}\\n pre{background-color: inherit;border: 0;border-radius: 0;color: #333;\\n font-size: inherit;line-height: inherit;margin: 0 0 10px;overflow: visible;padding: 0;\\n white-space: pre-wrap;word-break: inherit;word-wrap: break-word;}\\n strong, b{font-weight: 700;}\\n a{text-decoration: none;user-select: auto;}\\n a:hover{text-decoration: underline;};\\n p:last-child, pre:last-child, blockquote:last-child{margin-bottom: 0;}\\n h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}\\n ul:last-child{margin-bottom: 0;}\\n table { border-collapse: collapse; empty-cells: show;}\\n table td,table th {border: 1px solid #BDBDBD; height: 20px; vertical-align: middle;}\\n table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}\\n table th {background-color: #E0E0E0;}\\n table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD} \\n table .e-cell-select {border: 1px double #4a90e2;}\\n span.e-table-box { cursor: nwse-resize; display: block; height: 10px; position: absolute; width: 10px; }\\n span.e-table-box.e-rmob {height: 14px;width: 14px;}\\n .e-row-resize, .e-column-resize { background-color: transparent; background-repeat: repeat;\\n bottom: 0;cursor: col-resize;height: 1px;overflow: visible;position: absolute;width: 1px; }\\n .e-row-resize { cursor: row-resize; height: 1px;}\\n .e-table-rhelper { cursor: col-resize; opacity: .87;position: absolute;}\\n .e-table-rhelper.e-column-helper { width: 1px; }\\n .e-table-rhelper.e-row-helper {height: 1px;}\\n .e-reicon::before { border-bottom: 6px solid transparent; border-right: 6px solid;\\n border-top: 6px solid transparent; content: ''; display: block; height: 0;\\n position: absolute; right: 4px; top: 4px; width: 20px; }\\n .e-reicon::after { border-bottom: 6px solid transparent; border-left: 6px solid;\\n border-top: 6px solid transparent; content: ''; display: block;\\n height: 0; left: 4px; position: absolute; top: 4px; width: 20px; z-index: 3; }\\n .e-row-helper.e-reicon::after { top: 10px; transform: rotate(90deg); }\\n .e-row-helper.e-reicon::before { left: 4px; top: -20px; transform: rotate(90deg); }\\n span.e-table-box { background-color: #ffffff; border: 1px solid #BDBDBD; }\\n span.e-table-box.e-rbox-select { background-color: #BDBDBD; border: 1px solid #BDBDBD; }\\n .e-table-rhelper { background-color: #4a90e2;}\\n .e-rtl { direction: rtl; }\\n </style>\\n </head>\";\n/**\n * Content module is used to render Rich Text Editor content\n *\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 *\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 id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;',\n attrs: { 'srcdoc': iFrameContent }\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 *\n * @returns {Element} - specifies the 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 *\n * @returns {void}\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, isNullOrUndefined } 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 this.parent.on(events.destroy, this.removeEventListener, this);\n };\n XhtmlValidation.prototype.removeEventListener = function () {\n this.parent.off(events.xhtmlValidation, this.enableXhtmlValidation);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n XhtmlValidation.prototype.enableXhtmlValidation = function () {\n if (this.parent.enableXhtml) {\n if (isNullOrUndefined(this.parent.inputElement)) {\n this.currentElement = this.parent.element;\n }\n else {\n this.currentElement = this.parent.inputElement;\n }\n this.clean(this.currentElement);\n this.AddRootElement();\n this.ImageTags();\n this.removeTags();\n this.RemoveUnsupported();\n this.currentElement.innerHTML = this.selfEncloseValidation(this.currentElement.innerHTML, this.currentElement.innerText === '\\n' ?\n this.currentElement.innerText.length : this.currentElement.innerText.trim().length);\n this.parent.setProperties({ value: this.currentElement.innerHTML }, true);\n }\n };\n /**\n * @param {string} currentValue - specifies the string value.\n * @param {number} valueLength - specifies the length of the current value.\n * @returns {void}\n * @deprecated\n */\n XhtmlValidation.prototype.selfEncloseValidation = function (currentValue, valueLength) {\n if (valueLength === 0 && currentValue.indexOf('table') < 0 && currentValue.indexOf('img') < 0) {\n var arrayValue = currentValue.split(' ');\n arrayValue[arrayValue.length - 1] = '​' + arrayValue[arrayValue.length - 1];\n currentValue = arrayValue.join('');\n }\n currentValue = currentValue.replace(/<br>/g, '<br/>').replace(/<hr>/g, '<hr/>').replace(/ /g, ' ');\n var valueTemp;\n var valueDupe = [];\n var valueOriginal = [];\n var imgRegexp = [/<img(.*?)>/gi, /<area(.*?)>/gi, /<base(.*?)>/gi, /<col (.*?)>/gi, /<embed(.*?)>/gi,\n /<input(.*?)>/gi, /<link(.*?)>/gi, /<meta(.*?)>/gi, /<param(.*?)>/gi, /<source(.*?)>/gi,\n /<track(.*?)>/gi, /<wbr(.*?)>/gi];\n for (var j = 0; j < imgRegexp.length; j++) {\n valueTemp = imgRegexp[j].exec(currentValue);\n while ((valueTemp) !== null) {\n valueDupe.push(valueTemp[0].toString());\n valueTemp = imgRegexp[j].exec(currentValue);\n }\n valueOriginal = valueDupe.slice(0);\n for (var i = 0; i < valueDupe.length; i++) {\n if (valueDupe[i].indexOf('/') === -1 || valueDupe[i].lastIndexOf('/') !== valueDupe[i].length - 2) {\n valueDupe[i] = valueDupe[i].substr(0, valueDupe[i].length - 1) + ' /' +\n valueDupe[i].substr(valueDupe[i].length - 1, valueDupe[i].length);\n }\n }\n for (var g = 0; g <= valueDupe.length - 1; g++) {\n currentValue = currentValue.replace(valueOriginal[g], valueDupe[g]);\n }\n }\n return currentValue;\n };\n XhtmlValidation.prototype.AddRootElement = function () {\n if ((this.currentElement.childNodes.length === 1 && this.currentElement.firstChild.nodeName !== 'DIV') ||\n this.currentElement.childNodes.length > 1) {\n var parentEle = this.parent.createElement('div');\n while (this.currentElement.childNodes.length > 0) {\n parentEle.appendChild(this.currentElement.childNodes[0]);\n }\n this.currentElement.appendChild(parentEle);\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.currentElement.innerHTML;\n };\n XhtmlValidation.prototype.ImageTags = function () {\n var imgNodes = this.currentElement.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 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 XhtmlValidation.prototype.RemoveElementNode = function (rmvNode, parentNode) {\n var parentArray = this.currentElement.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 XhtmlValidation.prototype.RemoveUnsupported = function () {\n var underlineEle = this.currentElement.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.currentElement.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 XhtmlValidation.prototype.RemoveAttributeByName = function (attrName) {\n if (this.currentElement.firstChild !== null) {\n if (this.currentElement.firstChild.nodeType !== 3) {\n for (var i = 0; i < this.currentElement.childNodes.length; i++) {\n var ele = this.currentElement.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 return XhtmlValidation;\n}());\nexport { XhtmlValidation };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass, Browser, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU } 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, getDefaultValue } from '../base/util';\nimport { isIDevice } from '../../common/util';\nimport { XhtmlValidation } from './xhtml-validation';\nimport { ON_BEGIN } from './../../common/constant';\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 *\n * @function destroy\n * @returns {void}\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {void}\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.keyUp, this.onKeyUp, 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.onKeyUp = function (e) {\n var args = e.args;\n var restrictKeys = [8, 9, 13, 16, 17, 18, 20, 27, 37, 38, 39, 40, 44, 45, 46, 91,\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123];\n var range = this.parent.getRange();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer;\n if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey) {\n if (range.startContainer.textContent.charCodeAt(0) === 8203) {\n pointer = range.startOffset - 1;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n if (!isNOU(range.startContainer.previousSibling) && !isNOU(range.startContainer.previousSibling.parentElement) &&\n range.startContainer.parentElement === range.startContainer.previousSibling.parentElement && range.startContainer.previousSibling.textContent.charCodeAt(0) === 8203) {\n range.startContainer.previousSibling.textContent = range.startContainer.previousSibling.textContent.replace(regEx, '');\n }\n if (range.endContainer.textContent.charCodeAt(range.endOffset) === 8203) {\n pointer = range.startOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n var _this = this;\n var currentRange;\n var args = e.args;\n if (Browser.info.name === 'chrome') {\n currentRange = this.parent.getRange();\n this.backSpaceCleanup(e, currentRange);\n this.deleteCleanup(e, currentRange);\n }\n if (args.keyCode === 9 && this.parent.enableTabKey) {\n if (!isNOU(args.target) && isNullOrUndefined(closest(args.target, '.e-rte-toolbar'))) {\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 args.preventDefault();\n if (!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 }\n if (e.args.action === 'space' ||\n e.args.action === 'enter' ||\n e.args.keyCode === 13) {\n this.spaceLink(e.args);\n if (this.parent.editorMode === 'HTML' && !((this.parent.shiftEnterKey === 'BR' && e.args.shiftKey))) {\n this.parent.notify(events.enterHandler, { args: e.args });\n }\n }\n if (e.args.action === 'space') {\n var currentRange_1 = this.parent.getRange();\n var editorValue = currentRange_1.startContainer.textContent.slice(0, currentRange_1.startOffset);\n var orderedList_1 = this.isOrderedList(editorValue);\n var unOrderedList = this.isUnOrderedList(editorValue);\n if (orderedList_1 && !unOrderedList || unOrderedList && !orderedList_1) {\n var eventArgs_1 = {\n callBack: null,\n event: e.args,\n name: 'keydown-handler'\n };\n var actionBeginArgs = {\n cancel: false,\n item: { command: 'Lists', subCommand: orderedList_1 ? 'OL' : 'UL' },\n name: 'actionBegin',\n originalEvent: e.args,\n requestType: orderedList_1 ? 'OL' : 'UL'\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n _this.parent.formatter.editorManager.observer.notify(ON_BEGIN, eventArgs_1);\n _this.parent.trigger(events.actionComplete, {\n editorMode: _this.parent.editorMode,\n elements: _this.parent.formatter.editorManager.domNode.blockNodes(),\n event: e.args,\n name: events.actionComplete,\n range: _this.parent.getRange(),\n requestType: orderedList_1 ? 'OL' : 'UL'\n });\n }\n });\n }\n }\n if (Browser.info.name === 'chrome' && (!isNullOrUndefined(this.rangeElement) && !isNullOrUndefined(this.oldRangeElement) ||\n !isNullOrUndefined(this.deleteRangeElement) && !isNullOrUndefined(this.deleteOldRangeElement)) &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.rangeElement = null;\n this.oldRangeElement = null;\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n args.preventDefault();\n }\n };\n HtmlEditor.prototype.isOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.isUnOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var ulListStartRegex = [/^[*]$/, /^[-]$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < ulListStartRegex.length; i++) {\n if (ulListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.backSpaceCleanup = function (e, currentRange) {\n var isLiElement = false;\n if (e.args.code === 'Backspace' && e.args.keyCode === 8 && currentRange.startOffset === 0 &&\n currentRange.endOffset === 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.textContent.length > 0 &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.rangeElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.rangeElement.tagName === 'OL' || this.rangeElement.tagName === 'UL') {\n var liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {\n this.oldRangeElement = liElement.previousElementSibling.lastElementChild;\n if (!isNullOrUndefined(liElement.lastElementChild)) {\n this.rangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.rangeElement = liElement;\n }\n }\n }\n else if (this.rangeElement.tagName === 'TABLE' || (!isNullOrUndefined(this.rangeElement.previousElementSibling) &&\n this.rangeElement.previousElementSibling.tagName === 'TABLE')) {\n return;\n }\n else {\n this.oldRangeElement = this.rangeElement.previousElementSibling;\n }\n if (isNullOrUndefined(this.oldRangeElement)) {\n return;\n }\n else {\n if (this.oldRangeElement.tagName === 'OL' || this.oldRangeElement.tagName === 'UL') {\n this.oldRangeElement = this.oldRangeElement.lastElementChild.lastElementChild\n ? this.oldRangeElement.lastElementChild.lastElementChild :\n this.oldRangeElement.lastElementChild;\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), \n // eslint-disable-next-line\n this.oldRangeElement, this.oldRangeElement.childNodes.length);\n if (this.oldRangeElement.querySelector('BR')) {\n detach(this.oldRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {\n while (this.rangeElement.firstChild) {\n this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);\n }\n // eslint-disable-next-line\n !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);\n this.oldRangeElement.normalize();\n }\n }\n }\n };\n HtmlEditor.prototype.deleteCleanup = function (e, currentRange) {\n var isLiElement = false;\n var liElement;\n var rootElement;\n if (e.args.code === 'Delete' && e.args.keyCode === 46 &&\n this.parent.contentModule.getText().trim().length !== 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.parentElement.tagName !== 'TD' &&\n currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.deleteRangeElement = rootElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.deleteRangeElement.tagName === 'OL' || this.deleteRangeElement.tagName === 'UL') {\n liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.nextElementSibling && liElement.nextElementSibling.childElementCount > 0\n && !liElement.nextElementSibling.querySelector('BR')) {\n if (!isNullOrUndefined(liElement.lastElementChild)) {\n this.deleteRangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.deleteRangeElement = liElement;\n }\n }\n else {\n this.deleteRangeElement = this.getRangeElement(liElement);\n }\n }\n else if (this.deleteRangeElement.nodeType === 3 || (this.deleteRangeElement.tagName === 'TABLE' ||\n (!isNullOrUndefined(this.deleteRangeElement.nextElementSibling) && this.deleteRangeElement.nextElementSibling.tagName === 'TABLE'))) {\n return;\n }\n if (this.getCaretIndex(currentRange, this.deleteRangeElement) === this.deleteRangeElement.textContent.length) {\n if (!isNullOrUndefined(liElement)) {\n if (isLiElement || !isNullOrUndefined(liElement.nextElementSibling)) {\n this.deleteOldRangeElement = this.getRangeElement(liElement.nextElementSibling);\n }\n else {\n this.deleteOldRangeElement = rootElement.nextElementSibling;\n }\n }\n else {\n this.deleteOldRangeElement = this.deleteRangeElement.nextElementSibling;\n }\n if (isNullOrUndefined(this.deleteOldRangeElement)) {\n return;\n }\n else {\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), this.deleteRangeElement, this.deleteRangeElement.childNodes.length);\n if (this.deleteRangeElement.querySelector('BR')) {\n detach(this.deleteRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.deleteRangeElement) && (this.deleteOldRangeElement.tagName !== 'OL' && this.deleteOldRangeElement.tagName !== 'UL')\n && this.deleteOldRangeElement !== this.deleteRangeElement) {\n while (this.deleteOldRangeElement.firstChild) {\n this.deleteRangeElement.appendChild(this.deleteOldRangeElement.childNodes[0]);\n }\n if (!isLiElement) {\n detach(this.deleteOldRangeElement);\n }\n else {\n detach(this.deleteOldRangeElement.parentElement);\n }\n this.deleteRangeElement.normalize();\n }\n else {\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n }\n }\n }\n else {\n this.deleteRangeElement = null;\n }\n }\n };\n HtmlEditor.prototype.getCaretIndex = function (currentRange, element) {\n var position = 0;\n if (this.parent.contentModule.getDocument().getSelection().rangeCount !== 0) {\n var preCaretRange = currentRange.cloneRange();\n preCaretRange.selectNodeContents(element);\n preCaretRange.setEnd(currentRange.endContainer, currentRange.endOffset);\n position = preCaretRange.toString().length;\n }\n return position;\n };\n HtmlEditor.prototype.getRangeElement = function (element) {\n var rangeElement = element.lastElementChild ? element.lastElementChild.tagName === 'BR' ?\n element.lastElementChild.previousElementSibling ? element.lastElementChild.previousElementSibling\n : element : element.lastElementChild : element;\n return rangeElement;\n };\n HtmlEditor.prototype.getRootBlockNode = function (rangeBlockNode) {\n // eslint-disable-next-line\n for (; rangeBlockNode && this.parent && this.parent.inputElement !== rangeBlockNode; rangeBlockNode = rangeBlockNode) {\n if (rangeBlockNode.parentElement === this.parent.inputElement) {\n break;\n }\n else {\n rangeBlockNode = rangeBlockNode.parentElement;\n }\n }\n return rangeBlockNode;\n };\n HtmlEditor.prototype.getRangeLiNode = function (rangeLiNode) {\n var node = rangeLiNode.parentElement;\n while (node !== this.parent.inputElement) {\n if (node.nodeType === 1 && node.tagName === 'LI') {\n break;\n }\n node = node.parentElement;\n }\n return node;\n };\n HtmlEditor.prototype.onPaste = function (e) {\n // eslint-disable-next-line\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (e.text.match(regex)) {\n if (e.isWordPaste) {\n return;\n }\n e.args.preventDefault();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n // eslint-disable-next-line\n var saveSelection = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n // eslint-disable-next-line\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 += getDefaultValue(this.parent);\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 if (i === 0) {\n contentInnerElem += '<span>' + contentWithSpace.trim() + '</span>';\n }\n else {\n contentInnerElem += '<p>' + contentWithSpace.trim() + '</p>';\n }\n }\n }\n var divElement = this.parent.createElement('div');\n divElement.setAttribute('class', 'pasteContent');\n divElement.style.display = 'inline';\n divElement.innerHTML = contentInnerElem;\n var paraElem = divElement.querySelectorAll('span, 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] + '\"target=\"_blank\">' + 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.formatter.editorManager.execCommand('insertHTML', null, null, null, 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 // eslint-disable-next-line\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 = document.getElementById(this.parent.getID() + '_rtelink');\n var imageDialog = document.getElementById(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 'RemoveLink':\n this.parent.notify(events.unLink, {\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 case 'File':\n this.parent.notify(events.renderFileManager, {\n member: 'fileManager', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\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 if (this.parent.inlineMode.enable) {\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n editElement.style.fontFamily = this.parent.fontFamily.default;\n }\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n editElement.style.fontSize = this.parent.fontSize.default;\n }\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the editor model\n * @returns {void}\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,\n 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 * @returns {string} - returns the string value\n * @hidden\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n *\n * @returns {void}\n * @private\n * @hidden\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 *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @private\n * @hidden\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 *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @hidden\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, extend, addClass } from '@syncfusion/ej2-base';\nimport { getUniqueID, Browser } 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, getDefaultValue } 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 this.parent.trigger(events.beforePasteCleanup, { value: value });\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.trim();\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 this.parent.trigger(events.afterPasteCleanup, { value: value }, function (updatedArgs) {\n value = updatedArgs.value;\n });\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 += getDefaultValue(this.parent);\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 // eslint-disable-next-line\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 () {\n _this.refreshPopup(imgElem, popupObj);\n }, timeOut);\n var rawFile;\n var beforeUploadArgs;\n var uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n removeUrl: this.parent.insertImageSettings.removeUrl\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 () {\n _this.popupClose(popupObj, uploadObj, imgElem, e);\n }, 900);\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n _this.parent.trigger(events.imageUploading, e, function (imageUploadingArgs) {\n if (imageUploadingArgs.cancel) {\n if (!isNullOrUndefined(imgElem)) {\n detach(imgElem);\n }\n if (!isNullOrUndefined(popupObj.element)) {\n detach(popupObj.element);\n }\n }\n else {\n _this.parent.inputElement.contentEditable = 'false';\n }\n });\n }\n },\n beforeUpload: function (args) {\n if (_this.parent.isServerRendered) {\n beforeUploadArgs = JSON.parse(JSON.stringify(args));\n beforeUploadArgs.filesData = rawFile;\n args.cancel = true;\n _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {\n if (beforeUploadArgs.cancel) {\n return;\n }\n /* eslint-disable */\n uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?\n beforeUploadArgs.currentRequest : uploadObj.currentRequestHeader;\n uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?\n beforeUploadArgs.customFormData : uploadObj.customFormDatas;\n uploadObj.uploadFiles(rawFile, null);\n /* eslint-enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n }\n },\n // eslint-disable-next-line\n failure: function (e) {\n setTimeout(function () {\n _this.uploadFailure(imgElem, uploadObj, popupObj, e);\n }, 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 if (_this.parent.isServerRendered) {\n rawFile = e.filesData;\n }\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 /* eslint-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 /* eslint-enable */\n rawFile = fileData;\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 e.element = imgElem;\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 if (Browser.isIE || navigator.appVersion.indexOf('Edge') > -1) {\n var blob = new Blob([decodeArr], { type: extension });\n extend(blob, { name: filename + '.' + (!isNOU(extension) ? extension : '') });\n return blob;\n }\n else {\n return new File([decodeArr], filename + '.' + (!isNOU(extension) ? extension : ''), { type: extension });\n }\n };\n /**\n * Method for image formatting when pasting\n *\n * @param {Object} pasteArgs - specifies the paste arguments.\n * @param {Element []} imgElement - specifies the array elements.\n * @returns {void}\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'),\n name: 'pasteOption', checked: true });\n keepRadioButton.isStringTemplate = true;\n var keepFormatElement = this.parent.element.querySelector('#keepFormating');\n keepRadioButton.appendTo(keepFormatElement);\n var cleanRadioButton = new RadioButton({ label: this.i10n.getConstant('cleanFormat'), name: 'pasteOption' });\n cleanRadioButton.isStringTemplate = true;\n var cleanFormatElement = this.parent.element.querySelector('#cleanFormat');\n cleanRadioButton.appendTo(cleanFormatElement);\n var plainTextRadioButton = new RadioButton({ label: this.i10n.getConstant('plainText'), name: 'pasteOption' });\n plainTextRadioButton.isStringTemplate = true;\n var plainTextElement = this.parent.element.querySelector('#plainTextFormat');\n plainTextRadioButton.appendTo(plainTextElement);\n };\n PasteCleanup.prototype.selectFormatting = function (value, args, keepChecked, cleanChecked) {\n if (keepChecked) {\n this.formatting(value, false, args);\n }\n else if (cleanChecked) {\n this.formatting(value, true, args);\n }\n else {\n this.plainFormatting(value, args);\n }\n };\n PasteCleanup.prototype.pasteDialog = function (value, args) {\n var _this = this;\n var isHeight = false;\n var preRTEHeight = this.parent.height;\n var dialogModel = {\n buttons: [\n {\n click: function () {\n if (!dialog.isDestroyed) {\n var keepChecked = _this.parent.element.querySelector('#keepFormating').checked;\n var cleanChecked = _this.parent.element.querySelector('#cleanFormat').checked;\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var argument = dialog;\n _this.dialogRenderObj.close(argument);\n dialog.destroy();\n _this.selectFormatting(value, args, keepChecked, cleanChecked);\n }\n },\n buttonModel: {\n isPrimary: true,\n cssClass: 'e-flat ' + CLS_RTE_PASTE_OK,\n content: this.i10n.getConstant('pasteDialogOk')\n }\n },\n {\n click: function () {\n if (!dialog.isDestroyed) {\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var args_1 = 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=\"' +\n CLS_RTE_PASTE_REMOVE_FORMAT + '\" id=\"cleanFormat\"/></div>' +\n '<div style=\"padding-top:20px;\"><input type=\"radio\" class=\"' +\n 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 visible: false\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 /* eslint-disable */\n if (this.parent.element.offsetHeight < parseInt(dialog.height.split('px')[0], null)) {\n this.parent.height = parseInt(dialog.height.split('px')[0], null) + 40;\n /* eslint-enable */\n isHeight = true;\n }\n dialog.show();\n };\n PasteCleanup.prototype.destroyDialog = function (rteDialogWrapper) {\n var rteDialogContainer = this.parent.element.querySelector('.e-dlg-container');\n detach(rteDialogContainer);\n var rteDialogWrapperChildLength = rteDialogWrapper.children.length;\n for (var i = 0; i < rteDialogWrapperChildLength; i++) {\n detach(rteDialogWrapper.children[0]);\n }\n };\n PasteCleanup.prototype.formatting = function (value, clean, args) {\n var _this = this;\n var clipBoardElem = this.parent.createElement('div', { className: 'pasteContent', styles: 'display:inline;' });\n if (this.isNotFromHtml && this.containsHtml) {\n value = this.splitBreakLine(value);\n }\n clipBoardElem.innerHTML = value;\n if (this.parent.pasteCleanupSettings.deniedTags !== null) {\n clipBoardElem = this.deniedTags(clipBoardElem);\n }\n if (clean) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n else if (this.parent.pasteCleanupSettings.deniedAttrs !== null) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n if (this.parent.pasteCleanupSettings.allowedStyleProps !== null) {\n clipBoardElem = this.allowedStyle(clipBoardElem);\n }\n this.saveSelection.restore();\n clipBoardElem.innerHTML = this.sanitizeHelper(clipBoardElem.innerHTML);\n var allImg = clipBoardElem.querySelectorAll('img');\n for (var i = 0; i < allImg.length; i++) {\n allImg[i].classList.add('pasteContent_Img');\n if (this.parent.insertImageSettings.width !== 'auto') {\n allImg[i].setAttribute('width', this.parent.insertImageSettings.width);\n }\n if (this.parent.insertImageSettings.minWidth !== '0' && this.parent.insertImageSettings.minWidth !== 0) {\n allImg[i].style.minWidth = this.parent.insertImageSettings.minWidth.toString();\n }\n if (this.parent.insertImageSettings.maxWidth !== null) {\n allImg[i].style.maxWidth = this.parent.getInsertImgMaxWidth().toString();\n }\n if (this.parent.insertImageSettings.height !== 'auto') {\n allImg[i].setAttribute('height', this.parent.insertImageSettings.height);\n }\n if (this.parent.insertImageSettings.minHeight !== '0' && this.parent.insertImageSettings.minHeight !== 0) {\n allImg[i].style.minHeight = this.parent.insertImageSettings.minHeight.toString();\n }\n if (this.parent.insertImageSettings.maxHeight !== null) {\n allImg[i].style.maxHeight = this.parent.insertImageSettings.maxHeight.toString();\n }\n }\n this.addTempClass(clipBoardElem);\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, imageElements: returnArgs.imgElem }, true);\n _this.parent.formatter.onSuccess(_this.parent, args);\n }, clipBoardElem);\n this.removeTempClass();\n this.parent.notify(events.toolbarRefresh, {});\n this.imgUploading(this.parent.inputElement);\n if (this.parent.iframeSettings.enable) {\n this.parent.updateValue();\n }\n }\n };\n PasteCleanup.prototype.addTempClass = function (clipBoardElem) {\n var allChild = clipBoardElem.children;\n for (var i = 0; i < allChild.length; i++) {\n allChild[i].classList.add('pasteContent_RTE');\n }\n };\n PasteCleanup.prototype.removeTempClass = function () {\n var classElm = this.parent.inputElement.querySelectorAll('.pasteContent_RTE');\n for (var i = 0; i < classElm.length; i++) {\n classElm[i].classList.remove('pasteContent_RTE');\n if (classElm[i].getAttribute('class') === '') {\n classElm[i].removeAttribute('class');\n }\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.addTempClass(clipBoardElem);\n this.parent.formatter.editorManager.execCommand('inserthtml', 'pasteCleanup', args, function (returnArgs) {\n extend(args, { elements: returnArgs.elements, imageElements: returnArgs.imgElem }, true);\n _this.parent.formatter.onSuccess(_this.parent, args);\n }, clipBoardElem);\n this.removeTempClass();\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' &&\n (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) {\n return pasteCleanupGroupingTags[key];\n });\n var addTags = [];\n for (var i = 0; i < groupingTags.length; i++) {\n //The value split using '[' because to retrieve 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 // eslint-disable-next-line\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 ?\n 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 * @returns {void}\n * @hidden\n */\n PasteCleanup.prototype.getModuleName = function () {\n return 'pasteCleanup';\n };\n return PasteCleanup;\n}());\nexport { PasteCleanup };\n","import { EventHandler, Browser, isNullOrUndefined, 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 this.parent.notify(events.resizeInitialized, {});\n var args = { 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 = { 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 if (!this.parent.toolbarSettings.enable) {\n this.parent.setContentHeight('', false);\n }\n this.parent.refreshUI();\n };\n Resize.prototype.stopResize = function (e) {\n this.parent.refreshUI();\n this.unwireResizeEvents();\n var args = { 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 * @returns {void}\n * @hidden\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}());\nexport { Resize };\n","import { Browser, detach, closest, isNullOrUndefined as isNOU, EventHandler } from '@syncfusion/ej2-base';\nimport { ContextMenu, DetailsView, FileManager as EJ2FileManager } from '@syncfusion/ej2-filemanager';\nimport { NavigationPane, Toolbar } from '@syncfusion/ej2-filemanager';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { dispatchEvent } from '../base/util';\n/**\n * `FileManager` module is used to display the directories and images inside the editor.\n */\nvar FileManager = /** @class */ (function () {\n function FileManager(parent, locator) {\n EJ2FileManager.Inject(ContextMenu, DetailsView, NavigationPane, Toolbar);\n this.parent = parent;\n this.i10n = locator.getService('rteLocale');\n this.dialogRenderObj = locator.getService('dialogRenderObject');\n this.rendererFactory = locator.getService('rendererFactory');\n this.addEventListener();\n }\n FileManager.prototype.initialize = function () {\n this.parent.fileManagerModule = this;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n };\n FileManager.prototype.render = function (e) {\n var _this = this;\n var dlgInsert;\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n dlgInsert = this.parent.localeObj.getConstant('dialogUpdate');\n }\n else {\n dlgInsert = this.i10n.getConstant('dialogInsert');\n }\n var dlgHeader = this.parent.localeObj.getConstant('fileDialogHeader');\n var dlgCancel = this.i10n.getConstant('dialogCancel');\n this.dlgButtons = [{\n click: this.insertImageUrl.bind(this),\n buttonModel: { content: dlgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n // eslint-disable-next-line\n click: function (e) {\n _this.cancelDialog();\n },\n buttonModel: { cssClass: 'e-flat e-cancel', content: dlgCancel }\n }];\n this.dlgButtons[0].buttonModel.disabled = true;\n this.selectObj = { selection: e.selection, args: e.args, selectParent: e.selectParent };\n var dlgTarget = this.parent.createElement('div', {\n className: 'e-rte-file-manager-dialog', id: this.parent.getID() + '_file-manager-dialog',\n attrs: { 'aria-owns': this.parent.getID() }\n });\n document.body.appendChild(dlgTarget);\n this.fileWrap = this.parent.createElement('div', {\n id: this.parent.getID() + '_rte-file-manager', className: 'e-img-file-wrap'\n });\n dlgTarget.appendChild(this.fileWrap);\n dlgTarget.appendChild(this.getInputUrlElement());\n var dialogModel = {\n visible: false,\n isModal: true, header: dlgHeader,\n target: document.body, locale: this.parent.locale,\n enableRtl: this.parent.enableRtl, cssClass: classes.CLS_RTE_ELEMENTS,\n animationSettings: { effect: 'None' },\n showCloseIcon: true, closeOnEscape: true, width: '720px', height: 'auto',\n position: { X: 'center', Y: 'center' },\n buttons: this.dlgButtons,\n created: this.renderFileManager.bind(this),\n close: function (e) {\n _this.parent.isBlur = false;\n if (e && e.event.returnValue) {\n _this.selectObj.selection.restore();\n }\n _this.destroyComponents();\n _this.dialogRenderObj.close(e);\n }\n };\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(dlgTarget);\n this.dialogObj.show(Browser.isDevice ? true : false);\n };\n FileManager.prototype.renderFileManager = function () {\n var _this = this;\n // eslint-disable-next-line\n var proxy = this;\n this.fileObj = new EJ2FileManager({\n allowMultiSelection: false,\n locale: this.parent.locale,\n enableRtl: this.parent.enableRtl,\n path: this.parent.fileManagerSettings.path,\n view: this.parent.fileManagerSettings.view,\n enablePersistence: this.parent.enablePersistence,\n cssClass: this.parent.fileManagerSettings.cssClass,\n sortOrder: this.parent.fileManagerSettings.sortOrder,\n ajaxSettings: this.parent.fileManagerSettings.ajaxSettings,\n showThumbnail: this.parent.fileManagerSettings.showThumbnail,\n rootAliasName: this.parent.fileManagerSettings.rootAliasName,\n uploadSettings: this.parent.fileManagerSettings.uploadSettings,\n searchSettings: this.parent.fileManagerSettings.searchSettings,\n toolbarSettings: this.parent.fileManagerSettings.toolbarSettings,\n showHiddenItems: this.parent.fileManagerSettings.showHiddenItems,\n allowDragAndDrop: this.parent.fileManagerSettings.allowDragAndDrop,\n showFileExtension: this.parent.fileManagerSettings.showFileExtension,\n detailsViewSettings: this.parent.fileManagerSettings.detailsViewSettings,\n contextMenuSettings: this.parent.fileManagerSettings.contextMenuSettings,\n navigationPaneSettings: this.parent.fileManagerSettings.navigationPaneSettings,\n fileSelect: function (e) {\n var selectedFile = e.fileDetails;\n if (selectedFile.isFile && proxy.parent.insertImageSettings.allowedTypes.indexOf(selectedFile.type) > -1) {\n proxy.inputUrl.value = proxy.parent.fileManagerSettings.ajaxSettings.getImageUrl + '?path=' +\n (selectedFile.filterPath && selectedFile.filterPath.replace(/\\\\/g, '/')) + selectedFile.name;\n _this.dlgButtons[0].buttonModel.disabled = false;\n }\n else {\n proxy.inputUrl.value = '';\n _this.dlgButtons[0].buttonModel.disabled = true;\n }\n _this.dialogObj.buttons = _this.dlgButtons;\n },\n created: function () {\n _this.inputUrl.removeAttribute('disabled');\n },\n success: function () {\n _this.fileObj.refreshLayout();\n }\n });\n if (Browser.isDevice) {\n this.fileObj.height = '85%';\n }\n this.fileObj.appendTo(this.fileWrap);\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n };\n FileManager.prototype.getInputUrlElement = function () {\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var urlLabel = this.parent.createElement('div', { className: 'e-rte-label' });\n urlLabel.innerHTML = '<label for=\"rteSample_img_url\">' + this.i10n.getConstant('linkWebUrl') + '</label>';\n imgUrl.appendChild(urlLabel);\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', disabled: 'true' }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n // eslint-disable-next-line\n FileManager.prototype.insertImageUrl = function (e) {\n var url = this.inputUrl.value;\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n if (url !== '') {\n if (this.parent.editorMode === 'HTML' &&\n isNOU(closest(this.selectObj.selection.range.startContainer.parentNode, '#' + this.contentModule.getPanel().id))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.selectObj.selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n this.selectObj.selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNOU(url.match(regex)) && this.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (this.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selectObj.selection, altText: matchUrl, selectParent: this.selectObj.selectParent,\n width: {\n width: this.parent.insertImageSettings.width, minWidth: this.parent.insertImageSettings.minWidth,\n maxWidth: this.parent.getInsertImgMaxWidth()\n },\n height: {\n height: this.parent.insertImageSettings.height, minHeight: this.parent.insertImageSettings.minHeight,\n maxHeight: this.parent.insertImageSettings.maxHeight\n }\n };\n this.parent.formatter.process(this.parent, this.selectObj.args, this.selectObj.args.originalEvent, value);\n this.dialogObj.hide({ returnValue: false });\n }\n };\n FileManager.prototype.cancelDialog = function () {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n };\n FileManager.prototype.onDocumentClick = function (e) {\n var target = e.target;\n var prevEle = target.nodeName !== '#document' && !isNOU(target.previousElementSibling) && target.previousElementSibling;\n if (!isNOU(this.dialogObj) &&\n (!closest(target, '#' + this.parent.getID() + '_file-manager-dialog') &&\n !closest(target, '#' + this.parent.getID() + '_rte-file-manager_tb_sortby-popup') &&\n !closest(target, '#' + this.parent.getID() + '_rte-file-manager_tb_view-popup') &&\n !closest(target, '#' + this.parent.getID() + '_rte-file-manager_contextmenu') &&\n (!(!isNOU(closest(target, '.e-contextmenu-wrapper')) &&\n closest(target, '.e-contextmenu-wrapper').querySelector('#' + this.parent.getID() + '_rte-file-manager_contextmenu'))) &&\n (!isNOU(prevEle) && !prevEle.classList.contains('e-rte-file-manager-dialog')) &&\n (!isNOU(prevEle) && prevEle.id !== this.parent.getID() + '_rte-file-manager_contextmenu'))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n else {\n this.parent.isRTE = true;\n }\n };\n FileManager.prototype.addEventListener = function () {\n this.parent.on(events.initialEnd, this.initialize, this);\n this.parent.on(events.renderFileManager, this.render, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FileManager.prototype.removeEventListener = function () {\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n this.parent.off(events.initialEnd, this.initialize);\n this.parent.off(events.renderFileManager, this.render);\n this.parent.off(events.destroy, this.destroy);\n };\n FileManager.prototype.destroyComponents = function () {\n if (this.fileObj) {\n this.fileObj.destroy();\n this.fileObj = null;\n }\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\n }\n };\n FileManager.prototype.destroy = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.destroyComponents();\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the string value\n * @hidden\n */\n FileManager.prototype.getModuleName = function () {\n return 'fileManager';\n };\n return FileManager;\n}());\nexport { FileManager };\n","import { Browser, isNullOrUndefined as isNOU } 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 *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.showFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\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 var evenArgs = {\n cancel: false,\n requestType: 'Maximize',\n targetItem: 'Maximize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\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 };\n /**\n * hideFullScreen method\n *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.hideFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n var evenArgs = {\n cancel: false,\n requestType: 'Minimize',\n targetItem: 'Minimize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\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.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 }\n };\n // eslint-disable-next-line\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNOU(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 *\n * @returns {void}\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 *\n * @hidden\n * @deprecated\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IRichTextEditor} parent - specifies the parent\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n Render.prototype.render = function () {\n // eslint-disable-next-line\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 *\n * @param {NotifyArgs} e - specifies the arguments.\n * @returns {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 *\n * @returns {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 // eslint-disable-next-line\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && childNodes[0].childNodes.length === 0 && ((childNodes[0].tagName === 'BR') ||\n ((childNodes[0].tagName === 'P' || childNodes[0].tagName === 'DIV') && childNodes[0].textContent === '')))) {\n var node = this.parent.contentModule.getEditPanel();\n if (this.parent.enterKey === 'DIV') {\n node.innerHTML = '<div><br/></div>';\n }\n else if (this.parent.enterKey === 'BR') {\n node.innerHTML = '<br/>';\n }\n else {\n node.innerHTML = '<p><br/></p>';\n }\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, 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.showLinkDialog, this.showDialog, this);\n this.parent.on(events.closeLinkDialog, this.closeDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, 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 this.parent.on(events.destroy, this.destroy, 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.showLinkDialog, this.showDialog);\n this.parent.off(events.closeLinkDialog, this.closeDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\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 this.parent.off(events.destroy, this.destroy);\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 (!isNullOrUndefined(e.args) && e.args.action !== 'enter' &&\n 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 this.openDialog(true, event);\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.openDialog = function (isInternal, event) {\n if (!isInternal) {\n this.parent.contentModule.getEditPanel().focus();\n }\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 ? event.args : {\n item: { command: 'Links', subCommand: 'CreateLink' },\n originalEvent: undefined\n },\n 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: event && event.args\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 };\n Link.prototype.showDialog = function () {\n this.openDialog(false);\n };\n Link.prototype.closeDialog = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.clearDialogObj = function () {\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\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 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', {\n className: 'e-rte-link-dialog', id: this.rteID + '_rtelink'\n });\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 var selectText = (this.parent.editorMode === 'HTML') ?\n e.selection.getRange(this.parent.contentModule.getDocument()).toString() : 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 = _this.dialogObj;\n _this.dialogRenderObj.close(args);\n _this.dialogObj = null;\n }\n };\n // eslint-disable-next-line\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(this.dialogObj)) {\n return;\n }\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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, '[id='\n // eslint-disable-next-line\n + \"'\" + 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 (!isNullOrUndefined(this.args) &&\n 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, (!isNullOrUndefined(this.args) &&\n this.args.originalEvent), value);\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n // eslint-disable-next-line\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 // eslint-disable-next-line\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) && ((\n // eslint-disable-next-line\n !closest(target, '[id=' + \"'\" + 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 EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {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 * @returns {void}\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { addClass, detach, EventHandler, isNullOrUndefined, select, Ajax, formatUnit } 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, TextBox } 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.isAllowedTypes = true;\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.showImageDialog, this.showDialog, this);\n this.parent.on(events.closeImageDialog, this.closeDialog, this);\n this.parent.on(events.windowResize, this.onWindowResize, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, 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.dynamicModule, 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.windowResize, this.onWindowResize);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.showImageDialog, this.showDialog);\n this.parent.off(events.closeImageDialog, this.closeDialog);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\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.dynamicModule, 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 EventHandler.remove(this.contentModule.getEditPanel(), 'cut', this.onCutHandler);\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 EventHandler.add(this.contentModule.getEditPanel(), 'cut', this.onCutHandler, 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 = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n /* eslint-disable */\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 /* eslint-enable */\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 this.prevSelectedImgEle = this.imgEle;\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 = { 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.onCutHandler = function () {\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\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 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 // eslint-disable-next-line\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: elem.offsetTop,\n left: elem.offsetLeft\n };\n };\n Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? img.style.width.match(/^\\d+(\\.\\d*)?%$/g) ? parseFloat(img.style.width) :\n 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 img.style.minWidth = '20px';\n if (this.parent.insertImageSettings.resizeByPercent) {\n if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {\n var percentageValue = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement));\n img.style.width = Math.min(Math.round((percentageValue / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';\n }\n else {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n }\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width === '' && img.style.height !== '') {\n img.style.height = expectedY + 'px';\n }\n else if (img.style.width !== '' && img.style.height === '') {\n img.style.width = ((width / height * expectedY) + width / height).toString() + 'px';\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) + width / height).toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {\n img.style.width = Math.min(Math.round((width / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';\n }\n else {\n img.style.width = this.pixToPerc((expectedX / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n }\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 }\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 = { 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.getInsertImgMaxWidth(), 10) <= parseInt(width, 10) &&\n isNOU(_this.imgEle.style.width)))) {\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 if (this.imgEle.offsetWidth >= this.parent.getInsertImgMaxWidth()) {\n this.imgEle.style.maxHeight = this.imgEle.offsetHeight + 'px';\n }\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 if (this.parent.fileManagerSettings.enable) {\n this.parent.notify(events.renderFileManager, args);\n }\n else {\n this.parent.notify(events.insertImage, args);\n }\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: e.selectParent[0].parentNode.href, target: target, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n if (Browser.isIE) {\n this.contentModule.getEditPanel().focus();\n }\n e.selection.restore();\n var isCapLink = (this.contentModule.getEditPanel().contains(this.captionEle) && select('a', this.captionEle)) ?\n true : false;\n var selectParent = isCapLink ? [this.captionEle] : [e.selectNode[0].parentElement];\n this.parent.formatter.process(this.parent, e.args, e.args, {\n insertElement: e.selectNode[0], selectParent: selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (isCapLink) {\n select('.e-img-inner', this.captionEle).focus();\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n this.deletedImg = [];\n var isCursor;\n var keyCodeValues = [27, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,\n 44, 45, 9, 16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 91, 92, 93, 144, 145, 182, 183];\n if (this.parent.editorMode === 'HTML') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n isCursor = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n }\n if (!isCursor && this.parent.editorMode === 'HTML' && keyCodeValues.indexOf(originalEvent.which) < 0) {\n var nodes = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName === 'IMG') {\n this.deletedImg.push(nodes[i]);\n }\n }\n }\n if (this.parent.editorMode === 'HTML' && ((originalEvent.which === 8 && originalEvent.code === 'Backspace') ||\n (originalEvent.which === 46 && originalEvent.code === 'Delete'))) {\n var isCursor_1 = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n if ((originalEvent.which === 8 && originalEvent.code === 'Backspace' && isCursor_1)) {\n this.checkImageBack(range);\n }\n else if ((originalEvent.which === 46 && originalEvent.code === 'Delete' && isCursor_1)) {\n this.checkImageDel(range);\n }\n }\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) &&\n originalEvent.code !== 'KeyK') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\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' && selectNodeEle.length < 1) {\n originalEvent.preventDefault();\n var event_1 = {\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle,\n args: {\n item: { command: 'Images', subCommand: 'Remove' },\n originalEvent: originalEvent\n }\n };\n this.deleteImg(event_1, originalEvent.keyCode);\n }\n if (this.parent.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\n }\n }\n if (originalEvent.code === 'Backspace') {\n originalEvent.action = 'backspace';\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'backspace':\n case 'delete':\n for (var i = 0; i < this.deletedImg.length; i++) {\n var src = this.deletedImg[i].src;\n this.imageRemovePost(src);\n }\n break;\n case 'insert-image':\n this.openDialog(true, originalEvent, save, selectNodeEle, selectParentEle);\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n if (!isInternal && !isNOU(this.parent.formatter.editorManager.nodeSelection)) {\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 }\n else {\n save = selection;\n selectNodeEle = ele;\n selectParentEle = parentEle;\n }\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: event\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: event\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 };\n Image.prototype.showDialog = function () {\n this.openDialog(false);\n };\n Image.prototype.closeDialog = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n // eslint-disable-next-line\n Image.prototype.onKeyUp = function (event) {\n if (!isNOU(this.deletedImg) && this.deletedImg.length > 0) {\n for (var i = 0; i < this.deletedImg.length; i++) {\n var args = {\n element: this.deletedImg[i],\n src: this.deletedImg[i].getAttribute('src')\n };\n this.parent.trigger(events.afterImageDelete, args);\n }\n }\n };\n Image.prototype.checkImageBack = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === 0 &&\n !isNOU(range.startContainer.previousSibling) && range.startContainer.previousSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.previousSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset - 1]) &&\n range.startContainer.childNodes[range.startOffset - 1].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset - 1]);\n }\n };\n Image.prototype.checkImageDel = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === range.startContainer.textContent.length &&\n !isNOU(range.startContainer.nextSibling) && range.startContainer.nextSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.nextSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset]) &&\n range.startContainer.childNodes[range.startOffset].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset]);\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.alignImage(args, 'JustifyLeft');\n break;\n case 'JustifyCenter':\n this.alignImage(args, 'JustifyCenter');\n break;\n case 'JustifyRight':\n this.alignImage(args, 'JustifyRight');\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 // eslint-disable-next-line\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) || isNullOrUndefined(e.args)) {\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 () {\n _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }, 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 // eslint-disable-next-line\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 // eslint-disable-next-line\n click: function (e) {\n _this.insertlink(linkargs_1);\n },\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n click: function (e) {\n _this.insertAlt(altArgs_1);\n },\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 if (captionEle) {\n select('.e-img-inner', captionEle).focus();\n }\n proxy.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n // eslint-disable-next-line\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e, keyCode) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var args = {\n element: e.selectNode[0],\n src: e.selectNode[0].getAttribute('src')\n };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\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 this.imageRemovePost(args.src);\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n this.cancelResizeAction();\n if (isNullOrUndefined(keyCode)) {\n this.parent.trigger(events.afterImageDelete, args);\n }\n };\n Image.prototype.imageRemovePost = function (src) {\n var removeUrl = this.parent.insertImageSettings.removeUrl;\n if (isNOU(removeUrl) || removeUrl === '') {\n return;\n }\n var ajax = new Ajax(removeUrl, 'POST', true, null);\n var formData = new FormData();\n formData.append(name, src);\n ajax.send(formData);\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', style: 'width:' + this.parent.insertImageSettings.width }\n });\n var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });\n var imgInner = this.parent.createElement('span', { className: 'e-img-inner',\n 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 // eslint-disable-next-line\n click: function (e) {\n _this.insertSize(selectObj_1);\n },\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.alignImage = function (e, type) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : type;\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.clearDialogObj = function () {\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\n }\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, disabled: true }\n },\n {\n click: function (e) {\n _this.cancelDialog(e);\n },\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 (isNullOrUndefined(this.dialogObj)) {\n return;\n }\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 // eslint-disable-next-line\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) && ((\n // eslint-disable-next-line\n !closest(target, '[id=' + \"'\" + 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 /* eslint-disable */\n if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {\n }\n else {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n /* eslint-enable */\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 (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n if (target.tagName !== 'IMG') {\n this.removeResizeEle();\n }\n if (target.tagName !== 'IMG' && !isNOU(this.imgEle)) {\n this.imgEle.style.outline = '';\n }\n else if (!isNOU(this.prevSelectedImgEle) && this.prevSelectedImgEle !== target) {\n this.prevSelectedImgEle.style.outline = '';\n }\n }\n };\n Image.prototype.removeResizeEle = 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.onWindowResize = function () {\n if (!isNOU(this.contentModule) && !isNOU(this.contentModule.getEditPanel().querySelector('.e-img-resize'))) {\n this.cancelResizeAction();\n }\n };\n // eslint-disable-next-line\n Image.prototype.imageUrlPopup = function (e) {\n var _this = this;\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 this.inputUrl.addEventListener('input', function () {\n if (!isNOU(_this.inputUrl)) {\n if (_this.inputUrl.value.length === 0) {\n _this.dialogObj.getButtons(0).element.disabled = true;\n }\n else {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n // eslint-disable-next-line\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.removeResizeEle();\n }\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(\n // eslint-disable-next-line\n this.selection.range.startContainer.parentNode, '[id=' + \"'\" + 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.getInsertImgMaxWidth()\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 _this = this;\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 = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||\n selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?\n this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();\n var heightVal = isNullOrUndefined(this.changedHeightValue) && (selectNode.style.height.toString() === 'auto' ||\n selectNode.style.height !== '') ? selectNode.style.height : !isNullOrUndefined(this.changedHeightValue) ?\n this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();\n this.changedWidthValue = null;\n this.changedHeightValue = null;\n var content = '<div class=\"e-rte-label\"><label>' + imgWidth +\n '</label></div><div class=\"e-rte-field\"><input type=\"text\" 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\" id=\"imgheight\" class=\"e-img-height\" value=' +\n heightVal\n + ' /></div>';\n var contentElem = parseHtml(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new TextBox({\n value: formatUnit(widthVal),\n enableRtl: this.parent.enableRtl,\n input: function (e) {\n _this.inputWidthValue = formatUnit(_this.inputValue(e.value));\n }\n });\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new TextBox({\n value: formatUnit(heightVal),\n enableRtl: this.parent.enableRtl,\n input: function (e) {\n _this.inputHeightValue = formatUnit(_this.inputValue(e.value));\n }\n });\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.inputValue = function (value) {\n if (value === 'auto' || value.indexOf('%') !== -1 || value.indexOf('px') !== -1\n || value.match(/(\\d+)/)) {\n return value;\n }\n else {\n return 'auto';\n }\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 this.changedWidthValue = this.inputWidthValue;\n this.changedHeightValue = this.inputHeightValue;\n var width = dialogEle.querySelector('.e-img-width').value;\n var height = 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 document.getElementById(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 // eslint-disable-next-line\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, '[id='\n // eslint-disable-next-line\n + \"'\" + this.parent.contentModule.getPanel().id + \"'\" + ']'))\n || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n var spanMsg = this.parent.createElement('span', {\n className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)\n });\n span.appendChild(spanMsg);\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.isStringTemplate = true;\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n var rawFile;\n var selectArgs;\n var filesData;\n var beforeUploadArgs;\n this.uploadObj = new Uploader({\n asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },\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 selectArgs = e;\n filesData = e.filesData;\n if (_this.parent.isServerRendered) {\n selectArgs = JSON.parse(JSON.stringify(e));\n e.cancel = true;\n rawFile = e.filesData;\n selectArgs.filesData = rawFile;\n }\n _this.parent.trigger(events.imageSelected, selectArgs, function (selectArgs) {\n if (!selectArgs.cancel) {\n _this.checkExtension(selectArgs.filesData[0]);\n altText = selectArgs.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n // eslint-disable-next-line\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.getInsertImgMaxWidth()\n }, height: {\n height: proxy.parent.insertImageSettings.height,\n minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n if (isNullOrUndefined(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes\n && !isNullOrUndefined(_this.dialogObj)) {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n });\n reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);\n }\n if (_this.parent.isServerRendered) {\n /* eslint-disable */\n _this.uploadObj._internalRenderSelect(selectArgs, rawFile);\n /* eslint-enable */\n }\n }\n });\n },\n beforeUpload: function (args) {\n if (_this.parent.isServerRendered) {\n beforeUploadArgs = JSON.parse(JSON.stringify(args));\n beforeUploadArgs.filesData = filesData;\n args.cancel = true;\n _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {\n if (beforeUploadArgs.cancel) {\n return;\n }\n /* eslint-disable */\n _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?\n beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;\n _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?\n beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;\n _this.uploadObj.uploadFiles(rawFile, null);\n /* eslint-enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n }\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n _this.parent.trigger(events.imageUploading, e);\n }\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 // eslint-disable-next-line\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.getInsertImgMaxWidth()\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 if (e.operation === 'upload' && !isNullOrUndefined(_this.dialogObj)) {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n });\n },\n failure: function (e) {\n _this.parent.trigger(events.imageUploadFailed, e);\n },\n removing: function () {\n // eslint-disable-next-line\n _this.parent.trigger(events.imageRemoving, e, function (e) {\n proxy.isImgUploaded = false;\n _this.dialogObj.getButtons(0).element.disabled = true;\n proxy.inputUrl.removeAttribute('disabled');\n if (proxy.uploadUrl) {\n proxy.uploadUrl.url = '';\n }\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 this.isAllowedTypes = false;\n }\n else {\n this.isAllowedTypes = true;\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 Image.prototype.dragEnter = function (e) {\n e.dataTransfer.dropEffect = 'copy';\n e.preventDefault();\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 * Used to set range When drop an image\n *\n * @param {ImageDropEventArgs} args - specifies the image arguments.\n * @returns {void}\n */\n Image.prototype.dragDrop = function (args) {\n var _this = this;\n this.parent.trigger(events.beforeImageDrop, args, function (e) {\n var imgElement = _this.parent.inputElement.ownerDocument.querySelector('.' + classes.CLS_RTE_DRAG_IMAGE);\n var isImgOrFileDrop = (imgElement && imgElement.tagName === 'IMG') || e.dataTransfer.files.length > 0;\n if (!e.cancel && isImgOrFileDrop) {\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 if (isImgOrFileDrop) {\n e.preventDefault();\n }\n }\n });\n };\n /**\n * Used to calculate range on internet explorer\n *\n * @param {number} x - specifies the x range.\n * @param {number} y - specifies the y range.\n * @returns {void}\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 var _this = this;\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 var imgArgs_1 = { elements: [imgElement] };\n imgElement.addEventListener('load', function () {\n _this.parent.trigger(events.actionComplete, imgArgs_1);\n });\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 _this = this;\n // eslint-disable-next-line\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 var e = { elements: [imageTag] };\n imageTag.addEventListener('load', function () {\n _this.parent.trigger(events.actionComplete, e);\n });\n };\n /**\n * Rendering uploader and popup for drag and drop\n *\n * @param {DragEvent} dragEvent - specifies the event.\n * @param {HTMLImageElement} imageElement - specifies the element.\n * @returns {void}\n */\n Image.prototype.uploadMethod = function (dragEvent, imageElement) {\n var _this = this;\n var isUploading = false;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var timeOut = dragEvent.dataTransfer.files[0].size > 1000000 ? 300 : 100;\n setTimeout(function () {\n proxy.refreshPopup(imageElement);\n }, timeOut);\n var rawFile;\n var beforeUploadArgs;\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n removeUrl: this.parent.insertImageSettings.removeUrl\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 beforeUpload: function (args) {\n if (_this.parent.isServerRendered) {\n beforeUploadArgs = JSON.parse(JSON.stringify(args));\n beforeUploadArgs.filesData = rawFile;\n isUploading = true;\n args.cancel = true;\n _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {\n if (beforeUploadArgs.cancel) {\n return;\n }\n /* eslint-disable */\n _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?\n beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;\n _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?\n beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;\n _this.uploadObj.uploadFiles(rawFile, null);\n _this.parent.inputElement.contentEditable = 'false';\n /* eslint-enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n }\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n isUploading = true;\n _this.parent.trigger(events.imageUploading, e, function (imageUploadingArgs) {\n if (imageUploadingArgs.cancel) {\n if (!isNullOrUndefined(imageElement)) {\n detach(imageElement);\n }\n if (!isNullOrUndefined(_this.popupObj.element)) {\n detach(_this.popupObj.element);\n }\n }\n else {\n _this.parent.inputElement.contentEditable = 'false';\n }\n });\n }\n },\n selected: function (e) {\n if (isUploading) {\n e.cancel = true;\n }\n if (_this.parent.isServerRendered) {\n rawFile = e.filesData;\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 () {\n _this.uploadFailure(imageElement, args, e);\n }, 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 () {\n _this.uploadSuccess(imageElement, dragEvent, args, e);\n }, 900);\n }\n });\n this.uploadObj.appendTo(this.popupObj.element.childNodes[0]);\n this.popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap').style.display = 'none';\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 * @param {HTMLElement} imgEle - specifies the image element.\n * @param {IShowPopupArgs} args - specifies the arguments.\n * @param {Object} e - specfies the object.\n * @returns {void}\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 * @param {HTMLElement} imageElement - specifies the image element.\n * @param {DragEvent} dragEvent - specifies the drag event.\n * @param {IShowPopupArgs} args - specifies the arguments.\n * @param {ImageSuccessEventArgs} e - specifies the success event.\n * @returns {void}\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 e.element = imageElement;\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 if (this.popupObj) {\n this.popupObj.close();\n this.uploadObj.destroy();\n }\n this.showImageQuickToolbar(args);\n this.resizeStart(dragEvent, imageElement);\n };\n Image.prototype.imagePaste = function (args) {\n var _this = this;\n if (args.text.length === 0 && !isNullOrUndefined(args.file)) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var reader_2 = new FileReader();\n args.args.preventDefault();\n // eslint-disable-next-line\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.getInsertImgMaxWidth()\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 () {\n _this.showImageQuickToolbar(args);\n _this.resizeStart(e.args, imageElement);\n }, 0);\n }\n };\n /* eslint-disable */\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n * @hidden\n * @deprecated\n */\n /* eslint-enable */\n Image.prototype.destroy = function () {\n this.prevSelectedImgEle = undefined;\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\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 *\n * @hidden\n * @deprecated\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\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 this.parent.on(events.destroy, this.destroy, 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.off(events.destroy, this.destroy);\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 *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\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 this.getPanel().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.e-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 *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\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;\n if (serializeValue === null || serializeValue === '') {\n if (this.parent.enterKey === 'DIV') {\n value = '<div><br/></div>';\n }\n else if (this.parent.enterKey === 'BR') {\n value = '<br/>';\n }\n else {\n value = '<p><br/></p>';\n }\n }\n else {\n value = serializeValue;\n }\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n editHTML.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.e-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 === '<div><br></div>') ||\n (this.contentModule.getEditPanel().innerHTML === '<br>') ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 7) ||\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'DIV' &&\n this.contentModule.getEditPanel().innerHTML.length === 11)) ? '' : this.parent.value;\n };\n /**\n * getPanel method\n *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.getPanel = function () {\n return this.parent.element && this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * getViewPanel method\n *\n * @returns {void}\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 *\n * @returns {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 } 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.dynamicModule, this.afterRender, this);\n this.parent.on(events.showTableDialog, this.showDialog, this);\n this.parent.on(events.closeTableDialog, this.closeDialog, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, 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 this.parent.on(events.mouseUp, this.selectionTable, this);\n this.parent.on(events.destroy, this.destroy, 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.dynamicModule, this.afterRender);\n this.parent.off(events.docClick, this.docClick);\n this.parent.off(events.showTableDialog, this.showDialog);\n this.parent.off(events.closeTableDialog, this.closeDialog);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\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 this.parent.off(events.mouseUp, this.selectionTable);\n this.parent.off(events.destroy, this.destroy);\n };\n Table.prototype.selectionTable = function (e) {\n var target = e.args.target;\n if (Browser.info.name === 'mozilla' && !isNOU(closest(target, 'table')) && closest(target, 'table').tagName === 'TABLE') {\n this.parent.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n };\n Table.prototype.afterRender = function () {\n if (isNullOrUndefined(this.contentModule)) {\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 };\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 case 'Custom':\n this.tableStyles(args, item.subCommand);\n break;\n case 'Merge':\n case 'VerticalSplit':\n case 'HorizontalSplit':\n this.UpdateCells(args.selection, e);\n break;\n }\n };\n Table.prototype.UpdateCells = 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.keyDown = function (e) {\n var event = e.args;\n // eslint-disable-next-line\n var proxy = this;\n switch (event.action) {\n case 'escape':\n break;\n case 'insert-table':\n this.openDialog(true, e);\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.\n nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46) ||\n (event.ctrlKey && event.keyCode === 88)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.removeResizeElement();\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.openDialog = function (isInternal, e) {\n if (!isInternal) {\n this.parent.contentModule.getEditPanel().focus();\n }\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 ? e.args : { action: 'insert-table' },\n item: {\n command: 'Table',\n subCommand: 'CreateTable'\n }\n };\n this.insertTableDialog({ self: this, args: args, selection: selection });\n }\n };\n Table.prototype.showDialog = function () {\n this.openDialog(false);\n };\n Table.prototype.closeDialog = function () {\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\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 /* eslint-disable */\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 /* eslint-enable */\n }\n if (args.args && args.args.item.cssClass) {\n var classList = args.args.item.cssClass.split(' ');\n for (var i = 0; i < classList.length; i++) {\n if (table.classList.contains(classList[i])) {\n table.classList.remove(classList[i]);\n }\n else {\n table.classList.add(classList[i]);\n }\n }\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 // eslint-disable-next-line\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 ele.classList.add(classes.CLS_TABLE_SEL);\n this.addRow(selection, event, true);\n ele.classList.remove(classes.CLS_TABLE_SEL);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n // eslint-disable-next-line\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 // eslint-disable-next-line\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').nextElementSibling)) ?\n closest(ele, 'tr').nextElementSibling.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').previousElementSibling)) ?\n closest(ele, 'tr').previousElementSibling.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 // eslint-disable-next-line\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n // eslint-disable-next-line\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n for (var i = 0; i < selectedCells.length; i++) {\n selectedCells[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\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 || !isNOU(closest(e.args.target, '.e-img-caption'))) {\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 // eslint-disable-next-line\n Table.prototype.tableMouseUp = function (e) {\n EventHandler.remove(this.curTable, 'mousemove', this.tableMove);\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\n (!proxy.parent.iframeSettings.enable && isNOU(closest(parentNode, '[id=' + \"'\" + 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 rows: 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.activeCell = target;\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n EventHandler.add(this.curTable, 'mousemove', this.tableMove, this);\n EventHandler.add(this.curTable, 'mouseup', this.tableMouseUp, this);\n this.removeResizeElement();\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n }\n if (Browser.info.name === 'mozilla' && !isNOU(closest(target, 'table')) &&\n closest(target, 'table').tagName === 'TABLE') {\n this.parent.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n }\n };\n Table.prototype.tableMove = function (event) {\n this.parent.formatter.editorManager.observer.notify('TABLE_MOVE', { event: event, selectNode: [this.activeCell] });\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 (!isNOU(this.curTable) && !isNOU(closestTable) && closestTable !== this.curTable) {\n this.removeResizeElement();\n this.removeHelper(e);\n this.cancelResizeAction();\n }\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.removeResizeElement();\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[this.calMaxCol(table)].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.removeResizeElement = function () {\n var item = this.parent.contentModule.getEditPanel().\n querySelectorAll('.e-column-resize, .e-row-resize, .e-table-box');\n if (item.length > 0) {\n for (var i = 0; i < item.length; i++) {\n detach(item[i]);\n }\n }\n };\n Table.prototype.calcPos = function (elem) {\n var parentOffset = {\n top: 0,\n left: 0\n };\n // eslint-disable-next-line\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-rte-content');\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n // eslint-disable-next-line\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: elem.offsetTop,\n left: elem.offsetLeft\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[this.calMaxCol(this.curTable)].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 = { 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.calMaxCol = function (element) {\n var max = 0;\n var maxRowIndex;\n for (var i = 0; i < element.rows.length; i++) {\n if (max < element.rows[i].cells.length) {\n maxRowIndex = i;\n max = element.rows[i].cells.length;\n }\n }\n return maxRowIndex;\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 = { 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[_this.calMaxCol(_this.curTable)].cells;\n var width = parseFloat(_this.columnEle.offsetWidth.toString());\n var actualwid = width - mouseX;\n var totalwid = parseFloat(_this.columnEle.offsetWidth.toString()) +\n parseFloat(cellColl[_this.colIndex - 1].offsetWidth.toString());\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 if (!isNOU(_this.curTable.rows[i].cells[_this.colIndex - 1])) {\n _this.curTable.rows[i].cells[_this.colIndex - 1].style.width =\n _this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';\n }\n if (!isNOU(_this.curTable.rows[i].cells[_this.colIndex])) {\n _this.curTable.rows[i].cells[_this.colIndex].style.width =\n _this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';\n }\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 if (!isNOU(tableReBox)) {\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 _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.removeResizeElement();\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.removeResizeElement();\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 = { 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.removeResizeElement();\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 // eslint-disable-next-line\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 // eslint-disable-next-line\n if (target && target.classList && ((this.popupObj && !closest(target, '[id=' + \"'\" + 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.removeResizeElement();\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) {\n _this.cancelDialog(e);\n },\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 if (isNullOrUndefined(proxy.editdlgObj)) {\n return;\n }\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) {\n proxy.cancelDialog(e);\n },\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.clearDialogObj = function () {\n if (this.editdlgObj) {\n this.editdlgObj.destroy();\n detach(this.editdlgObj.element);\n this.editdlgObj = null;\n }\n };\n // eslint-disable-next-line\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', {\n className: 'e-rte-edit-table', id: this.rteID + '_tabledialog'\n });\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) {\n _this.cancelDialog(e);\n },\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 // eslint-disable-next-line\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 *\n * @function destroy\n * @returns {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 * @returns {void}\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 *\n * @param {DialogModel} e - specifies the dialog model.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n DialogRenderer.prototype.render = function (e) {\n var dlgObj;\n e.beforeOpen = this.beforeOpen.bind(this);\n e.open = this.open.bind(this);\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\n e.beforeClose = this.beforeClose.bind(this);\n // eslint-disable-next-line\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, this.beforeOpenCallback.bind(this, args));\n };\n DialogRenderer.prototype.beforeOpenCallback = function (args) {\n if (args.cancel) {\n this.parent.notify(events.clearDialogObj, null);\n }\n };\n DialogRenderer.prototype.open = function (args) {\n this.parent.trigger(events.dialogOpen, args);\n };\n DialogRenderer.prototype.beforeClose = function (args) {\n this.parent.trigger(events.beforeDialogClose, args, function (closeArgs) {\n if (!closeArgs.cancel) {\n if (closeArgs.container.classList.contains('e-popup-close')) {\n closeArgs.cancel = true;\n }\n }\n });\n };\n /**\n * dialog close method\n *\n * @param {Object} args - specifies the arguments.\n * @returns {void}\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, Complex } from '@syncfusion/ej2-base';\nimport { AjaxSettings, ContextMenuSettings } from '@syncfusion/ej2-filemanager';\nimport { DetailsViewSettings, NavigationPaneSettings } from '@syncfusion/ej2-filemanager';\nimport { SearchSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarSettings as FileToolbarSettings } from '@syncfusion/ej2-filemanager';\nimport { UploadSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarType } from '../base/enum';\nimport { backgroundColor, fontColor, fontFamily, fontSize, formatItems, predefinedItems, TableStyleItems, numberFormatList, bulletFormatList } from './items';\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(null)\n ], ImageSettings.prototype, \"removeUrl\", 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 };\n/**\n * Configures the file manager settings of the RichTextEditor.\n */\nvar FileManagerSettings = /** @class */ (function (_super) {\n __extends(FileManagerSettings, _super);\n function FileManagerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ getImageUrl: null, url: null, uploadUrl: null }, AjaxSettings)\n ], FileManagerSettings.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Complex({ visible: true, file: ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Rename', '|', 'Details'], folder: ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', '|', 'Details'], layout: ['SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'] }, ContextMenuSettings)\n ], FileManagerSettings.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManagerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManagerSettings.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ maxWidth: '650px', minWidth: '240px', visible: true }, NavigationPaneSettings)\n ], FileManagerSettings.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManagerSettings.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManagerSettings.prototype, \"rootAliasName\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManagerSettings.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManagerSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Complex({ visible: true, items: ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename', 'SortBy', 'Refresh', 'Selection', 'View', 'Details'] }, FileToolbarSettings)\n ], FileManagerSettings.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({ autoUpload: true, minFileSize: 0, maxFileSize: 30000000, allowedExtensions: '', autoClose: false }, UploadSettings)\n ], FileManagerSettings.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManagerSettings.prototype, \"view\", void 0);\n return FileManagerSettings;\n}(ChildProperty));\nexport { FileManagerSettings };\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/**\n * Configures the numberFormatList settings of the RichTextEditor.\n */\nvar NumberFormatList = /** @class */ (function (_super) {\n __extends(NumberFormatList, _super);\n function NumberFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(numberFormatList)\n ], NumberFormatList.prototype, \"types\", void 0);\n return NumberFormatList;\n}(ChildProperty));\nexport { NumberFormatList };\n/**\n * Configures the bulletFormatList settings of the RichTextEditor.\n */\nvar BulletFormatList = /** @class */ (function (_super) {\n __extends(BulletFormatList, _super);\n function BulletFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(bulletFormatList)\n ], BulletFormatList.prototype, \"types\", void 0);\n return BulletFormatList;\n}(ChildProperty));\nexport { BulletFormatList };\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","import { isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `EnterKey` module is used to handle enter key press actions.\n */\nvar EnterKeyAction = /** @class */ (function () {\n function EnterKeyAction(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n EnterKeyAction.prototype.addEventListener = function () {\n this.parent.on(events.enterHandler, this.enterHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n EnterKeyAction.prototype.destroy = function () {\n this.removeEventListener();\n };\n EnterKeyAction.prototype.removeEventListener = function () {\n this.parent.off(events.enterHandler, this.enterHandler);\n this.parent.off(events.destroy, this.destroy);\n };\n EnterKeyAction.prototype.getRangeNode = function () {\n this.range = this.parent.getRange();\n this.startNode = this.range.startContainer.nodeName === '#text' ? this.range.startContainer.parentElement :\n this.range.startContainer;\n this.endNode = this.range.endContainer.nodeName === '#text' ? this.range.endContainer.parentElement :\n this.range.endContainer;\n };\n EnterKeyAction.prototype.enterHandler = function (e) {\n var _this = this;\n this.getRangeNode();\n if (e.args.which === 13 && e.args.code === 'Enter') {\n if (isNOU(this.startNode.closest('LI')) && isNOU(this.endNode.closest('LI')) && isNOU(this.startNode.closest('TABLE')) &&\n isNOU(this.endNode.closest('TABLE')) && isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE'))) {\n var shiftKey_1 = e.args.shiftKey;\n var actionBeginArgs = {\n cancel: false,\n name: events.actionBegin,\n requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction',\n originalEvent: e.args\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {\n _this.range.deleteContents();\n if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&\n _this.range.startContainer.parentElement !== _this.parent.inputElement) {\n if (_this.parent.enterKey === 'BR') {\n _this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n _this.range.startContainer.parentElement.innerHTML = '<br>';\n }\n }\n else if (_this.range.startContainer === _this.parent.inputElement && _this.range.startContainer.innerHTML === '') {\n _this.range.startContainer.innerHTML = '<br>';\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);\n }\n else if (_this.parent.inputElement === _this.range.startContainer) {\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.previousSibling.textContent.length);\n }\n else {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);\n if (focusElem.previousSibling.textContent.length === 0) {\n detach(focusElem.previousSibling);\n }\n else if (focusElem.textContent.length === 0) {\n var currentFocusElem = focusElem.previousSibling.lastChild;\n while (currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);\n detach(focusElem);\n }\n else if (_this.parent.enterKey !== 'BR' &&\n focusElem.previousSibling.textContent.length !== 0 && focusElem.textContent.length !== 0) {\n e.args.preventDefault();\n return;\n }\n }\n _this.getRangeNode();\n }\n }\n if (_this.range.startContainer === _this.range.endContainer &&\n _this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);\n _this.getRangeNode();\n }\n if (_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV' ||\n (_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||\n (_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {\n var nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);\n var isImageNode = false;\n if (_this.range.startOffset === 0 && _this.range.endOffset === 0 && !(!isNOU(_this.range.startContainer.previousSibling) && _this.range.startContainer.previousSibling.nodeName === 'IMG')) {\n var isNearBlockLengthZero = void 0;\n var newElem = void 0;\n if (_this.range.startContainer.nodeName === 'IMG') {\n newElem = _this.createInsertElement(shiftKey_1);\n isImageNode = true;\n isNearBlockLengthZero = false;\n }\n else {\n if (nearBlockNode.textContent.length !== 0) {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n isNearBlockLengthZero = false;\n }\n else {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);\n isNearBlockLengthZero = true;\n }\n }\n var insertElem = _this.createInsertElement(shiftKey_1);\n while (newElem.firstChild) {\n insertElem.appendChild(newElem.firstChild);\n }\n nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);\n if (!isNearBlockLengthZero) {\n var currentFocusElem = insertElem;\n var finalFocusElem = void 0;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n finalFocusElem = currentFocusElem;\n currentFocusElem = currentFocusElem.lastChild;\n }\n finalFocusElem.innerHTML = '<br>';\n if (!isImageNode) {\n detach(nearBlockNode);\n }\n }\n }\n else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {\n if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);\n }\n else {\n var insertElem = _this.createInsertElement(shiftKey_1);\n insertElem.innerHTML = '<br>';\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);\n }\n }\n else {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);\n if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&\n newElem.childNodes[0].textContent.length === 0) {\n detach(newElem.childNodes[0]);\n }\n if (newElem.textContent.trim().length === 0) {\n var brElm = _this.parent.createElement('br');\n _this.startNode.appendChild(brElm);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);\n }\n if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||\n _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {\n var insertElm = _this.createInsertElement(shiftKey_1);\n while (newElem.firstChild) {\n insertElm.appendChild(newElem.firstChild);\n }\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);\n detach(newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode) ? insertElm : _this.startNode, 0);\n }\n }\n e.args.preventDefault();\n }\n if (_this.parent.enterKey === 'BR' && !shiftKey_1) {\n var currentParent = void 0;\n if (!_this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {\n var currentNode = _this.startNode;\n var previousNode = currentNode;\n while (!_this.parent.formatter.editorManager.domNode.isBlockNode(currentNode)) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n currentParent = currentNode === _this.parent.inputElement ?\n previousNode : currentNode;\n }\n else {\n currentParent = _this.startNode;\n }\n var isEmptyBrInserted = false;\n if (currentParent !== _this.parent.inputElement &&\n _this.parent.formatter.editorManager.domNode.isBlockNode(currentParent) &&\n _this.range.startOffset === _this.range.endOffset &&\n _this.range.startOffset === currentParent.textContent.length) {\n var outerBRElem = _this.parent.createElement('br');\n _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), outerBRElem, 0);\n }\n else if (!isNOU(currentParent) && currentParent !== _this.parent.inputElement && currentParent.nodeName !== 'BR') {\n if (currentParent.textContent.trim().length === 0 || (currentParent.textContent.trim().length === 1 &&\n currentParent.textContent.charCodeAt(0) === 8203)) {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, currentParent);\n var outerBRElem = _this.parent.createElement('br');\n newElem.parentElement.insertBefore(outerBRElem, newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);\n }\n else {\n var newElem = void 0;\n var outerBRElem = _this.parent.createElement('br');\n if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&\n !isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR') {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);\n _this.insertFocusContent();\n var currentFocusElem = outerBRElem.nextSibling;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, 0);\n isEmptyBrInserted = true;\n }\n else {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true);\n newElem.parentElement.insertBefore(outerBRElem, newElem);\n _this.insertFocusContent();\n }\n }\n }\n else {\n var brElm = _this.parent.createElement('br');\n if (_this.startNode.nodeName === 'BR' && _this.endNode.nodeName === 'BR' && _this.range.startOffset === 0 && _this.range.startOffset === _this.range.endOffset) {\n _this.parent.formatter.editorManager.domNode.insertAfter(brElm, _this.startNode);\n isEmptyBrInserted = true;\n }\n else {\n if (_this.startNode === _this.parent.inputElement && !isNOU(_this.range.startContainer.previousSibling) &&\n _this.range.startContainer.previousSibling.nodeName === 'BR' && _this.range.startContainer.textContent.length === 0) {\n isEmptyBrInserted = true;\n }\n _this.range.insertNode(brElm);\n }\n if (isEmptyBrInserted || (!isNOU(brElm.nextElementSibling) && brElm.nextElementSibling.tagName === 'BR') || (!isNOU(brElm.nextSibling) && brElm.nextSibling.textContent.length > 0)) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) ? brElm.nextSibling : brElm, 0);\n isEmptyBrInserted = false;\n }\n else {\n var brElm2 = _this.parent.createElement('br');\n _this.range.insertNode(brElm2);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), brElm, 0);\n }\n }\n e.args.preventDefault();\n }\n _this.parent.trigger(events.actionComplete, { requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction', args: e.args });\n }\n });\n }\n }\n };\n EnterKeyAction.prototype.insertFocusContent = function () {\n if (this.range.startContainer.textContent.length === 0) {\n if (this.range.startContainer.nodeName === '#text') {\n this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n this.range.startContainer.innerHTML = '​';\n }\n }\n };\n EnterKeyAction.prototype.createInsertElement = function (shiftKey) {\n var insertElem;\n if ((this.parent.enterKey === 'DIV' && !shiftKey) || (this.parent.shiftEnterKey === 'DIV' && shiftKey)) {\n insertElem = this.parent.createElement('div');\n }\n else if ((this.parent.enterKey === 'P' && !shiftKey) || (this.parent.shiftEnterKey === 'P' && shiftKey)) {\n insertElem = this.parent.createElement('p');\n }\n return insertElem;\n };\n return EnterKeyAction;\n}());\nexport { EnterKeyAction };\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 } 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, DialogType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format, NumberFormatList, BulletFormatList } from '../models/toolbar-settings';\nimport { FileManagerSettings } 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 { EnterKeyAction } from '../actions/enter-key';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent, getEditValue, isIDevice, decode, isEditableValueEmpty, getDefaultValue } 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 _this.isResizeInitialized = false;\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 *\n * @returns {ModuleDeclaration[]} - specifies the declaration.\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.fileManagerSettings.enable) {\n modules.push({ member: 'fileManager', 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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n // eslint-disable-next-line\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @returns {void}\n * @hidden\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 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 this.element.innerHTML = '';\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 this.element.innerHTML = '';\n this.element.parentElement.insertBefore(rteOuterWrapper, this.element);\n this.valueContainer = this.element;\n removeClass([this.valueContainer], this.element.getAttribute('class').split(' '));\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 *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n *\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 *\n * @returns {void}\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 *\n * @returns {void}\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 *\n * @returns {void}\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 * @param {ExecuteCommandOption} option - specifies the command option\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 this.notify(events.contentChanged, {});\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 }\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 }\n return value;\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n // eslint-disable-next-line\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @returns {void}\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 // eslint-disable-next-line\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\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 this.valueContainer.defaultValue = this.value;\n }\n // eslint-disable-next-line\n (!this.enabled) ? this.unWireEvents() : this.eventInitializer();\n this.renderComplete();\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void}\n * @private\n * @deprecated\n * @hidden\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n *\n * @param {KeyboardEvent} e - specifies the event.\n * @returns {void}\n * @private\n * @deprecated\n * @hidden\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n this.restrict(e);\n if (this.editorMode === 'HTML' && ((e.which === 8 && e.code === 'Backspace') || (e.which === 46 && e.code === 'Delete'))) {\n var range = this.getRange();\n var startNode = range.startContainer.nodeName === '#text' ? range.startContainer.parentElement :\n range.startContainer;\n if (closest(startNode, 'pre') &&\n (e.which === 8 && range.startContainer.textContent.charCodeAt(range.startOffset - 1) === 8203) ||\n (e.which === 46 && range.startContainer.textContent.charCodeAt(range.startOffset) === 8203)) {\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer = e.which === 8 ? range.startOffset - 1 : range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, pointer);\n }\n else if ((e.code === 'Backspace' && e.which === 8) &&\n range.startContainer.textContent.charCodeAt(0) === 8203 && range.collapsed) {\n var parentEle = range.startContainer.parentElement;\n var index = void 0;\n var i = void 0;\n for (i = 0; i < parentEle.childNodes.length; i++) {\n if (parentEle.childNodes[i] === range.startContainer) {\n index = i;\n }\n }\n var bool = true;\n var removeNodeArray = [];\n for (i = index; i >= 0; i--) {\n if (parentEle.childNodes[i].nodeType === 3 && parentEle.childNodes[i].textContent.charCodeAt(0) === 8203 && bool) {\n removeNodeArray.push(i);\n }\n else {\n bool = false;\n }\n }\n if (removeNodeArray.length > 0) {\n for (i = removeNodeArray.length - 1; i > 0; i--) {\n parentEle.childNodes[removeNodeArray[i]].textContent = '';\n }\n }\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, range.startOffset);\n }\n }\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action !== 'insert-link' &&\n (e.action && e.action !== 'paste' && e.action !== 'space'\n || e.which === 9 || (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 // eslint-disable-next-line\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 if ((!isNOU(this.placeHolderWrapper)) && (this.inputElement.textContent.length !== 1)) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.setPlaceHolder();\n }\n }\n this.autoResize();\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n if (e.code === 'KeyX' && e.which === 88 && e.keyCode === 88 && e.ctrlKey && (this.inputElement.innerHTML === '' ||\n this.inputElement.innerHTML === '<br>')) {\n this.inputElement.innerHTML = getEditValue(getDefaultValue(this), this);\n }\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0\n || this.element.querySelectorAll('.e-toolbar-item.e-active').length > 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n if (!(e.key === 'Enter' && e.keyCode === 13) && (this.inputElement.innerHTML === '<p><br></p>' || this.inputElement.innerHTML === '<div><br></div>' ||\n this.inputElement.innerHTML === '<br>')) {\n this.setPlaceHolder();\n }\n }\n };\n /**\n * @param {string} value - specifies the value.\n * @returns {void}\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 *\n * @param {string} value - Specifies the value that you want to sanitize.\n * @returns {string} - specifies the the string value\n */\n RichTextEditor.prototype.sanitizeHtml = function (value) {\n return this.serializeValue(value);\n };\n /**\n * updateValue method\n *\n * @param {string} value - specifies the string value.\n * @returns {void}\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 if (e.detail === 3) {\n var range = this.getRange();\n var selection = this.formatter.editorManager.domNode.getSelection();\n if (/\\s+$/.test(selection.toString())) {\n if (!isNOU(range.startContainer.parentElement) && (!isNOU(range.startContainer.parentElement.nextSibling) &&\n (range.startContainer.parentElement.nextSibling.nodeType !== 3 ||\n /\\s+$/.test(range.startContainer.parentElement.nextSibling.textContent)) || range.startOffset === range.endOffset)\n || range.startContainer.parentElement.tagName.toLocaleLowerCase() === 'li') {\n range.setStart(range.startContainer, range.startOffset);\n range.setEnd(range.startContainer, range.startContainer.textContent.length);\n }\n }\n }\n };\n /**\n * @param {Function} module - specifies the module function.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n /**\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n /**\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\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().trim().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 (_this.editorMode === 'Markdown') {\n if (!(_this.maxLength === -1 || totalLength <= _this.maxLength)) {\n e.preventDefault();\n }\n return;\n }\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 var htmlValue = false;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n htmlValue = e.clipboardData.getData('text/html').indexOf('MsoNormal') > 0;\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 isWordPaste: htmlValue\n });\n }\n setTimeout(function () {\n _this.formatter.onSuccess(_this, args_1);\n }, 0);\n }\n }\n else {\n e.preventDefault();\n }\n });\n };\n /**\n * @param {string} action - specifies the string value.\n * @param {MouseEvent} event - specifies the event.\n * @returns {void}\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 *\n * @returns {void}\n */\n RichTextEditor.prototype.destroy = function () {\n if (this.isDestroyed || !this.isRendered) {\n return;\n }\n if (this.element.offsetParent === null && !isNOU(this.toolbarModule)) {\n this.toolbarModule.destroy();\n return;\n }\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 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 this.valueContainer.value = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.valueContainer.value = this.valueContainer.defaultValue;\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 var allClassName = this.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n removeClass([this.element], allClassName[i]);\n }\n }\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n this.isRendered = false;\n if (this.enablePersistence) {\n window.localStorage.removeItem(this.getModuleName() + this.element.id);\n }\n };\n 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 *\n * @returns {Element} - specifies the element.\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n *\n * @returns {string} - specifies the string value.\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 *\n * @returns {string} - specifies the string value.\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 * It shows the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.showInlineToolbar = function () {\n if (this.inlineMode.enable) {\n var currentRange = this.getRange();\n var targetElm = currentRange.endContainer.nodeName === '#text' ?\n currentRange.endContainer.parentElement : currentRange.endContainer;\n var x = currentRange.getClientRects()[0].left;\n var y = currentRange.getClientRects()[0].top;\n this.quickToolbarModule.showInlineQTBar(x, y, targetElm);\n }\n };\n /**\n * It hides the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.hideInlineToolbar = function () {\n this.quickToolbarModule.hideInlineQTBar();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\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 *\n * @param {RichTextEditorModel} newProp - specifies the the property.\n * @param {RichTextEditorModel} oldProp - specifies the old property.\n * @returns {void}\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 'enterKey':\n case 'value': {\n var nVal = void 0;\n if (prop === 'enterKey') {\n if (this.value === null || this.value === '<div><br></div>' || this.value === '<p><br></p>' ||\n this.value === '<br>') {\n nVal = null;\n }\n else {\n nVal = this.value;\n }\n }\n else {\n nVal = newProp[prop];\n }\n var val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;\n if ((!isNOU(nVal) && nVal !== '') || prop === 'enterKey') {\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.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n }\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 }\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 // eslint-disable-next-line\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 * @returns {void}\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 var getTextArea = this.element.querySelector('.e-rte-srctextarea');\n if (value) {\n if (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = this.value;\n }\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 (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = '';\n }\n if (this.editorMode === 'HTML') {\n if (this.enterKey === 'DIV') {\n this.inputElement.innerHTML = '<div><br/></div>';\n }\n else if (this.enterKey === 'BR') {\n this.inputElement.innerHTML = '<br/>';\n }\n else {\n this.inputElement.innerHTML = '<p><br/></p>';\n if (value === '' && this.formatter && this.inputElement) {\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), this.inputElement.firstElementChild, this.inputElement.firstElementChild.childElementCount);\n }\n }\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 if (this.toolbarSettings.type === 'Expand' && (typeof (this.height) === 'string' &&\n this.height.indexOf('px') > -1 || typeof (this.height) === 'number')) {\n this.element.classList.add(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n else {\n this.element.classList.remove(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n };\n /**\n * setPlaceHolder method\n *\n * @returns {void}\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 e-rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 14px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length === 0 && !isNOU(this.inputElement.firstChild) && (this.inputElement.firstChild.nodeName === 'BR' ||\n ((this.inputElement.firstChild.nodeName === 'P' || this.inputElement.firstChild.nodeName === 'DIV') && !isNOU(this.inputElement.firstChild.firstChild) &&\n 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 var allClassName = cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n this.element.classList.add(allClassName[i]);\n }\n }\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 *\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\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 *\n * @returns {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 *\n * @returns {void}\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 * @returns {void}\n */\n RichTextEditor.prototype.showFullScreen = function () {\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be enable in Rich Text Editor’s Toolbar.\n *\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 *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be disable in Rich Text Editor’s Toolbar.\n *\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 *\n * @returns {void}\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 *\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 *\n * @returns {void}\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.enterKeyModule = new EnterKeyAction(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.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var 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 // eslint-disable-next-line\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 RichTextEditor.prototype.updateResizeFlag = function () {\n this.isResizeInitialized = true;\n };\n /**\n * Image max width calculation method\n *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getInsertImgMaxWidth = function () {\n var maxWidth = this.insertImageSettings.maxWidth;\n // eslint-disable-next-line\n var imgPadding = 12;\n var imgResizeBorder = 2;\n var editEle = this.contentModule.getEditPanel();\n var eleStyle = window.getComputedStyle(editEle);\n var editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +\n parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +\n parseFloat(eleStyle.marginLeft.split('px')[0]) + parseFloat(eleStyle.marginRight.split('px')[0]));\n return isNOU(maxWidth) ? editEleMaxWidth : maxWidth;\n };\n /**\n * setContentHeight method\n *\n * @param {string} target - specifies the target value.\n * @param {boolean} isExpand - specifies the bollean value.\n * @returns {void}\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 = typeof (this.height) === 'string' && this.height.indexOf('%') > -1;\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 (rteHeight === 0 && this.height !== 'auto' && !this.getToolbar()) {\n rteHeight = parseInt(this.height, 10);\n if (heightPercent) {\n rteHeightPercent = this.height;\n }\n }\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var rzHandle = this.element.querySelector('.' + classes.CLS_RTE_RES_HANDLE);\n var rzHeight = this.enableResize ? (!isNOU(rzHandle) ? (rzHandle.offsetHeight + 8) : 0) : 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')) && !this.isResizeInitialized) {\n heightValue = 'auto';\n }\n else {\n heightValue = heightPercent && rteHeightPercent ? rteHeightPercent : rteHeight - (tbHeight + rzHeight) + 'px';\n }\n }\n if (target !== 'windowResize') {\n if (this.iframeSettings.enable) {\n if (heightValue !== 'auto') {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\n else {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\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 var tbWrapHeight = (isExpand ? (tbHeight + expandPopHeight) : tbHeight) + 'px';\n setStyleAttribute(this.getToolbar().parentElement, { height: tbWrapHeight });\n }\n if (rzHeight === 0) {\n this.autoResize();\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.serializeValue(this.contentModule.getEditPanel().innerHTML);\n };\n /**\n * Retrieves the Rich Text Editor's XHTML validated HTML content when `enableXhtml` property is enabled.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getXhtml = function () {\n var currentValue = this.value;\n if (!isNOU(currentValue) && this.enableXhtml) {\n currentValue = this.htmlEditorModule.xhtmlValidation.selfEncloseValidation(currentValue);\n }\n return currentValue;\n };\n /**\n * Shows the source HTML/MD markup.\n *\n * @returns {void}\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 *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getCharCount = function () {\n var htmlText = this.editorMode === 'Markdown' ? this.inputElement.value.trim() :\n this.inputElement.textContent.trim();\n var htmlLength;\n if (this.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n htmlLength = htmlText.length;\n }\n return htmlLength;\n };\n /**\n * Show the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.showLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.showImageDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.showTableDialog, {});\n }\n };\n /**\n * Close the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.closeDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.closeLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.closeImageDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.closeTableDialog, {});\n }\n };\n /**\n * @returns {void}\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 * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n /**\n * @returns {void}\n * getID method\n *\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 *\n * @param {FocusEvent} e - specifies the event.\n * @returns {void}\n * @hidden\n * @deprecated\n */\n // eslint-disable-next-line\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 // eslint-disable-next-line\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 (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n return;\n }\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('windowResize', isExpand);\n this.notify(events.windowResize, null);\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>' || this.inputElement.innerHTML === '<div><br></div>' ||\n this.inputElement.innerHTML === '<br>') ? 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 && !this.autoSaveOnIdle) {\n this.timeInterval = setInterval(this.updateValueOnIdle.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 (!isNOU(this.tableModule)) {\n this.tableModule.removeResizeElement();\n }\n var getTextArea = this.element.querySelector('.e-rte-srctextarea');\n if (this.editorMode === 'HTML') {\n value = (this.inputElement.innerHTML === '<p><br></p>' || this.inputElement.innerHTML === '<div><br></div>' ||\n this.inputElement.innerHTML === '<br>') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n if (getTextArea && getTextArea.style.display === 'block') {\n value = getTextArea.value;\n }\n }\n else {\n value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n return value;\n };\n RichTextEditor.prototype.updateValueOnIdle = function () {\n if (!isNOU(this.tableModule) && !isNOU(this.inputElement.querySelector('.e-table-box.e-rbox-select'))) {\n return;\n }\n this.setProperties({ value: this.getUpdatedValue() }, true);\n this.valueContainer.value = this.value;\n this.invokeChangeEvent();\n };\n RichTextEditor.prototype.updateIntervalValue = function () {\n clearTimeout(this.idleInterval);\n this.idleInterval = setTimeout(this.updateValueOnIdle.bind(this), 0);\n };\n RichTextEditor.prototype.updateStatus = function (e) {\n if (!isNOU(e.html) || !isNOU(e.markdown)) {\n var status_1 = this.formatter.editorManager.undoRedoManager.getUndoStatus();\n var eventArgs = {\n undo: status_1.undo,\n redo: status_1.redo,\n html: e.html,\n markdown: e.markdown\n };\n this.trigger(events.updatedToolbarStatus, eventArgs);\n }\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 if (e.detail > 3) {\n e.preventDefault();\n }\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 *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.contentChanged = function () {\n if (this.autoSaveOnIdle) {\n if (!isNOU(this.saveInterval)) {\n clearTimeout(this.timeInterval);\n this.timeInterval = setTimeout(this.updateIntervalValue.bind(this), this.saveInterval);\n }\n }\n };\n /**\n * invokeChangeEvent method\n *\n * @returns {void}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var currentValue;\n if (this.enableXhtml) {\n currentValue = this.getXhtml();\n }\n else {\n currentValue = this.value;\n }\n var eventArgs = {\n value: currentValue\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @returns {void}\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 * @returns {void}\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 : defaultValue });\n };\n /**\n * @returns {void}\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 () {\n _this.setAutoHeight(_this.inputElement);\n }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () {\n _this.setAutoHeight(iframeElement_1);\n }, 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 this.on(events.contentChanged, this.contentChanged, this);\n this.on(events.resizeInitialized, this.updateResizeFlag, this);\n this.on(events.updateTbItemsStatus, this.updateStatus, this);\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 this.off(events.contentChanged, this.contentChanged);\n this.off(events.resizeInitialized, this.updateResizeFlag);\n this.off(events.updateTbItemsStatus, this.updateStatus);\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 Complex({}, FileManagerSettings)\n ], RichTextEditor.prototype, \"fileManagerSettings\", 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, \"autoSaveOnIdle\", 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('P')\n ], RichTextEditor.prototype, \"enterKey\", void 0);\n __decorate([\n Property('BR')\n ], RichTextEditor.prototype, \"shiftEnterKey\", 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({}, NumberFormatList)\n ], RichTextEditor.prototype, \"numberFormatList\", void 0);\n __decorate([\n Complex({}, BulletFormatList)\n ], RichTextEditor.prototype, \"bulletFormatList\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(10000)\n ], RichTextEditor.prototype, \"saveInterval\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeQuickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarStatusUpdate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"updatedToolbarStatus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageUpload\", 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 Event()\n ], RichTextEditor.prototype, \"beforePasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterPasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageDrop\", 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, index.FileManager);\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","updateDropDownFontFormatLocale","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","command","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","enableHtmlEncode","updateTextNode","decode","setProperties","enterKey","resultElm","childNodes","setAttribute","isPreviousInlineElem","previousParent","insertElem","nodeName","textContent","indexOf","trim","inlineNode","appendChild","detach","imageElm","querySelectorAll","classes.CLS_RTE_IMAGE","add","classes.CLS_IMGINLINE","classes.CLS_IMGBREAK","getDefaultValue","isEditableValueEmpty","sanitizeHelper","enableHtmlSanitizer","SanitizeHtmlHelper","beforeSanitize","beforeEvent","cancel","helper","extend","trigger","serializeValue","convertToBlob","dataUrl","arr","split","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","Blob","getLocaleFontFormat","model.fontFamily","fontNameLocale","model.formatItems","formatsLocale","model.numberFormatList","numberFormatListLocale","model.bulletFormatList","bulletFormatListLocale","setEditFrameFocus","editableElement","selector","isNullOrUndefined","iframe","querySelector","contentWindow","focus","paraElm","tableElm","getAttribute","removeAttribute","tdElm","style","borderLeft","removeProperty","borderRight","borderBottom","borderTop","border","classes.CLS_TABLE","getLastTextNode","startChildNodes","finalNode","getDefaultHtmlTbStatus","bold","italic","subscript","superscript","strikethrough","orderedlist","unorderedlist","underline","alignments","backgroundcolor","fontcolor","fontname","fontsize","formats","createlink","insertcode","getDefaultMDTbStatus","uppercase","lowercase","inlinecode","setAttributes","htmlAttributes","rte","isFrame","initial","contentModule","getDocument","_a","htmlAttr","enabled","setEnable","readonly","setReadOnly","inputElement","placeholder","setPlaceHolder","valueContainer","initialEnd","destroy","modelChanged","keyUp","keyDown","actionBegin","selectionSave","mouseDown","paste","rtlMode","checkUndo","CLS_RTE","CLS_QUICK_TB","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ITEMS","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","DialogType","templateItems","tools","id","icon","tooltip","justifyleft","justifycenter","justifyright","justifyfull","clearformat","clearall","cut","copy","numberformatlist","bulletformatlist","indent","outdent","undo","redo","openlink","editlink","removelink","image","filemanager","createtable","removetable","align","caption","remove","openimagelink","editimagelink","removeimagelink","insertlink","display","alttext","dimension","fullscreen","maximize","minimize","print","sourcecode","preview","viewside","tableheader","tableremove","tablerows","tablecolumns","tablecell","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","styles","imageAlignItems","cssClass","tableCellItems","predefinedItems","fontColor","Custom","backgroundColor","numberFormatList","bulletFormatList","defaultLocale","justifyLeft","justifyCenter","justifyRight","justifyFull","fontName","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","fileManager","fileDialogHeader","formatsDropDownParagraph","formatsDropDownCode","formatsDropDownQuotation","formatsDropDownHeading1","formatsDropDownHeading2","formatsDropDownHeading3","formatsDropDownHeading4","fontNameSegoeUI","fontNameArial","fontNameGeorgia","fontNameImpact","fontNameTahoma","fontNameTimesNewRoman","fontNameVerdana","numberFormatListNumber","numberFormatListLowerAlpha","numberFormatListUpperAlpha","numberFormatListLowerRoman","numberFormatListUpperRoman","numberFormatListLowerGreek","bulletFormatListDisc","bulletFormatListCircle","bulletFormatListSquare","numberFormatListNone","bulletFormatListNone","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","listEle","popupModal","events.selectionSave","dropDownClose","popupContainer","popupEle","parentNode","insertBefore","undefined","renderToolbar","setPanel","renderPanel","overflowMode","rteToolbarObj","Toolbar","beforeCreate","bind","created","clicked","enablePersistence","enableRtl","isStringTemplate","appendTo","renderDropDownButton","css","_this","inlineMode","enable","proxy","DropDownButton","select","beforeOpen","divNode","close","open","beforeItemRender","tabIndex","getElementById","getID","renderListDropDown","CLS_RTE_ELEMENTS","itemName","inlineEle","event","currentElement","currentDropdown","childElementCount","closest","setIsModel","nextElementSibling","zIndex","position","parseInt","toString","paletteSelection","dropDownArgs","ele","colorbox","slice","call","borderBottomColor","filter","renderColorPickerDropDown","colorPicker","range","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","getClass","classes","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","formatOLItem","defineProperties","enumerable","numberFormatListDropDown","formatULItem","bulletFormatListDropDown","formatItem","classes.CLS_DROPDOWN_POPUP","fontItem","getEditNode","classes.CLS_DROPDOWN_ITEMS","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","cellDropDown","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","model.tableCellItems","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","originalEvent","quickToolbarModule","tableQTBar","listItem","listStyle","listImage","process","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","toolbarClickHandler","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","isMetaKey","metaKey","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","pageXOffset","windowWidth","bodyRightSpace","showPopup","eventArgs","beforeQuickToolbarArgs","editPanelTop","editPanelHeight","bodyRight","marginRight","paddingRight","innerWidth","toolbarAvail","getToolbar","toolbarModule","expTBHeight","tBarHeight","cntEle","enableToolbarItem","append","showPopupData","show","duration","isIE","maxWidth","outerWidth","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","touches","changedTouches","touchData","prevClientX","clientX","prevClientY","parentLeft","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","prevToolbarStatus","selection","onRefreshHandler","parentsLines","documentNode","isListsApplied","currentFormat","mdSelectionFormats","isAppliedCommand","tbStatusString","JSON","stringify","html","markdown","parse","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","CONSTANT.actionBegin","actionBeginArgs","preventDefault","isTableModule","tableModule","ensureInsideTableList","enterAction","observer","callBack","onSuccess","clipboardAction","CONSTANT.checkUndo","execCommand","enableUndo","onKeyHandler","events","callbackArgs","isNotify","elements","autoResize","undoRedoStack","status","MDLists","markdownSelection","applyListsHandler","tabKey","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","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","spaceKeyAction","testList","elem","olListRegex","elementStart","testCurrentList","olListStartRegex","spaceList","preElement","nextElement","preElemULStart","nextElemULStart","startElementOLTest","preElementOLTest","nextElementOLTest","enterList","startNodeParent","nearBlockNode","nodeCutter","GetSpliceNode","insertTag","backspaceList","parentList","commonAncestor","startEle","endEle","isNested","ignoreDefault","stopPropagation","revertList","revertClean","nestedList","cleanNode","prevSibling","noPreviousElement","firstNode","firstNodeOL","siblingListOL","siblingListLI","siblingListLIFirst","h","prepend","list-style-type","nestedElement","nestedElementLI","firstNodeLI","listsNodes","setSelectionBRConfig","allSelectedNode","selectedNodes","currentFormatNodes","currentNode","previousCurrentNode","previousNode","tempElem","preNode","postNode","applyLists","startElem","endElem","isRevert","removeEmptyListElements","checkLists","list-style-image","openTag","closeTag","newTag","elemAtt","replaceHTML","collectionString","listElem","nodesTemp","liParents","contentNodes","findUnSelected","rightIndent","indentElements","childElements","z","childLI","count","viewNode","childNode","class","nodeInnerHtml","emptyUl","emptyLi","InsertMethods","WrapBefore","textNode","isAfter","AppendBefore","Wrap","unwrap","child","NodeCutter","SplitNode","clone","setStartBefore","setEndAfter","fragment","extractContents","spliceEmptyNode","isEmpty","isImgElm","GetCursorStart","indexes","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","onKeyUp","getParentNode","endCon","pTag","replaceChild","brNode","startCon","preElem","endPreElem","deleteContent","removeCodeContent","lastEmpty","lastBeforeBr","startParent","paraFocus","isNotEndCursor","pointer","deleteContents","referNode","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","sibNode","lasNode","removeEmptyElements","imageFocus","frag","createDocumentFragment","paraElem","currentBlockNode","getImmediateBlockNode","isSingleNode","containsBlockNode","removingComments","allChildNodes","lastSelectionNode","insertTempNode","isFirstTextNode","firstParaElm","nearestAnchor","immediateBlockNode","placeCursorEnd","cursorPos","blockNode","liNode","insertAdjacentElement","splitedElm","createTextNode","elm","innerElement","findDetachEmptyElem","emptyElements","detachableElement","LinkCommand","CONSTANT.LINK","linkCommand","selectParent","localeCompare","anchor","createAchorNode","createLinkNode","anchorEle","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","editEle","isRtl","indentsNodes","parentNodes","marginLeftOrRight","marginLeft","indentsValue","CLASS_CAPTION","ImageCommand","CONSTANT.IMAGE","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","isReplaced","src","imgElement","setStyle","imgEle","selectedNode","imgElm_1","calculateStyleValue","height","minWidth","minHeight","maxHeight","capImgWrap","textEle","newTextEle","insertElement","TableCommand","CONSTANT.TABLE","insertRow","insertColumn","tableVerticalAlign","cellMerge","HorizontalSplit","VerticalSplit","tableMove","tblBody","tdWid","row","cell","removeEmptyNode","emptyLiChild","getSelectedCellMinMaxIndex","selectedCells","curTable","a","minI","maxI","minJ","maxJ","selectedCellIndex","getCorrespondingIndex","minMaxIndex","FindIndex","Math","min","max","startRow","endRow","startColumn","endColumn","isBelow","selectedCell","lastRow","cloneRow","allCells","getCorrespondingColumns","minVal","newRow","isHeaderSelect","tdElement","selectedRow","curCell","curRow","allRows","colIndex","previousWidth","currentWidth","currentTabElm","thTdElm","dataset","oldWidth","colTemplate","toFixed","tBodyHeadEle","rowIndex","deleteIndex","selectedMinMaxIndex","minCol","maxCol","currentRow","currentCell","currentCellIndex","colSpanVal","rowHeadEle","nextFocusCell","sContainer","startChildLength","rowSpanVal","focusTrEle","selectedTable","headerExit","cellCount","colSpanCount","createTHead","th","deleteTHead","verticalAlign","mergeCellContent","minMaxIndexes","getSelectedMinMaxIndexes","firstCell","rowSelectedCells","totalWidth","updateRowSpanStyle","updateColSpanStyle","colValue","colMin","eleArray","updateCellAttribute","rowValue","rowMin","firstIndex","spanCount","innerHtml","correspondingCells","minRow","maxRow","currentRowCol","targetRowCol","activeCell","newCell","activeCellIndex","activeCellRowSpan","avgCount","ceil","avgRowIndex","newTrEle","avgWidth","isNaN","correspondingColumns","activeCellcolSpan","elementArray","colEle","ele_1","colspan_1","rowSpan","columnIndex","cells","nextIndex","nextCol","highlightCells","startCell","endCell","minRowIndex","maxRowIndex","minColIndex","maxColIndex","minMaxValues","MinMax","activeCellTag","targetCellTag","activeRowIndex","activeColumnIndex","targetRowIndex","targetColumnIndex","activeCellList","activeIndexes","targetIndexes","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","fontWeight","fontStyle","textDecoration","color","backColor","SelectionCommands","applyFormat","isFormatted","preventRestore","isFontStyle","cursorNode","insertCursorNode","isSubSup","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getCursorFormat","emptySpaceNode","brElem","getInsertNode","splitNode","nodeIndex","pop","nodeValue","bgStyle","bg","formatNodeStyles","formatNodeTagName","nodeTraverse","GetFormatNode","currentNodeElem","curParentElem","liElement","applyStyles","getChildNode","updateStyles","tag","SelectionBasedExec","validFormats","InsertHtmlExec","applyHtml","pastedElements","allPastedElements","imgElements","allImgElm","imgElem","defaultTag","lastText","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","index1","index2","index3","parentIndex","elementIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","IGNORE_PARENT_TAGS","currentInlineNode","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","MsWordPaste","olData","ulData","ignorableNodes","borderStyle","removableElements","listContents","wordCleanup","wordPasteStyleConfig","allowedStylePropertiesArray","tempHTMLContent","clipboardData","getData","rtfData","patern2","patern3","pattern4","imageConversion","addListClass","cleanUp","listConverter","styleCorrection","removeUnwantedElements","breakLineAddition","removeClassName","addTableBorderClass","allNodes","charAt","allTableElm","hasTableBorder","checkVShape","imgSrc","base64Src","imgName","linkRegex","hexValue","hexConversion","convertToBase64","byteArr","conHexStringToBytes","hex","base64String","conBytesToBase64","base64Str","byteArrLen","array3","array3length","array4","imgType","picHead","pic","source","fullImg","elmWithClass","allElements","findDetachElem","brElement","regExpStartElem","regExpEndElem","styleElement","styleClassObject_1","findStyleObject","values","map","removeUnwantedStyle","filterStyles","resultElem","fromClass","getElementsByClassName","getElementsByTagName","styleProperty","valueSplit","changedValue","elmWithStyles","elemStyleProperty","styleValue","styleValues","styleClassObject","tempStyle","classNameCollection","stylesCollection","classNames","prevflagState","tempCleaner","level","stNode","collection","currentListStyle","getListContent","currentClassName","textAlign","listType","nestedLevel","makeConversion","elemColl","temp1","prevList","pLevel","listCount","pElement","getListStyle","getNamedItem","currentStyle","pushContent","styleNodes","InsertTextExec","insertText","EditorManager","alignmentObj","indentsObj","selectionObj","inserthtmlObj","insertTextObj","msWordPaste","onWordPaste","onBegin","HTMLFormatter","statusCollection","ToolbarStatus","targetNode","formatCollection","nodesLength","isNodeChanged","isOrderedList","isUnorderedList","isAlignment","isFormats","isNumberFormatList","isBulletFormatList","pos","prop","getPropertyValue","list","listStyleType","HtmlToolbarStatus","ContentRender","rteContent","contenteditable","IframeContentRender","apply","iFrameContent","srcdoc","contentDocument","setThemeColor","write","XhtmlValidation","enableXhtmlValidation","enableXhtml","clean","AddRootElement","ImageTags","removeTags","RemoveUnsupported","selfEncloseValidation","valueLength","arrayValue","valueTemp","valueDupe","valueOriginal","imgRegexp","exec","g","parentEle","imgNodes","hasAttribute","RemoveElementNode","rmvNode","parentArray","rmvArray","underlineEle","spanEle","strongEle","boldEle","attrArray","RemoveAttributeByName","attrName","hasChildNodes","childEle","HtmlEditor","rangeCollection","xhtmlValidation","nodeSelectionObj","colorPickerModule","events.paste","onPaste","restrictKeys","currentRange","info","backSpaceCleanup","deleteCleanup","enableTabKey","textCont","spaceLink","shiftEnterKey","currentRange_1","editorValue","orderedList_1","unOrderedList","isUnOrderedList","eventArgs_1","events.actionBegin","rangeElement","oldRangeElement","deleteRangeElement","deleteOldRangeElement","ulListStartRegex","isLiElement","code","getRootBlockNode","getRangeLiNode","normalize","rootElement","getRangeElement","getCaretIndex","preCaretRange","rangeBlockNode","rangeLiNode","isWordPaste","httpRegex","wwwRegex","enterSplitText","contentInnerElem","contentWithSpace","spaceBetweenContent","spaceSplit","divElement","splitTextContent","resultSplitContent","pasteCleanupModule","selectNodeEle","urlText","urlTextRange","selectParentEle","closestElement","linkDialog","imageDialog","formatterClass","PasteCleanup","isNotFromHtml","containsHtml","dialogRenderObj","pasteClean","imageproperties","htmlRegex","file","getAsFile","imageFormatting","splitBreakLine","pasteCleanupSettings","allowedStyleProps","updatedArgs","prompt","tempDivElem","pasteDialog","plainFormatting","formatting","makeSpace","imgUploading","insertImageSettings","saveUrl","uploadImg","fileList","base64ToFile","uploadMethod","path","saveFormat","getBlob","allImgElmId","blopUrl","URL","createObjectURL","uploadEle","opacity","contentEle","viewPortElement","timeOut","refreshPopup","rawFile","beforeUploadArgs","uploadObj","Uploader","asyncSettings","removeUrl","dropArea","allowedExtensions","allowedTypes","success","popupClose","uploading","isServerRendered","imageUploadingArgs","beforeUpload","filesData","currentRequestHeader","currentRequest","customFormDatas","customFormData","uploadFiles","failure","uploadFailure","canceling","selected","removing","fileData","validationMessages","minSize","maxSize","statusCode","createFileList","upload","imageElement","base64","filename","baseStr","extension","decodeStr","strLen","decodeArr","navigator","appVersion","blob","File","pasteArgs","imageValue","radioRender","keepRadioButton","RadioButton","label","checked","keepFormatElement","cleanRadioButton","cleanFormatElement","plainTextRadioButton","plainTextElement","selectFormatting","keepChecked","cleanChecked","isHeight","preRTEHeight","dialogModel","buttons","dialog","argument","buttonModel","isPrimary","args_1","header","isModal","visible","rteDialogWrapper","destroyDialog","rteDialogContainer","rteDialogWrapperChildLength","clipBoardElem","deniedTags","deniedAttributes","deniedAttrs","allowedStyle","allImg","getInsertImgMaxWidth","addTempClass","returnArgs","imageElements","removeTempClass","allChild","classElm","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","resizeStart","cancelable","wireResizeEvents","resizeStartArgs","unwireResizeEvents","performResize","resizingArgs","boundRect","isMouseEvent","eventType","refreshUI","stopResize","getEventType","isMouse","pointerType","touchMoveEvent","touchEndEvent","FileManager","EJ2FileManager","Inject","ContextMenu","DetailsView","NavigationPane","rendererFactory","fileManagerModule","dlgInsert","dlgHeader","dlgCancel","dlgButtons","insertImageUrl","cancelDialog","disabled","selectObj","dlgTarget","aria-owns","fileWrap","getInputUrlElement","animationSettings","effect","showCloseIcon","closeOnEscape","renderFileManager","returnValue","destroyComponents","dialogObj","fileObj","allowMultiSelection","fileManagerSettings","view","sortOrder","ajaxSettings","showThumbnail","rootAliasName","uploadSettings","searchSettings","showHiddenItems","allowDragAndDrop","showFileExtension","detailsViewSettings","contextMenuSettings","navigationPaneSettings","fileSelect","selectedFile","fileDetails","isFile","inputUrl","getImageUrl","filterPath","refreshLayout","onDocumentClick","imgUrl","urlLabel","placeUrl","spellcheck","matchUrl","prevEle","FullScreen","scrollableParent","getScrollableParent","evenArgs","beginEventArgs","toggleParentOverflow","properties","isAdd","Render","renderer","Link","rteID","showDialog","closeDialog","showLinkQuickToolbar","clearDialogObj","onToolbarAction","editAreaClickHandler","quickToolObj","target_1","linkTop","linkLeft","linkPos","hideLinkQuickToolbar","showOnRightClick","getAnchorNode","isPopupOpen","openDialog","isInternal","inputDetails","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","CheckBox","selectText","linkInsert","linkCancel","selfLink","btnText","checkUrl","linkEle","isUrl","enableAutoUrl","argsValue","linkUpdate","Image","isImgUploaded","isAllowedTypes","deletedImg","insertImage","onWindowResize","showImageQuickToolbar","deleteImg","insertImgLink","insertAltText","imageSize","alignmentSelect","afterRender","imagePaste","dragDrop","dragStart","dragEnter","dragOver","imageClick","events.checkUndo","undoStack","resize","onCutHandler","img","outline","resizeEnd","resizeBtnInit","cursor","getPointX","prevSelectedImgEle","preventDefaultResize","imgResizeDiv","imageResize","getPointY","stopImmediatePropagation","resizeBtnStat","topLeft","topRight","botLeft","botRight","cancelResizeAction","imgResizePos","resizeImgDupPos","resizing","calcPos","imgWid","imgHgt","borWid","devWid","ignoreOffset","documentElement","setAspectRatio","expectedX","expectedY","resizeByPercent","percentageValue","pixToPerc","round","expected","imgDupMouseMove","mouseX","mouseY","imgDupPos","openImgLink","editImgLink","removeImgLink","isCapLink","captionEle","keyCodeValues","isCursor_1","checkImageBack","checkImageDel","prev","removeResizeEle","event_1","imageRemovePost","alignImage","break","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","inputAlt","altArgs_1","insertAlt","captionClass","ajax","Ajax","formData","FormData","send","classes.CLS_CAPTION","draggable","imgWrap","imgInner","imgCaption","imgSizeHeader","dialogContent","imgsizeInput","selectObj_1","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","imgUpload","linkHeaderText","imageUrlPopup","clientWidth","clientHeight","getButtons","uploadUrl","imgHeight","imgWidth","imgSizeWrap","widthVal","changedWidthValue","getClientRects","heightVal","changedHeightValue","widthNum","TextBox","inputWidthValue","inputValue","heightNum","inputHeightValue","dialogEle","uploadParentEle","deviceImgUpMsg","imgUpMsg","span","spanMsg","btnEle","autofocus","browserMsg","button","Button","btnClick","selectArgs","multiple","checkExtension","reader_1","FileReader","readAsDataURL","_internalRenderSelect","operation","dataTransfer","effectAllowed","dropEffect","isImgOrFileDrop","files","caretRangeFromPoint","rangeParent","rangeOffset","getDropRange","insertDragImage","startRange","elementFromPoint","startCharIndexCharacter","rangeRect","activePopupElement","imgFiles","fileName","onSelect","imgArgs_1","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","selectionTable","cellSelect","setBGColor","resizeHelper","addRow","addColumn","removeRowColumn","tableStyles","UpdateCells","selectCell","hideTableQuickToolbar","removeResizeElement","closestTd","tabSelection","tableArrowNavigation","insertTableDialog","editdlgObj","editTable","tdEle","classes.CLS_TB_ALT_BOR","insideList","prevElement","cellIndex","tHead","clsTble","selText","closestTable","range_1","tableCellSelect","col","dlgDiv","tblHeader","tableMouseUp","tableCellLeave","tableCellClick","tableInsert","targetTouches","removeHelper","tableResizeEleCreation","calMaxCol","colReEle","data-col","unselectable","cssText","rowReEle","data-row","rowPosLeft","tableReBox","column","columnEle","appendHelper","rowEle","tableBox","setHelperHeight","updateHelper","top_1","tableHeight","paddingSize","rteWidth","cellColl","actualwid","totalwid","leftColumnWidth","rightColWidth","convertPixelToPercentage","widthType","offsetValue","tabkey","delKey","insertbtn","tableDiv","drawTable","tabindex","rowDiv","data-column","data-cell","createDialog","editContent","tableDlgContent","update","editHeader","applyProperties","dlgContent","tableCellDlgContent","customTable","tableColumn","tableRow","tableWrap","columnTextBox","NumericTextBox","floatLabelType","rowTextBox","tableDialog","padVal","padding","cellSpacing","cellPadding","brdSpcVal","spacing","DialogRenderer","dlgObj","Dialog","beforeOpenCallback","closeArgs","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","editImage","insertBrOnReturn","insertOrderedList","insertUnorderedList","insertParagraph","ToolbarSettings","ChildProperty","ImageSettings","FileManagerSettings","Complex","AjaxSettings","folder","layout","ContextMenuSettings","DetailsViewSettings","NavigationPaneSettings","SearchSettings","FileToolbarSettings","autoUpload","minFileSize","maxFileSize","autoClose","UploadSettings","TableSettings","QuickToolbarSettings","PasteCleanupSettings","FontFamily","FontSize","Format","FontColor","BackgroundColor","NumberFormatList","BulletFormatList","Resources","IFrameSettings","InlineMode","EnterKeyAction","enterHandler","getRangeNode","shiftKey_1","focusElem","currentFocusElem","isImageNode","newElem","insertElm","createInsertElement","isNearBlockLengthZero","finalFocusElem","currentParent","isEmptyBrInserted","outerBRElem","brElm2","insertFocusContent","__assign","assign","t","s","RichTextEditor","defaultResetValue","isResizeInitialized","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","executeCommand","commandName","htmlPurifier","tool","htmlEditorModule","linkValue","renderModule","RTERender","getXhtml","defaultValue","renderComplete","restrict","bool","removeNodeArray","placeHolderWrapper","allowedKeys","sanitizeHtml","inputVal","triggerEditArea","touch","notifyMouseUp","mouseUp","detail","ensureModuleInjected","getInjectedModules","onCopy","onCut","totalLength","htmlValue","isRendered","destroyDependentModules","timeInterval","clearInterval","allClassName","removeHtmlAttributes","removeAttributes","removeItem","getContent","wrapperElm","selectedHtml","cloneContents","showInlineToolbar","targetElm","hideInlineToolbar","nVal","updatePanelValue","countModule","setWidth","setHeight","setCssClass","updateRTL","frameSetting","resources","scripts","removeSheets","setIframeSettings","wireContextEvent","unWireContextEvent","srcList","getTextArea","unbindEvents","bindEvents","printWind","printArgs","printingArgs","outerHeight","resizeTo","screen","availWidth","availHeight","printWindow","actionArgs","removeToolbarItem","L10n","enterKeyModule","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","compile","updateResizeFlag","eleStyle","editEleMaxWidth","imgPadding","paddingLeft","isExpand","heightValue","rteHeightPercent","heightPercent","rteHeight","rzHandle","rzHeight","expandPopHeight","codeElement","tbWrapHeight","getHtml","showSourceCode","getCharCount","InsertLink","InsertImage","InsertTable","preventImgResize","defaultResize","contentScrollHandler","cloneValue","active","isInteracted","saveInterval","autoSaveOnIdle","setInterval","updateValueOnIdle","getUpdatedValue","updateIntervalValue","idleInterval","status_1","rteElement","classes.CLS_RTE","relatedTarget","contentChanged","scrollParentElements","contextHandler","touchModule","EJ2Touch","tapHold","touchHandler","tapHoldThreshold","closestElem","resetHandler","setAutoHeight","iframeElement_1","overflow","scrollHeight","currentTarget","arrayKey","formElement","Component","index.RichTextEditor","index.Toolbar","index.Link","index.Image","index.Count","index.QuickToolbar","index.HtmlEditor","index.MarkdownEditor","index.Table","index.PasteCleanup","index.Resize","index.FileManager"],"mappings":"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"}
|