@syncfusion/ej2-richtexteditor 18.4.39 → 18.4.42-70943
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 +782 -728
- 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 +249 -145
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +371 -267
- package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
- package/helpers/e2e/index.js +3 -3
- package/license +9 -9
- package/package.json +76 -75
- package/src/common/interface.d.ts +6 -6
- package/src/editor-manager/base/classes.d.ts +1 -1
- package/src/editor-manager/base/classes.js +1 -1
- package/src/editor-manager/base/editor-manager.d.ts +3 -3
- package/src/editor-manager/base/editor-manager.js +3 -3
- package/src/editor-manager/base/interface.d.ts +7 -7
- package/src/editor-manager/base/types.d.ts +1 -1
- package/src/editor-manager/plugin/alignments.d.ts +2 -2
- package/src/editor-manager/plugin/alignments.js +2 -2
- package/src/editor-manager/plugin/clearformat-exec.d.ts +2 -2
- package/src/editor-manager/plugin/clearformat-exec.js +2 -2
- package/src/editor-manager/plugin/clearformat.d.ts +1 -1
- package/src/editor-manager/plugin/clearformat.js +1 -1
- package/src/editor-manager/plugin/dom-node.d.ts +34 -34
- package/src/editor-manager/plugin/dom-node.js +34 -34
- package/src/editor-manager/plugin/formats.d.ts +2 -2
- package/src/editor-manager/plugin/formats.js +2 -2
- package/src/editor-manager/plugin/image.d.ts +3 -3
- package/src/editor-manager/plugin/image.js +5 -4
- 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 +16 -12
- 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 +8 -8
- package/src/editor-manager/plugin/lists.d.ts +2 -2
- package/src/editor-manager/plugin/lists.js +8 -4
- package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -1
- package/src/editor-manager/plugin/ms-word-clean-up.js +23 -7
- 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 +2 -1
- package/src/editor-manager/plugin/selection-commands.js +35 -4
- 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 +4 -3
- 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/global.d.ts +1 -0
- package/src/markdown-parser/base/interface.d.ts +10 -10
- package/src/markdown-parser/base/markdown-parser.d.ts +3 -3
- package/src/markdown-parser/base/markdown-parser.js +3 -3
- package/src/markdown-parser/base/types.d.ts +1 -1
- package/src/markdown-parser/plugin/clearformat.d.ts +2 -2
- package/src/markdown-parser/plugin/clearformat.js +2 -2
- package/src/markdown-parser/plugin/formats.d.ts +2 -2
- package/src/markdown-parser/plugin/formats.js +2 -2
- package/src/markdown-parser/plugin/link.d.ts +2 -2
- package/src/markdown-parser/plugin/link.js +2 -2
- package/src/markdown-parser/plugin/markdown-selection.d.ts +14 -14
- package/src/markdown-parser/plugin/markdown-selection.js +14 -14
- package/src/markdown-parser/plugin/md-selection-formats.d.ts +2 -2
- package/src/markdown-parser/plugin/md-selection-formats.js +2 -2
- package/src/markdown-parser/plugin/table.d.ts +3 -3
- package/src/markdown-parser/plugin/table.js +3 -3
- package/src/markdown-parser/plugin/undo.d.ts +6 -6
- package/src/markdown-parser/plugin/undo.js +6 -6
- package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +9 -9
- package/src/rich-text-editor/actions/base-quick-toolbar.js +9 -9
- package/src/rich-text-editor/actions/base-toolbar.d.ts +3 -3
- package/src/rich-text-editor/actions/base-toolbar.js +3 -3
- package/src/rich-text-editor/actions/color-picker.d.ts +2 -2
- package/src/rich-text-editor/actions/color-picker.js +2 -2
- package/src/rich-text-editor/actions/count.d.ts +3 -3
- package/src/rich-text-editor/actions/count.js +3 -3
- package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
- package/src/rich-text-editor/actions/dropdown-buttons.js +2 -2
- package/src/rich-text-editor/actions/full-screen.d.ts +3 -3
- package/src/rich-text-editor/actions/full-screen.js +3 -3
- package/src/rich-text-editor/actions/html-editor.d.ts +3 -3
- package/src/rich-text-editor/actions/html-editor.js +3 -3
- package/src/rich-text-editor/actions/keyboard-model.d.ts +13 -13
- package/src/rich-text-editor/actions/keyboard.d.ts +1 -1
- package/src/rich-text-editor/actions/keyboard.js +22 -21
- 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 +9 -9
- package/src/rich-text-editor/actions/quick-toolbar.js +9 -9
- 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 +103 -103
- package/src/rich-text-editor/base/classes.js +103 -103
- package/src/rich-text-editor/base/constant.d.ts +112 -107
- package/src/rich-text-editor/base/constant.js +112 -107
- 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 +40 -40
- package/src/rich-text-editor/base/interface.js +1 -1
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +701 -701
- package/src/rich-text-editor/base/rich-text-editor.d.ts +51 -51
- package/src/rich-text-editor/base/rich-text-editor.js +88 -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 +8 -8
- 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 +21 -21
- package/src/rich-text-editor/models/iframe-settings.js +19 -19
- package/src/rich-text-editor/models/inline-mode-model.d.ts +9 -9
- package/src/rich-text-editor/models/inline-mode.js +19 -19
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +328 -328
- 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 +2 -1
- package/src/rich-text-editor/renderer/image-module.js +21 -7
- package/src/rich-text-editor/renderer/link-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/link-module.js +1 -1
- package/src/rich-text-editor/renderer/markdown-renderer.d.ts +6 -6
- package/src/rich-text-editor/renderer/markdown-renderer.js +6 -6
- package/src/rich-text-editor/renderer/popup-renderer.d.ts +5 -5
- package/src/rich-text-editor/renderer/popup-renderer.js +5 -5
- package/src/rich-text-editor/renderer/render.d.ts +2 -2
- package/src/rich-text-editor/renderer/render.js +2 -2
- package/src/rich-text-editor/renderer/table-module.d.ts +1 -1
- package/src/rich-text-editor/renderer/table-module.js +7 -2
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +8 -8
- package/src/rich-text-editor/renderer/toolbar-renderer.js +8 -8
- package/src/rich-text-editor/renderer/view-source.d.ts +6 -6
- package/src/rich-text-editor/renderer/view-source.js +6 -6
- package/src/rich-text-editor/services/renderer-factory.d.ts +3 -3
- package/src/rich-text-editor/services/renderer-factory.js +3 -3
- package/src/rich-text-editor/services/service-locator.d.ts +3 -3
- package/src/rich-text-editor/services/service-locator.js +3 -3
- package/src/selection/selection.d.ts +22 -22
- package/src/selection/selection.js +22 -22
- package/styles/_all.scss +2 -2
- package/styles/bootstrap-dark.css +13 -1
- package/styles/bootstrap.css +13 -1
- package/styles/bootstrap4.css +13 -1
- package/styles/bootstrap5-dark.css +0 -0
- package/styles/bootstrap5-dark.scss +0 -0
- package/styles/bootstrap5.css +0 -0
- package/styles/bootstrap5.scss +0 -0
- package/styles/fabric-dark.css +13 -1
- package/styles/fabric.css +13 -1
- package/styles/highcontrast-light.css +13 -1
- package/styles/highcontrast.css +13 -1
- package/styles/material-dark.css +13 -1
- package/styles/material.css +13 -1
- package/styles/rich-text-editor/_all.scss +2 -2
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +151 -151
- package/styles/rich-text-editor/_bootstrap-definition.scss +184 -184
- package/styles/rich-text-editor/_bootstrap4-definition.scss +307 -307
- package/styles/rich-text-editor/_fabric-dark-definition.scss +150 -150
- package/styles/rich-text-editor/_fabric-definition.scss +148 -148
- package/styles/rich-text-editor/_highcontrast-definition.scss +148 -148
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +148 -148
- package/styles/rich-text-editor/_layout.scss +1416 -1404
- package/styles/rich-text-editor/_material-dark-definition.scss +151 -151
- package/styles/rich-text-editor/_material-definition.scss +150 -150
- package/styles/rich-text-editor/_theme.scss +499 -499
- package/styles/rich-text-editor/bootstrap-dark.css +13 -1
- package/styles/rich-text-editor/bootstrap.css +13 -1
- package/styles/rich-text-editor/bootstrap4.css +13 -1
- package/styles/rich-text-editor/fabric-dark.css +13 -1
- package/styles/rich-text-editor/fabric.css +13 -1
- package/styles/rich-text-editor/highcontrast-light.css +13 -1
- package/styles/rich-text-editor/highcontrast.css +13 -1
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +289 -289
- package/styles/rich-text-editor/icons/_bootstrap.scss +288 -288
- package/styles/rich-text-editor/icons/_bootstrap4.scss +288 -288
- package/styles/rich-text-editor/icons/_fabric-dark.scss +288 -288
- package/styles/rich-text-editor/icons/_fabric.scss +288 -288
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +288 -288
- package/styles/rich-text-editor/icons/_highcontrast.scss +288 -288
- package/styles/rich-text-editor/icons/_material-dark.scss +288 -288
- package/styles/rich-text-editor/icons/_material.scss +288 -288
- package/styles/rich-text-editor/material-dark.css +13 -1
- package/styles/rich-text-editor/material.css +13 -1
- package/styles/tailwind-dark.css +0 -0
- package/styles/tailwind-dark.scss +0 -0
- package/styles/tailwind.css +0 -0
- package/styles/tailwind.scss +0 -0
- package/dist/global/ej2-richtexteditor.min.js +0 -11
- package/dist/global/ej2-richtexteditor.min.js.map +0 -1
- package/dist/global/index.d.ts +0 -14
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-richtexteditor.min.js","sources":["../../src/rich-text-editor/models/items.js","../../src/rich-text-editor/base/util.js","../../src/common/util.js","../../src/rich-text-editor/actions/html-attributes.js","../../src/rich-text-editor/base/constant.js","../../src/rich-text-editor/base/classes.js","../../src/rich-text-editor/base/enum.js","../../src/rich-text-editor/models/default-locale.js","../../src/rich-text-editor/renderer/toolbar-renderer.js","../../src/rich-text-editor/actions/base-toolbar.js","../../src/rich-text-editor/actions/dropdown-buttons.js","../../src/rich-text-editor/services/service-locator.js","../../src/rich-text-editor/services/renderer-factory.js","../../src/rich-text-editor/actions/toolbar-action.js","../../src/rich-text-editor/actions/toolbar.js","../../src/rich-text-editor/actions/keyboard.js","../../src/rich-text-editor/actions/color-picker.js","../../src/rich-text-editor/actions/base-quick-toolbar.js","../../src/rich-text-editor/renderer/popup-renderer.js","../../src/rich-text-editor/actions/quick-toolbar.js","../../src/rich-text-editor/actions/count.js","../../src/markdown-parser/plugin/markdown-selection.js","../../src/rich-text-editor/actions/markdown-toolbar-status.js","../../src/rich-text-editor/actions/execute-command-callback.js","../../src/rich-text-editor/formatter/formatter.js","../../src/common/constant.js","../../src/markdown-parser/plugin/lists.js","../../src/markdown-parser/base/constant.js","../../src/markdown-parser/plugin/formats.js","../../src/markdown-parser/plugin/md-selection-formats.js","../../src/common/config.js","../../src/markdown-parser/plugin/undo.js","../../src/markdown-parser/plugin/link.js","../../src/markdown-parser/plugin/table.js","../../src/markdown-parser/plugin/clearformat.js","../../src/markdown-parser/base/markdown-parser.js","../../src/rich-text-editor/formatter/markdown-formatter.js","../../src/rich-text-editor/renderer/markdown-renderer.js","../../src/rich-text-editor/actions/markdown-editor.js","../../src/editor-manager/base/constant.js","../../src/selection/selection.js","../../src/editor-manager/plugin/dom-node.js","../../src/editor-manager/plugin/lists.js","../../src/editor-manager/plugin/insert-methods.js","../../src/editor-manager/plugin/nodecutter.js","../../src/editor-manager/plugin/formats.js","../../src/editor-manager/plugin/inserthtml.js","../../src/editor-manager/plugin/link.js","../../src/editor-manager/plugin/alignments.js","../../src/editor-manager/plugin/indents.js","../../src/editor-manager/base/classes.js","../../src/editor-manager/plugin/image.js","../../src/editor-manager/plugin/table.js","../../src/editor-manager/plugin/isformatted.js","../../src/editor-manager/plugin/selection-commands.js","../../src/editor-manager/plugin/selection-exec.js","../../src/editor-manager/plugin/inserthtml-exec.js","../../src/editor-manager/plugin/clearformat.js","../../src/editor-manager/plugin/clearformat-exec.js","../../src/editor-manager/plugin/undo.js","../../src/editor-manager/plugin/ms-word-clean-up.js","../../src/editor-manager/plugin/insert-text.js","../../src/editor-manager/base/editor-manager.js","../../src/rich-text-editor/formatter/html-formatter.js","../../src/editor-manager/plugin/toolbar-status.js","../../src/rich-text-editor/actions/html-toolbar-status.js","../../src/rich-text-editor/renderer/content-renderer.js","../../src/rich-text-editor/renderer/iframe-content-renderer.js","../../src/rich-text-editor/actions/xhtml-validation.js","../../src/rich-text-editor/actions/html-editor.js","../../src/rich-text-editor/actions/paste-clean-up.js","../../src/rich-text-editor/actions/resize.js","../../src/rich-text-editor/actions/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/base/rich-text-editor.js","../../src/global.js"],"sourcesContent":["// tslint:disable\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n '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-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'Formats',\n 'subCommand': 'Pre'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n }\n};\nvar alignmentLocale = [\n { locale: 'alignmentsDropDownLeft', value: 'JustifyLeft' },\n { locale: 'alignmentsDropDownCenter', value: 'JustifyCenter' },\n { locale: 'alignmentsDropDownRight', value: 'JustifyRight' },\n { locale: 'alignmentsDropDownJustify', value: 'JustifyFull' }\n];\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nvar displayLocale = [\n { locale: 'imageDisplayDropDownInline', value: 'Inline' },\n { locale: 'imageDisplayDropDownBreak', value: 'Break' }\n];\nexport var imageDisplayItems = [\n { text: 'Inline', cssClass: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nvar tableRowLocale = [\n { locale: 'tableInsertRowDropDownBefore', value: 'InsertRowBefore' },\n { locale: 'tableInsertRowDropDownAfter', value: 'InsertRowAfter' },\n { locale: 'tableInsertRowDropDownDelete', value: 'DeleteRow' }\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nvar tableColumnLocale = [\n { locale: 'tableInsertColumnDropDownLeft', value: 'InsertColumnLeft' },\n { locale: 'tableInsertColumnDropDownRight', value: 'InsertColumnRight' },\n { locale: 'tableInsertColumnDropDownDelete', value: 'DeleteColumn' }\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nvar tableVerticalLocale = [\n { locale: 'tableVerticalAlignDropDownTop', value: 'AlignTop' },\n { locale: 'tableVerticalAlignDropDownMiddle', value: 'AlignMiddle' },\n { locale: 'tableVerticalAlignDropDownBottom', value: 'AlignBottom' }\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nvar tableStyleLocale = [\n { locale: 'tableStylesDropDownDashedBorder', value: 'Dashed' },\n { locale: 'tableStylesDropDownAlternateRows', value: 'Alternate' }\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', cssClass: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', cssClass: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\nfunction getLocale(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\nexport function updateDropDownLocale(self) {\n alignmentItems.forEach(function (item, i) {\n alignmentItems[i].text = getLocale(self, alignmentLocale, alignmentItems[i]);\n });\n imageDisplayItems.forEach(function (item, i) {\n imageDisplayItems[i].text = getLocale(self, displayLocale, imageDisplayItems[i]);\n });\n tableRowsItems.forEach(function (item, i) {\n tableRowsItems[i].text = getLocale(self, tableRowLocale, tableRowsItems[i]);\n });\n tableColumnsItems.forEach(function (item, i) {\n tableColumnsItems[i].text = getLocale(self, tableColumnLocale, tableColumnsItems[i]);\n });\n TableCellVerticalAlignItems.forEach(function (item, i) {\n TableCellVerticalAlignItems[i].text = getLocale(self, tableVerticalLocale, TableCellVerticalAlignItems[i]);\n });\n TableStyleItems.forEach(function (item, i) {\n TableStyleItems[i].text = getLocale(self, tableStyleLocale, TableStyleItems[i]);\n });\n}\n","/**\n * Defines util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll, createElement, Browser, detach } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale } from '../models/default-locale';\nimport { SanitizeHtmlHelper, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar undoRedoItems = ['Undo', 'Redo'];\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n return value;\n}\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\nexport function setToolbarStatus(e, isPopToolbar) {\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist') ||\n (itemStr === 'pre' && key === 'insertcode')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats':\n if (isNOU(dropDown.formatDropDown) || isPopToolbar ||\n (!isNOU(dropDown.formatDropDown) && dropDown.formatDropDown.isDestroyed)) {\n break;\n }\n var formatItems = e.parent.format.types;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n var formatContent = isNOU(e.parent.format.default) ? formatItems[0].text :\n e.parent.format.default;\n dropDown.formatDropDown.content = ('<span style=\"display: inline-flex;' +\n 'width:' + e.parent.format.width + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">'\n + (isNOU(result) ? formatContent : result) +\n '</span></span>');\n dropDown.formatDropDown.dataBind();\n break;\n case 'alignments':\n if (isNOU(dropDown.alignDropDown) ||\n (!isNOU(dropDown.alignDropDown) && dropDown.alignDropDown.isDestroyed)) {\n 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 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 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}\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'InsertCode' && toolbarItems[j].subCommand === 'Pre') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'FileManager' && toolbarItems[j].subCommand === 'File') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n * @hidden\n * @deprecated\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\nexport function parseHtml(value) {\n var tempNode = createElement('template');\n tempNode.innerHTML = value;\n if (tempNode.content instanceof DocumentFragment) {\n return tempNode.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n}\nexport function getTextNodesUnder(docElement, node) {\n var nodes = [];\n for (node = node.firstChild; node; node = node.nextSibling) {\n if (node.nodeType === 3) {\n nodes.push(node);\n }\n else {\n nodes = nodes.concat(getTextNodesUnder(docElement, node));\n }\n }\n return nodes;\n}\nexport function toObjectLowerCase(obj) {\n var convertedValue = {};\n var keys = Object.keys(obj);\n for (var i = 0; i < Object.keys(obj).length; i++) {\n convertedValue[keys[i].toLocaleLowerCase()] = obj[keys[i]];\n }\n return convertedValue;\n}\nexport function getEditValue(value, rteObj) {\n var val;\n if (value !== null && value !== '') {\n val = rteObj.enableHtmlEncode ? updateTextNode(decode(value)) : updateTextNode(value);\n rteObj.setProperties({ value: val }, true);\n }\n else {\n val = rteObj.enableHtmlEncode ? '<p><br/></p>' : '<p><br/></p>';\n }\n return val;\n}\nexport function updateTextNode(value) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\nexport function isEditableValueEmpty(value) {\n return (value === '<p><br></p>' || value === '<p><br></p>' || value === '') ? true : false;\n}\nexport function decode(value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n}\nexport function sanitizeHelper(value, parent) {\n if (parent.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n parent.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNullOrUndefined(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n}\n//Converting the base64 url to blob\nexport function convertToBlob(dataUrl) {\n var arr = dataUrl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n","/**\n * Defines common util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined, Browser, createElement, detach } from '@syncfusion/ej2-base';\nimport * as classes from '../rich-text-editor/base/classes';\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\nexport function setEditFrameFocus(editableElement, selector) {\n if (editableElement.nodeName === 'BODY' && !isNullOrUndefined(selector)) {\n var iframe = top.window.document.querySelector(selector);\n if (!isNullOrUndefined(iframe)) {\n iframe.contentWindow.focus();\n }\n }\n}\nexport function updateTextNode(value) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var tableElm = resultElm.querySelectorAll('table');\n for (var i = 0; i < tableElm.length; i++) {\n if (tableElm[i].getAttribute('border') === '0') {\n tableElm[i].removeAttribute('border');\n }\n var tdElm = tableElm[i].querySelectorAll('td');\n for (var j = 0; j < tdElm.length; j++) {\n 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}\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","export function setAttributes(htmlAttributes, rte, isFrame, initial) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly(initial);\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'tabindex') {\n rte.inputElement.setAttribute('tabindex', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","/**\n * @hidden\n * @deprecated\n */\nexport var created = 'create';\n/**\n * @hidden\n * @deprecated\n */\nexport var destroyed = 'destroy';\n/**\n * @hidden\n * @deprecated\n */\nexport var load = 'load';\n/**\n * Specifies Rich Text Editor internal events\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var initialLoad = 'initial-load';\n/**\n * @hidden\n * @deprecated\n */\nexport var 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 resizeStart = 'resizeStart';\n/**\n * @hidden\n * @deprecated\n */\nexport var onResize = 'resizing';\n/**\n * @hidden\n * @deprecated\n */\nexport var resizeStop = 'resizeStop';\n/**\n * @hidden\n * @deprecated\n */\nexport var undo = 'undo';\n/**\n * @hidden\n * @deprecated\n */\nexport var redo = 'redo';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertLink = 'insertLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var unLink = 'unLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var editLink = 'editLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var openLink = 'openLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionBegin = 'actionBegin';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionComplete = 'actionComplete';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarStatusUpdate = 'toolbarStatusUpdate';\n/**\n * @hidden\n * @deprecated\n */\nexport var actionSuccess = 'actionSuccess';\n/**\n * @hidden\n * @deprecated\n */\nexport var updateToolbarItem = 'updateToolbarItem';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertImage = 'insertImage';\n/**\n * @hidden\n * @deprecated\n */\nexport var insertCompleted = 'insertCompleted';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageLeft = 'justifyLeft';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageRight = 'justifyRight';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageCenter = 'justifyCenter';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageBreak = 'break';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageInline = 'inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageLink = 'insertImgLink';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageAlt = 'imgAltText';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageDelete = 'delete';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageCaption = 'caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageSize = 'imageSize';\n/**\n * @hidden\n * @deprecated\n */\nexport var sourceCode = 'sourceCode';\n/**\n * @hidden\n * @deprecated\n */\nexport var updateSource = 'updateSource';\n/**\n * @hidden\n * @deprecated\n */\nexport var toolbarOpen = 'toolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectionSave = 'selection-save';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectionRestore = 'selection-restore';\n/**\n * @hidden\n * @deprecated\n */\nexport var expandPopupClick = 'expandPopupClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var count = 'count';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentFocus = 'contentFocus';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentBlur = 'contentBlur';\n/**\n * @hidden\n * @deprecated\n */\nexport var mouseDown = 'mouseDown';\n/**\n * @hidden\n * @deprecated\n */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/**\n * @hidden\n * @deprecated\n */\nexport var editAreaClick = 'editAreaClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var scroll = 'scroll';\n/**\n * @hidden\n * @deprecated\n */\nexport var contentscroll = 'contentscroll';\n/**\n * @hidden\n * @deprecated\n */\nexport var colorPickerChanged = 'colorPickerChanged';\n/**\n * @hidden\n * @deprecated\n */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/**\n * @hidden\n * @deprecated\n */\nexport var focusChange = 'focusChange';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectAll = 'selectAll';\n/**\n * @hidden\n * @deprecated\n */\nexport var selectRange = 'selectRange';\n/**\n * @hidden\n * @deprecated\n */\nexport var getSelectedHtml = 'getSelectedHtml';\n/**\n * @hidden\n * @deprecated\n */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var paste = 'paste-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var imgModule = 'imageModule';\n/**\n * @hidden\n * @deprecated\n */\nexport var rtlMode = 'rtl-mode';\n/**\n * @hidden\n * @deprecated\n */\nexport var createTable = 'createTable';\n/**\n * @hidden\n * @deprecated\n */\nexport var docClick = 'docClick';\n/**\n * @hidden\n * @deprecated\n */\nexport var tableToolbarAction = 'table-toolbar-action';\n/**\n * @hidden\n * @deprecated\n */\nexport var checkUndo = 'checkUndoStack';\n/**\n * @hidden\n * @deprecated\n */\nexport var readOnlyMode = 'readOnlyMode';\n/**\n * @hidden\n * @deprecated\n */\nexport var pasteClean = 'pasteClean';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogOpen = 'beforeDialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogOpen = 'dialogOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeDialogClose = 'beforeDialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var dialogClose = 'dialogClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var beforeQuickToolbarOpen = 'beforeQuickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarOpen = 'quickToolbarOpen';\n/**\n * @hidden\n * @deprecated\n */\nexport var quickToolbarClose = 'quickToolbarClose';\n/**\n * @hidden\n * @deprecated\n */\nexport var popupHide = 'popupHide';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageSelected = 'imageSelected';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploading = 'imageUploading';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadSuccess = 'imageUploadSuccess';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageUploadFailed = 'imageUploadFailed';\n/**\n * @hidden\n * @deprecated\n */\nexport var imageRemoving = 'imageRemoving';\n/**\n * @hidden\n * @deprecated\n */\nexport var afterImageDelete = 'afterImageDelete';\n/**\n * @hidden\n * @deprecated\n */\nexport var drop = 'drop';\n/**\n * @hidden\n * @deprecated\n */\nexport var xhtmlValidation = 'xhtmlValidation';\n/**\n * @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 * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE = 'e-richtexteditor';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTL = 'e-rtl';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CONTENT = 'e-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DISABLED = 'e-disabled';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE = 'e-rte-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POP = 'e-rte-pop';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POPUP = 'e-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SEPARATOR = 'e-separator';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_MINIMIZE = 'e-minimize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACK = 'e-back';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_SHOW = 'e-show';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_HIDE = 'e-hide';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_VISIBLE = 'e-visible';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FOCUS = 'e-focused';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CAPTION = 'e-img-caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_CAPTION = 'e-rte-img-caption';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMGINLINE = 'e-imginline';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COUNT = 'e-rte-character-count';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_WARNING = 'e-warning';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ERROR = 'e-error';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ICONS = 'e-icons';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_ACTIVE = 'e-active';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_HIDDEN = 'e-rte-hidden';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_KEEP_FORMAT = 'e-rte-keepformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_REMOVE_FORMAT = 'e-rte-removeformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_PLAIN_FORMAT = 'e-rte-plainformat';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_OK = 'e-rte-pasteok';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_PASTE_CANCEL = 'e-rte-pastecancel';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DIALOG_MIN_HEIGHT = 'e-rte-dialog-minheight';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_HANDLE = 'e-resize-handle';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_EAST = 'e-south-east';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_IMAGE = 'e-rte-image';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RESIZE = 'e-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_FOCUS = 'e-img-focus';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DRAG_IMAGE = 'e-rte-drag-image';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_UPLOAD_POPUP = 'e-rte-upload-popup';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_POPUP_OPEN = 'e-popup-open';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_RESIZE = 'e-img-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_DROPAREA = 'e-droparea';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_IMG_INNER = 'e-img-inner';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_UPLOAD_FILES = 'e-upload-files';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_DIALOG_UPLOAD = 'e-rte-dialog-upload';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_RES_CNT = 'e-rte-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_CUSTOM_TILE = 'e-custom-tile';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_NOCOLOR_ITEM = 'e-nocolor-item';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE = 'e-rte-table';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_TABLE_BORDER = 'e-rte-table-border';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_TABLE_RESIZE = 'e-rte-table-resize';\n/**\n * @hidden\n * @deprecated\n */\nexport var CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';\n","/**\n * Defines types of Render\n * @hidden\n * @deprecated\n */\nexport var RenderType;\n(function (RenderType) {\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Popup */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as InlineToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n /** Defines RenderType as TableToolbar */\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines types to be used as Toolbar.\n */\nexport var ToolbarType;\n(function (ToolbarType) {\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n /** Defines ToolbarType as Scrollable */\n ToolbarType[\"Scrollable\"] = \"Scrollable\";\n})(ToolbarType || (ToolbarType = {}));\n","// tslint:disable\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert 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};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow'\n};\n","import { addClass, Browser, removeClass, EventHandler, formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll, detach } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM } from '../base/classes';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { hasClass } from '../base/util';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n * @hidden\n * @deprecated\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n this.removePopupContainer();\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (!this.parent.enabled) {\n return;\n }\n if (!this.parent.readonly) {\n this.parent.notify(events.toolbarClick, args);\n }\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n this.onPopupOverlay();\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n this.popupModal(args.element.parentElement);\n }\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.removePopupContainer();\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.removePopupContainer = function () {\n if (Browser.isDevice && !isNullOrUndefined(this.popupContainer)) {\n var popupEle = this.popupContainer.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n this.popupContainer.parentNode.insertBefore(popupEle, this.popupContainer.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(this.popupContainer);\n this.popupContainer = undefined;\n }\n };\n /**\n * renderToolbar method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.isStringTemplate = true;\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n /**\n * renderDropDownButton method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n return dropDown;\n };\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n if (!isNullOrUndefined(this.popupOverlay)) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n this.popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(this.popupContainer, element);\n this.popupContainer.appendChild(element);\n this.popupContainer.style.zIndex = element.style.zIndex;\n this.popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n this.popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n this.popupOverlay = element.nextElementSibling;\n this.popupOverlay.style.display = 'block';\n addClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.style.backgroundColor === style) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n /**\n * renderColorPickerDropDown method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker) {\n var _this = this;\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement, cssClass: css,\n enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n proxy.parent.notify(events.selectionRestore, {});\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n var parentNode = range.startContainer.parentNode;\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n (closest(range.startContainer.parentNode, 'td,th')) ||\n (proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')))\n && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n inst.dataBind();\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n _this.setColorPickerContentWidth(colorPicker);\n var focusEle;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n if (Browser.isDevice) {\n _this.popupModal(dropDownArgs.element.parentElement);\n }\n _this.pickerRefresh(dropDownArgs);\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n if (Browser.isDevice && !isNullOrUndefined(dropElement)) {\n var popupEle = dropElement.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n dropElement.parentNode.insertBefore(popupEle, dropElement.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(dropElement);\n proxy.popupContainer = undefined;\n }\n }\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n dropDown.element.onmousedown = function () { proxy.parent.notify(events.selectionSave, {}); };\n dropDown.element.onkeydown = function () { proxy.parent.notify(events.selectionSave, {}); };\n return dropDown;\n };\n ToolbarRenderer.prototype.pickerRefresh = function (dropDownArgs) {\n if (this.parent.backgroundColor.mode === 'Picker') {\n var popupElem = dropDownArgs.element.parentElement;\n popupElem.style.width = (popupElem.offsetWidth + 5).toString() + 'px';\n getInstance(popupElem, Popup).refreshPosition(popupElem);\n popupElem.style.width = (popupElem.offsetWidth - 5).toString() + 'px';\n }\n };\n ToolbarRenderer.prototype.popupModal = function (element) {\n var popupInst = getInstance(element, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupInst.dataBind();\n this.setIsModel(element);\n };\n ToolbarRenderer.prototype.setColorPickerContentWidth = function (colorPicker) {\n var colorPickerContent = colorPicker.element.nextSibling;\n if (colorPickerContent.style.width === '0px') {\n colorPickerContent.style.width = '';\n var borderWidth = parseInt(getComputedStyle(colorPickerContent).borderBottomWidth, 10);\n colorPickerContent.style.width = formatUnit(colorPickerContent.children[0].offsetWidth\n + borderWidth + borderWidth);\n }\n };\n /**\n * renderColorPicker method\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n var proxy = this;\n var value;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n colorPicker.setProperties({ value: value });\n },\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n args.element.classList.add(CLS_CUSTOM_TILE);\n if (args.value === '') {\n args.element.classList.add(CLS_NOCOLOR_ITEM);\n }\n },\n change: function (colorPickerArgs) {\n var colorpickerValue = colorPickerArgs.currentValue.rgba;\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.parent.notify(events.selectionRestore, {});\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n 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.body.querySelector(args.target));\n return colorPicker;\n };\n /**\n * The function is used to render Rich Text Editor toolbar\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText, toObjectLowerCase } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand,\n template: this.parent.createElement(tagName, {\n id: this.parent.getID() + '_' + container\n + '_' + this.tools[itemStr.toLocaleLowerCase()].id\n }).outerHTML,\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n /**\n * getObject method\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + this.tools[itemStr.toLocaleLowerCase()].id,\n prefixIcon: this.tools[itemStr.toLocaleLowerCase()].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand\n };\n }\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n var _this = this;\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n var _loop_1 = function (item) {\n switch (typeof item) {\n case 'string':\n items.push(this_1.getObject(item, container));\n break;\n default:\n if (!isNullOrUndefined(item.click)) {\n var proxy_1 = item;\n var callback_1 = proxy_1.click;\n proxy_1.click = function () {\n if (proxy_1.undo && _this.parent.formatter.getUndoRedoStack().length === 0) {\n _this.parent.formatter.saveData();\n }\n callback_1.call(_this);\n if ((_this.parent.formatter.getUndoRedoStack()[_this.parent.formatter.getUndoRedoStack().length - 1].text.trim()\n === _this.parent.inputElement.innerHTML.trim())) {\n return;\n }\n if (proxy_1.undo) {\n _this.parent.formatter.saveData();\n }\n };\n }\n items.push(item);\n }\n };\n var this_1 = this;\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n _loop_1(item);\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n /**\n * render method\n * @hidden\n * @deprecated\n */\n BaseToolbar.prototype.render = function (args) {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.toolbarRenderer.renderToolbar(this.getToolbarOptions(args));\n };\n return BaseToolbar;\n}());\nexport { BaseToolbar };\n","import { addClass, isNullOrUndefined, removeClass, select, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport { getIndex } from '../base/util';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getDropDownValue, getFormattedFontSize, getTooltipText } from '../base/util';\nimport * as model from '../models/items';\nimport { dispatchEvent } from '../base/util';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar DropDownButtons = /** @class */ (function () {\n function DropDownButtons(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n DropDownButtons.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n DropDownButtons.prototype.beforeRender = function (args) {\n var item = args.item;\n if (item.cssClass) {\n addClass([args.element], item.cssClass);\n }\n if (item.command === 'Alignments' || item.subCommand === 'JustifyLeft'\n || item.subCommand === 'JustifyRight' || item.subCommand === 'JustifyCenter') {\n args.element.setAttribute('title', getTooltipText(item.subCommand.toLocaleLowerCase(), this.locator));\n }\n };\n DropDownButtons.prototype.dropdownContent = function (width, type, content) {\n return ('<span style=\"display: inline-flex;' + 'width:' + ((type === 'quick') ? 'auto' : width) + '\" >' +\n '<span class=\"e-rte-dropdown-btn-text\">' + content + '</span></span>');\n };\n /**\n * renderDropDowns method\n * @hidden\n * @deprecated\n */\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'formats':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n var formatContent = isNullOrUndefined(_this.parent.format.default) ? formatItem[0].text :\n _this.parent.format.default;\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, formatContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats', items: formatItem, element: targetElement\n });\n break;\n case 'fontname':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem[0].text :\n _this.parent.fontFamily.default;\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, fontNameContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName', items: fontItem, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontFamily.default)) {\n _this.getEditNode().style.fontFamily = _this.parent.fontFamily.default;\n }\n break;\n case 'fontsize':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize[1].text :\n _this.parent.fontSize.default;\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize', items: fontsize, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontSize.default)) {\n _this.getEditNode().style.fontSize = _this.parent.fontSize.default;\n }\n break;\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments', items: model.alignmentItems, element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.getUpdateItems = function (items, value) {\n var dropDownItems = items.slice();\n dropDownItems.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: (value === 'Format' ? 'Formats' : 'Font'), enumerable: true },\n subCommand: { value: (value === 'Format' ? item.value : value), enumerable: true }\n });\n });\n return dropDownItems;\n };\n DropDownButtons.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var type;\n var content;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontFamily':\n if (this.fontNameDropDown) {\n for (var _b = 0, _c = Object.keys(newProp.fontFamily); _b < _c.length; _b++) {\n var fontFamily = _c[_b];\n switch (fontFamily) {\n case 'default':\n case 'width':\n var fontItems = this.fontNameDropDown.items;\n type = !isNullOrUndefined(closest(this.fontNameDropDown.element, '.' + classes.CLS_QUICK_TB)) ?\n 'quick' : 'toolbar';\n var fontNameContent = isNullOrUndefined(this.parent.fontFamily.default) ? fontItems[0].text :\n this.parent.fontFamily.default;\n content = this.dropdownContent(this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItems, fontNameContent, 'text', 'text')));\n this.fontNameDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n this.getEditNode().style.fontFamily = this.parent.fontFamily.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-family');\n }\n break;\n case 'items':\n this.fontNameDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontFamily.items, 'FontName')\n });\n break;\n }\n }\n }\n break;\n case 'fontSize':\n if (this.fontSizeDropDown) {\n for (var _d = 0, _e = Object.keys(newProp.fontSize); _d < _e.length; _d++) {\n var fontSize = _e[_d];\n switch (fontSize) {\n case 'default':\n case 'width':\n var fontsize = this.fontSizeDropDown.items;\n type = !isNullOrUndefined(closest(this.fontSizeDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var fontSizeContent = isNullOrUndefined(this.parent.fontSize.default) ? fontsize[1].text :\n this.parent.fontSize.default;\n content = this.dropdownContent(this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text')));\n this.fontSizeDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n this.getEditNode().style.fontSize = this.parent.fontSize.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-size');\n }\n break;\n case 'items':\n this.fontSizeDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontSize.items, 'FontSize')\n });\n break;\n }\n }\n }\n break;\n case 'format':\n if (this.formatDropDown) {\n for (var _f = 0, _g = Object.keys(newProp.format); _f < _g.length; _f++) {\n var format = _g[_f];\n switch (format) {\n case 'default':\n case 'width':\n var formatItems = this.formatDropDown.items;\n type = !isNullOrUndefined(closest(this.formatDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var formatContent = isNullOrUndefined(this.parent.format.default) ? formatItems[0].text :\n this.parent.format.default;\n content = this.dropdownContent(this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItems, formatContent, 'text', 'text')));\n this.formatDropDown.setProperties({ content: content });\n break;\n case 'types':\n this.formatDropDown.setProperties({\n items: this.getUpdateItems(newProp.format.types, 'Format')\n });\n break;\n }\n }\n }\n break;\n }\n }\n };\n DropDownButtons.prototype.getEditNode = function () {\n return this.parent.contentModule.getEditPanel();\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n /**\n * destroyDropDowns method\n * @hidden\n * @deprecated\n */\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n * @hidden\n * @deprecated\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n /**\n * register method\n * @hidden\n * @deprecated\n */\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n /**\n * getService method\n * @hidden\n * @deprecated\n */\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n * @hidden\n * @deprecated\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n /**\n * addRenderer method\n * @hidden\n * @deprecated\n */\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n /**\n * getRenderer method\n * @hidden\n * @deprecated\n */\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n var value = e.item.controlParent && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar\n && this.parent.quickToolbarModule.tableQTBar.element.contains(e.item.controlParent.element) ? 'Table' : null;\n this.parent.formatter.process(this.parent, e, e.originalEvent, value);\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n model.updateDropDownLocale(this.parent);\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, model.tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = model.tools;\n }\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n if (!this.parent.inlineMode.enable) {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n }\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n case ToolbarType.Scrollable:\n tbMode = 'Scrollable';\n break;\n default:\n tbMode = 'MultiRow';\n }\n if (isIDevice() && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tbMode = ToolbarType.Scrollable;\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice || isIDevice()) {\n return false;\n }\n var tBarMode;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tBarMode = ToolbarType.MultiRow;\n }\n else {\n tBarMode = this.parent.toolbarSettings.type;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: tBarMode,\n target: ele\n });\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n if (!isNullOrUndefined(transformElements[i].contains) && transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && this.parent.iframeSettings.enable && this.parent.inputElement.ownerDocument === e.target) {\n scrollParent = e.target.body;\n }\n else if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0)) + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable && !isIDevice()) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n var divEle = this.parent.element.querySelector('.e-rte-srctextarea');\n var iframeEle = this.parent.element.querySelector('.e-source-content');\n if ((!this.parent.iframeSettings.enable && (!isNOU(divEle) && divEle.style.display === 'block')) ||\n (this.parent.iframeSettings.enable && (!isNOU(iframeEle) && iframeEle.style.display === 'block'))) {\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n }\n };\n /**\n * addFixedTBarClass method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n /**\n * removeFixedTBarClass method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n /**\n * updateItem method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.updateItem = function (args) {\n var item = this.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = this.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n var prefixId = this.parent.inlineMode.enable ? '_quick_' : '_toolbar_';\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + prefixId + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n if (!this.tbElement || (this.parent.inlineMode.enable && (isIDevice() || !Browser.isDevice))) {\n return;\n }\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n setToolbarStatus(options, (this.parent.inlineMode.enable ? true : false));\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n /**\n * getBaseToolbar method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n /**\n * addTBarItem method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n /**\n * enableTBarItems method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable, muteToolbarUpdate) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element) && !muteToolbarUpdate) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * removeTBarItems method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.removeTBarItems = function (items) {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = (this.parent.inlineMode.enable) ? selectAll('.' + classes.CLS_TB_ITEM, this.baseToolbar.toolbarObj.element)\n : selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n /**\n * getExpandTBarPopHeight method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n /**\n * getToolbarHeight method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n /**\n * getToolbarElement method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n /**\n * refreshToolbarOverflow method\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n removeClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (!isNullOrUndefined(tbWrapper)) {\n detach(tbWrapper);\n }\n else if (!isNullOrUndefined(tbElement)) {\n detach(tbElement);\n }\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating && this.getDOMVisibility(this.tbElement)) {\n this.toggleFloatClass(e.args);\n }\n }\n };\n Toolbar.prototype.getDOMVisibility = function (el) {\n if (!el.offsetParent && el.offsetWidth === 0 && el.offsetHeight === 0) {\n return false;\n }\n return true;\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n Toolbar.prototype.tbFocusHandler = function (e) {\n var activeElm = document.activeElement;\n var isToolbaractive = closest(activeElm, '.e-rte-toolbar');\n if (activeElm === this.parent.getToolbarElement() || isToolbaractive === this.parent.getToolbarElement()) {\n var toolbarItem = this.parent.getToolbarElement().querySelectorAll('.e-expended-nav');\n for (var i = 0; i < toolbarItem.length; i++) {\n if (isNOU(this.parent.getToolbarElement().querySelector('.e-insert-table-btn'))) {\n toolbarItem[i].setAttribute('tabindex', '0');\n }\n else {\n toolbarItem[i].setAttribute('tabindex', '1');\n }\n }\n }\n };\n Toolbar.prototype.tbKeydownHandler = function (e) {\n if (e.target.classList.contains('e-dropdown-btn') ||\n e.target.getAttribute('id') === this.parent.getID() + '_toolbar_CreateTable') {\n e.target.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.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 * @hidden\n * @deprecated\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n this.refreshToolbar();\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.refreshToolbar();\n };\n Toolbar.prototype.refreshToolbar = function () {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement || tbWrapper) {\n this.destroyToolbar();\n }\n if (this.parent.toolbarSettings.enable) {\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from '@syncfusion/ej2-base';\nimport { Base } from '@syncfusion/ej2-base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222,\n ']': 221,\n '[': 219,\n '=': 187\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n * <div id='testEle'> </div>;\n * <script>\n * let node: HTMLElement = document.querySelector('#testEle');\n * let kbInstance = new KeyboardEvents({\n * element: node,\n * keyConfigs:{ selectAll : 'ctrl+a' },\n * keyAction: function (e:KeyboardEvent, action:string) {\n * // handler function code\n * }\n * });\n * </script>\n * ```\n * @hidden\n * @deprecated\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n * @param {HTMLElement} element\n * @param {KeyboardEventsModel} options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n * @return {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n * @param newProp\n * @param oldProp\n * @returns {void}\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n ;\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n * @param {string} config - configuration data\n * returns {KeyData}\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string \n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { select, detach, extend } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex, toObjectLowerCase } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n /**\n * renderColorPickerInput method\n * @hidden\n * @deprecated\n */\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n var targetID;\n var options;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: ('#' + targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'fontcolor', _this.fontColorPicker);\n break;\n case 'backgroundcolor':\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: ('#' + targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'backgroundcolor', _this.backgroundColorPicker);\n break;\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n /**\n * destroyColorPicker method\n * @hidden\n * @deprecated\n */\n ColorPickerInput.prototype.destroyColorPicker = function () {\n if (this.fontColorPicker && !this.fontColorPicker.isDestroyed) {\n this.fontColorPicker.destroy();\n }\n if (this.backgroundColorPicker && !this.backgroundColorPicker.isDestroyed) {\n this.backgroundColorPicker.destroy();\n }\n if (this.fontColorDropDown && !this.fontColorDropDown.isDestroyed) {\n var innerEle = this.fontColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.fontColorDropDown.destroy();\n }\n if (this.backgroundColorDropDown && !this.backgroundColorDropDown.isDestroyed) {\n var innerEle = this.backgroundColorDropDown.element.querySelector('.e-rte-color-content');\n if (innerEle) {\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n ColorPickerInput.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontColor':\n if (this.fontColorPicker) {\n for (var _b = 0, _c = Object.keys(newProp.fontColor); _b < _c.length; _b++) {\n var font = _c[_b];\n switch (font) {\n case 'default':\n this.fontColorPicker.setProperties({ value: newProp.fontColor.default });\n element = this.fontColorDropDown.element;\n var fontBorder = element.querySelector('.' + this.tools['fontcolor'].icon);\n fontBorder.style.borderBottomColor = newProp.fontColor.default;\n break;\n case 'mode':\n this.fontColorPicker.setProperties({ mode: newProp.fontColor.mode });\n break;\n case 'columns':\n this.fontColorPicker.setProperties({ columns: newProp.fontColor.columns });\n break;\n case 'colorCode':\n this.fontColorPicker.setProperties({ presetColors: newProp.fontColor.colorCode });\n break;\n case 'modeSwitcher':\n this.fontColorPicker.setProperties({ modeSwitcher: newProp.fontColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n case 'backgroundColor':\n if (this.backgroundColorPicker) {\n for (var _d = 0, _e = Object.keys(newProp.backgroundColor); _d < _e.length; _d++) {\n var background = _e[_d];\n switch (background) {\n case 'default':\n this.backgroundColorPicker.setProperties({ value: newProp.backgroundColor.default });\n element = this.backgroundColorDropDown.element;\n var backgroundBorder = element.querySelector('.' + this.tools['backgroundcolor'].icon);\n backgroundBorder.style.borderBottomColor = newProp.backgroundColor.default;\n break;\n case 'mode':\n this.backgroundColorPicker.setProperties({ mode: newProp.backgroundColor.mode });\n break;\n case 'columns':\n this.backgroundColorPicker.setProperties({ columns: newProp.backgroundColor.columns });\n break;\n case 'colorCode':\n this.backgroundColorPicker.setProperties({ presetColors: newProp.backgroundColor.colorCode });\n break;\n case 'modeSwitcher':\n this.backgroundColorPicker.setProperties({ modeSwitcher: newProp.backgroundColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n }\n }\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU, isBlazor } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n /**\n * render method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.element.setAttribute('aria-owns', this.parent.getID());\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = (y >= 0) ? y : e.y + 5;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom':\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n case 'right':\n if (type === 'inline') {\n x = e.windowWidth - (e.popWidth + e.bodyRightSpace + 10);\n }\n else {\n x = e.x - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n /**\n * showPopup method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var _this = this;\n var eventArgs = isBlazor() ? { cancel: false, targetElement: target } :\n { popup: this.popupObj, cancel: false, targetElement: target };\n this.parent.trigger(events.beforeQuickToolbarOpen, eventArgs, function (beforeQuickToolbarArgs) {\n if (!beforeQuickToolbarArgs.cancel) {\n var editPanelTop = void 0;\n var editPanelHeight = void 0;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent_1 = _this.parent.element;\n var toolbarAvail = !isNullOrUndefined(_this.parent.getToolbar());\n var tbHeight = toolbarAvail && _this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && _this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([_this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice && !isIDevice()) {\n addClass([_this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (_this.parent.iframeSettings.enable) {\n var cntEle = _this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!_this.parent.inlineMode.enable && !closest(target, 'table')) {\n _this.parent.disableToolbarItem(_this.parent.toolbarSettings.items);\n _this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([_this.element], document.body);\n _this.popupObj.position.X = x + 20;\n _this.popupObj.position.Y = y + ((_this.parent.iframeSettings.enable) ? 35 : 20);\n _this.popupObj.dataBind();\n _this.popupObj.element.classList.add('e-popup-open');\n _this.dropDownButtons.renderDropDowns({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n _this.colorPickerObj.renderColorPickerInput({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: _this.popupObj.element,\n popHeight: _this.popupObj.element.offsetHeight,\n popWidth: _this.popupObj.element.offsetWidth,\n parentElement: parent_1,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent_1.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n _this.setPosition(showPopupData);\n }\n if (!_this.parent.inlineMode.enable) {\n _this.checkCollision(showPopupData, 'parent', '');\n }\n _this.checkCollision(showPopupData, 'document', ((_this.parent.inlineMode.enable) ? 'inline' : ''));\n _this.popupObj.element.classList.remove('e-popup-open');\n removeClass([_this.element], [classes.CLS_HIDE]);\n _this.popupObj.show({ name: 'ZoomIn', duration: (Browser.isIE ? 250 : 400) });\n setStyleAttribute(_this.element, {\n maxWidth: _this.parent.element.offsetWidth + 'px'\n });\n addClass([_this.element], [classes.CLS_POP]);\n _this.isDOMElement = true;\n }\n });\n };\n /**\n * hidePopup method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice && !isIDevice()) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n var args = isBlazor() ? { element: this.popupObj.element } : this.popupObj;\n this.parent.trigger(events.quickToolbarClose, args);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n /**\n * addEventListener method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n if (e.newProp.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n else {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n break;\n }\n }\n }\n };\n /**\n * removeEventListener method\n * @hidden\n * @deprecated\n */\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport { isBlazor } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n * @hidden\n * @deprecated\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.quickToolbarOpen = function () {\n var args = isBlazor() ? { element: this.popupObj.element } : this.popupObj;\n this.parent.trigger(events.quickToolbarOpen, args);\n };\n /**\n * renderPopup method\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.quickToolbarOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n PopupRenderer.prototype.setPanel = function (panel) {\n this.popupPanel = panel;\n };\n return PopupRenderer;\n}());\nexport { PopupRenderer };\n","import { select, isNullOrUndefined, Browser, addClass, removeClass, EventHandler, closest } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass, isIDevice } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n /**\n * createQTBar method\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n if (this.parent.inlineMode.enable && this.parent.inlineMode.onSelection && isIDevice()) {\n EventHandler.add(this.contentRenderer.getDocument(), 'selectionchange', this.selectionChangeHandler, this);\n }\n };\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.renderQuickToolbars = function () {\n if (this.linkQTBar || this.imageQTBar || this.textQTBar || this.tableQTBar) {\n return;\n }\n this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);\n this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);\n this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);\n this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);\n this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);\n this.tableQTBar = this.createQTBar('Table', 'MultiRow', this.parent.quickToolbarSettings.table, RenderType.TableToolbar);\n this.renderFactory.addRenderer(RenderType.TableToolbar, this.tableQTBar);\n if (this.linkQTBar) {\n EventHandler.add(this.linkQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n QuickToolbar.prototype.renderInlineQuickToolbar = function () {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.inlineQTBar = this.createQTBar('Inline', 'MultiRow', this.parent.toolbarSettings.items, RenderType.InlineToolbar);\n this.renderFactory.addRenderer(RenderType.InlineToolbar, this.inlineQTBar);\n EventHandler.add(this.inlineQTBar.element, 'mousedown', this.onMouseDown, this);\n }\n };\n /**\n * Method for showing the inline quick toolbar\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 * @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 * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close') && document.body.contains(this.linkQTBar.element)) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close') && document.body.contains(this.textQTBar.element)) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close') && document.body.contains(this.imageQTBar.element)) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close') && document.body.contains(this.tableQTBar.element)) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.showInlineQTBar(x, y, target); }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n var coordinates = void 0;\n coordinates = e.args.touches ? e.args.changedTouches[0] : e.args;\n var range = this.parent.getRange();\n var target = e.args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n if (isIDevice() && e.touchData && e.touchData.prevClientX !== e.touchData.clientX\n && e.touchData.prevClientY !== e.touchData.clientY) {\n return;\n }\n this.hideInlineQTBar();\n this.offsetX = coordinates.pageX;\n this.offsetY = pageYOffset(coordinates, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n var closestAnchor = closest(target, 'a');\n target = closestAnchor ? closestAnchor : target;\n if (target.tagName !== 'IMG' && target.tagName !== 'A' && (!closest(target, 'td,th') || !range.collapsed)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n }\n };\n QuickToolbar.prototype.selectionChangeHandler = function (e) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () { _this.onSelectionChange(e); }, 1000);\n };\n QuickToolbar.prototype.onSelectionChange = function (e) {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n return;\n }\n var selection = this.contentRenderer.getDocument().getSelection();\n if (!selection.isCollapsed) {\n this.mouseUpHandler({ args: e });\n }\n };\n /**\n * getInlineBaseToolbar method\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n if (isIDevice()) {\n EventHandler.remove(document, 'selectionchange', this.selectionChangeHandler);\n }\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n /**\n * addEventListener\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n this.parent.on(events.drop, this.renderQuickToolbars, this);\n this.wireInlineQTBarEvents();\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n /**\n * removeEventListener\n * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n this.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 * @hidden\n * @deprecated\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.quickToolbarSettings)) {\n for (var _i = 0, _a = Object.keys(e.newProp.quickToolbarSettings); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'actionOnScroll':\n if (e.newProp.quickToolbarSettings.actionOnScroll === 'none') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n else {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n this.addEventListener();\n };\n /**\n * renderCount method\n * @hidden\n * @deprecated\n */\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.parent.editorMode === 'Markdown' ? this.editPanel.value.trim() :\n this.editPanel.textContent.trim();\n this.htmlLength = htmlText.length;\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n /**\n * Destroys the Count.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Count.prototype.destroy = function () {\n if (this.element && !isNullOrUndefined(this.parent.element.querySelector('.' + CLS_COUNT))) {\n detach(this.element);\n }\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * MarkdownSelection internal module\n * @hidden\n * @deprecated\n */\nvar MarkdownSelection = /** @class */ (function () {\n function MarkdownSelection() {\n }\n /**\n * markdown getLineNumber method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getLineNumber = function (textarea, point) {\n return textarea.value.substr(0, point).split('\\n').length;\n };\n /**\n * markdown getSelectedText method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedText = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n return textarea.value.substring(start, end);\n };\n /**\n * markdown getAllParents method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getAllParents = function (value) {\n return value.split('\\n');\n };\n /**\n * markdown getSelectedLine method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedLine = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var index = this.getLineNumber(textarea, textarea.selectionStart);\n return lines[index - 1];\n };\n /**\n * markdown getLine method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getLine = function (textarea, index) {\n var lines = this.getAllParents(textarea.value);\n return lines[index];\n };\n /**\n * markdown getSelectedParentPoints method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedParentPoints = function (textarea) {\n var lines = this.getAllParents(textarea.value);\n var start = this.getLineNumber(textarea, textarea.selectionStart);\n var end = this.getLineNumber(textarea, textarea.selectionEnd);\n var parents = this.getSelectedText(textarea).split('\\n');\n var selectedPoints = [];\n var selectedLine = lines[start - 1];\n var startLength = lines.slice(0, start - 1).join('').length;\n var firstPoint = {};\n firstPoint.line = start - 1;\n firstPoint.start = startLength + firstPoint.line;\n firstPoint.end = selectedLine !== '' ? firstPoint.start +\n selectedLine.length + 1 : firstPoint.start + selectedLine.length;\n firstPoint.text = selectedLine;\n selectedPoints.push(firstPoint);\n if (parents.length > 1) {\n for (var i = 1; i < parents.length - 1; i++) {\n var points = {};\n points.line = selectedPoints[i - 1].line + 1;\n points.start = parents[i] !== '' ? selectedPoints[i - 1].end : selectedPoints[i - 1].end;\n points.end = points.start + parents[i].length + 1;\n points.text = parents[i];\n selectedPoints.push(points);\n }\n var lastPoint = {};\n lastPoint.line = selectedPoints[selectedPoints.length - 1].line + 1;\n lastPoint.start = selectedPoints[selectedPoints.length - 1].end;\n lastPoint.end = lastPoint.start + lines[end - 1].length + 1;\n lastPoint.text = lines[end - 1];\n selectedPoints.push(lastPoint);\n }\n return selectedPoints;\n };\n /**\n * markdown setSelection method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.setSelection = function (textarea, start, end) {\n textarea.setSelectionRange(start, end);\n textarea.focus();\n };\n /**\n * markdown save method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.save = function (start, end) {\n this.selectionStart = start;\n this.selectionEnd = end;\n };\n /**\n * markdown restore method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.restore = function (textArea) {\n this.setSelection(textArea, this.selectionStart, this.selectionEnd);\n };\n /**\n * markdown isStartWith method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.isStartWith = function (line, command) {\n var isStart = false;\n if (line) {\n var reg = line.trim() === command.trim() ?\n new RegExp('^(' + this.replaceSpecialChar(command.trim()) + ')', 'gim') :\n new RegExp('^(' + this.replaceSpecialChar(command) + ')', 'gim');\n isStart = reg.test(line.trim());\n }\n return isStart;\n };\n /**\n * markdown replaceSpecialChar method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.replaceSpecialChar = function (value) {\n return value.replace(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/g, '\\\\$&');\n };\n /**\n * markdown isClear method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.isClear = function (parents, regex) {\n var isClear = false;\n for (var i = 0; i < parents.length; i++) {\n if (new RegExp(regex, 'gim').test(parents[i].text)) {\n return true;\n }\n }\n return isClear;\n };\n /**\n * markdown getSelectedInlinePoints method\n * @hidden\n * @deprecated\n */\n MarkdownSelection.prototype.getSelectedInlinePoints = function (textarea) {\n var start = textarea.selectionStart;\n var end = textarea.selectionEnd;\n var selection = this.getSelectedText(textarea);\n return { start: start, end: end, text: selection };\n };\n return MarkdownSelection;\n}());\nexport { MarkdownSelection };\n","import { MarkdownSelection } from '../../markdown-parser/plugin/markdown-selection';\nimport * as events from '../base/constant';\n/**\n * MarkdownToolbarStatus module for refresh the toolbar status\n */\nvar MarkdownToolbarStatus = /** @class */ (function () {\n function MarkdownToolbarStatus(parent) {\n this.toolbarStatus = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n inlinecode: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null\n };\n this.selection = new MarkdownSelection();\n this.parent = parent;\n this.element = this.parent.contentModule.getEditPanel();\n this.addEventListener();\n }\n MarkdownToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n MarkdownToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.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 this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n MarkdownToolbarStatus.prototype.isListsApplied = function (lines, type) {\n var isApply = true;\n if (type === 'OL') {\n for (var i = 0; i < lines.length; i++) {\n var lineSplit = lines[i].text.trim().split(' ', 2)[0] + ' ';\n if (!/^[\\d.]+[ ]+$/.test(lineSplit)) {\n isApply = false;\n break;\n }\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {\n isApply = false;\n break;\n }\n }\n }\n return isApply;\n };\n MarkdownToolbarStatus.prototype.currentFormat = function (lines, documentNode) {\n var format = 'p';\n var keys = Object.keys(this.parent.formatter.formatTags);\n var direction = this.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.parent.formatter.formatTags[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n if (this.codeFormat()) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n MarkdownToolbarStatus.prototype.codeFormat = function () {\n var isFormat = false;\n var textArea = this.parent.inputElement;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdPre = this.parent.formatter.formatTags.pre;\n var selectedText = this.getSelectedText(textArea);\n if (selectedText !== '' && selectedText === selectedText.toLocaleUpperCase()) {\n return true;\n }\n else if (selectedText === '') {\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toLocaleUpperCase() && afterText === afterText.toLocaleUpperCase()) {\n return true;\n }\n }\n if ((this.isCode(splitText[0], cmdPre) && this.isCode(splitText[1], cmdPre)) &&\n (splitText[0].match(this.multiCharRegx(cmdPre)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdPre)).length % 2 === 1)) {\n isFormat = true;\n }\n return isFormat;\n };\n MarkdownToolbarStatus.prototype.getSelectedText = function (textarea) {\n return textarea.value.substring(textarea.selectionStart, textarea.selectionEnd);\n };\n MarkdownToolbarStatus.prototype.isCode = function (text, cmd) {\n return text.search('\\\\' + cmd + '') !== -1;\n };\n MarkdownToolbarStatus.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n return MarkdownToolbarStatus;\n}());\nexport { MarkdownToolbarStatus };\n","import * as events from '../base/constant';\n/**\n * `ExecCommandCallBack` module is used to run the editor manager command\n */\nvar ExecCommandCallBack = /** @class */ (function () {\n function ExecCommandCallBack(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ExecCommandCallBack.prototype.addEventListener = function () {\n this.parent.on(events.execCommandCallBack, this.commandCallBack, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ExecCommandCallBack.prototype.commandCallBack = function (args) {\n if (args.requestType !== 'Undo' && args.requestType !== 'Redo') {\n this.parent.formatter.saveData();\n }\n this.parent.notify(events.toolbarRefresh, { args: args });\n this.parent.notify(events.count, {});\n };\n ExecCommandCallBack.prototype.removeEventListener = function () {\n this.parent.off(events.execCommandCallBack, this.commandCallBack);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ExecCommandCallBack;\n}());\nexport { ExecCommandCallBack };\n","import { extend, isNullOrUndefined, Browser, isBlazor } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n * @hidden\n * @deprecated\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n * @param {IRichTextEditor} self\n * @param {ActionBeginEventArgs} args\n * @param {MouseEvent|KeyboardEvent} event\n * @param {IItemCollectionArgs} value\n * @hidden\n * @deprecated\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var _this = this;\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n var saveSelection;\n if (self.editorMode === 'HTML') {\n saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());\n }\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && 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 if (isBlazor()) {\n delete args.item;\n delete args.itemCollection;\n }\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n if (action_1 === 'paste' || action_1 === 'cut' || action_1 === 'copy') {\n event.preventDefault();\n }\n }\n });\n }\n var isTableModule = isNullOrUndefined(self.tableModule) ? true : self.tableModule ?\n self.tableModule.ensureInsideTableList : false;\n if ((event.which === 9 && isTableModule) || event.which !== 9) {\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value\n });\n }\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value }, true);\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n if (_this.getUndoRedoStack().length === 0 && actionBeginArgs.item.command !== 'Links'\n && actionBeginArgs.item.command !== 'Images') {\n _this.saveData();\n }\n self.isBlur = false;\n self.contentModule.getEditPanel().focus();\n if (self.editorMode === 'HTML') {\n saveSelection.restore();\n }\n var command = actionBeginArgs.item.subCommand.toLocaleLowerCase();\n if (command === 'paste' || command === 'cut' || command === 'copy') {\n self.clipboardAction(command, event);\n }\n else {\n _this.editorManager.observer.notify(CONSTANT.checkUndo, { subCommand: actionBeginArgs.item.subCommand });\n _this.editorManager.execCommand(actionBeginArgs.item.command, actionBeginArgs.item.subCommand, event, _this.onSuccess.bind(_this, self), actionBeginArgs.item.value, actionBeginArgs.item.subCommand === 'Pre' && args.name === 'dropDownSelect' ?\n { name: args.name } : value, ('#' + self.getID() + ' iframe'));\n }\n }\n });\n }\n if (isNullOrUndefined(event) || event && event.action !== 'copy') {\n this.enableUndo(self);\n }\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n /**\n * onKeyHandler method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n self.notify(CONSTANT.contentChanged, {});\n _this.enableUndo(self);\n }\n });\n };\n /**\n * onSuccess method\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 * @hidden\n * @deprecated\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n /**\n * getUndoRedoStack method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n /**\n * enableUndo method\n * @hidden\n * @deprecated\n */\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n self.trigger(CONSTANT.toolbarStatusUpdate, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n self.trigger(CONSTANT.toolbarStatusUpdate, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for Common\n */\n/**\n * Keydown event trigger\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/**\n * Undo and Redo action HTML plugin events\n * @hidden\n */\nexport var ACTION = 'action';\n/**\n * Formats plugin events\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/**\n * Keydown handler event trigger\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/**\n * List plugin events\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/**\n * Keyup handler event trigger\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/**\n * Keyup event trigger\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/**\n * Model changed plugin event trigger\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/**\n * Model changed event trigger\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n/**\n * PasteCleanup plugin for MSWord content\n * @hidden\n */\nexport var MS_WORD_CLEANUP_PLUGIN = 'ms_word_cleanup_plugin';\n/**\n * PasteCleanup for MSWord content\n * @hidden\n */\nexport var MS_WORD_CLEANUP = 'ms_word_cleanup';\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n * @hidden\n */\nvar MDLists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n */\n function MDLists(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLists.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LISTS_COMMAND, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, this.keyUpHandler, this);\n };\n MDLists.prototype.keyDownHandler = function (event) {\n switch (event.event.which) {\n case 9:\n this.tabKey(event);\n break;\n }\n switch (event.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: event.callBack });\n event.event.preventDefault();\n break;\n }\n };\n MDLists.prototype.keyUpHandler = function (event) {\n switch (event.event.which) {\n case 13:\n this.enterKey(event);\n break;\n }\n };\n MDLists.prototype.tabKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var addedLength = 0;\n var isNotFirst = this.isNotFirstLine(textArea, parents[0]);\n if (!isNotFirst && !event.event.shiftKey) {\n this.restore(textArea, start, end + addedLength, event);\n return;\n }\n var listFormat = this.olListType();\n var regex = this.getListRegex();\n this.currentAction = this.getAction(parents[0].text);\n for (var i = 0; i < parents.length; i++) {\n var prevIndex = event.event.shiftKey ? parents[i].line - 1 : parents[i].line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n if (prevLine && (!event.event.shiftKey && isNotFirst || (event.event.shiftKey))) {\n var prevLineSplit = prevLine.split('. ');\n var tabSpace = '\\t';\n var tabSpaceLength = event.event.shiftKey ? -tabSpace.length : tabSpace.length;\n var splitTab = parents[i].text.split('\\t');\n if (event.event.shiftKey && splitTab.length === 1) {\n break;\n }\n if (this.currentAction === 'OL' && /^\\d+$/.test(prevLineSplit[0].trim()) && listFormat) {\n event.event.preventDefault();\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n var curTabSpace = this.getTabSpace(parents[i].text);\n var prevTabSpace = this.getTabSpace(prevLine);\n var splitText = parents[i].text.split('. ');\n if (curTabSpace === prevTabSpace) {\n this.changeTextAreaValue(splitText, this.nextOrderedListValue(prevLineSplit[0].trim()), event, textArea, parents, i, end);\n }\n else if (prevTabSpace < curTabSpace) {\n this.changeTextAreaValue(splitText, '1. ', event, textArea, parents, i, end);\n }\n else {\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n var prevLineSplit_1 = prevLine.trim().split('. ');\n if (/^\\d+$/.test(prevLineSplit_1[0])) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n this.changeTextAreaValue(splitText, this.nextOrderedListValue(prevLineSplit_1[0]), event, textArea, parents, i, end);\n break;\n }\n }\n }\n }\n }\n else if (this.currentAction === 'UL' && regex.test(prevLine.trim()) || !listFormat) {\n event.event.preventDefault();\n parents[i].text = event.event.shiftKey ? splitTab.splice(1, splitTab.length).join('\\t') : tabSpace + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n }\n start = i === 0 ? start + tabSpaceLength : start;\n addedLength += tabSpaceLength;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? parents[j].start + tabSpaceLength : parents[j].start;\n parents[j].end = parents[j].end + tabSpaceLength;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.changeTextAreaValue = function (splitText, prefixValue, event, textArea, parents, k, end) {\n var prefix = prefixValue;\n splitText.splice(0, 1);\n var textAreaLength = this.selection.getAllParents(textArea.value).length;\n var changedList = '';\n var curTabSpace = this.getTabSpace(parents[k].text);\n var prefixNumber = parseInt(prefix.split('.')[0], null);\n var nestedTabSpace = this.getTabSpace(parents[k].text);\n var nestedlistorder = true;\n var nestedListStart = true;\n var curTabSpaceLength;\n var nextPrefixValue = -1;\n var traversIncreased = true;\n var nextLineLength = 0;\n var lineBreak = '';\n changedList = (this.selection.getLine(textArea, parents[0].line + 1) !== '') ?\n '' : changedList + textArea.value.substr(parents[0].end, textArea.value.length);\n for (var i = 1; i < textAreaLength &&\n !isNullOrUndefined(this.selection.getLine(textArea, parents[0].line + i))\n && this.selection.getLine(textArea, parents[0].line + i) !== ''; i++) {\n var nextLine = this.selection.getLine(textArea, parents[0].line + i);\n var nextTabSpace = this.getTabSpace(nextLine);\n var nextLineSplit = nextLine.split('. ');\n if (nextLineSplit.length === 1) {\n changedList += textArea.value.substr(parents[0].end + nextLineLength, textArea.value.length);\n break;\n }\n else {\n nextLineLength += nextLine.length;\n var shiftTabTargetList = false;\n curTabSpaceLength = event.event.shiftKey ? curTabSpace.length + 1 : curTabSpace.length - 1;\n if (nextTabSpace.length > nestedTabSpace.length) {\n traversIncreased = false;\n }\n if (curTabSpace.length !== nextTabSpace.length && nextTabSpace.length < nestedTabSpace.length) {\n nestedListStart = true;\n nestedlistorder = false;\n shiftTabTargetList = event.event.shiftKey &&\n curTabSpace.length === nextTabSpace.length ? (nestedListStart = false, true) : false;\n }\n else if (traversIncreased && event.event.shiftKey &&\n curTabSpace.length === nextTabSpace.length && nextTabSpace.length === nestedTabSpace.length) {\n nestedListStart = false;\n shiftTabTargetList = true;\n }\n lineBreak = changedList === '' ? '' : '\\n';\n if (curTabSpaceLength === nextTabSpace.length && nestedListStart) {\n var nextPrefix = event.event.shiftKey ?\n (nextPrefixValue++, this.nextOrderedListValue(nextPrefixValue.toString()))\n : this.previousOrderedListValue(nextLineSplit[0]);\n nextLineSplit.splice(0, 1);\n changedList = changedList + lineBreak + nextTabSpace + nextPrefix + nextLineSplit.join('. ');\n }\n else if (curTabSpace.length === nextTabSpace.length && nestedlistorder || shiftTabTargetList) {\n var nextPrefix = this.nextOrderedListValue(prefixNumber.toString());\n prefixNumber++;\n nextLineSplit.splice(0, 1);\n changedList = changedList + lineBreak + nextTabSpace + nextPrefix + nextLineSplit.join('. ');\n }\n else {\n changedList = changedList + lineBreak + nextLine;\n nestedListStart = false;\n }\n nestedTabSpace = this.getTabSpace(nextLine);\n }\n }\n parents[k].text = this.getTabSpace(parents[k].text) + prefix + splitText.join('. ') + '\\n';\n textArea.value = textArea.value.substr(0, parents[k].start) + parents[k].text + changedList;\n };\n MDLists.prototype.getTabSpace = function (line) {\n var split = line.split('\\t');\n var tabs = '';\n for (var i = 0; i < split.length; i++) {\n if (split[i] === '') {\n tabs += '\\t';\n }\n else {\n break;\n }\n }\n return tabs;\n };\n MDLists.prototype.isNotFirstLine = function (textArea, points) {\n var currentLine = points.text;\n var prevIndex = points.line - 1;\n var prevLine = this.selection.getLine(textArea, prevIndex);\n var regex = this.getListRegex();\n var isNotFirst = false;\n var regexFirstCondition;\n if (prevLine) {\n this.currentAction = this.getAction(prevLine);\n var prevLineSplit = prevLine.split('. ');\n regexFirstCondition = this.currentAction === 'OL' ? /^\\d+$/.test(prevLineSplit[0].trim()) : regex.test(prevLine.trim());\n }\n if (prevLine && regexFirstCondition) {\n var curTabSpace = this.getTabSpace(currentLine);\n var prevTabSpace = this.getTabSpace(prevLine);\n isNotFirst = curTabSpace === prevTabSpace ? true : isNotFirst;\n for (; prevTabSpace.length > curTabSpace.length; null) {\n prevIndex = prevIndex - 1;\n prevLine = this.selection.getLine(textArea, prevIndex);\n var prevLineSplit = prevLine.trim().split('. ');\n var regexSecondCondition = this.currentAction === 'OL' ?\n /^\\d+$/.test(prevLineSplit[0]) : regex.test(prevLine.trim());\n if (regexSecondCondition) {\n prevTabSpace = this.getTabSpace(prevLine);\n if (prevTabSpace.length <= curTabSpace.length) {\n isNotFirst = true;\n break;\n }\n }\n }\n }\n return isNotFirst;\n };\n MDLists.prototype.getAction = function (line) {\n var ol = line.split('. ')[0];\n var currentState = /^\\d+$/.test(ol.trim());\n var ul = line.trim().split(new RegExp('^(' + this.selection.replaceSpecialChar(this.syntax.UL).trim() + ')'))[1];\n return (currentState ? 'OL' : ul ? 'UL' : 'NOTLIST');\n };\n MDLists.prototype.nextOrderedListValue = function (previousLine) {\n var currentValue = parseInt(previousLine, null);\n var nextValue = currentValue + 1;\n return nextValue.toString() + '. ';\n };\n MDLists.prototype.previousOrderedListValue = function (previousLine) {\n var currentValue = parseInt(previousLine, null);\n var nextValue = currentValue - 1;\n return nextValue.toString() + '. ';\n };\n MDLists.prototype.enterKey = function (event) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prevLine = this.selection.getLine(textArea, parents[0].line - 1);\n var listFormat = this.olListType();\n var regex = this.getListRegex();\n var prevLineSplit = [];\n if (!isNullOrUndefined(prevLine)) {\n prevLineSplit = prevLine.split('. ');\n this.currentAction = this.getAction(prevLine);\n }\n var addedLength = 0;\n if (this.currentAction === 'OL' && prevLineSplit.length > 1 && /^\\d+$/.test(prevLineSplit[0].trim()) && listFormat\n && prevLineSplit[1] !== '') {\n var tabSpace = this.getTabSpace(prevLine);\n this.currentAction = this.getAction(prevLine);\n var prefix = this.nextOrderedListValue(prevLineSplit[0]);\n parents[0].text = tabSpace + prefix + parents[0].text;\n var textAreaLength = this.selection.getAllParents(textArea.value).length;\n var changedList = '\\n';\n var curTabSpace = this.getTabSpace(prevLine);\n var nestedTabSpace = this.getTabSpace(parents[0].text);\n var nestedListOrder = true;\n for (var i = 1; i < textAreaLength &&\n textArea.value.substr(parents[0].end, textArea.value.length) !== ''; i++) {\n var nextLine = this.selection.getLine(textArea, parents[0].line + i);\n if (isNullOrUndefined(nextLine)) {\n changedList = changedList + '';\n }\n else {\n var nextLineSplit = nextLine.split('. ');\n var nextTabSpace = this.getTabSpace(nextLine);\n if (nextTabSpace.length < nestedTabSpace.length) {\n nestedListOrder = false;\n }\n if (nextLineSplit.length > 1 && /^\\d+$/.test(nextLineSplit[0].trim()) &&\n curTabSpace.length === nextTabSpace.length && nestedListOrder) {\n var nextPrefix = this.nextOrderedListValue(nextLineSplit[0]);\n nextLineSplit.splice(0, 1);\n changedList = changedList + nextTabSpace + nextPrefix + nextLineSplit.join('. ') + '\\n';\n }\n else {\n changedList = changedList + nextLine + '\\n';\n nestedTabSpace = this.getTabSpace(nextLine);\n }\n }\n }\n textArea.value = textArea.value.substr(0, parents[0].start) + curTabSpace +\n prefix + this.selection.getLine(textArea, parents[0].line) + changedList;\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n }\n else if (this.currentAction === 'UL' && regex.test(prevLine.trim()) &&\n prevLine.trim().replace(regex, '') !== '' || this.currentAction === 'OL' && !listFormat) {\n var tabSpace = this.getTabSpace(prevLine);\n var prefix = this.syntax[this.currentAction];\n parents[0].text = tabSpace + prefix + parents[0].text +\n (parents[0].text.trim().length > 0 ? '\\n' : '');\n textArea.value = textArea.value.substr(0, parents[0].start) + parents[0].text +\n textArea.value.substr(parents[0].end, textArea.value.length);\n start = start + prefix.length + tabSpace.length;\n addedLength += prefix.length + tabSpace.length;\n }\n this.restore(textArea, start, end + addedLength, event);\n };\n MDLists.prototype.olListType = function () {\n var olSyntaxList = this.syntax.OL.split('.,');\n var listType = olSyntaxList.length === 1 ? null :\n parseInt(olSyntaxList[2].trim(), null) - parseInt(olSyntaxList[0].trim(), null);\n if (listType) {\n return 1;\n }\n else {\n return 0;\n }\n };\n MDLists.prototype.applyListsHandler = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n this.currentAction = e.subCommand;\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var startLength = 0;\n var endLength = 0;\n var parents = this.selection.getSelectedParentPoints(textArea);\n var prefix = '';\n var listFormat;\n var regex;\n listFormat = this.olListType();\n var perfixObj = {};\n for (var i = 0; i < parents.length; i++) {\n if (listFormat) {\n regex = this.currentAction === 'OL' ? i + listFormat + '. ' : this.syntax[this.currentAction];\n }\n else {\n regex = this.currentAction === 'OL' ? this.syntax.OL : this.syntax[this.currentAction];\n }\n if (!this.selection.isStartWith(parents[i].text, regex)) {\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n var preLineTabSpaceLength = !isNullOrUndefined(parents[i - 1]) ?\n this.getTabSpace(parents[i - 1].text).length : 0;\n var replace = this.appliedLine(parents[i].text, regex, perfixObj, preLineTabSpaceLength);\n prefix = replace.line ? prefix : regex;\n parents[i].text = replace.line ? replace.line : prefix + parents[i].text;\n replace.space = replace.space ? replace.space : 0;\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start + prefix.length + replace.space) > 0 ?\n start + prefix.length + replace.space : 0 : start;\n addedLength += prefix.length + replace.space;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? prefix.length +\n parents[j].start + replace.space : parents[j].start;\n parents[j].end = prefix.length + parents[j].end + replace.space;\n }\n }\n this.restore(textArea, start, end + addedLength, null);\n }\n else {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start + endLength) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end + endLength, textArea.value.length);\n endLength -= regex.length;\n startLength = regex.length;\n this.restore(textArea, start - startLength, end + endLength, null);\n }\n }\n this.restore(textArea, null, null, e);\n };\n MDLists.prototype.appliedLine = function (line, prefixPattern, perfixObj, preTabSpaceLength) {\n var points = {};\n var regex = new RegExp('^[' + this.syntax.UL.trim() + ']');\n var lineSplit = line.split('. ');\n var currentPrefix = lineSplit[0] + '. ';\n var isExist = regex.test(line.trim()) || line.trim() === this.syntax.OL.trim()\n || line.trim() === this.syntax.UL.trim() || /^\\d+$/.test(lineSplit[0].trim());\n var listFormat = this.olListType();\n var curTabSpaceLength = this.getTabSpace(line).length;\n if (this.currentAction === 'OL' && listFormat) {\n perfixObj[curTabSpaceLength.toString()] = !isNullOrUndefined(perfixObj[curTabSpaceLength.toString()]) ?\n perfixObj[curTabSpaceLength.toString()].valueOf() + 1 : 1;\n prefixPattern = perfixObj[curTabSpaceLength.toString()].valueOf().toString() + '. ';\n if (!isNullOrUndefined(preTabSpaceLength) && preTabSpaceLength > curTabSpaceLength) {\n perfixObj[preTabSpaceLength.toString()] = 0;\n }\n }\n if (isExist) {\n var replace = void 0;\n var pattern = void 0;\n var space = 0;\n if (regex.test(line.trim())) {\n pattern = this.syntax.UL;\n replace = prefixPattern;\n points.space = prefixPattern.trim().length - this.syntax.UL.trim().length;\n }\n else if (/^\\d+$/.test(lineSplit[0].trim()) && listFormat) {\n pattern = lineSplit[0].trim() + '. ';\n replace = prefixPattern;\n points.space = this.syntax.UL.trim().length - currentPrefix.trim().length;\n }\n else if (/^\\d+$/.test(lineSplit[0].trim())) {\n pattern = lineSplit[0].trim() + '. ';\n replace = this.syntax.UL;\n points.space = this.syntax.UL.trim().length - currentPrefix.trim().length;\n }\n points.line = line.replace(pattern, replace);\n }\n return points;\n };\n MDLists.prototype.restore = function (textArea, start, end, event) {\n if (!isNullOrUndefined(start) && !isNullOrUndefined(start)) {\n this.selection.save(start, end);\n }\n if (!isNullOrUndefined(event)) {\n this.selection.restore(textArea);\n }\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDLists.prototype.getListRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length; j++) {\n var syntax = this.selection.replaceSpecialChar(this.syntax[configKey[j]]);\n regex += regex === '' ? '^(' + syntax + ')|^(' + syntax.trim() + ')' :\n '|^(' + syntax + ')|^(' + syntax.trim() + ')';\n }\n return new RegExp(regex);\n };\n return MDLists;\n}());\nexport { MDLists };\n","/**\n * Constant values for Markdown Parser\n */\n/**\n * List plugin events\n * @hidden\n */\nexport var LISTS_COMMAND = 'lists-commands';\n/**\n * selectioncommand plugin events\n * @hidden\n */\nexport var selectionCommand = 'command-type';\n/**\n * Link plugin events\n * @hidden\n */\nexport var LINK_COMMAND = 'link-commands';\n/**\n * Clear plugin events\n * @hidden\n */\nexport var CLEAR_COMMAND = 'clear-commands';\n/**\n * Table plugin events\n * @hidden\n */\nexport var MD_TABLE = 'insert-table';\n","import { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport * as CONSTANT from './../../markdown-parser/base/constant';\n/**\n * MDFormats internal plugin\n * @hidden\n * @deprecated\n */\nvar MDFormats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDFormats(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDFormats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n };\n MDFormats.prototype.applyFormats = function (e) {\n e.subCommand = e.subCommand.toLowerCase();\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var parents = this.selection.getSelectedParentPoints(textArea);\n if (this.isAppliedFormat(parents) === e.subCommand) {\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n return;\n }\n }\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n if (e.subCommand === 'p') {\n this.cleanFormat(textArea);\n this.restore(textArea, textArea.selectionStart, textArea.selectionEnd, e);\n return;\n }\n else {\n if ((e.subCommand === 'pre' && parents.length !== 1) || e.subCommand !== 'pre') {\n this.cleanFormat(textArea, e.subCommand);\n }\n }\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n parents = this.selection.getSelectedParentPoints(textArea);\n if (e.subCommand === 'pre') {\n if (parents.length > 1) {\n this.applyCodeBlock(textArea, e, parents);\n }\n else {\n extend(e, e, { subCommand: 'InlineCode' }, true);\n this.parent.observer.notify(CONSTANT.selectionCommand, e);\n }\n return;\n }\n for (var i = 0; i < parents.length; i++) {\n if (parents[i].text !== '' && !this.selection.isStartWith(parents[i].text, '\\\\' + this.syntax[e.subCommand])) {\n parents[i].text = this.syntax[e.subCommand] + parents[i].text;\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? start + this.syntax[e.subCommand].length : start;\n addedLength += this.syntax[e.subCommand].length;\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ?\n this.syntax[e.subCommand].length + parents[j].start : parents[j].start;\n parents[j].end = this.syntax[e.subCommand].length + parents[j].end;\n }\n }\n }\n else if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end + addedLength, e);\n };\n MDFormats.prototype.clearRegex = function () {\n var regex = '';\n var configKey = Object.keys(this.syntax);\n for (var j = 0; j < configKey.length && configKey[j] !== 'pre' && configKey[j] !== 'p'; j++) {\n regex += regex === '' ? '^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')' :\n '|^(' + this.selection.replaceSpecialChar(this.syntax[configKey[j]].trim()) + ')';\n }\n return regex;\n };\n MDFormats.prototype.cleanFormat = function (textArea, command) {\n var parents = this.selection.getSelectedParentPoints(textArea);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var removeLength = 0;\n if (this.selection.isClear(parents, this.clearRegex())) {\n for (var i = 0; i < parents.length; i++) {\n var configKey = Object.keys(this.syntax);\n for (var j = 0; parents[i].text !== '' && j < configKey.length; j++) {\n var removeText = this.syntax[configKey[j]];\n if (configKey[j] === command) {\n continue;\n }\n var regex = new RegExp('^(' + this.selection.replaceSpecialChar(removeText) + ')', 'gim');\n if (regex.test(parents[i].text)) {\n parents[i].text = parents[i].text.replace(regex, '');\n textArea.value = textArea.value.substr(0, parents[i].start) + parents[i].text + '\\n' +\n textArea.value.substr(parents[i].end, textArea.value.length);\n start = i === 0 ? (start - (removeText.length)) > 0 ? start - (removeText.length) : 0 : start;\n removeLength += removeText.length;\n if (parents.length !== 1) {\n for (var k = 0; k < parents.length; k++) {\n parents[k].start = k !== 0 ?\n parents[k].start - removeText.length : parents[k].start;\n parents[k].end = parents[k].end - removeText.length;\n }\n }\n break;\n }\n }\n if (parents[i].text === '' && i === 0) {\n this.selection.save(start, end);\n if (parents.length !== 1) {\n for (var j = i; j < parents.length; j++) {\n parents[j].start = j !== 0 ? 1 + parents[j].start : parents[j].start;\n parents[j].end = 1 + parents[j].end;\n }\n }\n }\n }\n this.restore(textArea, start, end - removeLength);\n }\n };\n MDFormats.prototype.applyCodeBlock = function (textArea, event, parents) {\n var command = event.subCommand;\n var start = parents[0].start;\n var end = parents[parents.length - 1].end;\n var parentLines = this.selection.getAllParents(textArea.value);\n var firstPrevText = parentLines[parents[0].line - 1];\n var lastNextText = parentLines[(parents.length + 1) + 1];\n var addedLength = 0;\n if (!this.selection.isStartWith(firstPrevText, this.syntax.pre.split('\\n')[0]) &&\n !this.selection.isStartWith(lastNextText, this.syntax.pre.split('\\n')[0])) {\n var lines = textArea.value.substring(start, end).split('\\n');\n var lastLine = lines[lines.length - 1] === '' ? '' : '\\n';\n textArea.value = textArea.value.substr(0, start) + this.syntax[command] + textArea.value.substring(start, end) +\n lastLine + this.syntax[command] +\n textArea.value.substr(end, textArea.value.length);\n start = this.selection.selectionStart + this.syntax[command].length;\n end = this.selection.selectionEnd + this.syntax[command].length - 1;\n }\n else {\n var cmd = this.syntax[command];\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n var startNo = textArea.value.substr(0, textArea.selectionStart).lastIndexOf(cmd);\n var endNo = textArea.value.substr(textArea.selectionEnd, textArea.selectionEnd).indexOf(cmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), cmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), cmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n start = this.selection.selectionStart - cmd.length;\n end = this.selection.selectionEnd - cmd.length;\n }\n this.restore(textArea, start, end, event);\n };\n MDFormats.prototype.replaceAt = function (input, search, replace, start, end) {\n return input.slice(0, start)\n + input.slice(start, end).replace(search, replace)\n + input.slice(end);\n };\n MDFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDFormats.prototype.isAppliedFormat = function (lines, documentNode) {\n var format = 'p';\n var configKey = Object.keys(this.syntax);\n var keys = Object.keys(this.syntax);\n var direction = this.parent.element.selectionDirection;\n var checkLine = direction === 'backward' ? lines[0].text : lines[lines.length - 1].text;\n for (var i = 0; !documentNode && i < keys.length; i++) {\n if (keys[i] !== 'pre' && this.selection.isStartWith(checkLine, this.syntax[keys[i]])) {\n format = keys[i];\n break;\n }\n else if (keys[i] === 'pre') {\n var parentLines = this.selection.getAllParents(this.parent.element.value);\n var firstPrevText = parentLines[lines[0].line - 1];\n var lastNextText = parentLines[lines.length + 1];\n if (this.selection.isStartWith(firstPrevText, this.syntax[keys[i]].split('\\n')[0]) &&\n this.selection.isStartWith(lastNextText, this.syntax[keys[i]].split('\\n')[0])) {\n format = keys[i];\n break;\n }\n }\n }\n return format;\n };\n return MDFormats;\n}());\nexport { MDFormats };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * SelectionCommands internal component\n * @hidden\n * @deprecated\n */\nvar MDSelectionFormats = /** @class */ (function () {\n function MDSelectionFormats(parent) {\n extend(this, this, parent, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDSelectionFormats.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.selectionCommand, this.applyCommands, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n MDSelectionFormats.prototype.keyDownHandler = function (e) {\n switch (e.event.action) {\n case 'bold':\n this.applyCommands({ subCommand: 'Bold', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'italic':\n this.applyCommands({ subCommand: 'Italic', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'strikethrough':\n this.applyCommands({ subCommand: 'StrikeThrough', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'uppercase':\n this.applyCommands({ subCommand: 'UpperCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'lowercase':\n this.applyCommands({ subCommand: 'LowerCase', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'superscript':\n this.applyCommands({ subCommand: 'SuperScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'subscript':\n this.applyCommands({ subCommand: 'SubScript', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n MDSelectionFormats.prototype.isBold = function (text, cmd) {\n return text.search('\\\\' + cmd + '\\\\' + cmd + '') !== -1;\n };\n MDSelectionFormats.prototype.isItalic = function (text, cmd) {\n return text.search('\\\\' + cmd) !== -1;\n };\n MDSelectionFormats.prototype.isMatch = function (text, cmd) {\n var matchText = [''];\n switch (cmd) {\n case this.syntax.Italic:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.InlineCode:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n case this.syntax.StrikeThrough:\n matchText = text.match(this.singleCharRegx(cmd));\n break;\n }\n return matchText;\n };\n MDSelectionFormats.prototype.multiCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + '\\\\' + cmd + ')', 'g');\n };\n MDSelectionFormats.prototype.singleCharRegx = function (cmd) {\n return new RegExp('(\\\\' + cmd + ')', 'g');\n };\n /**\n * markdown isAppliedCommand method\n * @hidden\n * @deprecated\n */\n MDSelectionFormats.prototype.isAppliedCommand = function (cmd) {\n var selectCmd = '';\n var isFormat = false;\n var textArea = this.parent.element;\n var start = textArea.selectionStart;\n var splitAt = function (index) { return function (x) { return [x.slice(0, index), x.slice(index)]; }; };\n var splitText = splitAt(start)(textArea.value);\n var cmdB = this.syntax.Bold.substr(0, 1);\n var cmdI = this.syntax.Italic;\n var selectedText = this.parent.markdownSelection.getSelectedText(textArea);\n if (selectedText !== '' && selectedText === selectedText.toLocaleUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n else if (selectedText === '') {\n var beforeText = textArea.value.substr(splitText[0].length - 1, 1);\n var afterText = splitText[1].substr(0, 1);\n if ((beforeText !== '' && afterText !== '' && beforeText.match(/[a-z]/i)) &&\n beforeText === beforeText.toLocaleUpperCase() && afterText === afterText.toLocaleUpperCase() && cmd === 'UpperCase') {\n return true;\n }\n }\n if (!(this.isBold(splitText[0], cmdB)) && !(this.isItalic(splitText[0], cmdI)) && !(this.isBold(splitText[1], cmdB)) &&\n !(this.isItalic(splitText[1], cmdI))) {\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sub>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\<sub>/g).length % 2 === 1 &&\n splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sup>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\<sup>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) &&\n cmd === 'SuperScript') {\n isFormat = true;\n }\n }\n if ((this.isBold(splitText[0], cmdB) && this.isBold(splitText[1], cmdB)) &&\n (splitText[0].match(this.multiCharRegx(cmdB)).length % 2 === 1 &&\n splitText[1].match(this.multiCharRegx(cmdB)).length % 2 === 1) && cmd === 'Bold') {\n isFormat = true;\n }\n splitText[0] = this.isBold(splitText[0], cmdB) ? splitText[0].replace(this.multiCharRegx(cmdB), '$%@') : splitText[0];\n splitText[1] = this.isBold(splitText[1], cmdB) ? splitText[1].replace(this.multiCharRegx(cmdB), '$%@') : splitText[1];\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.Italic)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.Italic))) &&\n (this.isMatch(splitText[0], this.syntax.Italic).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.Italic).length % 2 === 1) && cmd === 'Italic') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.StrikeThrough)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.StrikeThrough))) &&\n (this.isMatch(splitText[0], this.syntax.StrikeThrough).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.StrikeThrough).length % 2 === 1) && cmd === 'StrikeThrough') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(this.isMatch(splitText[0], this.syntax.InlineCode)) &&\n !isNullOrUndefined(this.isMatch(splitText[1], this.syntax.InlineCode))) &&\n (this.isMatch(splitText[0], this.syntax.InlineCode).length % 2 === 1 &&\n this.isMatch(splitText[1], this.syntax.InlineCode).length % 2 === 1) && cmd === 'InlineCode') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sub>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sub>/g))) &&\n (splitText[0].match(/\\<sub>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sub>/g).length % 2 === 1) && cmd === 'SubScript') {\n isFormat = true;\n }\n if ((!isNullOrUndefined(splitText[0].match(/\\<sup>/g)) && !isNullOrUndefined(splitText[1].match(/\\<\\/sup>/g))) &&\n (splitText[0].match(/\\<sup>/g).length % 2 === 1 && splitText[1].match(/\\<\\/sup>/g).length % 2 === 1) && cmd === 'SuperScript') {\n isFormat = true;\n }\n return isFormat;\n };\n MDSelectionFormats.prototype.applyCommands = function (e) {\n this.currentAction = e.subCommand;\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var addedLength = 0;\n var selection = this.parent.markdownSelection.getSelectedInlinePoints(textArea);\n if (this.isAppliedCommand(e.subCommand) && selection.text !== '') {\n var startCmd = this.syntax[e.subCommand];\n var endCmd = e.subCommand === 'SubScript' ? '</sub>' :\n e.subCommand === 'SuperScript' ? '</sup>' : this.syntax[e.subCommand];\n var startLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 : startCmd.length;\n var startNo = textArea.value.substr(0, selection.start).lastIndexOf(startCmd);\n var endNo = textArea.value.substr(selection.end, textArea.value.length).indexOf(endCmd);\n endNo = endNo + selection.end;\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), startCmd, '', startNo, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), endCmd, '', 0, endNo);\n textArea.value = repStartText + selection.text + repEndText;\n this.restore(textArea, start - startLength, end - startLength, e);\n return;\n }\n if (selection.text !== '' && !this.isApplied(selection, e.subCommand)) {\n addedLength = (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') ? 0 :\n this.syntax[e.subCommand].length;\n var repStart = textArea.value.substr(selection.start - this.syntax[e.subCommand].length, this.syntax[e.subCommand].length);\n var repEnd = void 0;\n if ((repStart === e.subCommand) || ((selection.start - this.syntax[e.subCommand].length ===\n textArea.value.indexOf(this.syntax[e.subCommand])) && (selection.end === textArea.value.lastIndexOf(this.syntax[e.subCommand]) || selection.end === textArea.value.lastIndexOf('</' + this.syntax[e.subCommand].substring(1, 5))))) {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n repEnd = textArea.value.substr(selection.end, this.syntax[e.subCommand].length + 1);\n }\n else {\n repEnd = textArea.value.substr(selection.end, this.syntax[e.subCommand].length);\n }\n var repStartText = this.replaceAt(textArea.value.substr(0, selection.start), repStart, '', selection.start - this.syntax[e.subCommand].length, selection.start);\n var repEndText = this.replaceAt(textArea.value.substr(selection.end, textArea.value.length), repEnd, '', 0, repEnd.length);\n textArea.value = repStartText + selection.text + repEndText;\n this.restore(textArea, start - addedLength, end - addedLength, e);\n }\n else {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n selection.text = this.syntax[e.subCommand] + selection.text\n + '</' + this.syntax[e.subCommand].substring(1, 5);\n }\n else if (e.subCommand === 'UpperCase' || e.subCommand === 'LowerCase') {\n selection.text = (e.subCommand === 'UpperCase') ? selection.text.toUpperCase()\n : selection.text.toLowerCase();\n }\n else {\n selection.text = this.syntax[e.subCommand] + selection.text + this.syntax[e.subCommand];\n }\n textArea.value = textArea.value.substr(0, selection.start) + selection.text +\n textArea.value.substr(selection.end, textArea.value.length);\n this.restore(textArea, start + addedLength, end + addedLength, e);\n }\n }\n else if (e.subCommand !== 'UpperCase' && e.subCommand !== 'LowerCase') {\n if (e.subCommand === 'SubScript' || e.subCommand === 'SuperScript') {\n selection.text = this.textReplace(selection.text, e.subCommand);\n selection.text = this.syntax[e.subCommand] + selection.text\n + '</' + this.syntax[e.subCommand].substring(1, 5);\n }\n else {\n selection.text = this.textReplace(selection.text, e.subCommand);\n selection.text = this.syntax[e.subCommand] + selection.text + this.syntax[e.subCommand];\n }\n textArea.value = textArea.value.substr(0, selection.start)\n + selection.text + textArea.value.substr(selection.end, textArea.value.length);\n addedLength = this.syntax[e.subCommand].length;\n if (selection.start === selection.end) {\n this.restore(textArea, start + addedLength, end + addedLength, e);\n }\n else {\n this.restore(textArea, start + addedLength, end - addedLength, e);\n }\n }\n else {\n this.restore(textArea, start, end, e);\n }\n this.parent.undoRedoManager.saveData();\n };\n MDSelectionFormats.prototype.replaceAt = function (input, search, replace, start, end) {\n return input.slice(0, start)\n + input.slice(start, end).replace(search, replace)\n + input.slice(end);\n };\n MDSelectionFormats.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n MDSelectionFormats.prototype.textReplace = function (text, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'Bold':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n text = text.replace(regx, '');\n break;\n case 'Italic':\n if (!this.isBold(text, this.syntax[command].substr(0, 1))) {\n text = text.replace(regx, '');\n }\n else {\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n var repText = text;\n repText = repText.replace(regxB, '$%@').replace(regx, '');\n var regxTemp = new RegExp('\\\\$%@', 'g');\n text = repText.replace(regxTemp, this.syntax[command].substr(0, 1) + this.syntax[command].substr(0, 1));\n }\n break;\n case 'StrikeThrough':\n text = text.replace(regx, '');\n break;\n case 'InlineCode':\n text = text.replace(regx, '');\n break;\n case 'SubScript':\n text = text.replace(/<sub>/g, '').replace(/<\\/sub>/g, '');\n break;\n case 'SuperScript':\n text = text.replace(/<sup>/g, '').replace(/<\\/sup>/g, '');\n break;\n }\n return text;\n };\n MDSelectionFormats.prototype.isApplied = function (line, command) {\n var regx = this.singleCharRegx(this.syntax[command]);\n switch (command) {\n case 'SubScript':\n case 'SuperScript':\n regx = this.singleCharRegx(this.syntax[command]);\n return regx.test(line.text);\n case 'Bold':\n case 'StrikeThrough':\n regx = this.multiCharRegx(this.syntax[command].substr(0, 1));\n return regx.test(line.text);\n case 'UpperCase':\n case 'LowerCase':\n regx = new RegExp('^[' + this.syntax[command] + ']*$', 'g');\n return regx.test(line.text);\n case 'Italic':\n var regTest = void 0;\n var regxB = this.multiCharRegx(this.syntax[command].substr(0, 1));\n if (regxB.test(line.text)) {\n var repText = line.text;\n repText = repText.replace(regxB, '$%#');\n regTest = regx.test(repText);\n }\n else {\n regTest = regx.test(line.text);\n }\n return regTest;\n case 'InlineCode':\n return regx.test(line.text);\n }\n };\n return MDSelectionFormats;\n}());\nexport { MDSelectionFormats };\n","/**\n * Default Markdown formats config for adapter\n */\nexport var markdownFormatTags = {\n 'h6': '###### ',\n 'h5': '##### ',\n 'h4': '#### ',\n 'h3': '### ',\n 'h2': '## ',\n 'h1': '# ',\n 'blockquote': '> ',\n 'pre': '```\\n',\n 'p': ''\n};\n/**\n * Default selection formats config for adapter\n */\nexport var markdownSelectionTags = {\n 'Bold': '**',\n 'Italic': '*',\n 'StrikeThrough': '~~',\n 'InlineCode': '`',\n 'SubScript': '<sub>',\n 'SuperScript': '<sup>',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- ',\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': 'tab',\n 'delete': '46'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var pasteCleanupGroupingTags = {\n 'b': ['strong'],\n 'strong': ['b'],\n 'i': ['emp', 'cite'],\n 'emp': ['i', 'cite'],\n 'cite': ['i', 'emp']\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var listConversionFilters = {\n 'first': 'MsoListParagraphCxSpFirst',\n 'middle': 'MsoListParagraphCxSpMiddle',\n 'last': 'MsoListParagraphCxSpLast'\n};\n/**\n * Dom-Node Grouping of self closing tags\n * @hidden\n */\nexport var selfClosingTags = [\n 'BR',\n 'IMG'\n];\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoCommands = /** @class */ (function () {\n function UndoRedoCommands(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n UndoRedoCommands.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoCommands.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoCommands.prototype.removeEventListener = function () {\n var debounceListener = debounce(this.keyUp, 300);\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, debounceListener);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n this.parent.observer.off(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged);\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * onAction method\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n UndoRedoCommands.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoCommands.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * MD collection stored string format.\n * @method saveData\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.saveData = function (e) {\n var textArea = this.parent.element;\n this.selection.save(textArea.selectionStart, textArea.selectionEnd);\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var textValue = this.parent.element.value;\n var changEle = { text: textValue, start: start, end: end };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].start === start) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].end === end)) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.undo = function (e) {\n if (this.steps > 0) {\n this.currentAction = 'Undo';\n var start = this.undoRedoStack[this.steps - 1].start;\n var end = this.undoRedoStack[this.steps - 1].end;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.element.value = removedContent;\n this.parent.element.focus();\n this.steps--;\n this.restore(this.parent.element, start, end, e);\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n this.currentAction = 'Redo';\n var start = this.undoRedoStack[this.steps + 1].start;\n var end = this.undoRedoStack[this.steps + 1].end;\n this.parent.element.value = this.undoRedoStack[this.steps + 1].text;\n this.parent.element.focus();\n this.steps++;\n this.restore(this.parent.element, start, end, e);\n }\n };\n UndoRedoCommands.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: this.currentAction,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n UndoRedoCommands.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoCommands;\n}());\nexport { UndoRedoCommands };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar MDLink = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDLink(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDLink.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK_COMMAND, this.createLink, this);\n };\n MDLink.prototype.createLink = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = (e.subCommand === 'Image') ? this.selection.getSelectedText(textArea) : e.item.text;\n var startOffset = (e.subCommand === 'Image') ? (start + 2) : (start + 1);\n var endOffset = (e.subCommand === 'Image') ? (end + 2) : (end + 1);\n text = (e.subCommand === 'Image') ? '' : '[' + text + '](' + e.item.url + ')';\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);\n this.restore(textArea, startOffset, endOffset, e);\n };\n MDLink.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDLink;\n}());\nexport { MDLink };\n","import * as CONSTANT from './../base/constant';\nimport { extend } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar MDTable = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function MDTable(options) {\n extend(this, this, options, true);\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n MDTable.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.MD_TABLE, this.createTable, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n MDTable.prototype.removeEventListener = function () {\n this.parent.observer.off(CONSTANT.MD_TABLE, this.createTable);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n /**\n * markdown destroy method\n * @hidden\n * @deprecated\n */\n MDTable.prototype.destroy = function () {\n this.removeEventListener();\n };\n MDTable.prototype.onKeyDown = function (e) {\n if (e.event.action === 'insert-table') {\n e.item = e.value;\n this.createTable(e);\n }\n };\n MDTable.prototype.createTable = function (e) {\n this.element = this.parent.element;\n var start = this.element.selectionStart;\n var end = this.element.selectionEnd;\n var textAreaInitial;\n textAreaInitial = this.element.value;\n this.locale = e;\n this.selection.save(start, end);\n this.restore(this.element.selectionStart, this.element.selectionEnd, null);\n this.insertTable(start, end, textAreaInitial, e);\n };\n MDTable.prototype.getTable = function () {\n var table = '';\n table += this.textNonEmpty();\n table += this.tableHeader(this.locale);\n table += this.tableCell(this.locale);\n return table;\n };\n MDTable.prototype.tableHeader = function (e) {\n var text = '';\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n if (i === 1) {\n text += e.item.headingText + ' ' + j + '|';\n }\n else {\n text += '---------|';\n }\n }\n text += this.insertLine();\n }\n return text;\n };\n MDTable.prototype.tableCell = function (e) {\n var text = '';\n for (var i = 1; i <= 2; i++) {\n text += '|';\n for (var j = 1; j <= 2; j++) {\n text += e.item.colText + ' ' + this.convertToLetters(i) + j + '|';\n }\n text += this.insertLine();\n }\n text += this.insertLine();\n return text;\n };\n MDTable.prototype.insertLine = function () {\n var dummyElement = document.createElement('div');\n dummyElement.innerHTML = '\\n';\n return dummyElement.textContent;\n };\n MDTable.prototype.insertTable = function (start, end, textAreaInitial, e) {\n var parentText = this.selection.getSelectedParentPoints(this.element);\n var lastLineSplit = parentText[parentText.length - 1].text.split(' ', 2);\n var syntaxArr = this.getFormatTag();\n var syntaxCount = 0;\n if (lastLineSplit.length < 2) {\n this.element.value = this.updateValue(this.getTable());\n this.makeSelection(textAreaInitial, start, end);\n }\n else {\n if (this.ensureFormatApply(parentText[parentText.length - 1].text)) {\n this.checkValid(start, end, this.getTable(), textAreaInitial, e, lastLineSplit, parentText, syntaxArr);\n }\n else {\n this.element.value = this.updateValue(this.getTable());\n this.makeSelection(textAreaInitial, start, end);\n }\n }\n this.restore(this.element.selectionStart, this.element.selectionEnd, e);\n };\n MDTable.prototype.makeSelection = function (textAreaInitial, start, end) {\n end = start + (textAreaInitial.length > 0 ? 12 : 10); //end is added 12 or 10 because to make the table heading selected\n start += textAreaInitial.length > 0 ? 3 : 1; // Start is added 3 or 1 because new lines are added when inserting table\n this.selection.setSelection(this.element, start, end);\n };\n MDTable.prototype.getFormatTag = function () {\n var syntaxFormatKey = Object.keys(this.syntaxTag.Formats);\n var syntaxListKey = Object.keys(this.syntaxTag.List);\n var syntaxArr = [];\n for (var i = 0; i < syntaxFormatKey.length; i++) {\n syntaxArr.push(this.syntaxTag.Formats[syntaxFormatKey[i]]);\n }\n for (var j = 0; j < syntaxListKey.length; j++) {\n syntaxArr.push(this.syntaxTag.List[syntaxListKey[j]]);\n }\n return syntaxArr;\n };\n MDTable.prototype.ensureFormatApply = function (line) {\n var formatTags = this.getFormatTag();\n var formatSplitZero = line.trim().split(' ', 2)[0] + ' ';\n for (var i = 0; i < formatTags.length; i++) {\n if (formatSplitZero === formatTags[i] || /^[\\d.]+[ ]+$/.test(formatSplitZero)) {\n return true;\n }\n }\n return false;\n };\n MDTable.prototype.ensureStartValid = function (firstLine, parentText) {\n var firstLineSplit = parentText[0].text.split(' ', 2);\n for (var i = firstLine + 1; i <= firstLine + firstLineSplit[0].length + 1; i++) {\n if (this.element.selectionStart === i || this.element.selectionEnd === i) {\n return false;\n }\n }\n return true;\n };\n MDTable.prototype.ensureEndValid = function (lastLine, formatSplitLength) {\n for (var i = lastLine + 1; i <= lastLine + formatSplitLength + 1; i++) {\n if (this.element.selectionEnd === i) {\n return false;\n }\n }\n return true;\n };\n MDTable.prototype.updateValueWithFormat = function (formatSplit, text) {\n var textApplyFormat = this.element.value.substring(this.element.selectionEnd, this.element.value.length);\n text += textApplyFormat.replace(textApplyFormat, (formatSplit[0] + ' ' + textApplyFormat));\n return this.element.value.substr(0, this.element.selectionStart) + text;\n };\n MDTable.prototype.updateValue = function (text) {\n return this.element.value.substr(0, this.element.selectionStart) + text +\n this.element.value.substr(this.element.selectionEnd, this.element.value.length);\n };\n MDTable.prototype.checkValid = function (start, end, text, textAreaInitial, e, formatSplit, parentText, syntaxArr) {\n if (this.ensureStartValid(parentText[0].start, parentText) &&\n this.ensureEndValid(parentText[parentText.length - 1].start, formatSplit[0].length)) {\n if (start === parentText[0].start) {\n if (start !== end && end !== (parentText[parentText.length - 1].end - 1)) {\n this.element.value = this.updateValueWithFormat(formatSplit, text);\n }\n else {\n this.element.value = this.updateValue(text);\n }\n }\n else if (end === parentText[parentText.length - 1].end - 1) {\n this.element.value = this.updateValue(text);\n }\n else {\n this.element.value = this.updateValueWithFormat(formatSplit, text);\n }\n this.makeSelection(textAreaInitial, start, end);\n }\n };\n MDTable.prototype.convertToLetters = function (rowNumber) {\n var baseChar = ('A').charCodeAt(0);\n var letters = '';\n do {\n rowNumber -= 1;\n letters = String.fromCharCode(baseChar + (rowNumber % 26)) + letters;\n rowNumber = (rowNumber / 26) >> 0;\n } while (rowNumber > 0);\n return letters;\n };\n MDTable.prototype.textNonEmpty = function () {\n var emptyText = '';\n if (this.isCursorBased() || this.isSelectionBased()) {\n if (this.element.value.length > 0) {\n emptyText += this.insertLine();\n emptyText += this.insertLine(); // to append two new line when textarea having content. \n }\n }\n return emptyText;\n };\n MDTable.prototype.isCursorBased = function () {\n return this.element.selectionStart === this.element.selectionEnd;\n };\n MDTable.prototype.isSelectionBased = function () {\n return this.element.selectionStart !== this.element.selectionEnd;\n };\n MDTable.prototype.restore = function (start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(this.element);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(this.element),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return MDTable;\n}());\nexport { MDTable };\n","import * as CONSTANT from './../base/constant';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar ClearFormat = /** @class */ (function () {\n /**\n * Constructor for creating the clear format plugin\n * @hidden\n * @deprecated\n */\n function ClearFormat(parent) {\n this.parent = parent;\n this.selection = this.parent.markdownSelection;\n this.addEventListener();\n }\n ClearFormat.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_COMMAND, this.clear, this);\n };\n ClearFormat.prototype.replaceRegex = function (data) {\n return data.replace(/\\*/ig, '\\\\*').replace(/\\&/ig, '\\\\&')\n .replace(/\\-/ig, '\\\\-').replace(/\\^/ig, '\\\\^')\n .replace(/\\$/ig, '\\\\$').replace(/\\./ig, '\\\\.')\n .replace(/\\|/ig, '\\\\|').replace(/\\?/ig, '\\\\?')\n .replace(/\\+/ig, '\\\\+').replace(/\\-/ig, '\\\\-')\n .replace(/\\&/ig, '\\\\&');\n };\n ClearFormat.prototype.clearSelectionTags = function (text) {\n var data = this.parent.selectionTags;\n var keys = Object.keys(data);\n for (var num = 0; num < keys.length; num++) {\n var key = keys[num];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n var expString = this.replaceRegex(data[key]);\n var regExp = void 0;\n var startExp = void 0;\n var endExp = void 0;\n if (data[key] === '<sup>') {\n regExp = new RegExp('<sup>(.*?)<\\/sup>', 'ig');\n }\n else if (data[key] === '<sub>') {\n regExp = new RegExp('<sub>(.*?)<\\/sub>', 'ig');\n }\n else {\n regExp = new RegExp(expString + '(.*?)' + expString, 'ig');\n }\n startExp = data[key].length;\n endExp = (data[key] === '<sup>' || data[key] === '<sub>') ? data[key].length + 1 : data[key].length;\n var val = text.match(regExp);\n for (var index = 0; val && index < val.length && val[index] !== ''; index++) {\n text = text.replace(val[index], val[index].substr(startExp, val[index].length - endExp - startExp));\n }\n }\n }\n return text;\n };\n ClearFormat.prototype.clearFormatTags = function (text) {\n var lines = text.split('\\n');\n return this.clearFormatLines(lines);\n };\n ClearFormat.prototype.clearFormatLines = function (lines) {\n var tags = [this.parent.formatTags, this.parent.listTags];\n var str = '';\n for (var len = 0; len < lines.length; len++) {\n for (var num = 0; num < tags.length; num++) {\n var data = tags[num];\n var keys = Object.keys(data);\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n if (data.hasOwnProperty(key) && data[key] !== '') {\n if (lines[len].indexOf(data[key]) === 0) {\n lines[len] = lines[len].replace(data[key], '');\n lines[len] = this.clearFormatLines([lines[len]]);\n }\n }\n }\n }\n str = str + lines[len] + ((len !== lines.length - 1) ? '\\n' : '');\n }\n return str;\n };\n ClearFormat.prototype.clear = function (e) {\n var textArea = this.parent.element;\n textArea.focus();\n var start = textArea.selectionStart;\n var end = textArea.selectionEnd;\n var text = this.selection.getSelectedText(textArea);\n text = this.clearSelectionTags(text);\n text = this.clearFormatTags(text);\n textArea.value = textArea.value.substr(0, start)\n + text + textArea.value.substr(end, textArea.value.length);\n this.parent.markdownSelection.setSelection(textArea, start, start + text.length);\n this.restore(textArea, start, start + text.length, e);\n };\n ClearFormat.prototype.restore = function (textArea, start, end, event) {\n this.selection.save(start, end);\n this.selection.restore(textArea);\n if (event && event.callBack) {\n event.callBack({\n requestType: event.subCommand,\n selectedText: this.selection.getSelectedText(textArea),\n editorMode: 'Markdown',\n event: event.event\n });\n }\n };\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { MDLists } from './../plugin/lists';\nimport { MDFormats } from './../plugin/formats';\nimport { MDSelectionFormats } from './../plugin/md-selection-formats';\nimport { MarkdownSelection } from './../plugin/markdown-selection';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownFormatTags, markdownListsTags, markdownSelectionTags } from './../../common/config';\nimport { UndoRedoCommands } from './../plugin/undo';\nimport { MDLink } from './../plugin/link';\nimport { MDTable } from './../plugin/table';\nimport * as EVENTS from './../../common/constant';\nimport { ClearFormat } from './../plugin/clearformat';\n/**\n * MarkdownParser internal component\n * @hidden\n * @deprecated\n */\nvar MarkdownParser = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n * @deprecated\n */\n function MarkdownParser(options) {\n this.initialize();\n extend(this, this, options, true);\n this.observer = new Observer(this);\n this.markdownSelection = new MarkdownSelection();\n this.listObj = new MDLists({ parent: this, syntax: this.listTags });\n this.formatObj = new MDFormats({ parent: this, syntax: this.formatTags });\n this.undoRedoManager = new UndoRedoCommands(this, options.options);\n this.mdSelectionFormats = new MDSelectionFormats({ parent: this, syntax: this.selectionTags });\n this.linkObj = new MDLink(this);\n this.tableObj = new MDTable({ parent: this, syntaxTag: ({ Formats: this.formatTags, List: this.listTags }) });\n this.clearObj = new ClearFormat(this);\n this.wireEvents();\n }\n MarkdownParser.prototype.initialize = function () {\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n MarkdownParser.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n };\n MarkdownParser.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n MarkdownParser.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n MarkdownParser.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n /**\n * markdown execCommand method\n * @hidden\n * @deprecated\n */\n MarkdownParser.prototype.execCommand = function (command, value, event, callBack, text, exeValue) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(CONSTANT.LISTS_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.selectionCommand, { subCommand: value, event: event, callBack: callBack });\n break;\n case 'links':\n case 'images':\n this.observer.notify(CONSTANT.LINK_COMMAND, { subCommand: value, event: event, callBack: callBack, item: exeValue });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.MD_TABLE, { subCommand: value, item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });\n break;\n }\n };\n return MarkdownParser;\n}());\nexport { MarkdownParser };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { MarkdownParser } from './../../markdown-parser/base/markdown-parser';\nimport { extend } from '@syncfusion/ej2-base';\nimport { markdownKeyConfig, markdownListsTags, markdownFormatTags, markdownSelectionTags } from './../../common/config';\n/**\n * Markdown adapter\n * @hidden\n * @deprecated\n */\nvar MarkdownFormatter = /** @class */ (function (_super) {\n __extends(MarkdownFormatter, _super);\n function MarkdownFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (options && _this.element) {\n _this.updateFormatter(_this.element, document, options.options);\n }\n return _this;\n }\n MarkdownFormatter.prototype.initialize = function () {\n this.keyConfig = markdownKeyConfig;\n this.formatTags = markdownFormatTags;\n this.listTags = markdownListsTags;\n this.selectionTags = markdownSelectionTags;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n * @hidden\n * @deprecated\n */\n MarkdownFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement) {\n this.editorManager = new MarkdownParser({\n element: editElement,\n formatTags: this.formatTags,\n listTags: this.listTags,\n selectionTags: this.selectionTags,\n options: options\n });\n }\n };\n return MarkdownFormatter;\n}(Formatter));\nexport { MarkdownFormatter };\n","/**\n * Markdown module is used to render Rich Text Editor as Markdown editor content\n * @hidden\n * @deprecated\n */\nvar MarkdownRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function MarkdownRender(parent) {\n this.parent = parent;\n }\n /**\n * The function is used to render Rich Text Editor content div\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { id: this.parent.getID() + '_view', className: 'e-rte-content' });\n this.editableElement = this.parent.createElement('textarea', {\n className: 'e-content',\n id: this.parent.getID() + '_editable-content'\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n MarkdownRender.prototype.getText = function () {\n return this.getEditPanel().value;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n * @hidden\n * @deprecated\n */\n MarkdownRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return MarkdownRender;\n}());\nexport { MarkdownRender };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { MarkdownFormatter } from '../formatter/markdown-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { MarkdownToolbarStatus } from './markdown-toolbar-status';\nimport { MarkdownRender } from '../renderer/markdown-renderer';\nimport { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';\n/**\n * `MarkdownEditor` module is used to markdown editor\n */\nvar MarkdownEditor = /** @class */ (function () {\n function MarkdownEditor(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n MarkdownEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n MarkdownEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.saveSelection = new MarkdownSelection();\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.markdownToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n };\n MarkdownEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n this.parent.contentModule.getEditPanel().setAttribute('readonly', 'readonly');\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n this.parent.contentModule.getEditPanel().removeAttribute('readonly');\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n MarkdownEditor.prototype.onSelectionSave = function () {\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.save(textArea.selectionStart, textArea.selectionEnd);\n };\n MarkdownEditor.prototype.onSelectionRestore = function (e) {\n this.contentRenderer.getEditPanel().focus();\n var textArea = this.parent.contentModule.getEditPanel();\n this.saveSelection.restore(textArea);\n };\n MarkdownEditor.prototype.onToolbarClick = function (args) {\n var text;\n var startOffset;\n var endOffset;\n var item = args.item;\n var textArea = this.parent.contentModule.getEditPanel();\n textArea.focus();\n startOffset = textArea.selectionStart;\n endOffset = textArea.selectionEnd;\n text = textArea.value.substring(startOffset, endOffset);\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, { member: 'link', args: args, text: text, module: 'Markdown' });\n break;\n case 'Image':\n this.parent.notify(events.insertImage, { member: 'image', args: args, text: text, module: 'Markdown' });\n break;\n case 'CreateTable':\n var tableConstant = {\n 'headingText': this.parent.localeObj.getConstant('TableHeadingText'),\n 'colText': this.parent.localeObj.getConstant('TableColText')\n };\n this.parent.formatter.process(this.parent, args, args.originalEvent, tableConstant);\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n };\n MarkdownEditor.prototype.instantiateRenderer = function () {\n this.renderFactory.addRenderer(RenderType.Content, new MarkdownRender(this.parent));\n };\n MarkdownEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.markdownToolbarClick, this.onToolbarClick);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n this.parent.off(events.readOnlyMode, this.updateReadOnly);\n };\n MarkdownEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n this.parent.formatter = new MarkdownFormatter({\n element: editElement,\n options: option\n });\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new MarkdownToolbarStatus(this.parent);\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n MarkdownEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n MarkdownEditor.prototype.getModuleName = function () {\n return 'markdownEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n MarkdownEditor.prototype.selectAll = function () {\n this.parent.formatter.editorManager.markdownSelection.setSelection(this.parent.contentModule.getEditPanel(), 0, this.parent.contentModule.getEditPanel().value.length);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n MarkdownEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()));\n };\n return MarkdownEditor;\n}());\nexport { MarkdownEditor };\n","/**\n * Constant values for EditorManager\n */\n/**\n * Image plugin events\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\n/**\n * Alignments plugin events\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/**\n * Indents plugin events\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/** Constant tag names\n * @hidden\n */\nexport var DEFAULT_TAG = 'p';\n/**\n * @hidden\n */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video'];\n/**\n * @hidden\n */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/**\n * @hidden\n */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/**\n * Selection plugin events\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/**\n * Insert HTML plugin events\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/**\n * Insert Text plugin events\n * @hidden\n */\nexport var INSERT_TEXT_TYPE = 'insert-text-type';\n/**\n * Clear Format HTML plugin events\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","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 * @hidden\n * @deprecated\n */\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n /**\n * save method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n /**\n * getIndex method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n /**\n * getNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getNodeCollection = function (range) {\n var startNode = range.startContainer.childNodes[range.startOffset]\n || range.startContainer;\n var endNode = range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer;\n if (startNode === endNode && startNode.childNodes.length === 0) {\n return [startNode];\n }\n if (range.startOffset === range.endOffset && range.startOffset !== 0 && range.startContainer.nodeName === 'PRE') {\n return [startNode.nodeName === 'BR' || startNode.nodeName === '#text' ? startNode : startNode.childNodes[0]];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n /**\n * getParentNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n /**\n * getParentNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer &&\n range.startContainer.parentNode !== range.endContainer.parentNode)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n /**\n * getSelectionNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n /**\n * getSelectionNodeCollection along with BR node method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodeCollectionBr = function (range) {\n return this.getSelectionNodesBr(this.getNodeCollection(range));\n };\n /**\n * getParentNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx)))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * Get selection text nodes with br method.\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectionNodesBr = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeName !== 'BR' &&\n (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx))))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getInsertNodeCollection method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n /**\n * getInsertNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getNodeArray method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n if (isNullOrUndefined(node)) {\n break;\n }\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 * @hidden\n * @deprecated\n */\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n /**\n * setRange method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n /**\n * setSelectionText method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionContents method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionNode method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n /**\n * getSelectedNodes method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n /**\n * Clear method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n /**\n * insertParentNode method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n /**\n * setCursorPoint method\n * @hidden\n * @deprecated\n */\n NodeSelection.prototype.setCursorPoint = function (docElement, element, point) {\n var range = docElement.createRange();\n var selection = docElement.defaultView.getSelection();\n range.setStart(element, point);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n return NodeSelection;\n}());\nexport { NodeSelection };\n","import * as CONSTANT from './../base/constant';\nimport { append, detach, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { selfClosingTags } from '../../common/config';\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 * @hidden\n * @deprecated\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n * @hidden\n * @deprecated\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n /**\n * contents method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n /**\n * isBlockNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n /**\n * isLink method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n /**\n * blockParentNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n /**\n * rawAttributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n /**\n * attributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* tslint:disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* tslint:enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n /**\n * clearAttributes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n /**\n * openTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n /**\n * closeTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.closeTagString = function (element) {\n return '</' + element.tagName.toLowerCase() + '>';\n };\n /**\n * createTagString method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '</' + tagName.toLowerCase() + '>';\n };\n /**\n * isList method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n /**\n * isElement method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n /**\n * isEditable method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n /**\n * hasClass method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n /**\n * replaceWith method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n /**\n * parseHTMLFragment method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* tslint:disable */\n var temp = createElement('template');\n temp.innerHTML = value;\n if (temp.content instanceof DocumentFragment) {\n return temp.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n /* tslint:enable */\n };\n /**\n * wrap method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n /**\n * insertAfter method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n /**\n * wrapInner method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n /**\n * unWrap method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n /**\n * getSelectedNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n /**\n * nodeFinds method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n /**\n * isEditorArea method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n /**\n * getRangePoint method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n /**\n * getPreviousNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousElementSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousElementSibling;\n }\n return element;\n };\n /**\n * encode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * saveMarker method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.saveMarker = function (save, action) {\n var start = this.parent.querySelector('.' + markerClassName.startSelection);\n var end = this.parent.querySelector('.' + markerClassName.endSelection);\n var startTextNode;\n var endTextNode;\n if (start.textContent === '' && isNullOrUndefined(end) && action !== 'tab') {\n if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {\n start.innerHTML = '<br>';\n }\n else {\n start.innerHTML = '';\n }\n }\n if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));\n this.replaceWith(start, replace);\n start = this.parent.querySelector('.' + markerClassName.startSelection);\n start.classList.remove(markerClassName.startSelection);\n startTextNode = start.childNodes[0];\n }\n else {\n startTextNode = this.unWrap(start)[0];\n }\n if (this.hasClass(end, markerClassName.endSelection) && end.classList.length > 1) {\n var replace = this.createTagString(CONSTANT.DEFAULT_TAG, end, this.encode(end.textContent));\n this.replaceWith(end, replace);\n end = this.parent.querySelector('.' + markerClassName.endSelection);\n end.classList.remove(markerClassName.endSelection);\n endTextNode = end.childNodes[0];\n }\n else {\n endTextNode = end ? this.unWrap(end)[0] : startTextNode;\n }\n save.startContainer = save.getNodeArray(startTextNode, true);\n save.endContainer = save.getNodeArray(endTextNode, false);\n return save;\n };\n DOMNode.prototype.marker = function (className, textContent) {\n return '<span class=\"' + className + '\">' + textContent + '</span>';\n };\n /**\n * setMarker method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var 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]) || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && (node.tagName === 'BR' || node.tagName === 'IMG')))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && ((start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) ||\n start.tagName === 'IMG')) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.ensureSelfClosingTag(end, markerClassName.endSelection, range);\n }\n }\n else {\n this.ensureSelfClosingTag(start, markerClassName.startSelection, range);\n }\n };\n /**\n * ensureSelfClosingTag method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.ensureSelfClosingTag = function (start, className, range) {\n var isTable = false;\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.tagName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n if (start.tagName === 'IMG') {\n var parNode = document.createElement('p');\n start.parentElement.insertBefore(parNode, start);\n parNode.appendChild(start);\n start = parNode.children[0];\n }\n if (start.tagName === 'TABLE') {\n isTable = true;\n if (start.textContent === '') {\n var tdNode = start.querySelectorAll('td');\n start = tdNode[tdNode.length - 1];\n start = !isNullOrUndefined(start.childNodes[0]) ? start.childNodes[0] : start;\n }\n else {\n var lastNode = start.lastChild;\n while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&\n lastNode.nodeName !== 'BR') {\n lastNode = lastNode.lastChild;\n }\n start = lastNode;\n }\n }\n for (var i = 0; i < selfClosingTags.length; i++) {\n start = (start.tagName === selfClosingTags[i] && !isTable) ? start.parentNode : start;\n }\n if (start.nodeType === 3 && start.nodeName === '#text') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.nodeName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.endSelection, this.encode(start.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(start);\n }\n else {\n var marker = this.marker(className, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n /**\n * createTempNode method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '></' + CONSTANT.DEFAULT_TAG + '>';\n var node = element.parentNode;\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.tagName.toLocaleLowerCase()) >= 0) {\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n }\n }\n else if (((element.nodeType !== Node.TEXT_NODE &&\n (element.classList.contains(markerClassName.startSelection) ||\n element.classList.contains(markerClassName.endSelection))) ||\n textContent.replace(/\\n/g, '').replace(/(^ *)|( *$)/g, '').length > 0 ||\n textContent.length && textContent.indexOf('\\n') < 0)) {\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + '></' + CONSTANT.DEFAULT_TAG + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n /**\n * getImageTagInSelection method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.getImageTagInSelection = function () {\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n return selection.focusNode.querySelectorAll('img');\n }\n return null;\n };\n /**\n * blockNodes method\n * @hidden\n * @deprecated\n */\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {\n collectionNodes.push(tempNode);\n }\n else {\n collectionNodes.push(this.createTempNode(tempNode));\n }\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && node.nodeType !== 8 && (node.tagName === 'BR' || (node.nodeType === Node.TEXT_NODE &&\n node.textContent.trim() !== '') || (node.nodeType !== Node.TEXT_NODE &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)))) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && node.nextSibling.nodeType !== 8 &&\n (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n if (node.nodeName === 'IMG' && node.parentElement.contentEditable === 'true') {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0 &&\n (!isNullOrUndefined(parentNode.previousElementSibling) && parentNode.previousElementSibling.tagName !== 'IMG')) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n * @hidden\n * @deprecated\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n * @hidden\n * @deprecated\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n Lists.prototype.testList = function (elem) {\n var olListRegex = [/^[\\d]+[.]+$/,\n /^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})[.]$/gi,\n /^[a-zA-Z][.]+$/];\n var elementStart = !isNullOrUndefined(elem) ? elem.innerText.trim().split('.')[0] + '.' : null;\n if (!isNullOrUndefined(elementStart)) {\n for (var i = 0; i < olListRegex.length; i++) {\n if (olListRegex[i].test(elementStart)) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.testCurrentList = function (range) {\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(range.startContainer.textContent.slice(0, range.startOffset))) {\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(range.startContainer.textContent.slice(0, range.startOffset))) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.spaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n var preElement = startNode.previousElementSibling;\n var nextElement = startNode.nextElementSibling;\n var preElemULStart = !isNullOrUndefined(preElement) ?\n preElement.innerText.trim().substring(0, 1) : null;\n var nextElemULStart = !isNullOrUndefined(nextElement) ?\n nextElement.innerText.trim().substring(0, 1) : null;\n var startElementOLTest = this.testCurrentList(range);\n var preElementOLTest = this.testList(preElement);\n var nextElementOLTest = this.testList(nextElement);\n if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {\n if (startElementOLTest) {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n }\n else if (range.startContainer.textContent.slice(0, range.startOffset) === '*') {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n }\n }\n };\n Lists.prototype.enterList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if (startNode === endNode && startNode.tagName === 'LI' && startNode.textContent.trim() === '' &&\n startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n };\n Lists.prototype.backspaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;\n endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;\n if (startNode === endNode && !isNullOrUndefined(closest(startNode, 'li')) &&\n startNode.textContent.trim() === '' && startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n if (startNode === endNode && startNode.textContent === '') {\n if (startNode.closest('ul') || startNode.closest('ol')) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.firstElementChild === startNode && !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 (startNode.childNodes[1].nodeName === 'UL' || 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.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.noPreviousElement = function (elements) {\n var firstNode;\n var firstNodeOL;\n var siblingListOL = elements.querySelectorAll('ol, ul');\n var siblingListLI = elements\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNode = siblingListLI[0];\n }\n else {\n firstNodeOL = siblingListOL[0];\n }\n if (firstNode) {\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNode);\n setStyleAttribute(elements, { 'list-style-type': 'none' });\n setStyleAttribute(firstNode, { 'list-style-type': '' });\n h = nextSibling;\n }\n }\n else if (firstNodeOL) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNodeOL);\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n prepend([firstNodeOL], elements.parentNode);\n detach(elements);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], firstNodeOL.parentNode);\n append([firstNodeOL], nestedElementLI);\n }\n else {\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], elements.parentNode);\n var nestedElement = createElement(elements.parentNode.tagName);\n prepend([nestedElement], nestedElementLI);\n append([elements], nestedElement);\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var firstNode = void 0;\n var firstNodeLI = void 0;\n var siblingListOL = elements[i].querySelectorAll('ol, ul');\n var siblingListLI = elements[i]\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNodeLI = siblingListLI[0];\n }\n else {\n firstNode = siblingListOL[0];\n }\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else if (firstNodeLI) {\n if (prevSibling.tagName === 'LI') {\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNodeLI);\n setStyleAttribute(elements[i], { 'list-style-type': 'none' });\n setStyleAttribute(firstNodeLI, { 'list-style-type': '' });\n h = nextSibling;\n }\n append([firstNodeLI.parentNode], prevSibling);\n detach(elements[i]);\n }\n }\n else {\n if (prevSibling.tagName === 'LI') {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n else {\n var element = elements[i];\n isNested = true;\n this.noPreviousElement(element);\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName === 'TABLE' && !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);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.applyLists = function (elements, type, selector) {\n var isReverse = true;\n if (this.isRevert(elements, type)) {\n this.revertList(elements);\n this.removeEmptyListElements();\n }\n else {\n this.checkLists(elements, type);\n for (var i = 0; i < elements.length; i++) {\n if (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) {\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + '>';\n var closeTag = '</' + type + '>';\n var newTag = 'li' + elemAtt;\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, selector);\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.removeEmptyListElements = function () {\n var listElem = this.parent.editableElement.querySelectorAll('ol, ul');\n for (var i = 0; i < listElem.length; i++) {\n if (listElem[i].textContent.trim() === '') {\n detach(listElem[i]);\n }\n }\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) {\n nodesTemp.push(node);\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '</' + tagName.toLowerCase() + '>';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousElementSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousElementSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.findUnSelected = function (temp, elements) {\n temp = temp.slice().reverse();\n if (temp.length > 0) {\n var rightIndent = [];\n var indentElements = [];\n var lastElement = elements[elements.length - 1];\n var lastElementChild = [];\n var childElements = [];\n lastElementChild = (lastElement.childNodes);\n for (var z = 0; z < lastElementChild.length; z++) {\n if (lastElementChild[z].tagName === 'OL' || lastElementChild[z].tagName === 'UL') {\n var childLI = lastElementChild[z]\n .querySelectorAll('li');\n if (childLI.length > 0) {\n for (var y = 0; y < childLI.length; y++) {\n childElements.push(childLI[y]);\n }\n }\n }\n }\n for (var i = 0; i < childElements.length; i++) {\n var count = 0;\n for (var j = 0; j < temp.length; j++) {\n if (!childElements[i].contains((temp[j]))) {\n count = count + 1;\n }\n }\n if (count === temp.length) {\n indentElements.push(childElements[i]);\n }\n }\n if (indentElements.length > 0) {\n for (var x = 0; x < indentElements.length; x++) {\n if (this.domNode.contents(indentElements[x])[0].nodeName !== 'OL' &&\n this.domNode.contents(indentElements[x])[0].nodeName !== 'UL') {\n rightIndent.push(indentElements[x]);\n }\n }\n }\n if (rightIndent.length > 0) {\n this.nestedList(rightIndent);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n var temp = [];\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n temp.push(elements[i]);\n elements.splice(i, 1);\n break;\n }\n }\n }\n this.findUnSelected(temp, elements);\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {\n detach(this.domNode.contents(element)[0]);\n }\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (temp.length === 0) {\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var child = firstNode\n .querySelectorAll('li');\n if (child) {\n var nestedElement = createElement(firstNode.tagName);\n append([nestedElement], firstNode.parentNode);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n append([nestedElementLI], nestedElement);\n append([firstNode], nestedElementLI);\n }\n }\n }\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapperclass = isNullOrUndefined(className) ? ' class=\"e-rte-wrap-inner\"' :\n ' class=\"' + className + ' e-rte-wrap-inner\"';\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +\n this.domNode.attributes(parentNode) + '></' + CONSTANT.DEFAULT_TAG + '>';\n this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));\n }\n else if (this.domNode.contents(element)[0].nodeType === 3) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||\n this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {\n var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);\n this.domNode.replaceWith(this.domNode.contents(element)[0], replace);\n }\n else {\n var childNode = element.firstChild;\n className = childNode.getAttribute('class');\n attributes(childNode, this.domNode.rawAttributes(parentNode));\n if (className && childNode.getAttribute('class')) {\n attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });\n }\n }\n append([this.openTag('LI')], element);\n prepend([this.closeTag('LI')], element);\n }\n this.domNode.insertAfter(this.openTag(parentNode.tagName), element);\n if (parentNode.parentNode.tagName === 'LI') {\n parentNode = parentNode.parentNode.parentNode;\n }\n if (viewNode.indexOf(parentNode) < 0) {\n viewNode.push(parentNode);\n }\n }\n for (var i = 0; i < viewNode.length; i++) {\n var node = viewNode[i];\n var nodeInnerHtml = node.innerHTML;\n var closeTag = /<span class=\"e-rte-list-close-([a-z]*)\"><\\/span>/g;\n var openTag = /<span class=\"e-rte-list-open-([a-z]*)\"><\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '</$1>');\n nodeInnerHtml = nodeInnerHtml.replace(openTag, '<$1 ' + this.domNode.attributes(node) + '>');\n this.domNode.replaceWith(node, this.domNode.openTagString(node) + nodeInnerHtml.trim() + this.domNode.closeTagString(node));\n }\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n Lists.prototype.openTag = function (type) {\n return this.domNode.parseHTMLFragment('<span class=\"e-rte-list-open-' + type.toLowerCase() + '\"></span>');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('<span class=\"e-rte-list-close-' + type.toLowerCase() + '\"></span>');\n };\n return Lists;\n}());\nexport { Lists };\n","/**\n * Node appending methods.\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n /**\n * WrapBefore method\n * @hidden\n * @deprecated\n */\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n /**\n * Wrap method\n * @hidden\n * @deprecated\n */\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n /**\n * unwrap method\n * @hidden\n * @deprecated\n */\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n /**\n * AppendBefore method\n * @hidden\n * @deprecated\n */\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n * @hidden\n * @deprecated\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n /**\n * GetSpliceNode method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n /**\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.isImgElm = function (fragment) {\n var result = true;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG') {\n var firstChild = fragment.childNodes[0];\n for (var i = 0; !isNOU(firstChild.childNodes) && i < firstChild.childNodes.length; i++) {\n if (firstChild.childNodes[i].nodeName === 'IMG') {\n result = false;\n }\n }\n }\n else {\n result = true;\n }\n return result;\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName === '#text' &&\n fragment.childNodes[0].textContent === '' || fragment.textContent === '') {\n len = -1;\n }\n else {\n len = fragment.childNodes.length - 1;\n }\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n /**\n * GetCursorRange method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n /**\n * GetCursorNode method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n /**\n * TrimLineBreak method\n * @hidden\n * @deprecated\n */\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined as isNOU, detach, createElement, closest } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { markerClassName } from './dom-node';\nimport { NodeCutter } from './nodecutter';\n/**\n * Formats internal component\n * @hidden\n * @deprecated\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Formats(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Formats.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.FORMAT_TYPE, this.applyFormats, this);\n this.parent.observer.on(EVENTS.KEY_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 (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);\n }\n else if ((startParent.textContent.charCodeAt(0) === 8203 &&\n startParent.textContent.length === 1) || startParent.textContent.length === 0) {\n //Double enter with any parent tag for the node\n while (startParent.parentElement.nodeName !== 'PRE' &&\n (startParent.textContent.length === 1 || startParent.textContent.length === 0)) {\n startParent = startParent.parentElement;\n }\n if (!isNOU(startParent.previousSibling) && startParent.previousSibling.nodeName === 'BR' &&\n isNOU(startParent.nextSibling)) {\n this.paraFocus(startParent.parentElement);\n }\n else {\n this.isNotEndCursor(preElem, range);\n }\n }\n else {\n //Cursor at start and middle\n this.isNotEndCursor(preElem, range);\n }\n }\n }\n };\n Formats.prototype.removeCodeContent = function (range) {\n var regEx = new RegExp(String.fromCharCode(65279), 'g');\n if (!isNOU(range.endContainer.textContent.match(regEx))) {\n var pointer = range.endContainer.textContent.charCodeAt(range.endOffset - 1) === 65279 ?\n range.endOffset - 2 : range.endOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n if (range.endContainer.textContent === '') {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer.parentElement, 0);\n }\n else {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer, pointer);\n }\n }\n };\n Formats.prototype.deleteContent = function (range) {\n if (range.startContainer !== range.endContainer || range.startOffset !== range.endOffset) {\n range.deleteContents();\n }\n };\n Formats.prototype.paraFocus = function (referNode) {\n var pTag = createElement('p');\n pTag.innerHTML = '<br>';\n this.parent.domNode.insertAfter(pTag, referNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n detach(referNode.lastChild);\n };\n Formats.prototype.isNotEndCursor = function (preElem, range) {\n var nodeCutter = new NodeCutter();\n var isEnd = range.startOffset === preElem.lastChild.textContent.length &&\n preElem.lastChild.textContent === range.startContainer.textContent;\n //Cursor at start point\n if (preElem.textContent.indexOf(range.startContainer.textContent) === 0 &&\n ((range.startOffset === 0 && range.endOffset === 0) || range.startContainer.nodeName === 'PRE')) {\n this.insertMarker(preElem, range);\n var brTag = createElement('br');\n preElem.childNodes[range.endOffset].parentElement.insertBefore(brTag, preElem.childNodes[range.endOffset]);\n }\n else {\n //Cursor at middle\n var cloneNode = nodeCutter.SplitNode(range, preElem, true);\n this.insertMarker(preElem, range);\n var previousSib = preElem.previousElementSibling;\n if (previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '<br>' + cloneNode.innerHTML);\n detach(preElem);\n }\n }\n //To place the cursor position \n this.setCursorPosition(isEnd, preElem);\n };\n Formats.prototype.setCursorPosition = function (isEnd, preElem) {\n var isEmpty = false;\n var markerElem = this.parent.editableElement.querySelector('.tempSpan');\n var mrkParentElem = markerElem.parentElement;\n markerElem.parentNode.textContent === '' ? isEmpty = true :\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n if (isEnd) {\n if (isEmpty) {\n //Enter press when pre element is empty\n if (mrkParentElem === preElem) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n else {\n this.focusSelectionParent(markerElem, mrkParentElem);\n }\n }\n else {\n var brElm = createElement('br');\n this.parent.domNode.insertAfter(brElm, markerElem);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n }\n else {\n isEmpty ? this.focusSelectionParent(markerElem, mrkParentElem) : detach(markerElem);\n }\n };\n Formats.prototype.focusSelectionParent = function (markerElem, tempSpanPElem) {\n detach(markerElem);\n tempSpanPElem.innerHTML = '\\u200B';\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, tempSpanPElem, 0);\n };\n Formats.prototype.insertMarker = function (preElem, range) {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n if (range.startContainer.nodeName === 'PRE') {\n preElem.childNodes[range.endOffset].parentElement.insertBefore(tempSpan, preElem.childNodes[range.endOffset]);\n }\n else {\n range.startContainer.parentElement.insertBefore(tempSpan, range.startContainer);\n }\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var isSelectAll = false;\n if (this.parent.editableElement === range.endContainer &&\n !isNOU(this.parent.editableElement.children[range.endOffset - 1]) &&\n this.parent.editableElement.children[range.endOffset - 1].tagName === 'TABLE' && !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 for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ||\n parentNode.tagName === 'TABLE' ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&\n (e.subCommand.toLowerCase() !== 'pre' ||\n (!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||\n isNOU(parentNode.parentNode) ||\n (parentNode.tagName === 'LI' && e.subCommand.toLowerCase() !== 'pre') ||\n (parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?\n 'p' : e.subCommand;\n var replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\\s+</g, '><'));\n if (parentNode.tagName === 'LI') {\n parentNode.innerHTML = '';\n parentNode.insertAdjacentHTML('beforeend', replaceTag);\n }\n else {\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n }\n this.preFormatMerge();\n var startNode = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endNode = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (!isNOU(startNode) && !isNOU(endNode)) {\n startNode = startNode.lastChild;\n endNode = endNode.lastChild;\n }\n save = this.parent.domNode.saveMarker(save, null);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n if (isSelectAll) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startNode, endNode, 0, endNode.textContent.length);\n }\n else {\n save.restore();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.preFormatMerge = function () {\n var preNodes = this.parent.editableElement.querySelectorAll('PRE');\n if (!isNOU(preNodes)) {\n for (var i = 0; i < preNodes.length; i++) {\n var previousSib = preNodes[i].previousElementSibling;\n if (!isNOU(previousSib) && previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '<br>' + preNodes[i].innerHTML);\n detach(preNodes[i]);\n }\n }\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport * as CONSTANT from './../base/constant';\nimport { detach, Browser, isNullOrUndefined as isNOU, createElement } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\nimport { updateTextNode } from './../../common/util';\n/**\n * Insert a HTML Node or Text\n * @hidden\n * @deprecated\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = isExternal ? divNode : divNode.firstChild;\n }\n else {\n if (isExternal && !(!isNOU(insertNode) && !isNOU(insertNode.classList) &&\n insertNode.classList.contains('pasteContent'))) {\n var divNode = document.createElement('div');\n divNode.appendChild(insertNode);\n node = divNode;\n }\n else {\n node = insertNode;\n }\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCursor = range.startOffset === range.endOffset && range.startOffset === 0 &&\n range.startContainer === range.endContainer;\n var isCollapsed = range.collapsed;\n var nodes = this.getNodeCollection(range, nodeSelection);\n var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];\n if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&\n node.classList.contains('pasteContent'))) {\n this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode);\n return;\n }\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n var preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n if (insertNode.tagName === 'TABLE') {\n this.removeEmptyElements(editNode);\n }\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n if (nodes[index].nodeName === 'IMG') {\n continue;\n }\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n var previousNode = null;\n while (parentNode !== editNode && parentNode.firstChild &&\n (parentNode.textContent.trim() === '')) {\n var parentNode1 = parentNode.parentNode;\n previousNode = parentNode;\n parentNode = parentNode1;\n }\n if (previousNode !== null) {\n parentNode = previousNode;\n }\n if (parentNode.firstChild && (parentNode !== editNode ||\n (node.nodeName === 'TABLE' && isCursor && parentNode === range.startContainer &&\n parentNode === range.endContainer))) {\n if (parentNode.textContent.trim() === '' && parentNode !== editNode) {\n InsertMethods.AppendBefore(node, parentNode, false);\n detach(parentNode);\n }\n else {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.deleteContents();\n if (isCursor && range.startContainer.textContent === '') {\n range.startContainer.innerHTML = '';\n }\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(node);\n range.insertNode(frag);\n }\n else {\n range.insertNode(node);\n }\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode) {\n var isCursor = range.startOffset === range.endOffset &&\n range.startContainer === range.endContainer;\n if (isCursor && range.startContainer === editNode && editNode.textContent === '') {\n var currentBlockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n nodeSelection.setSelectionText(docElement, currentBlockNode, currentBlockNode, 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var lasNode;\n var sibNode;\n var isSingleNode;\n var preNode;\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n isSingleNode = true;\n }\n else {\n lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n isSingleNode = false;\n }\n }\n var containsBlockNode = false;\n this.removingComments(node);\n var allChildNodes = node.childNodes;\n for (var i = 0; i < allChildNodes.length; i++) {\n if (CONSTANT.BLOCK_TAGS.indexOf(allChildNodes[i].nodeName.toLocaleLowerCase()) >= 0) {\n containsBlockNode = true;\n break;\n }\n }\n var lastSelectionNode;\n var fragment = document.createDocumentFragment();\n if (!containsBlockNode) {\n if (!isCursor) {\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n if (isSingleNode) {\n preNode.parentNode.replaceChild(fragment, preNode);\n }\n else {\n range.deleteContents();\n detach(lasNode);\n !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);\n }\n }\n else {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n tempSpan.parentNode.replaceChild(fragment, tempSpan);\n }\n }\n else {\n this.insertTempNode(range, node, nodes, nodeCutter, editNode);\n var isFirstTextNode = true;\n var isPreviousInlineElem = void 0;\n var paraElm = void 0;\n var previousParent = void 0;\n range.deleteContents();\n while (node.firstChild) {\n if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {\n detach(node.firstChild);\n continue;\n }\n if (node.firstChild.nodeName === '#text' && isFirstTextNode ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {\n lastSelectionNode = node.firstChild;\n if (isNOU(node.previousElementSibling)) {\n var firstParaElm = createElement('p');\n node.parentElement.insertBefore(firstParaElm, node);\n }\n node.previousElementSibling.appendChild(node.firstChild);\n }\n else {\n lastSelectionNode = node.firstChild;\n if (node.firstChild.nodeName === '#text' ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n paraElm.appendChild(node.firstChild);\n fragment.appendChild(paraElm);\n }\n else {\n previousParent.appendChild(node.firstChild);\n fragment.appendChild(previousParent);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else {\n fragment.appendChild(node.firstChild);\n isPreviousInlineElem = false;\n }\n isFirstTextNode = false;\n }\n }\n node.parentNode.replaceChild(fragment, node);\n }\n if (lastSelectionNode.nodeName === '#text') {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n else {\n this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n };\n InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? lastSelectionNode.previousSibling : lastSelectionNode;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n lastSelectionNode = isNOU(lastSelectionNode) ? node : lastSelectionNode;\n if (lastSelectionNode.nodeName === 'IMG') {\n this.imageFocus(lastSelectionNode, nodeSelection, docElement);\n }\n else {\n nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, lastSelectionNode.textContent.length, lastSelectionNode.textContent.length);\n }\n this.removeEmptyElements(editNode);\n };\n InsertHtml.getNodeCollection = function (range, nodeSelection) {\n var nodes = [];\n if (range.startOffset === range.endOffset && range.startContainer === range.endContainer &&\n range.startContainer.nodeName === 'TD') {\n nodes.push(range.startContainer.childNodes[range.endOffset]);\n }\n else {\n nodes = nodeSelection.getInsertNodeCollection(range);\n }\n return nodes;\n };\n InsertHtml.insertTempNode = function (range, node, nodes, nodeCutter, editNode) {\n if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset - 1]) &&\n range.startContainer.childNodes[range.endOffset - 1].nodeName === 'TABLE') {\n if (isNOU(range.startContainer.childNodes[range.endOffset - 1].nextSibling)) {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset - 1].nextSibling);\n }\n }\n else if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset]) &&\n range.startContainer.childNodes[range.endOffset].nodeName === 'TABLE') {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset]);\n }\n else {\n var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n if (blockNode.nodeName === 'TD' || blockNode.nodeName === 'TH') {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n tempSpan.parentNode.replaceChild(node, tempSpan);\n }\n else {\n var splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n splitedElm.parentNode.replaceChild(node, splitedElm);\n }\n }\n };\n InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode.classList.add('lastNode');\n editNode.innerHTML = updateTextNode(editNode.innerHTML);\n lastSelectionNode = editNode.querySelector('.lastNode');\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n lastSelectionNode.classList.remove('lastNode');\n if (lastSelectionNode.classList.length === 0) {\n lastSelectionNode.removeAttribute('class');\n }\n };\n InsertHtml.imageFocus = function (node, nodeSelection, docElement) {\n var focusNode = document.createTextNode(' ');\n node.parentNode.insertBefore(focusNode, node.nextSibling);\n nodeSelection.setSelectionText(docElement, node.nextSibling, node.nextSibling, 0, 0);\n };\n InsertHtml.getImmediateBlockNode = function (node, editNode) {\n do {\n node = node.parentNode;\n } while (CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n InsertHtml.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(/<!--[\\s\\S]*?-->/g, '');\n elm.innerHTML = innerElement;\n };\n InsertHtml.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' && element.parentElement.contentEditable !== 'true') {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n InsertHtml.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&\n 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 * @hidden\n * @deprecated\n */\n InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import { createElement, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from '../../selection/selection';\nimport { NodeCutter } from './nodecutter';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function LinkCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n LinkCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.LINK, this.linkCommand, this);\n };\n LinkCommand.prototype.linkCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\n case 'createlink':\n case 'editlink':\n this.createLink(e);\n break;\n case 'openlink':\n this.openLink(e);\n break;\n case 'removelink':\n this.removeLink(e);\n break;\n }\n };\n LinkCommand.prototype.createLink = function (e) {\n var closestAnchor = (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) &&\n closest(e.item.selectParent[0], 'a');\n closestAnchor = !isNOU(closestAnchor) ? closestAnchor :\n (!isNOU(e.item.selectParent) && e.item.selectParent.length > 0) ? (e.item.selectParent[0]) : null;\n if (!isNOU(closestAnchor) && closestAnchor.tagName === 'A') {\n var anchorEle = closestAnchor;\n var linkText = '';\n if (!isNOU(e.item.url)) {\n anchorEle.setAttribute('href', e.item.url);\n }\n if (!isNOU(e.item.title)) {\n anchorEle.setAttribute('title', e.item.title);\n }\n if (!isNOU(e.item.text) && e.item.text !== '') {\n linkText = anchorEle.innerText;\n anchorEle.innerText = e.item.text;\n }\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n else {\n anchorEle.removeAttribute('target');\n }\n if (linkText === e.item.text) {\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle, anchorEle, 1, 1);\n e.item.selection.restore();\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchorEle.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle.childNodes[0], anchorEle.childNodes[0], startIndex, anchorEle.childNodes[0].textContent.length);\n }\n }\n else {\n var domSelection = new NodeSelection();\n var range = domSelection.getRange(this.parent.currentDocument);\n var text = isNOU(e.item.text) ? true : e.item.text.replace(/ /g, '').localeCompare(range.toString()\n .replace(/\\n/g, ' ').replace(/ /g, '')) < 0;\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13) || e.item.action === 'Paste' || range.collapsed || text) {\n var anchor = this.createAchorNode(e);\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13)) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.text);\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchor.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], startIndex, anchor.childNodes[0].textContent.length);\n }\n }\n else {\n this.createLinkNode(e);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n ;\n LinkCommand.prototype.createLinkNode = function (e) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = domSelection.getRange(this.parent.currentDocument);\n var nodes = this.getSelectionNodes(domSelection.getNodeCollection(range));\n var save = domSelection.save(range, this.parent.currentDocument);\n var txtArray = [];\n var inlineNodes = [];\n var currentNode;\n var removeNodes = [];\n var anchorNodes = [];\n var finalinlineNodes = [];\n var cloneNode;\n for (var index = 0; index < nodes.length; index++) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n txtArray[index] = nodes[index];\n }\n for (var i = 0; i < txtArray.length; i++) {\n var check = true;\n currentNode = txtArray[i];\n while (check === true) {\n if (currentNode.parentElement.nodeName === 'A') {\n var anchorEle = currentNode.parentElement;\n currentNode.parentElement.parentElement.insertBefore(anchorEle.firstChild, anchorEle);\n currentNode.parentElement.removeChild(anchorEle);\n }\n if (this.isBlockNode(currentNode.parentElement) || txtArray.length === 0 || i === 0 || i === txtArray.length - 1) {\n inlineNodes[i] = currentNode;\n check = false;\n }\n else {\n currentNode = currentNode.parentElement;\n }\n }\n }\n for (var i = 0, j_1 = 0; i < inlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[j_1] = inlineNodes[i];\n }\n if (inlineNodes.length > 1 && i < inlineNodes.length - 1) {\n if ((inlineNodes[i].parentElement === inlineNodes[i + 1].parentElement) && (inlineNodes[i] === inlineNodes[i + 1])) {\n continue;\n }\n else {\n finalinlineNodes[j_1 + 1] = inlineNodes[i + 1];\n j_1++;\n }\n }\n }\n var j = 0;\n anchorNodes[j] = this.createAchorNode(e);\n for (var i = 0; i < finalinlineNodes.length; i++) {\n if (i === 0) {\n cloneNode = finalinlineNodes[i].cloneNode(true);\n anchorNodes[i].appendChild(cloneNode);\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n var cln = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cln);\n }\n else {\n j = j + 1;\n anchorNodes[j] = this.createAchorNode(e);\n cloneNode = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cloneNode);\n }\n }\n }\n this.parent.nodeSelection.setRange(document, save.range);\n for (var i = 0, j_2 = 0, k = 0; i <= finalinlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[i].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i].nextSibling);\n if (this.parent.domNode.blockNodes().length === 1) {\n this.parent.nodeSelection.setSelectionNode(this.parent.currentDocument, anchorNodes[j_2]);\n }\n removeNodes[k] = finalinlineNodes[i];\n k++;\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n else {\n j_2 = j_2 + 1;\n finalinlineNodes[i + 1].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i + 1]);\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n }\n }\n for (var i = 0; i < removeNodes.length; i++) {\n if (removeNodes[i].parentNode) {\n removeNodes[i].parentNode.removeChild(removeNodes[i]);\n }\n }\n };\n LinkCommand.prototype.createAchorNode = function (e) {\n var anchorEle = createElement('a', {\n className: 'e-rte-anchor',\n attrs: {\n href: e.item.url,\n title: isNOU(e.item.title) || e.item.title === '' ? e.item.url : e.item.title\n }\n });\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n return anchorEle;\n };\n LinkCommand.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n if (nodeCollection[index].nodeName !== 'IMG') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n }\n return nodeCollection.reverse();\n };\n LinkCommand.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ') + ' ';\n };\n LinkCommand.prototype.openLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n LinkCommand.prototype.removeLink = function (e) {\n var blockNodes = this.parent.domNode.blockNodes();\n if (blockNodes.length < 2) {\n this.parent.domNode.setMarker(e.item.selection);\n var closestAnchor = closest(e.item.selectParent[0], 'a');\n var selectParent = closestAnchor ? closestAnchor : e.item.selectParent[0];\n var parent_1 = selectParent.parentNode;\n var child = [];\n for (; selectParent.firstChild; null) {\n child.push(parent_1.insertBefore(selectParent.firstChild, selectParent));\n }\n parent_1.removeChild(selectParent);\n if (child && child.length === 1) {\n e.item.selection.startContainer = e.item.selection.getNodeArray(child[child.length - 1], true);\n e.item.selection.endContainer = e.item.selection.startContainer;\n }\n e.item.selection = this.parent.domNode.saveMarker(e.item.selection);\n }\n else {\n for (var i = 0; i < blockNodes.length; i++) {\n var linkNode = blockNodes[i].querySelectorAll('a');\n for (var j = 0; j < linkNode.length; j++) {\n if (document.getSelection().containsNode(linkNode[j], true)) {\n linkNode[j].outerHTML = linkNode[j].innerHTML;\n }\n }\n }\n }\n e.item.selection.restore();\n this.callBack(e);\n };\n LinkCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute, closest } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Formats internal component\n * @hidden\n * @deprecated\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.getTableNode = function (range) {\n var startNode = range.startContainer.nodeType === Node.ELEMENT_NODE ? range.startContainer : range.startContainer.parentNode;\n var cellNode = closest(startNode, 'td,th');\n return [cellNode];\n };\n Alignments.prototype.applyAlignment = function (e) {\n var isTableAlign = e.value === 'Table' ? true : false;\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n if (!isTableAlign) {\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n var imageTags = this.parent.domNode.getImageTagInSelection();\n for (var i = 0; i < imageTags.length; i++) {\n var elementNode = [];\n elementNode.push(imageTags[i]);\n this.parent.imgObj.imageCommand({\n item: {\n selectNode: elementNode\n },\n subCommand: e.subCommand,\n value: e.subCommand,\n callBack: e.callBack,\n selector: e.selector\n });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save.restore();\n }\n else {\n setStyleAttribute(this.getTableNode(range)[0], { 'text-align': this.alignments[e.subCommand] });\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: (isTableAlign ? this.getTableNode(range) : this.parent.domNode.blockNodes())\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Indents internal component\n * @hidden\n * @deprecated\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () { return; },\n stopPropagation: function () { return; },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeft = parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n indentsValue = marginLeft === '' ? this.indentValue + 'px' : parseInt(marginLeft, null) + this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n else {\n indentsValue = (marginLeft === '' || marginLeft === '0px') ? '' : parseInt(marginLeft, null) - this.indentValue + 'px';\n parentNode.style.marginLeft = indentsValue;\n }\n }\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n * @deprecated\n */\nexport var CLASS_IMAGE_RIGHT = 'e-imgright';\nexport var CLASS_IMAGE_LEFT = 'e-imgleft';\nexport var CLASS_IMAGE_CENTER = 'e-imgcenter';\nexport var CLASS_IMAGE_BREAK = 'e-imgbreak';\nexport var CLASS_CAPTION = 'e-img-caption';\nexport var CLASS_RTE_CAPTION = 'e-rte-img-caption';\nexport var CLASS_CAPTION_INLINE = 'e-caption-inline';\nexport var CLASS_IMAGE_INLINE = 'e-imginline';\n","import { createElement, isNullOrUndefined as isNOU, detach, closest, addClass, removeClass, select, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.imageCommand, this);\n };\n /**\n * imageCommand method\n * @hidden\n * @deprecated\n */\n ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLocaleLowerCase()) {\n case 'image':\n case 'replace':\n this.createImage(e);\n break;\n case 'insertlink':\n this.insertImageLink(e);\n break;\n case 'openimagelink':\n this.openImageLink(e);\n break;\n case 'editimagelink':\n this.editImageLink(e);\n break;\n case 'removeimagelink':\n this.removeImageLink(e);\n break;\n case 'remove':\n this.removeImage(e);\n break;\n case 'alttext':\n this.insertAltTextImage(e);\n break;\n case 'dimension':\n this.imageDimension(e);\n break;\n case 'caption':\n this.imageCaption(e);\n break;\n case 'justifyleft':\n this.imageJustifyLeft(e);\n break;\n case 'justifycenter':\n this.imageJustifyCenter(e);\n break;\n case 'justifyright':\n this.imageJustifyRight(e);\n break;\n case 'inline':\n this.imageInline(e);\n break;\n case 'break':\n this.imageBreak(e);\n break;\n }\n };\n ImageCommand.prototype.createImage = function (e) {\n var _this = this;\n e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;\n if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n this.setStyle(imgEle, e);\n }\n else {\n var imgElement = createElement('img');\n this.setStyle(imgElement, e);\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n if (!isNOU(e.selector) && e.selector === 'pasteCleanupModule') {\n e.callBack({ requestType: 'Image',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [imgElement]\n });\n }\n else {\n InsertHtml.Insert(this.parent.currentDocument, imgElement, this.parent.editableElement);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n var imgElm_1 = e.value === 'Replace' ? e.item.selectParent[0] :\n this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0].previousElementSibling;\n imgElm_1.addEventListener('load', function () {\n e.callBack({\n requestType: 'Image',\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 ImageCommand.prototype.setStyle = function (imgElement, e) {\n if (!isNOU(e.item.url)) {\n imgElement.setAttribute('src', e.item.url);\n }\n imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass));\n if (!isNOU(e.item.altText)) {\n imgElement.setAttribute('alt', e.item.altText);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.width)) {\n imgElement.setAttribute('width', this.calculateStyleValue(e.item.width.width));\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.height)) {\n imgElement.setAttribute('height', this.calculateStyleValue(e.item.height.height));\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.minWidth)) {\n imgElement.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.maxWidth)) {\n imgElement.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.minHeight)) {\n imgElement.style.minHeight = this.calculateStyleValue(e.item.height.minHeight);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.maxHeight)) {\n imgElement.style.maxHeight = this.calculateStyleValue(e.item.height.maxHeight);\n }\n };\n ImageCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n ImageCommand.prototype.insertImageLink = function (e) {\n var anchor = createElement('a', {\n attrs: {\n href: e.item.url\n }\n });\n if (e.item.selectNode[0].parentElement.classList.contains('e-img-wrap')) {\n e.item.selection.restore();\n anchor.setAttribute('contenteditable', 'true');\n }\n anchor.appendChild(e.item.selectNode[0]);\n if (!isNOU(e.item.target)) {\n anchor.setAttribute('target', e.item.target);\n }\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.openImageLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n ImageCommand.prototype.removeImageLink = function (e) {\n var selectParent = e.item.selectParent[0];\n if (selectParent.classList.contains('e-img-caption')) {\n var capImgWrap = select('.e-img-wrap', selectParent);\n var textEle = select('.e-img-inner', selectParent);\n var newTextEle = textEle.cloneNode(true);\n detach(select('a', selectParent));\n detach(textEle);\n capImgWrap.appendChild(e.item.insertElement);\n capImgWrap.appendChild(newTextEle);\n }\n else {\n detach(selectParent);\n if (Browser.isIE) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.editImageLink = function (e) {\n e.item.selectNode[0].parentElement.href = e.item.url;\n if (isNOU(e.item.target)) {\n e.item.selectNode[0].parentElement.removeAttribute('target');\n }\n else {\n e.item.selectNode[0].parentElement.target = e.item.target;\n }\n this.callBack(e);\n };\n ImageCommand.prototype.removeImage = function (e) {\n if (closest(e.item.selectNode[0], 'a')) {\n if (e.item.selectNode[0].parentElement.nodeName === 'A' && !isNOU(e.item.selectNode[0].parentElement.innerText)) {\n detach(e.item.selectNode[0]);\n }\n else {\n detach(closest(e.item.selectNode[0], 'a'));\n }\n }\n else if (!isNOU(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION))) {\n detach(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION));\n }\n else {\n detach(e.item.selectNode[0]);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.insertAltTextImage = function (e) {\n e.item.selectNode[0].setAttribute('alt', e.item.altText);\n this.callBack(e);\n };\n ImageCommand.prototype.imageDimension = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.style.height = '';\n selectNode.style.width = '';\n selectNode.width = e.item.width;\n selectNode.height = e.item.height;\n this.callBack(e);\n };\n ImageCommand.prototype.imageCaption = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyLeft = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_CENTER);\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageInline = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLASS_IMAGE_INLINE);\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageBreak = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLASS_IMAGE_BREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, closest, detach, Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n * @hidden\n * @deprecated\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n if (!isNOU(e.item.width.width)) {\n table.style.width = this.calculateStyleValue(e.item.width.width);\n }\n if (!isNOU(e.item.width.minWidth)) {\n table.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width.maxWidth)) {\n table.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n var tdWid = parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.row; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table, this.parent.editableElement);\n this.removeEmptyNode();\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n if (table.nextElementSibling === null) {\n var emptyPara = createElement('p');\n emptyPara.appendChild(createElement('br'));\n this.insertAfter(emptyPara, 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.insertRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n var curRow = closest(selectedCell, 'tr');\n var newRow;\n if (selectedCell.nodeName.toLowerCase() !== 'th') {\n newRow = closest(selectedCell, 'tr').cloneNode(true);\n var tabCell = Array.prototype.slice.call(newRow.querySelectorAll('td'));\n Array.prototype.forEach.call(tabCell, function (cell) {\n cell.innerHTML = '';\n cell.appendChild(createElement('br'));\n cell.removeAttribute('class');\n });\n }\n else {\n var childNodes = curRow.childNodes;\n newRow = createElement('tr');\n for (var i = 0; i < childNodes.length; i++) {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n }\n }\n (e.item.subCommand === 'InsertRowBefore') ?\n curRow.parentElement.insertBefore(newRow, curRow) : this.insertAfter(newRow, curRow);\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n selectedCell = (selectedCell.nodeName !== 'TD') ? closest(selectedCell, 'td,th') : selectedCell;\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest((curRow), 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll('th,td')).indexOf(selectedCell);\n var width = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);\n for (var j = 0; j < closest(curRow, 'table').querySelectorAll('th,td').length; j++) {\n closest(curRow, 'table').querySelectorAll('th,td')[j].style.width = width + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll('th,td')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedCellIndex = selectedCell.cellIndex;\n var parentTable = closest(selectedCell, 'table');\n var curRow = closest(selectedCell, 'tr');\n var allRows = closest(curRow, 'table').rows;\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (var i = 0; i < allRows.length; i++) {\n allRows[i].deleteCell(selectedCellIndex);\n if (Browser.isIE) {\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n var sContainer = this.parent.nodeSelection.getRange(this.parent.currentDocument).startContainer;\n if (sContainer.nodeName !== 'TD') {\n var startChildLength = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var focusNode = sContainer.children[startChildLength];\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, focusNode, 0);\n }\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedRowIndex = closest(selectedCell, 'tr').rowIndex;\n var parentTable = closest(selectedCell, 'table');\n if (parentTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n if (selectedCell.tagName === 'TH') {\n detach(parentTable.querySelector('thead'));\n }\n else {\n parentTable.deleteRow(selectedRowIndex);\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, parentTable.querySelector('td'), parentTable.querySelector('td'), 0, 0);\n parentTable.querySelector('td, th').classList.add('e-cell-select');\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var seletedTable = closest(selectedCell.parentElement, 'table');\n if (seletedTable) {\n e.item.selection.restore();\n detach(seletedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var headerExit = false;\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n [].slice.call(table.childNodes).forEach(function (el) {\n if (el.nodeName === 'THEAD') {\n headerExit = true;\n }\n });\n if (table && !headerExit) {\n var cellCount = table.querySelector('tr').childElementCount;\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var i = 0; i < cellCount; i++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return TableCommand;\n}());\nexport { TableCommand };\n","/**\n * Is formatted or not.\n * @hidden\n * @deprecated\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n /**\n * getFormattedNode method\n * @hidden\n * @deprecated\n */\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n /**\n * isBold method\n * @hidden\n * @deprecated\n */\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isItalic method\n * @hidden\n * @deprecated\n */\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isUnderline method\n * @hidden\n * @deprecated\n */\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isStrikethrough method\n * @hidden\n * @deprecated\n */\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSuperscript method\n * @hidden\n * @deprecated\n */\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSubscript method\n * @hidden\n * @deprecated\n */\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined as isNOU, Browser, closest, detach } from '@syncfusion/ej2-base';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n /**\n * applyFormat method\n * @hidden\n * @deprecated\n */\n SelectionCommands.applyFormat = function (docElement, format, endNode, value, selector) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n if (format === 'backgroundcolor' && value === '') {\n value = 'transparent';\n }\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeName.toLowerCase() !== 'td') {\n var cursorNode = this.insertCursorNode(docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n }\n isCursor = range.collapsed;\n 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);\n }\n else {\n nodes[index] = this.insertFormat(docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n save.restore();\n if (isSubSup) {\n this.applyFormat(docElement, format, endNode);\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) ? isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n InsertMethods.unwrap(cursorFormat);\n }\n else {\n cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection) {\n var splitNode = null;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n if (nodes[index].nodeName !== 'BR') {\n cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?\n nodeCutter.SplitNode(range, formatNode, true)\n : nodeCutter.GetSpliceNode(range, formatNode);\n }\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (nodes[index].nodeName !== 'BR') {\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '​';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '​';\n nodes[index] = lastNode.firstChild;\n }\n }\n var fontStyle;\n if (format === 'backgroundcolor') {\n fontStyle = formatNode.style.fontSize;\n }\n var bgStyle;\n if (format === 'fontsize') {\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n bgStyle = bg.style.backgroundColor;\n }\n }\n var formatNodeStyles = formatNode.getAttribute('style');\n var formatNodeTagName = formatNode.tagName;\n var child = InsertMethods.unwrap(formatNode);\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value, formatNodeTagName, formatNodeStyles));\n }\n var currentNodeElem = nodes[index].parentElement;\n if (!isNOU(fontStyle) && fontStyle !== '') {\n currentNodeElem.style.fontSize = fontStyle;\n }\n if (!isNOU(bgStyle) && bgStyle !== '') {\n currentNodeElem.style.backgroundColor = bgStyle;\n }\n if ((format === 'backgroundcolor' && !isNOU(fontStyle) && fontStyle !== '') &&\n currentNodeElem.parentElement.innerHTML === currentNodeElem.outerHTML) {\n var curParentElem = currentNodeElem.parentElement;\n curParentElem.parentElement.insertBefore(currentNodeElem, curParentElem);\n detach(curParentElem);\n }\n if (format === 'fontsize') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n liElement.style.fontSize = value;\n }\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n if (nodes[index].nodeName !== 'BR') {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n }\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n if (format === 'fontsize') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n liElement.style.fontSize = value;\n }\n nodes[index] = this.applyStyles(nodes, index, element);\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n nodes[index].parentElement.style.backgroundColor = bg.style.backgroundColor;\n }\n }\n else {\n nodes[index] = this.applyStyles(nodes, index, element);\n }\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(docElement, range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.applyStyles = function (nodes, index, element) {\n nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?\n InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (docElement, range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '​';\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(element);\n range.insertNode(frag);\n }\n else {\n range.insertNode(element);\n }\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '​';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value, 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 return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n * @hidden\n * @deprecated\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value, e.selector);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n * @hidden\n * @deprecated\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true);\n if (e.subCommand === 'pasteCleanup') {\n 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 { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n /**\n * clear method\n * @hidden\n * @deprecated\n */\n ClearFormat.clear = function (docElement, endNode, selector) {\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = 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('p'));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() !== 'p') {\n var blockNodes = this.removeParent([childNodes[index2]]);\n this.unWrap(docElement, blockNodes, nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].parentNode.nodeName.toLocaleLowerCase() === childNodes[index2].nodeName.toLocaleLowerCase()) {\n InsertMethods.unwrap(childNodes[index2]);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(childNodes[index2], docElement.createElement('p'));\n InsertMethods.unwrap(childNodes[index2]);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement('p'));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n if (textNodes[index].parentNode &&\n IsFormatted.inlineTags.indexOf(textNodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, textNodes[index].parentNode);\n this.removeInlineParent(textNodes[index].parentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', '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 return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n * @hidden\n * @deprecated\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n * @hidden\n * @deprecated\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement, e.selector);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoManager.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * onAction method\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n * @method saveData\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === changEle.text.trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n * @method undo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n * @method redo\n * @return {void}\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * getUndoStatus method\n * @hidden\n * @deprecated\n */\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import * as EVENTS from '../../common/constant';\nimport { createElement, isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';\n/**\n * PasteCleanup for MsWord content\n * @hidden\n * @deprecated\n */\nvar MsWordPaste = /** @class */ (function () {\n function MsWordPaste(parent) {\n this.olData = [\n 'decimal',\n 'lower-alpha',\n 'lower-roman',\n 'upper-alpha',\n 'upper-roman',\n 'lower-greek'\n ];\n this.ulData = [\n 'disc',\n 'square',\n 'circle',\n 'disc',\n 'square',\n 'circle'\n ];\n this.ignorableNodes = ['A', 'APPLET', 'B', 'BLOCKQUOTE', 'BR',\n 'BUTTON', 'CENTER', 'CODE', 'COL', 'COLGROUP', 'DD', 'DEL', 'DFN', 'DIR', 'DIV',\n 'DL', 'DT', 'EM', 'FIELDSET', 'FONT', 'FORM', 'FRAME', 'FRAMESET', 'H1', 'H2',\n 'H3', 'H4', 'H5', 'H6', 'HR', 'I', 'IMG', 'IFRAME', 'INPUT', 'INS', 'LABEL',\n 'LI', 'OL', 'OPTION', 'P', 'PARAM', 'PRE', 'Q', 'S', 'SELECT', 'SPAN', 'STRIKE',\n 'STRONG', 'SUB', 'SUP', 'TABLE', 'TBODY', 'TD', 'TEXTAREA', 'TFOOT', 'TH',\n 'THEAD', 'TITLE', 'TR', 'TT', 'U', 'UL'];\n this.blockNode = ['div', 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'address', 'blockquote', 'button', 'center', 'dd', 'dir', 'dl', 'dt', 'fieldset',\n 'frameset', 'hr', 'iframe', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript',\n 'object', 'ol', 'pre', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'ul',\n 'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];\n this.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 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.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 if (imgElem.length > 0) {\n for (var i = 0; i < imgElem.length; i++) {\n imgSrc.push(imgElem[i].getAttribute('src'));\n imgName.push(imgElem[i].getAttribute('src').split('/')[imgElem[i].getAttribute('src').split('/').length - 1].split('.')[0]);\n }\n var hexValue = this.hexConversion(rtfData);\n for (var i = 0; i < hexValue.length; i++) {\n base64Src.push(this.convertToBase64(hexValue[i]));\n }\n for (var i = 0; i < imgElem.length; i++) {\n imgElem[i].setAttribute('src', base64Src[i]);\n imgElem[i].setAttribute('id', 'msWordImg-' + imgName[i]);\n }\n }\n };\n MsWordPaste.prototype.checkVShape = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var i = 0; i < allNodes.length; i++) {\n switch (allNodes[i].nodeName) {\n case 'V:SHAPETYPE':\n detach(allNodes[i]);\n break;\n case 'V:SHAPE':\n if (allNodes[i].firstElementChild.nodeName === 'V:IMAGEDATA') {\n var src = allNodes[i].firstElementChild.getAttribute('src');\n var imgElement = createElement('img');\n imgElement.setAttribute('src', src);\n allNodes[i].parentElement.insertBefore(imgElement, allNodes[i]);\n detach(allNodes[i]);\n }\n break;\n }\n }\n };\n MsWordPaste.prototype.convertToBase64 = function (hexValue) {\n var base64;\n var byteArr = this.conHexStringToBytes(hexValue.hex);\n var base64String = this.conBytesToBase64(byteArr);\n base64 = hexValue.type ? 'data:' + hexValue.type + ';base64,' + base64String : null;\n return base64;\n };\n MsWordPaste.prototype.conBytesToBase64 = function (byteArr) {\n var base64Str = '';\n var base64Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var byteArrLen = byteArr.length;\n for (var i = 0; i < byteArrLen; i += 3) {\n var array3 = byteArr.slice(i, i + 3);\n var array3length = array3.length;\n var array4 = [];\n if (array3length < 3) {\n for (var j = array3length; j < 3; j++) {\n array3[j] = 0;\n }\n }\n array4[0] = (array3[0] & 0xFC) >> 2;\n array4[1] = ((array3[0] & 0x03) << 4) | (array3[1] >> 4);\n array4[2] = ((array3[1] & 0x0F) << 2) | ((array3[2] & 0xC0) >> 6);\n array4[3] = array3[2] & 0x3F;\n for (var j = 0; j < 4; j++) {\n if (j <= array3length) {\n base64Str += base64Char.charAt(array4[j]);\n }\n else {\n base64Str += '=';\n }\n }\n }\n return base64Str;\n };\n MsWordPaste.prototype.conHexStringToBytes = function (hex) {\n var byteArr = [];\n var byteArrLen = hex.length / 2;\n for (var i = 0; i < byteArrLen; i++) {\n byteArr.push(parseInt(hex.substr(i * 2, 2), 16));\n }\n return byteArr;\n };\n MsWordPaste.prototype.hexConversion = function (rtfData) {\n var picHead = /\\{\\\\pict[\\s\\S]+?\\\\bliptag\\-?\\d+(\\\\blipupi\\-?\\d+)?(\\{\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s\\}]*?/;\n var pic = new RegExp('(?:(' + picHead.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\n var fullImg = rtfData.match(pic);\n var imgType;\n var result = [];\n 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 (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) { return styleClassObject_1[key]; });\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 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 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) {\n listNodes.push(allNodes[index]);\n }\n if (prevflagState && (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) &&\n !(allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1)) {\n listNodes.push(null);\n }\n if (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) {\n if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1) {\n prevflagState = true;\n }\n else {\n prevflagState = false;\n }\n }\n }\n if (listNodes.length && (listNodes[listNodes.length - 1] !== null)) {\n listNodes.push(null);\n }\n return listNodes;\n };\n MsWordPaste.prototype.listConverter = function (listNodes) {\n var level;\n var data = [];\n var collection = [];\n var content = '';\n var stNode;\n for (var i = 0; i < listNodes.length; i++) {\n if (listNodes[i] === null) {\n data.push({ content: this.makeConversion(collection), node: listNodes[i - 1] });\n collection = [];\n continue;\n }\n content = listNodes[i].getAttribute('style');\n if (content && content.indexOf('level') !== -1) {\n level = parseInt(content.charAt(content.indexOf('level') + 5), null);\n }\n else {\n level = 1;\n }\n this.listContents = [];\n this.getListContent(listNodes[i]);\n var type = void 0;\n if (!isNOU(this.listContents[0])) {\n type = this.listContents[0].trim().length > 1 ? 'ol' : 'ul';\n var tempNode = [];\n for (var j = 1; j < this.listContents.length; j++) {\n tempNode.push(this.listContents[j]);\n }\n var currentClassName = void 0;\n if (!isNOU(listNodes[i].className)) {\n currentClassName = listNodes[i].className;\n }\n collection.push({ listType: type, content: tempNode, nestedLevel: level, class: currentClassName });\n }\n }\n stNode = listNodes.shift();\n while (stNode) {\n var elemColl = [];\n for (var temp1 = 0; temp1 < data.length; temp1++) {\n if (data[temp1].node === stNode) {\n for (var index = 0; index < data[temp1].content.childNodes.length; index++) {\n elemColl.push(data[temp1].content.childNodes[index]);\n }\n for (var index = 0; index < elemColl.length; index++) {\n stNode.parentElement.insertBefore(elemColl[index], stNode);\n }\n break;\n }\n }\n stNode.remove();\n stNode = listNodes.shift();\n if (!stNode) {\n stNode = listNodes.shift();\n }\n }\n };\n MsWordPaste.prototype.makeConversion = function (collection) {\n var root = createElement('div');\n var temp;\n var pLevel = 1;\n var prevList;\n var listCount = 0;\n var elem;\n for (var index = 0; index < collection.length; index++) {\n var pElement = createElement('p');\n pElement.innerHTML = collection[index].content.join(' ');\n if ((collection[index].nestedLevel === 1) && listCount === 0 && collection[index].content) {\n root.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else if (collection[index].nestedLevel === pLevel) {\n if (prevList.parentElement.tagName.toLowerCase() === collection[index].listType) {\n prevList.parentElement.appendChild(prevList = createElement('li'));\n prevList.appendChild(pElement);\n }\n else {\n temp = createElement(collection[index].listType);\n prevList.parentElement.parentElement.appendChild(temp);\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n }\n }\n else if (collection[index].nestedLevel > pLevel) {\n if (!isNOU(prevList)) {\n for (var j = 0; j < collection[index].nestedLevel - pLevel; j++) {\n prevList.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li', { styles: 'list-style-type: none;' });\n temp.appendChild(prevList);\n }\n prevList.appendChild(pElement);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n temp.childNodes[0].style.listStyle =\n this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n }\n else if (collection[index].nestedLevel === 1) {\n if (root.lastChild.tagName.toLowerCase() === collection[index].listType) {\n temp = root.lastChild;\n }\n else {\n root.appendChild(temp = createElement(collection[index].listType));\n }\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n }\n else {\n elem = prevList;\n while (elem.parentElement) {\n elem = elem.parentElement;\n if (elem.attributes.getNamedItem('level')) {\n if (parseInt(elem.attributes.getNamedItem('level').textContent, null) === collection[index].nestedLevel) {\n prevList = createElement('li');\n prevList.appendChild(pElement);\n elem.appendChild(prevList);\n break;\n }\n else if (collection[index].nestedLevel > parseInt(elem.attributes.getNamedItem('level').textContent, null)) {\n elem.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyle = this.getListStyle(collection[index].listType, collection[index].nestedLevel);\n break;\n }\n }\n continue;\n }\n }\n prevList.setAttribute('class', collection[index].class);\n pLevel = collection[index].nestedLevel;\n listCount++;\n }\n return root;\n };\n MsWordPaste.prototype.getListStyle = function (listType, nestedLevel) {\n nestedLevel = (nestedLevel > 0) ? nestedLevel - 1 : nestedLevel;\n if (listType === 'ol') {\n return (nestedLevel < this.olData.length ? this.olData[nestedLevel] : this.olData[0]);\n }\n else {\n return (nestedLevel < this.ulData.length ? this.ulData[nestedLevel] : this.ulData[0]);\n }\n };\n MsWordPaste.prototype.getListContent = function (elem) {\n var pushContent = '';\n if (elem.firstElementChild.textContent.trim() === '' &&\n !isNOU(elem.firstElementChild.firstElementChild) &&\n elem.firstElementChild.firstElementChild.nodeName === 'IMG') {\n pushContent = elem.innerHTML.trim();\n this.listContents.push('');\n this.listContents.push(pushContent);\n }\n else {\n pushContent = elem.firstElementChild.textContent.trim();\n this.listContents.push(pushContent);\n }\n detach(elem.firstElementChild);\n this.listContents.push(elem.innerHTML);\n };\n return MsWordPaste;\n}());\nexport { MsWordPaste };\n","import * as CONSTANT from '../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Insert a Text Node or Text\n * @hidden\n * @deprecated\n */\nvar InsertTextExec = /** @class */ (function () {\n /**\n * Constructor for creating the InsertText plugin\n * @hidden\n * @deprecated\n */\n function InsertTextExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertTextExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERT_TEXT_TYPE, this.insertText, this);\n };\n InsertTextExec.prototype.insertText = function (e) {\n var node = document.createTextNode(e.value);\n InsertHtml.Insert(this.parent.currentDocument, node);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertTextExec;\n}());\nexport { InsertTextExec };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport { MsWordPaste } from '../plugin/ms-word-clean-up';\nimport * as EVENTS from './../../common/constant';\nimport { InsertTextExec } from '../plugin/insert-text';\n/**\n * EditorManager internal component\n * @hidden\n * @deprecated\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n * @hidden\n * @deprecated\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.insertTextObj = new InsertTextExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.msWordPaste = new MsWordPaste(this);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n this.observer.on(EVENTS.MS_WORD_CLEANUP, this.onWordPaste, this);\n };\n EditorManager.prototype.onWordPaste = function (e) {\n this.observer.notify(EVENTS.MS_WORD_CLEANUP_PLUGIN, e);\n };\n EditorManager.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n /**\n * execCommand\n * @hidden\n * @deprecated\n */\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue, selector) {\n switch (command.toLocaleLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, exeValue: exeValue\n });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, {\n subCommand: value, event: event, callBack: callBack,\n selector: selector,\n value: exeValue\n });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { command: command, value: value, item: exeValue, event: event, callBack: callBack });\n break;\n case '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 });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text, selector: selector });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'inserttext':\n this.observer.notify(CONSTANT.INSERT_TEXT_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n * @hidden\n * @deprecated\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n * @param {Element} editElement\n * @param {Document} doc\n * @hidden\n * @deprecated\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\n/**\n * Update Toolbar Status\n * @hidden\n * @deprecated\n */\nexport var statusCollection = {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false,\n insertcode: false\n};\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n /**\n * get method\n * @hidden\n * @deprecated\n */\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n var nodesLength = nodes.length;\n for (var index = 0; index < nodes.length; index++) {\n if ((nodes[index].nodeName !== 'BR' && nodes[index].nodeType !== 3) ||\n (nodesLength > 1 && nodes[index].nodeType === 3 && nodes[index].textContent.trim() === '')) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.insertcode) || !formatCollection.insertcode) {\n nodeCollection.insertcode = formatCollection.insertcode;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node) ||\n (node.nodeType === 3 && targetNode.nodeType !== 3 && targetNode.contains(node.parentNode))) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n if (formatCollection.formats === 'pre') {\n formatCollection.insertcode = true;\n }\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n var pattern = new RegExp(name, 'i');\n if ((value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) ||\n (value.search(pattern) > -1)) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n 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) { fontsize.push(item.value); });\n this.parent.fontFamily.items.forEach(function (item) { fontName.push(item.value); });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","import { getEditValue } from '../base/util';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render Rich Text Editor content div\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = getEditValue(rteObj.value, rteObj);\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().innerText;\n };\n /**\n * Set the content div element of RichTextEditor\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n * @return {Document}\n * @hidden\n * @deprecated\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ContentRender } from '../renderer/content-renderer';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getEditValue } from '../base/util';\n/* tslint:disable */\nvar IFRAMEHEADER = \"\\n<!DOCTYPE html> \\n <html>\\n <head>\\n <meta charset='utf-8' /> \\n <style>\\n @charset \\\"UTF-8\\\";\\n body {\\n font-family: \\\"Roboto\\\", sans-serif;\\n font-size: 14px;\\n }\\n html, body{height: 100%;margin: 0;}\\n body.e-cursor{cursor:default}\\n span.e-selected-node\\t{background-color: #939393;color: white;}\\n span.e-selected-node.e-highlight {background-color: #1d9dd8;}\\n body{color:#333;word-wrap:break-word;padding: 8px;box-sizing: border-box;}\\n .e-rte-image {border: 0;cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\n .e-img-caption { display: inline-block; float: none; margin: 5px auto; max-width: 100%;position: relative;}\\n .e-img-caption.e-caption-inline {display: inline-block;float: none;margin: 5px auto;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));position: relativetext-align: center;vertical-align: bottom;}\\n .e-img-inner {box-sizing: border-box;display: block;font-size: 16px;font-weight: initial;margin: auto;opacity: .9;text-align: center;width: 100%;}\\n .e-img-wrap {display: inline-block;margin: auto;padding: 0;text-align: center;width: 100%;}\\n .e-imgleft {float: left;margin: 0 5px 0 0;text-align: left;}\\n .e-imgright {float: right;margin: 0 0 0 5px;text-align: right;}\\n .e-imgcenter {cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\n .e-control img:not(.e-resize) {border: 2px solid transparent; z-index: 1000}\\n .e-imginline {display: inline-block;float: none;margin-left: 5px;margin-right: 5px;max-width: calc(100% - (2 * 5px));vertical-align: bottom;}\\n .e-imgbreak {border: 0;cursor: pointer;display: block;float: none;height: auto;margin: 5px auto;max-width: 100%;position: relative;}\\n .e-rte-image.e-img-focus:not(.e-resize) {border: solid 2px #4a90e2;}\\n img::selection { background: transparent;color: transparent;}\\n span.e-rte-imageboxmark { width: 10px; height: 10px; position: absolute; display: block; background: #4a90e2; border: 1px solid #fff; z-index: 1000;}\\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\\n .e-mob-rte span.e-rte-imageboxmark { background: #fff; border: 1px solid #4a90e2; border-radius: 15px; height: 20px; width: 20px; }\\n .e-mob-rte.e-mob-span span.e-rte-imageboxmark { background: #4a90e2; border: 1px solid #fff; }\\n .e-rte-content .e-content img.e-resize { z-index: 1000; }\\n .e-img-caption .e-img-inner { outline: 0; }\\n .e-img-caption .e-rte-image.e-imgright, .e-img-caption .e-rte-image.e-imgleft { float: none; margin: 0;}\\n body{box-sizing: border-box;min-height: 100px;outline: 0 solid transparent;overflow-x: auto;padding: 16px;position: relative;text-align: inherit;z-index: 2;}\\n p{margin: 0 0 10px;margin-bottom: 10px;}\\n li{margin-bottom: 10px;}\\n h1{font-size: 2.17em;font-weight: 400;line-height: 1;margin: 10px 0;}\\n h2{font-size: 1.74em;font-weight: 400;margin: 10px 0;}\\n h3{font-size: 1.31em;font-weight: 400;margin: 10px 0;}\\n h4{font-size: 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;font-size: inherit;line-height: inherit;margin: 0 0 10px;overflow: visible;padding: 0;white-space: pre-wrap;word-break: inherit;word-wrap: break-word;}\\n strong, b{font-weight: 700;}\\n a{text-decoration: none;user-select: auto;}\\n a:hover{text-decoration: underline;};\\n p:last-child, pre:last-child, blockquote:last-child{margin-bottom: 0;}\\n h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}\\n ul:last-child{margin-bottom: 0;}\\n table { border-collapse: collapse; empty-cells: show;}\\n table td,table th {border: 1px solid #BDBDBD; height: 20px; vertical-align: middle;}\\n table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}\\n table th {background-color: #E0E0E0;}\\n table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD} \\n table .e-cell-select {border: 1px double #4a90e2;}\\n span.e-table-box { cursor: nwse-resize; display: block; height: 10px; position: absolute; width: 10px; }\\n span.e-table-box.e-rmob {height: 14px;width: 14px;}\\n .e-row-resize, .e-column-resize { background-color: transparent; background-repeat: repeat; bottom: 0;cursor: col-resize;height: 1px;overflow: visible;position: absolute;width: 1px; }\\n .e-row-resize { cursor: row-resize; height: 1px;}\\n .e-table-rhelper { cursor: col-resize; opacity: .87;position: absolute;}\\n .e-table-rhelper.e-column-helper { width: 1px; }\\n .e-table-rhelper.e-row-helper {height: 1px;}\\n .e-reicon::before { border-bottom: 6px solid transparent; border-right: 6px solid; border-top: 6px solid transparent; content: ''; display: block; height: 0; position: absolute; right: 4px; top: 4px; width: 20px; }\\n .e-reicon::after { border-bottom: 6px solid transparent; border-left: 6px solid; border-top: 6px solid transparent; content: ''; display: block; height: 0; left: 4px; position: absolute; top: 4px; width: 20px; z-index: 3; }\\n .e-row-helper.e-reicon::after { top: 10px; transform: rotate(90deg); }\\n .e-row-helper.e-reicon::before { left: 4px; top: -20px; transform: rotate(90deg); }\\n span.e-table-box { background-color: #ffffff; border: 1px solid #BDBDBD; }\\n span.e-table-box.e-rbox-select { background-color: #BDBDBD; border: 1px solid #BDBDBD; }\\n .e-table-rhelper { background-color: #4a90e2;}\\n .e-rtl { direction: rtl; }\\n </style>\\n </head>\";\n/* tslint:enable */\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render Rich Text Editor iframe\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = getEditValue(rteObj.value, rteObj);\n var iFrameBodyContent = '<body spellcheck=\"false\" autocorrect=\"off\" contenteditable=\"true\">' +\n rteContent + '</body></html>';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n innerHTML: iFrameContent,\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;'\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.body.setAttribute('aria-owns', this.parent.getID());\n iframe.contentDocument.open();\n iFrameContent = this.setThemeColor(iFrameContent, { color: '#333' });\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n if (rteObj.enableRtl) {\n this.contentPanel.contentDocument.body.setAttribute('class', 'e-rtl');\n }\n };\n IframeContentRender.prototype.setThemeColor = function (content, styles) {\n var fontColor = getComputedStyle(this.parent.element, '.e-richtexteditor').getPropertyValue('color');\n return content.replace(styles.color, fontColor);\n };\n /**\n * Get the editable element of RichTextEditor\n * @return {Element}\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.getEditPanel = function () {\n var editNode;\n if (!isNullOrUndefined(this.contentPanel.contentDocument)) {\n editNode = this.contentPanel.contentDocument.body;\n }\n else {\n editNode = this.parent.inputElement;\n }\n return editNode;\n };\n /**\n * Get the document of RichTextEditor\n * @param {Document}\n * @hidden\n * @deprecated\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { detach, 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);\n this.parent.setProperties({ value: this.currentElement.innerHTML }, true);\n }\n };\n /**\n * @deprecated\n */\n XhtmlValidation.prototype.selfEncloseValidation = function (currentValue) {\n currentValue = currentValue.replace(/<br>/g, '<br/>').replace(/<hr>/g, '<hr/>').replace(/ /gi, ' ').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 ;\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 ;\n XhtmlValidation.prototype.removeTags = function () {\n var removeAttribute = [['br', 'ul'], ['br', 'ol'], ['table', 'span'], ['div', 'span'], ['p', 'span']];\n for (var i = 0; i < removeAttribute.length; i++) {\n this.RemoveElementNode(removeAttribute[i][0], removeAttribute[i][1]);\n }\n };\n ;\n XhtmlValidation.prototype.RemoveElementNode = function (rmvNode, parentNode) {\n var parentArray = this.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 ;\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 ;\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 ;\n return XhtmlValidation;\n}());\nexport { XhtmlValidation };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\nimport { getTextNodesUnder, sanitizeHelper } from '../base/util';\nimport { isIDevice } from '../../common/util';\nimport { XhtmlValidation } from './xhtml-validation';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.xhtmlValidation = new XhtmlValidation(parent);\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.sanitizeHelper = function (value) {\n value = sanitizeHelper(value, this.parent);\n return value;\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n this.parent.on(events.paste, this.onPaste, this);\n };\n HtmlEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'false' });\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'true' });\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || e.items) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n if (e.args.keyCode === 9 && this.parent.enableTabKey) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || closest(parentNode[0], 'li') ||\n closest(parentNode[0], 'table')) && range.startOffset === 0)) {\n e.args.preventDefault();\n if (!e.args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), ' ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter') {\n this.spaceLink(e.args);\n }\n };\n HtmlEditor.prototype.onPaste = function (e) {\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (e.text.match(regex)) {\n e.args.preventDefault();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var saveSelection = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var httpRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)))/gi);\n var wwwRegex = new RegExp(/([^\\S]|^)(((www\\.))(\\S+))/gi);\n var enterSplitText = e.text.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += '<p><br></p>';\n }\n else {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText[i].split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? ' ' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n 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] + '\">' + 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 var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var url = urlText.indexOf('http') > -1 ? urlText : 'http://' + urlText;\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: url,\n selection: selection, selectParent: selectParent,\n text: urlText,\n title: '',\n target: '_blank'\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n if (isIDevice() && item.command === 'Images') {\n this.nodeSelectionObj.restore();\n }\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_rtelink');\n var imageDialog = this.parent.element.querySelector('#' + this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case '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 this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectAll = function () {\n var nodes = getTextNodesUnder(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel());\n if (nodes.length > 0) {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), nodes[0], nodes[nodes.length - 1], 0, nodes[nodes.length - 1].textContent.length);\n }\n };\n /**\n * For selecting all content in RTE\n * @private\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n * @private\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import * as events from '../base/constant';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined as isNOU, isNullOrUndefined, detach, isBlazor, extend, addClass } 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 } from '../base/util';\n/**\n * PasteCleanup module called when pasting content in RichTextEditor\n */\nvar PasteCleanup = /** @class */ (function () {\n function PasteCleanup(parent, serviceLocator) {\n this.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n this.blockNode = ['div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'address', 'blockquote', 'button', 'center', 'dd', 'dir', 'dl', 'dt', 'fieldset',\n 'frameset', 'hr', 'iframe', 'isindex', 'li', 'map', 'menu', 'noframes', 'noscript',\n 'object', 'ol', 'pre', 'td', 'tr', 'th', 'tbody', 'tfoot', 'thead', 'table', 'ul',\n 'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];\n this.isNotFromHtml = false;\n this.containsHtml = false;\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.i10n = serviceLocator.getService('rteLocale');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n PasteCleanup.prototype.addEventListener = function () {\n this.nodeSelectionObj = new NodeSelection();\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.pasteClean, this.pasteClean, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n PasteCleanup.prototype.destroy = function () {\n this.removeEventListener();\n };\n PasteCleanup.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.pasteClean, this.pasteClean);\n this.parent.off(events.destroy, this.destroy);\n };\n PasteCleanup.prototype.pasteClean = function (e) {\n var _this = this;\n var args = {\n requestType: 'Paste',\n editorMode: this.parent.editorMode,\n event: e\n };\n var value = null;\n var imageproperties;\n if (e.args && !isNOU(e.args.clipboardData)) {\n value = e.args.clipboardData.getData('text/html');\n }\n if (e.args && value !== null && this.parent.editorMode === 'HTML') {\n if (value.length === 0) {\n var htmlRegex = new RegExp(/<\\/[a-z][\\s\\S]*>/i);\n value = e.args.clipboardData.getData('text/plain');\n this.isNotFromHtml = value !== '' ? true : false;\n value = value.replace(/</g, '<');\n value = value.replace(/>/g, '>');\n this.containsHtml = htmlRegex.test(value);\n var file = e && e.args.clipboardData &&\n e.args.clipboardData.items.length > 0 ?\n e.args.clipboardData.items[0].getAsFile() : null;\n this.parent.notify(events.paste, {\n file: file,\n args: e.args,\n text: value,\n callBack: function (b) {\n imageproperties = b;\n if (typeof (imageproperties) === 'object') {\n _this.parent.formatter.editorManager.execCommand('Images', 'Image', e.args, _this.imageFormatting.bind(_this, args), 'pasteCleanup', imageproperties, 'pasteCleanupModule');\n }\n else {\n value = imageproperties;\n }\n }\n });\n if (!htmlRegex.test(value)) {\n var divElement = this.parent.createElement('div');\n divElement.innerHTML = this.splitBreakLine(value);\n value = divElement.innerHTML;\n }\n }\n else if (value.length > 0) {\n this.parent.formatter.editorManager.observer.notify(EVENTS.MS_WORD_CLEANUP, {\n args: e.args,\n text: e.text,\n allowedStylePropertiesArray: this.parent.pasteCleanupSettings.allowedStyleProps,\n callBack: function (a) {\n value = a;\n }\n });\n }\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n if (this.parent.pasteCleanupSettings.prompt) {\n e.args.preventDefault();\n var tempDivElem = this.parent.createElement('div');\n tempDivElem.innerHTML = value;\n if (tempDivElem.textContent !== '' || !isNOU(tempDivElem.querySelector('img')) ||\n !isNOU(tempDivElem.querySelector('table'))) {\n this.pasteDialog(value, args);\n }\n }\n else if (this.parent.pasteCleanupSettings.plainText) {\n e.args.preventDefault();\n this.plainFormatting(value, args);\n }\n else if (this.parent.pasteCleanupSettings.keepFormat) {\n e.args.preventDefault();\n this.formatting(value, false, args);\n }\n else {\n e.args.preventDefault();\n this.formatting(value, true, args);\n }\n }\n };\n PasteCleanup.prototype.splitBreakLine = function (value) {\n var enterSplitText = value.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += '<p><br></p>';\n }\n else {\n var contentWithSpace = this.makeSpace(enterSplitText[i]);\n contentInnerElem += '<p>' + contentWithSpace.trim() + '</p>';\n }\n }\n return contentInnerElem;\n };\n PasteCleanup.prototype.makeSpace = function (enterSplitText) {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText.split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? ' ' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n return contentWithSpace;\n };\n PasteCleanup.prototype.imgUploading = function (elm) {\n var allImgElm = elm.querySelectorAll('.pasteContent_Img');\n if (this.parent.insertImageSettings.saveUrl && allImgElm.length > 0) {\n var base64Src = [];\n var imgName = [];\n var uploadImg = [];\n for (var i = 0; i < allImgElm.length; i++) {\n if (allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {\n base64Src.push(allImgElm[i].getAttribute('src'));\n imgName.push(getUniqueID('rte_image'));\n uploadImg.push(allImgElm[i]);\n }\n }\n var fileList = [];\n for (var i = 0; i < base64Src.length; i++) {\n fileList.push(this.base64ToFile(base64Src[i], imgName[i]));\n }\n for (var i = 0; i < fileList.length; i++) {\n this.uploadMethod(fileList[i], uploadImg[i]);\n }\n if (isNOU(this.parent.insertImageSettings.path) &&\n this.parent.insertImageSettings.saveFormat === 'Blob') {\n this.getBlob(allImgElm);\n }\n }\n else if (this.parent.insertImageSettings.saveFormat === 'Blob') {\n this.getBlob(allImgElm);\n }\n var allImgElmId = elm.querySelectorAll('.pasteContent_Img');\n for (var i = 0; i < allImgElmId.length; i++) {\n allImgElmId[i].classList.remove('pasteContent_Img');\n if (allImgElmId[i].getAttribute('class').trim() === '') {\n allImgElm[i].removeAttribute('class');\n }\n }\n };\n PasteCleanup.prototype.getBlob = function (allImgElm) {\n for (var i = 0; i < allImgElm.length; i++) {\n if (!isNOU(allImgElm[i].getAttribute('src')) &&\n allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {\n var blopUrl = URL.createObjectURL(convertToBlob(allImgElm[i].getAttribute('src')));\n allImgElm[i].setAttribute('src', blopUrl);\n }\n }\n };\n PasteCleanup.prototype.uploadMethod = function (fileList, imgElem) {\n var _this = this;\n var uploadEle = document.createElement('div');\n document.body.appendChild(uploadEle);\n uploadEle.setAttribute('display', 'none');\n imgElem.style.opacity = '0.5';\n var popupEle = this.parent.createElement('div');\n this.parent.element.appendChild(popupEle);\n var contentEle = this.parent.createElement('input', {\n id: this.parent.element.id + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n var offsetY = this.parent.iframeSettings.enable ? -50 : -90;\n var popupObj = new Popup(popupEle, {\n relateTo: imgElem,\n height: '85px',\n width: '300px',\n offsetY: offsetY,\n content: contentEle,\n viewPortElement: this.parent.element,\n position: { X: 'center', Y: 'top' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n popupObj.destroy();\n detach(popupObj.element);\n }\n });\n popupObj.element.style.display = 'none';\n addClass([popupObj.element], [classes.CLS_POPUP_OPEN, classes.CLS_RTE_UPLOAD_POPUP]);\n var timeOut = fileList.size > 1000000 ? 300 : 100;\n setTimeout(function () { _this.refreshPopup(imgElem, popupObj); }, timeOut);\n var 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 () { _this.popupClose(popupObj, uploadObj, imgElem, e); }, 900);\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n _this.parent.trigger(events.imageUploading, e);\n _this.parent.inputElement.contentEditable = 'false';\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 /* tslint: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 /* tslint:enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n }\n },\n failure: function (e) {\n setTimeout(function () { _this.uploadFailure(imgElem, uploadObj, popupObj, e); }, 900);\n },\n canceling: function () {\n _this.parent.inputElement.contentEditable = 'true';\n if (imgElem.nextSibling.textContent === ' ') {\n detach(imgElem.nextSibling);\n }\n detach(imgElem);\n popupObj.close();\n },\n selected: function (e) {\n e.cancel = true;\n 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 /* tslint:disable */\n var fileData = [{\n name: fileList.name,\n rawFile: fileList,\n size: fileList.size,\n type: fileList.type,\n validationMessages: { minSize: \"\", maxSize: \"\" },\n statusCode: '1'\n }];\n uploadObj.createFileList(fileData);\n uploadObj.filesData.push(fileData[0]);\n /* tslint:enable */\n 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 * @hidden\n * @deprecated\n */\n PasteCleanup.prototype.imageFormatting = function (pasteArgs, imgElement) {\n var imageElement = this.parent.createElement('span');\n imageElement.appendChild(imgElement.elements[0]);\n var imageValue = imageElement.innerHTML;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n if (this.parent.pasteCleanupSettings.prompt) {\n this.pasteDialog(imageValue, pasteArgs);\n }\n else if (this.parent.pasteCleanupSettings.plainText) {\n this.plainFormatting(imageValue, pasteArgs);\n }\n else if (this.parent.pasteCleanupSettings.keepFormat) {\n this.formatting(imageValue, false, pasteArgs);\n }\n else {\n this.formatting(imageValue, true, pasteArgs);\n }\n };\n PasteCleanup.prototype.radioRender = function () {\n var keepRadioButton = new RadioButton({ label: this.i10n.getConstant('keepFormat'), name: 'pasteOption', checked: true });\n keepRadioButton.isStringTemplate = true;\n var keepFormatElement = this.parent.element.querySelector('#keepFormating');\n keepRadioButton.appendTo(keepFormatElement);\n var cleanRadioButton = new RadioButton({ label: this.i10n.getConstant('cleanFormat'), name: 'pasteOption' });\n cleanRadioButton.isStringTemplate = true;\n var cleanFormatElement = this.parent.element.querySelector('#cleanFormat');\n cleanRadioButton.appendTo(cleanFormatElement);\n var plainTextRadioButton = new RadioButton({ label: this.i10n.getConstant('plainText'), name: 'pasteOption' });\n plainTextRadioButton.isStringTemplate = true;\n var plainTextElement = this.parent.element.querySelector('#plainTextFormat');\n plainTextRadioButton.appendTo(plainTextElement);\n };\n PasteCleanup.prototype.selectFormatting = function (value, args, keepChecked, cleanChecked) {\n if (keepChecked) {\n this.formatting(value, false, args);\n }\n else if (cleanChecked) {\n this.formatting(value, true, args);\n }\n else {\n this.plainFormatting(value, args);\n }\n };\n PasteCleanup.prototype.pasteDialog = function (value, args) {\n var _this = this;\n var isHeight = false;\n var preRTEHeight = this.parent.height;\n var dialogModel = {\n buttons: [\n {\n click: function () {\n if (!dialog.isDestroyed) {\n var keepChecked = _this.parent.element.querySelector('#keepFormating').checked;\n var cleanChecked = _this.parent.element.querySelector('#cleanFormat').checked;\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var argument = isBlazor() ? null : dialog;\n _this.dialogRenderObj.close(argument);\n dialog.destroy();\n _this.selectFormatting(value, args, keepChecked, cleanChecked);\n }\n },\n buttonModel: {\n isPrimary: true,\n cssClass: 'e-flat ' + CLS_RTE_PASTE_OK,\n content: this.i10n.getConstant('pasteDialogOk')\n }\n },\n {\n click: function () {\n if (!dialog.isDestroyed) {\n dialog.hide();\n _this.parent.height = isHeight ? preRTEHeight : _this.parent.height;\n isHeight = false;\n var args_1 = isBlazor() ? null : dialog;\n _this.dialogRenderObj.close(args_1);\n dialog.destroy();\n }\n },\n buttonModel: {\n cssClass: 'e-flat ' + CLS_RTE_PASTE_CANCEL,\n content: this.i10n.getConstant('pasteDialogCancel')\n }\n }\n ],\n header: this.i10n.getConstant('pasteFormat'),\n content: this.i10n.getConstant('pasteFormatContent') + '<br/><div><div style=\"padding-top:24px;\">' +\n '<input type=\"radio\" class=\"' + CLS_RTE_PASTE_KEEP_FORMAT + '\" id=\"keepFormating\"/>' +\n '</div><div style=\"padding-top:20px;\"><input type=\"radio\" class=\"' + CLS_RTE_PASTE_REMOVE_FORMAT + '\" id=\"cleanFormat\"/></div>' +\n '<div style=\"padding-top:20px;\"><input type=\"radio\" class=\"' + CLS_RTE_PASTE_PLAIN_FORMAT + '\" id=\"plainTextFormat\"/></div></div>',\n target: this.parent.element,\n width: '300px',\n height: '265px',\n cssClass: CLS_RTE_DIALOG_MIN_HEIGHT,\n isModal: true,\n 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 if (this.parent.element.offsetHeight < parseInt(dialog.height.split('px')[0], null)) {\n this.parent.height = parseInt(dialog.height.split('px')[0], null) + 40;\n isHeight = true;\n }\n dialog.show();\n };\n PasteCleanup.prototype.destroyDialog = function (rteDialogWrapper) {\n var rteDialogContainer = this.parent.element.querySelector('.e-dlg-container');\n detach(rteDialogContainer);\n var rteDialogWrapperChildLength = rteDialogWrapper.children.length;\n for (var i = 0; i < rteDialogWrapperChildLength; i++) {\n detach(rteDialogWrapper.children[0]);\n }\n };\n PasteCleanup.prototype.formatting = function (value, clean, args) {\n var _this = this;\n var clipBoardElem = this.parent.createElement('div', { className: 'pasteContent', styles: 'display:inline;' });\n if (this.isNotFromHtml && this.containsHtml) {\n value = this.splitBreakLine(value);\n }\n clipBoardElem.innerHTML = value;\n if (this.parent.pasteCleanupSettings.deniedTags !== null) {\n clipBoardElem = this.deniedTags(clipBoardElem);\n }\n if (clean) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n else if (this.parent.pasteCleanupSettings.deniedAttrs !== null) {\n clipBoardElem = this.deniedAttributes(clipBoardElem, clean);\n }\n if (this.parent.pasteCleanupSettings.allowedStyleProps !== null) {\n clipBoardElem = this.allowedStyle(clipBoardElem);\n }\n this.saveSelection.restore();\n clipBoardElem.innerHTML = this.sanitizeHelper(clipBoardElem.innerHTML);\n var allImg = clipBoardElem.querySelectorAll('img');\n for (var i = 0; i < allImg.length; i++) {\n allImg[i].classList.add('pasteContent_Img');\n }\n 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) { return pasteCleanupGroupingTags[key]; });\n var addTags = [];\n for (var i = 0; i < groupingTags.length; i++) {\n //The value split using '[' because to reterive the tag name from the user given format which may contain tag with attributes\n if (groupingTags[i].split('[').length > 1) {\n groupingTags[i] = groupingTags[i].split('[')[0].trim();\n }\n if (keys.indexOf(groupingTags[i]) > -1) {\n for (var j = 0; j < values[keys.indexOf(groupingTags[i])].length; j++) {\n if (groupingTags.indexOf(values[keys.indexOf(groupingTags[i])][j]) < 0 &&\n addTags.indexOf(values[keys.indexOf(groupingTags[i])][j]) < 0) {\n addTags.push(values[keys.indexOf(groupingTags[i])][j]);\n }\n }\n }\n }\n return deniedTags = deniedTags.concat(addTags);\n };\n //Filter Attributes in Denied Tags\n PasteCleanup.prototype.attributesfilter = function (deniedTags) {\n for (var i = 0; i < deniedTags.length; i++) {\n if (deniedTags[i].split('[').length > 1) {\n var userAttributes = deniedTags[i].split('[')[1].split(']')[0].split(',');\n var allowedAttributeArray = [];\n var deniedAttributeArray = [];\n for (var j = 0; j < userAttributes.length; j++) {\n userAttributes[j].indexOf('!') < 0 ? allowedAttributeArray.push(userAttributes[j].trim())\n : deniedAttributeArray.push(userAttributes[j].split('!')[1].trim());\n }\n var allowedAttribute = allowedAttributeArray.length > 1 ?\n (allowedAttributeArray.join('][')) : (allowedAttributeArray.join());\n var deniedAttribute = deniedAttributeArray.length > 1 ? deniedAttributeArray.join('][') : (deniedAttributeArray.join());\n if (deniedAttribute.length > 0) {\n var select = allowedAttribute !== '' ? deniedTags[i].split('[')[0] +\n '[' + allowedAttribute + ']' : deniedTags[i].split('[')[0];\n deniedTags[i] = select + ':not([' + deniedAttribute + '])';\n }\n else {\n deniedTags[i] = deniedTags[i].split('[')[0] + '[' + allowedAttribute + ']';\n }\n }\n }\n return deniedTags;\n };\n //Denied Tags\n PasteCleanup.prototype.deniedTags = function (clipBoardElem) {\n var deniedTags = isNullOrUndefined(this.parent.pasteCleanupSettings.deniedTags) ? [] : this.parent.pasteCleanupSettings.deniedTags.slice();\n deniedTags = this.attributesfilter(deniedTags);\n deniedTags = this.tagGrouping(deniedTags);\n for (var i = 0; i < deniedTags.length; i++) {\n var removableElement = clipBoardElem.querySelectorAll(deniedTags[i]);\n for (var j = removableElement.length - 1; j >= 0; j--) {\n var parentElem = removableElement[j].parentNode;\n while (removableElement[j].firstChild) {\n parentElem.insertBefore(removableElement[j].firstChild, removableElement[j]);\n }\n parentElem.removeChild(removableElement[j]);\n }\n }\n return clipBoardElem;\n };\n //Denied Attributes\n PasteCleanup.prototype.deniedAttributes = function (clipBoardElem, clean) {\n var deniedAttrs = isNullOrUndefined(this.parent.pasteCleanupSettings.deniedAttrs) ? [] : this.parent.pasteCleanupSettings.deniedAttrs.slice();\n if (clean) {\n deniedAttrs.push('style');\n }\n for (var i = 0; i < deniedAttrs.length; i++) {\n var removableAttrElement = clipBoardElem.\n querySelectorAll('[' + deniedAttrs[i] + ']');\n for (var j = 0; j < removableAttrElement.length; j++) {\n removableAttrElement[j].removeAttribute(deniedAttrs[i]);\n }\n }\n return clipBoardElem;\n };\n //Allowed Style Properties\n PasteCleanup.prototype.allowedStyle = function (clipBoardElem) {\n var allowedStyleProps = isNullOrUndefined(this.parent.pasteCleanupSettings.allowedStyleProps) ? [] : this.parent.pasteCleanupSettings.allowedStyleProps.slice();\n allowedStyleProps.push('list-style-type', 'list-style');\n var styleElement = clipBoardElem.querySelectorAll('[style]');\n for (var i = 0; i < styleElement.length; i++) {\n var allowedStyleValue = '';\n var allowedStyleValueArray = [];\n var styleValue = styleElement[i].getAttribute('style').split(';');\n for (var k = 0; k < styleValue.length; k++) {\n if (allowedStyleProps.indexOf(styleValue[k].split(':')[0].trim()) >= 0) {\n allowedStyleValueArray.push(styleValue[k]);\n }\n }\n styleElement[i].removeAttribute('style');\n allowedStyleValue = allowedStyleValueArray.join(';').trim() === '' ?\n allowedStyleValueArray.join(';') : allowedStyleValueArray.join(';') + ';';\n if (allowedStyleValue) {\n styleElement[i].setAttribute('style', allowedStyleValue);\n }\n }\n return clipBoardElem;\n };\n /**\n * For internal use only - Get the module name.\n */\n PasteCleanup.prototype.getModuleName = function () {\n return 'pasteCleanup';\n };\n return PasteCleanup;\n}());\nexport { PasteCleanup };\n","import { EventHandler, Browser, isNullOrUndefined, isBlazor, detach } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\n/**\n * `Resize` module is used to resize the editor\n */\nvar Resize = /** @class */ (function () {\n function Resize(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n Resize.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderResizable, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n Resize.prototype.renderResizable = function () {\n this.resizer = this.parent.createElement('div', {\n id: this.parent.getID() + '-resizable', className: 'e-icons'\n + ' ' + classes.CLS_RTE_RES_HANDLE + ' ' + classes.CLS_RTE_RES_EAST\n });\n this.parent.element.classList.add(classes.CLS_RTE_RES_CNT);\n this.parent.element.appendChild(this.resizer);\n this.touchStartEvent = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(this.resizer, 'mousedown', this.resizeStart, this);\n EventHandler.add(this.resizer, this.touchStartEvent, this.resizeStart, this);\n };\n Resize.prototype.resizeStart = function (e) {\n var _this = this;\n if (e.cancelable) {\n e.preventDefault();\n }\n this.wireResizeEvents();\n this.parent.notify(events.resizeInitialized, {});\n var args = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.unwireResizeEvents();\n }\n });\n };\n Resize.prototype.performResize = function (e) {\n var _this = this;\n var args = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.unwireResizeEvents();\n }\n });\n var boundRect = this.parent.element.getBoundingClientRect();\n if (this.isMouseEvent(e)) {\n this.parent.element.style.height = e.clientY - boundRect.top + 'px';\n this.parent.element.style.width = e.clientX - boundRect.left + 'px';\n }\n else {\n var eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;\n this.parent.element.style.height = eventType.clientY - boundRect.top + 'px';\n this.parent.element.style.width = eventType.clientX - boundRect.left + 'px';\n }\n 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 = isBlazor() ? { requestType: 'editor' } : { event: e, requestType: 'editor' };\n this.parent.trigger(events.resizeStop, args);\n };\n Resize.prototype.getEventType = function (e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n };\n Resize.prototype.isMouseEvent = function (e) {\n var isMouse = false;\n if (this.getEventType(e.type) === 'mouse' || (!isNullOrUndefined(e.pointerType) &&\n this.getEventType(e.pointerType) === 'mouse')) {\n isMouse = true;\n }\n return isMouse;\n };\n Resize.prototype.wireResizeEvents = function () {\n EventHandler.add(document, 'mousemove', this.performResize, this);\n EventHandler.add(document, 'mouseup', this.stopResize, this);\n this.touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n this.touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n EventHandler.add(document, this.touchMoveEvent, this.performResize, this);\n EventHandler.add(document, this.touchEndEvent, this.stopResize, this);\n };\n Resize.prototype.unwireResizeEvents = function () {\n EventHandler.remove(document, 'mousemove', this.performResize);\n EventHandler.remove(document, 'mouseup', this.stopResize);\n EventHandler.remove(document, this.touchMoveEvent, this.performResize);\n EventHandler.remove(document, this.touchEndEvent, this.stopResize);\n };\n Resize.prototype.destroy = function () {\n this.removeEventListener();\n };\n Resize.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderResizable);\n this.parent.element.classList.remove(classes.CLS_RTE_RES_CNT);\n EventHandler.remove(this.resizer, 'mousedown', this.resizeStart);\n EventHandler.remove(this.resizer, this.touchStartEvent, this.resizeStart);\n if (this.resizer) {\n detach(this.resizer);\n }\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * For internal use only - Get the module name.\n */\n Resize.prototype.getModuleName = function () {\n return 'resize';\n };\n return Resize;\n}());\nexport { Resize };\n","import { Browser, 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 click: function (e) { _this.cancelDialog(); },\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 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 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 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 * @hidden\n * @deprecated\n */\n FullScreen.prototype.showFullScreen = function (event) {\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 this.parent.trigger(events.actionBegin, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n if (this.parent.toolbarSettings.enableFloating &&\n !this.parent.inlineMode.enable && this.parent.toolbarSettings.enable) {\n this.parent.getToolbarElement().style.width = '100%';\n this.parent.getToolbarElement().style.top = '0px';\n }\n this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n this.toggleParentOverflow(true);\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n if (Browser.isDevice) {\n this.parent.toolbarModule.removeFixedTBarClass();\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n };\n /**\n * hideFullScreen method\n * @hidden\n * @deprecated\n */\n FullScreen.prototype.hideFullScreen = function (event) {\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.parent.trigger(events.actionBegin, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n this.parent.setContentHeight();\n if (this.parent.toolbarModule) {\n if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && this.parent.inlineMode.enable) {\n this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n };\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (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 * @hidden\n * @deprecated\n */\n FullScreen.prototype.destroy = function () {\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n this.toggleParentOverflow(false);\n }\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n this.removeEventListener();\n };\n return FullScreen;\n}());\nexport { FullScreen };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize Rich Text Editor header, content and footer rendering\n * @hidden\n * @deprecated\n */\n Render.prototype.render = function () {\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && ((childNodes[0].tagName === 'BR') ||\n (childNodes[0].tagName === 'P' &&\n (childNodes[0].childNodes.length === 0 || childNodes[0].textContent === ''))))) {\n var node = this.parent.contentModule.getEditPanel();\n node.innerHTML = '<p><br/></p>';\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","import { EventHandler, detach, isNullOrUndefined, select, isBlazor, extend } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n 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.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n 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 (e.args.action !== 'enter' && e.args.action !== 'space') {\n var pageX = void 0;\n var pageY = void 0;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var target_1;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target_1 = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target_1.getBoundingClientRect().top;\n var linkLeft = target_1.getBoundingClientRect().left;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageX = (this.parent.iframeSettings.enable) ? parentLeft + linkLeft : target_1.getBoundingClientRect().left;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ?\n (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n var args = void 0;\n args = e.args.touches ? e.args.changedTouches[0] : args = e.args;\n pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideLinkQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n target = this.getAnchorNode(target);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && (target.childNodes.length > 0 && target.childNodes[0].nodeName !== 'IMG') &&\n e.args.target.nodeName !== 'IMG') {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event.args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: originalEvent\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (e.selectParent.length > 0 &&\n !isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var selectText;\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var title = this.i10n.getConstant('linkTitle');\n var linkDialogEle = this.parent.createElement('div', { className: 'e-rte-link-dialog', id: this.rteID + '_rtelink' });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'\n });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '<label>' + linkTooltip +\n '</label></div><div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" placeholder = \"' + title + '\" class=\"e-input e-rte-linkTitle\"></div>' +\n '<div class=\"e-rte-label\"></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"checkbox\" class=\"e-rte-linkTarget\" data-role =\"none\"></div>' : '';\n var content = '<div class=\"e-rte-label\"><label>' + linkWebAddress + '</label></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" placeholder=\"' + urlPlace + '\" class=\"e-input e-rte-linkurl\"/></div>' +\n '<div class=\"e-rte-label\">' + '<label>' + linkDisplayText + '</label></div><div class=\"e-rte-field\"> ' +\n '<input type=\"text\" data-role =\"none\" spellcheck=\"false\" class=\"e-input e-rte-linkText\" placeholder=\"' + textPlace + '\">' +\n '</div><div class=\"e-rte-label\">' + htmlTextbox;\n var contentElem = parseHtml(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n selectText = (this.parent.editorMode === 'HTML') ? e.selection.getRange(this.parent.contentModule.getDocument()).toString() :\n e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n var dialogModel = {\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'inherit',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat', content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n var args = isBlazor() ? null : _this.dialogObj;\n _this.dialogRenderObj.close(args);\n _this.dialogObj = null;\n },\n };\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'inherit';\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && isNullOrUndefined(inputDetails) && ((!isNullOrUndefined(selectText)\n && selectText !== '') && (e.selection.range.startOffset === 0) || e.selection.range.startOffset !==\n e.selection.range.endOffset)) || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : null;\n if (linkUrl === '') {\n this.selfLink.checkUrl(true);\n return;\n }\n if (!this.selfLink.isUrl(linkUrl)) {\n linkText = (linkText === '') ? linkUrl : linkText;\n if (!this.selfLink.parent.enableAutoUrl) {\n linkUrl = linkUrl.indexOf('http') > -1 ? linkUrl : 'http://' + linkUrl;\n }\n else {\n linkUrl = linkUrl;\n }\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.parent.contentModule.getPanel().id))) {\n proxy.parent.contentModule.getEditPanel().focus();\n if (Browser.isIE && proxy.parent.iframeSettings.enable) {\n this.selection.restore();\n }\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (document.body.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n if (isIDevice() && proxy.parent.iframeSettings.enable) {\n select('iframe', proxy.parent.element).contentWindow.focus();\n }\n if (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var argsValue;\n if (this.args.code === 'KeyK') {\n var originalEvent = this.args;\n extend(this.args, { item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent }, true);\n var argsVal = {\n item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent\n };\n argsValue = argsVal;\n }\n else {\n argsValue = this.args;\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, argsValue, this.args.originalEvent, value);\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (isIDevice() && this.parent.iframeSettings.enable) {\n select('iframe', this.parent.element).contentWindow.focus();\n }\n else {\n this.parent.contentModule.getEditPanel().focus();\n }\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: selectParentEle.href,\n target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n }\n };\n Link.prototype.getAnchorNode = function (element) {\n var selectParent = closest(element, 'a');\n return (selectParent ? selectParent : element);\n };\n Link.prototype.editLink = function (e) {\n var selectedNode = this.getAnchorNode(e.selectNode[0]);\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n selectParentEle = selectedNode.nodeName === 'A' ? selectedNode : selectParentEle;\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.getAttribute('href'), text: selectParentEle.innerText,\n title: selectParentEle.title, target: selectParentEle.target,\n header: this.i10n.getConstant('editLink'), btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n Link.prototype.cancelDialog = function (e) {\n this.selfLink.parent.isBlur = false;\n this.selfLink.dialogObj.hide({ returnValue: true });\n if (isIDevice()) {\n this.selection.restore();\n }\n else {\n this.selfLink.parent.contentModule.getEditPanel().focus();\n }\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (((this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target)) ||\n this.parent.inlineMode.enable && !closest(target, '#' + this.dialogObj.element.id)) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { addClass, detach, EventHandler, isNullOrUndefined, select, isBlazor, Ajax } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml, hasClass, convertToBlob } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.isImgUploaded = false;\n this.pageX = null;\n this.pageY = null;\n this.deletedImg = [];\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.keyUp, this.onKeyUp, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.paste, this.imagePaste, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.keyUp, this.onKeyUp);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.paste, this.imagePaste);\n this.parent.off(events.destroy, this.removeEventListener);\n var dropElement = this.parent.iframeSettings.enable ? this.parent.inputElement.ownerDocument\n : this.parent.inputElement;\n dropElement.removeEventListener('drop', this.dragDrop.bind(this), true);\n dropElement.removeEventListener('dragstart', this.dragStart.bind(this), true);\n dropElement.removeEventListener('dragenter', this.dragEnter.bind(this), true);\n dropElement.removeEventListener('dragover', this.dragOver.bind(this), true);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick);\n this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n 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 = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n var pageX = this.getPointX(e);\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;\n this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);\n this.parent.formatter.saveData();\n };\n Image.prototype.resizeStart = function (e, ele) {\n var _this = this;\n if (this.parent.readonly) {\n return;\n }\n var target = ele ? ele : e.target;\n 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 = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.cancelResizeAction();\n }\n });\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n e.target.focus();\n }\n else {\n if (!this.parent.readonly) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n }\n if (e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.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 offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = ((elem.offsetParent && (elem.offsetParent.classList.contains('e-img-caption') ||\n ignoreOffset.indexOf(elem.offsetParent.tagName) > -1)) ?\n closest(elem, '#' + this.parent.getID() + '_rte-edit-view') : elem.offsetParent) || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? parseInt(img.style.width, 10) : img.width;\n var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;\n if (width > height) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = (width / height * expectedY) + 'px';\n img.style.height = expectedY + 'px';\n }\n else {\n img.setAttribute('width', (width / height * expectedY).toString());\n img.setAttribute('height', expectedY.toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = (height / width * expectedX) + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', (height / width * expectedX).toString());\n }\n }\n else {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = expectedX + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', expectedX.toString());\n }\n }\n };\n Image.prototype.pixToPerc = function (expected, parentEle) {\n return expected / parseFloat(getComputedStyle(parentEle).width) * 100;\n };\n Image.prototype.imgDupMouseMove = function (width, height, e) {\n var _this = this;\n var args = isBlazor() ? { requestType: 'images' } : { event: e, requestType: 'images' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.cancelResizeAction();\n }\n else {\n if ((parseInt(_this.parent.insertImageSettings.minWidth, 10) >= parseInt(width, 10) ||\n parseInt(_this.parent.getInsertImgMaxWidth(), 10) <= parseInt(width, 10))) {\n return;\n }\n if (!_this.parent.insertImageSettings.resizeByPercent &&\n (parseInt(_this.parent.insertImageSettings.minHeight, 10) >= parseInt(height, 10) ||\n parseInt(_this.parent.insertImageSettings.maxHeight, 10) <= parseInt(height, 10))) {\n return;\n }\n _this.imgEle.parentElement.style.cursor = 'pointer';\n _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10));\n _this.resizeImgDupPos(_this.imgEle);\n _this.imgResizePos(_this.imgEle, _this.imgResizeDiv);\n _this.parent.setContentHeight('', false);\n }\n });\n };\n Image.prototype.resizing = function (e) {\n 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 this.parent.trigger(events.afterImageDelete, { element: this.deletedImg[i], src: src });\n }\n break;\n case 'insert-image':\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: originalEvent\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.onKeyUp = function (event) {\n if (!isNOU(this.deletedImg) && this.deletedImg.length > 0) {\n for (var i = 0; i < this.deletedImg.length; i++) {\n var args = {\n element: this.deletedImg[i],\n src: this.deletedImg[i].getAttribute('src')\n };\n this.parent.trigger(events.afterImageDelete, args);\n }\n }\n };\n Image.prototype.checkImageBack = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === 0 &&\n !isNOU(range.startContainer.previousSibling) && range.startContainer.previousSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.previousSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset - 1]) &&\n range.startContainer.childNodes[range.startOffset - 1].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset - 1]);\n }\n };\n Image.prototype.checkImageDel = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === range.startContainer.textContent.length &&\n !isNOU(range.startContainer.nextSibling) && range.startContainer.nextSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.nextSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset]) &&\n range.startContainer.childNodes[range.startOffset].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset]);\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.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 separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target = e.elements;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target && !closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () { _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target); }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideImageQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n if ((showOnRightClick && args.which === 1) && !isNullOrUndefined(args.target) &&\n args.target.tagName === 'IMG') {\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), args.target);\n }\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n if (isIDevice()) {\n this.parent.notify(events.selectionSave, e);\n }\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (closest(target, 'a')) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (!closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '<div class=\"e-rte-field\">' +\n '<input type=\"text\" data-role =\"none\" class=\"e-input e-img-link\" spellcheck=\"false\" placeholder=\"' + linkUrl + '\"/></div>' +\n '<div class=\"e-rte-label\"></div>' + '<div class=\"e-rte-field\">' +\n '<input type=\"checkbox\" class=\"e-rte-linkTarget\" data-role =\"none\"></div>';\n var contentElem = parseHtml(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = null;\n }\n }\n });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var target_1 = this.checkBoxObj.checked ? '_blank' : null;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n args: e.args,\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'inherit',\n width: '290px',\n header: this.parent.localeObj.getConstant('imageInsertLinkHeader'),\n content: linkWrap,\n position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertlink(linkargs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '<div class=\"e-rte-field\">' +\n '<input type=\"text\" spellcheck=\"false\" value=\"' + getAlt + '\" class=\"e-input e-img-alt\" placeholder=\"' + altText + '\"/>' +\n '</div>';\n var contentElem = parseHtml(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = {\n args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode,\n alt: inputAlt\n };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertAlt(altArgs_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var altText = e.alt.value;\n this.parent.formatter.process(this.parent, e.args, e.args, {\n altText: altText, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (url === '') {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n if (!this.isUrl(url)) {\n url = 'http://' + url;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n var proxy = e.selfImage;\n if (proxy.parent.editorMode === 'HTML') {\n e.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n proxy.dialogObj.hide({ returnValue: true });\n return;\n }\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand, selection: e.selection\n });\n var captionEle = closest(e.selectNode[0], '.e-img-caption');\n if (captionEle) {\n select('.e-img-inner', captionEle).focus();\n }\n proxy.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e, keyCode) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var args = {\n element: e.selectNode[0],\n src: e.selectNode[0].getAttribute('src')\n };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.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 ajax = new Ajax(this.parent.insertImageSettings.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', attrs: { contenteditable: 'true' } });\n var parent_1 = e.selectNode[0].parentElement;\n if (parent_1.tagName === 'A') {\n parent_1.setAttribute('contenteditable', 'true');\n }\n imgWrap.appendChild(parent_1.tagName === 'A' ? parent_1 : e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: this.captionEle, selectNode: e.selectNode, subCommand: subCommand });\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj_1 = { args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n click: function (e) { _this.insertSize(selectObj_1); },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Break';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Inline';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.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.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };\n var dialogModel = {\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n if (_this.isImgUploaded) {\n _this.uploadObj.removing();\n }\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogRenderObj.close(event);\n _this.dialogObj = null;\n },\n };\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n dialogModel.header = this.parent.localeObj.getConstant('editImageHeader');\n dialogModel.content = dialogContent;\n }\n else {\n dialogModel.content = dialogContent;\n }\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(imgDialog);\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG' && (e.name === 'insertImage')) {\n this.dialogObj.element.querySelector('.e-insertImage').textContent = this.parent.localeObj.getConstant('dialogUpdate');\n }\n imgDialog.style.maxHeight = 'inherit';\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n if (this.isImgUploaded) {\n this.uploadObj.removing();\n }\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (target.nodeName === 'IMG') {\n this.imgEle = target;\n }\n if (!isNullOrUndefined(this.dialogObj) && ((!closest(target, '#' + this.dialogObj.element.id) && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n if (e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&\n this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&\n this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n if (target.tagName !== 'IMG') {\n this.removeResizeEle();\n }\n if (!isNOU(this.prevSelectedImgEle)) {\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.imageUrlPopup = function (e) {\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = this.parent.createElement('input', {\n className: 'e-input e-img-url',\n attrs: { placeholder: placeUrl, spellcheck: 'false' }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n proxy.isImgUploaded = false;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?\n classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.uploadUrl.url = '';\n if (proxy.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n proxy.imgEle.style.outline = '';\n proxy.removeResizeEle();\n }\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '#' + proxy.contentModule.getPanel().id))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.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 selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = (selectNode.getAttribute('width') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('width'))) ? selectNode.width : selectNode.getClientRects()[0].width;\n var heightVal = (selectNode.getAttribute('height') === 'auto' ||\n isNullOrUndefined(selectNode.getAttribute('height'))) ? selectNode.height : selectNode.getClientRects()[0].height;\n var content = '<div class=\"e-rte-label\"><label>' + imgWidth +\n '</label></div><div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"imgwidth\" class=\"e-img-width\" value=' +\n widthVal\n + ' /></div>' +\n '<div class=\"e-rte-label\">' + '<label>' + imgHeight + '</label></div><div class=\"e-rte-field\"> ' +\n '<input type=\"text\" data-role =\"none\" id=\"imgheight\" class=\"e-img-height\" value=' +\n heightVal\n + ' /></div>';\n var contentElem = parseHtml(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minWidth,\n max: this.parent.getInsertImgMaxWidth(),\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.isStringTemplate = true;\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new NumericTextBox({\n format: '###.### px', min: this.parent.insertImageSettings.minHeight,\n max: this.parent.insertImageSettings.maxHeight,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n heightNum.isStringTemplate = true;\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.insertSize = function (e) {\n e.selection.restore();\n var proxy = e.selfImage;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var dialogEle = proxy.dialogObj.element;\n var width = parseFloat(dialogEle.querySelector('.e-img-width').value);\n var height = parseFloat(dialogEle.parentElement.querySelector('.e-img-height').value);\n proxy.parent.formatter.process(this.parent, e.args, e.args, {\n width: width, height: height, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n if (this.imgResizeDiv) {\n proxy.imgResizePos(e.selectNode[0], this.imgResizeDiv);\n }\n proxy.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.element.style.maxHeight = 'inherit';\n var dialogContent = this.dialogObj.element.querySelector('.e-img-content');\n if (((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML')) {\n dialogContent.querySelector('#' + this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n var proxy = this;\n var iframe = proxy.parent.iframeSettings.enable;\n if (proxy.parent.editorMode === 'HTML' && (!iframe && isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '#' +\n this.parent.contentModule.getPanel().id))\n || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n var spanMsg = this.parent.createElement('span', {\n className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)\n });\n span.appendChild(spanMsg);\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.isStringTemplate = true;\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n var rawFile;\n 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 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 });\n reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);\n }\n if (_this.parent.isServerRendered) {\n /* tslint:disable */\n _this.uploadObj._internalRenderSelect(selectArgs, rawFile);\n /* tslint: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 /* tslint: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 /* tslint: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 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 });\n },\n failure: function (e) {\n _this.parent.trigger(events.imageUploadFailed, e);\n },\n removing: function () {\n _this.parent.trigger(events.imageRemoving, e, function (e) {\n proxy.isImgUploaded = false;\n proxy.inputUrl.removeAttribute('disabled');\n if (proxy.uploadUrl) {\n proxy.uploadUrl.url = '';\n }\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n });\n }\n });\n this.uploadObj.isStringTemplate = true;\n this.uploadObj.createElement = this.parent.createElement;\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.checkExtension = function (e) {\n if (this.uploadObj.allowedExtensions) {\n if (this.uploadObj.allowedExtensions.toLocaleLowerCase().indexOf(('.' + e.type).toLocaleLowerCase()) === -1) {\n this.dialogObj.getButtons(0).element.setAttribute('disabled', 'disabled');\n }\n else {\n this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n }\n };\n Image.prototype.fileSelect = function () {\n this.dialogObj.element.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.dragStart = function (e) {\n if (e.target.nodeName === 'IMG') {\n this.parent.trigger(events.actionBegin, e, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n e.preventDefault();\n }\n else {\n e.dataTransfer.effectAllowed = 'copyMove';\n e.target.classList.add(classes.CLS_RTE_DRAG_IMAGE);\n }\n });\n }\n else {\n return true;\n }\n };\n ;\n Image.prototype.dragEnter = function (e) {\n e.dataTransfer.dropEffect = 'copy';\n e.preventDefault();\n };\n ;\n Image.prototype.dragOver = function (e) {\n if ((Browser.info.name === 'edge' && e.dataTransfer.items[0].type.split('/')[0].indexOf('image') > -1) ||\n (Browser.isIE && e.dataTransfer.types[0] === 'Files')) {\n e.preventDefault();\n }\n else {\n return true;\n }\n };\n ;\n /**\n * Used to set range When drop an image\n */\n Image.prototype.dragDrop = function (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 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 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 Image.prototype.uploadMethod = function (dragEvent, imageElement) {\n var _this = this;\n var isUploading = false;\n var proxy = this;\n var popupEle = this.parent.createElement('div');\n this.parent.element.appendChild(popupEle);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n var offsetY = this.parent.iframeSettings.enable ? -50 : -90;\n this.popupObj = new Popup(popupEle, {\n relateTo: imageElement,\n height: '85px',\n width: '300px',\n offsetY: offsetY,\n content: uploadEle,\n viewPortElement: this.parent.element,\n position: { X: 'center', Y: 'top' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n this.popupObj.element.style.display = 'none';\n addClass([this.popupObj.element], classes.CLS_POPUP_OPEN);\n addClass([this.popupObj.element], classes.CLS_RTE_UPLOAD_POPUP);\n var timeOut = dragEvent.dataTransfer.files[0].size > 1000000 ? 300 : 100;\n setTimeout(function () { proxy.refreshPopup(imageElement); }, timeOut);\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n 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 /* tslint: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 /* tslint: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);\n _this.parent.inputElement.contentEditable = 'false';\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 () { _this.uploadFailure(imageElement, args, e); }, 900);\n },\n success: function (e) {\n isUploading = false;\n _this.parent.inputElement.contentEditable = 'true';\n var args = {\n args: dragEvent,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n setTimeout(function () { _this.uploadSuccess(imageElement, dragEvent, args, e); }, 900);\n }\n });\n this.uploadObj.appendTo(this.popupObj.element.childNodes[0]);\n detach(this.popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap'));\n range.selectNodeContents(imageElement);\n this.parent.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), range);\n };\n Image.prototype.refreshPopup = function (imageElement) {\n var imgPosition = this.parent.iframeSettings.enable ? this.parent.element.offsetTop +\n imageElement.offsetTop : imageElement.offsetTop;\n var rtePosition = this.parent.element.offsetTop + this.parent.element.offsetHeight;\n if (imgPosition > rtePosition) {\n this.popupObj.relateTo = this.parent.inputElement;\n this.popupObj.offsetY = this.parent.iframeSettings.enable ? -30 : -65;\n this.popupObj.element.style.display = 'block';\n }\n else {\n if (this.popupObj) {\n this.popupObj.refreshPosition(imageElement);\n this.popupObj.element.style.display = 'block';\n }\n }\n };\n /**\n * Called when drop image upload was failed\n */\n Image.prototype.uploadFailure = function (imgEle, args, e) {\n detach(imgEle);\n if (this.popupObj) {\n this.popupObj.close();\n }\n this.parent.trigger(events.imageUploadFailed, e);\n this.uploadObj.destroy();\n };\n /**\n * Called when drop image upload was successful\n */\n Image.prototype.uploadSuccess = function (imageElement, dragEvent, args, e) {\n var _this = this;\n imageElement.style.opacity = '1';\n imageElement.classList.add(classes.CLS_IMG_FOCUS);\n 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 var proxy_1 = this;\n var reader_2 = new FileReader();\n args.args.preventDefault();\n reader_2.addEventListener('load', function (e) {\n var url = {\n cssClass: (proxy_1.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: _this.parent.insertImageSettings.saveFormat === 'Base64' || !isNullOrUndefined(args.callBack) ?\n reader_2.result : URL.createObjectURL(convertToBlob(reader_2.result)),\n width: {\n width: proxy_1.parent.insertImageSettings.width, minWidth: proxy_1.parent.insertImageSettings.minWidth,\n maxWidth: proxy_1.parent.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 () { _this.showImageQuickToolbar(args); _this.resizeStart(e.args, imageElement); }, 0);\n }\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Image.prototype.destroy = function () {\n this.prevSelectedImgEle = undefined;\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\n","import { removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render Rich Text Editor content\n * @hidden\n * @deprecated\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n 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 * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = this.parent.createElement('div', {\n className: 'e-source-content', id: this.parent.element.id + '_source-view'\n });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode', true);\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && !this.parent.iframeSettings.enable) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.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 * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n var serializeValue = this.parent.serializeValue(editHTML.value);\n var value = (serializeValue === null || serializeValue === '') ? '<p><br/></p>' : serializeValue;\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight('preview', true);\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.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().childNodes.length === 1 &&\n this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 7) ? '' : this.parent.value;\n };\n /**\n * getPanel method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.getPanel = function () {\n return this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * getViewPanel method\n * @param {Element} panel\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n * @return {void}\n * @hidden\n * @deprecated\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","import { detach, closest, Browser, isNullOrUndefined as isNOU, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, EventHandler, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport * as classes from '../base/classes';\nimport { dispatchEvent, parseHtml, hasClass } from '../base/util';\n/**\n * `Table` module is used to handle table actions.\n */\nvar Table = /** @class */ (function () {\n function Table(parent, serviceLocator) {\n this.ensureInsideTableList = true;\n this.pageX = null;\n this.pageY = null;\n this.moveEle = null;\n this.parent = parent;\n this.rteID = parent.element.id;\n this.l10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n Table.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.createTable, this.renderDlgContent, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.docClick, this.docClick, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.tableToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.dropDownSelect, this.dropdownSelect, this);\n this.parent.on(events.keyDown, this.keyDown, this);\n 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.docClick, this.docClick);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.tableToolbarAction, this.onToolbarAction);\n this.parent.off(events.dropDownSelect, this.dropdownSelect);\n this.parent.off(events.mouseDown, this.cellSelect);\n this.parent.off(events.tableColorPickerChanged, this.setBGColor);\n this.parent.off(events.keyDown, this.keyDown);\n 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 this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.on(events.tableColorPickerChanged, this.setBGColor, this);\n this.parent.on(events.mouseDown, this.cellSelect, this);\n if (this.parent.tableSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n }\n if (!Browser.isDevice && this.parent.tableSettings.resize) {\n EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);\n }\n };\n Table.prototype.dropdownSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Table') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var args = {\n args: e,\n selection: this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument()),\n selectParent: this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)\n };\n switch (item.subCommand) {\n case 'InsertRowBefore':\n case 'InsertRowAfter':\n this.addRow(args.selection, e);\n break;\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n this.addColumn(args.selection, e);\n break;\n case 'DeleteColumn':\n case 'DeleteRow':\n this.removeRowColumn(args.selection, e);\n break;\n case 'AlignTop':\n case 'AlignMiddle':\n case 'AlignBottom':\n this.verticalAlign(args, e);\n break;\n case 'Dashed':\n case 'Alternate':\n this.tableStyles(args, item.subCommand);\n break;\n }\n };\n Table.prototype.keyDown = function (e) {\n var event = e.args;\n var proxy = this;\n switch (event.action) {\n case 'escape':\n break;\n case 'insert-table':\n if (this.parent.editorMode === 'HTML') {\n var docElement = this.parent.contentModule.getDocument();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(docElement);\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, docElement);\n var args = {\n originalEvent: e.args,\n item: {\n command: 'Table',\n subCommand: 'CreateTable'\n }\n };\n this.insertTableDialog({\n self: this,\n args: args, selection: selection\n });\n }\n event.preventDefault();\n break;\n }\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) && this.contentModule\n && event.code !== 'KeyK') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var ele = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range)[0];\n ele = (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') ? ele.parentElement : ele;\n if ((event.keyCode === 8 || event.keyCode === 46) ||\n (event.ctrlKey && event.keyCode === 88)) {\n if (ele && ele.tagName === 'TBODY') {\n event.preventDefault();\n proxy.removeTable(selection, event, true);\n }\n else if (ele && ele.querySelectorAll('table').length > 0) {\n this.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.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'TableHeader':\n this.tableHeader(args.selection, args.args);\n break;\n case 'TableRemove':\n this.removeTable(args.selection, args.args);\n break;\n case 'TableEditProperties':\n this.editTable(args);\n break;\n }\n };\n Table.prototype.verticalAlign = function (args, e) {\n var tdEle = closest(args.selectParent[0], 'td') || closest(args.selectParent[0], 'th');\n if (tdEle) {\n this.parent.formatter.process(this.parent, e, e, { tableCell: tdEle, subCommand: e.item.subCommand });\n }\n };\n Table.prototype.tableStyles = function (args, command) {\n var table = closest(args.selectParent[0], 'table');\n if (command === 'Dashed') {\n (this.parent.element.classList.contains(classes.CLS_TB_DASH_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_DASH_BOR) : this.parent.element.classList.add(classes.CLS_TB_DASH_BOR);\n (table.classList.contains(classes.CLS_TB_DASH_BOR)) ? table.classList.remove(classes.CLS_TB_DASH_BOR) :\n table.classList.add(classes.CLS_TB_DASH_BOR);\n }\n if (command === 'Alternate') {\n (this.parent.element.classList.contains(classes.CLS_TB_ALT_BOR)) ?\n this.parent.element.classList.remove(classes.CLS_TB_ALT_BOR) : this.parent.element.classList.add(classes.CLS_TB_ALT_BOR);\n (table.classList.contains(classes.CLS_TB_ALT_BOR)) ? table.classList.remove(classes.CLS_TB_ALT_BOR) :\n table.classList.add(classes.CLS_TB_ALT_BOR);\n }\n this.parent.formatter.saveData();\n this.parent.formatter.editorManager.nodeSelection.restore();\n };\n Table.prototype.insideList = function (range) {\n var blockNodes = this.parent.formatter.editorManager.domNode.blockNodes();\n var nodes = [];\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n else if (blockNodes[i].tagName === 'LI' && blockNodes[i].childNodes[0].tagName !== 'P' &&\n (blockNodes[i].childNodes[0].tagName !== 'OL' &&\n blockNodes[i].childNodes[0].tagName !== 'UL')) {\n nodes.push(blockNodes[i]);\n }\n }\n if (nodes.length > 1 || nodes.length && ((range.startOffset === 0 && range.endOffset === 0))) {\n this.ensureInsideTableList = true;\n return true;\n }\n else {\n this.ensureInsideTableList = false;\n return false;\n }\n };\n Table.prototype.tabSelection = function (event, selection, ele) {\n var insideList = this.insideList(selection.range);\n if ((event.keyCode === 37 || event.keyCode === 39) && selection.range.startContainer.nodeType === 3 ||\n insideList) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (!event.shiftKey && event.keyCode !== 37) {\n var nextElement = (!isNullOrUndefined(ele.nextSibling)) ? ele.nextSibling :\n (!isNullOrUndefined(closest(ele, 'tr').nextSibling) ? closest(ele, 'tr').nextSibling.childNodes[0] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ?\n (closest(ele, 'table').nextSibling.nodeName.toLowerCase() === 'td') ?\n closest(ele, 'table').nextSibling : ele : ele);\n if (ele === nextElement && ele.nodeName === 'TH') {\n nextElement = closest(ele, 'table').rows[1].cells[0];\n }\n if (event.keyCode === 39 && ele === nextElement) {\n nextElement = closest(ele, 'table').nextSibling;\n }\n if (nextElement) {\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n if (ele === nextElement && event.keyCode !== 39 && nextElement) {\n this.addRow(selection, event, true);\n nextElement = nextElement.parentElement.nextSibling.firstChild;\n (nextElement.textContent.trim() !== '' && closest(nextElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), nextElement) :\n selection.setSelectionText(this.contentModule.getDocument(), nextElement, nextElement, 0, 0);\n }\n }\n else {\n var prevElement = (!isNullOrUndefined(ele.previousSibling)) ? ele.previousSibling :\n (!isNullOrUndefined(closest(ele, 'tr').previousSibling) ?\n closest(ele, 'tr').previousSibling.childNodes[closest(ele, 'tr').previousSibling.childNodes.length - 1] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ?\n (closest(ele, 'table').previousSibling.nodeName.toLowerCase() === 'td') ? closest(ele, 'table').previousSibling :\n ele : ele);\n if (ele === prevElement && ele.cellIndex === 0 &&\n closest(ele, 'table').tHead) {\n var clsTble = closest(ele, 'table');\n prevElement = clsTble.rows[0].cells[clsTble.rows[0].cells.length - 1];\n }\n if (event.keyCode === 37 && ele === prevElement) {\n prevElement = closest(ele, 'table').previousSibling;\n }\n if (prevElement) {\n (prevElement.textContent.trim() !== '' && closest(prevElement, 'td')) ?\n selection.setSelectionNode(this.contentModule.getDocument(), prevElement) :\n selection.setSelectionText(this.contentModule.getDocument(), prevElement, prevElement, 0, 0);\n }\n }\n };\n Table.prototype.tableArrowNavigation = function (event, selection, ele) {\n var selText = selection.range.startContainer;\n if ((event.keyCode === 40 && selText.nodeType === 3 && (selText.nextSibling && selText.nextSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD')) ||\n (event.keyCode === 38 && selText.nodeType === 3 && (selText.previousSibling && selText.previousSibling.nodeName === 'BR' ||\n selText.parentNode && selText.parentNode.nodeName !== 'TD'))) {\n return;\n }\n event.preventDefault();\n ele.classList.remove(classes.CLS_TABLE_SEL);\n if (event.keyCode === 40) {\n ele = (!isNullOrUndefined(closest(ele, 'tr').nextSibling)) ?\n closest(ele, 'tr').nextSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName === 'TH') ?\n closest(ele, 'table').rows[1].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').nextSibling)) ? closest(ele, 'table').nextSibling :\n ele;\n }\n else {\n ele = (!isNullOrUndefined(closest(ele, 'tr').previousSibling)) ?\n closest(ele, 'tr').previousSibling.children[ele.cellIndex] :\n (closest(ele, 'table').tHead && ele.nodeName !== 'TH') ?\n closest(ele, 'table').tHead.rows[0].cells[ele.cellIndex] :\n (!isNullOrUndefined(closest(ele, 'table').previousSibling)) ? closest(ele, 'table').previousSibling :\n ele;\n }\n if (ele) {\n selection.setSelectionText(this.contentModule.getDocument(), ele, ele, 0, 0);\n }\n };\n Table.prototype.setBGColor = function (args) {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var selection = this.parent.formatter.editorManager.nodeSelection.save(range, this.contentModule.getDocument());\n var selectedCell = selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? closest(selectedCell.parentNode, 'td,th') : closest(selectedCell, 'td, th');\n if (selectedCell && (selectedCell.nodeName === 'TD' || selectedCell.nodeName === 'TH')) {\n var items = closest(selectedCell, 'table').querySelectorAll('.' + classes.CLS_TABLE_SEL);\n for (var i = 0; i < items.length; i++) {\n items[i].style.backgroundColor = args.item.value;\n }\n this.parent.formatter.saveData();\n }\n };\n Table.prototype.hideTableQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.tableQTBar && document.body.contains(this.quickToolObj.tableQTBar.element)) {\n this.quickToolObj.tableQTBar.hidePopup();\n }\n };\n Table.prototype.tableHeader = function (selection, e) {\n this.parent.formatter.process(this.parent, e, e.originalEvent, { selection: selection, subCommand: e.item.subCommand });\n };\n Table.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.tableQTBar.element.classList.contains('e-rte-pop');\n if (isPopupOpen) {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n var closestTable = closest(target, 'table');\n if (target && target.nodeName !== 'A' && target.nodeName !== 'IMG' && (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.parent.contentModule.getEditPanel().contains(closestTable)))\n && !(range.startContainer.nodeType === 3 && !range.collapsed)) {\n var range_1 = this.parent.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.save(range_1, this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n this.quickToolObj.tableQTBar.showPopup(args.pageX, pageY, target);\n this.parent.formatter.editorManager.nodeSelection.restore();\n }\n else {\n this.hideTableQuickToolbar();\n }\n }\n };\n Table.prototype.tableCellSelect = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement);\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var list = this.dlgDiv.querySelectorAll('.e-rte-tablecell');\n Array.prototype.forEach.call(list, function (item) {\n var parentIndex = Array.prototype.slice.call(item.parentElement.parentElement.children).indexOf(item.parentElement);\n var cellIndex = Array.prototype.slice.call(item.parentElement.children).indexOf(item);\n removeClass([item], 'e-active');\n if (parentIndex <= row && cellIndex <= col) {\n addClass([item], 'e-active');\n }\n });\n this.tblHeader.innerHTML = (col + 1) + 'x' + (row + 1);\n };\n Table.prototype.tableCellLeave = function (e) {\n removeClass(this.dlgDiv.querySelectorAll('.e-rte-tablecell'), 'e-active');\n addClass([this.dlgDiv.querySelector('.e-rte-tablecell')], 'e-active');\n this.tblHeader.innerHTML = 1 + 'x' + 1;\n };\n Table.prototype.tableCellClick = function (e) {\n var target = e.target;\n var row = Array.prototype.slice.call(target.parentElement.parentElement.children).indexOf(target.parentElement) + 1;\n var col = Array.prototype.slice.call(target.parentElement.children).indexOf(target) + 1;\n this.self.tableInsert(row, col, e, this);\n };\n Table.prototype.tableInsert = function (row, col, e, selectionObj) {\n var proxy = (selectionObj.self) ? selectionObj.self : this;\n var startContainer = selectionObj.selection.range.startContainer;\n if (startContainer.nodeName === 'P' && startContainer.textContent.trim() === '' && !(startContainer.childNodes.length > 0)) {\n startContainer.innerHTML = '<br />';\n }\n var parentNode = startContainer.parentNode;\n if (proxy.parent.editorMode === 'HTML' &&\n ((proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')) ||\n (!proxy.parent.iframeSettings.enable && isNOU(closest(parentNode, '#' + proxy.contentModule.getPanel().id))))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n selectionObj.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n }\n var value = {\n row: row, columns: col, width: {\n minWidth: proxy.parent.tableSettings.minWidth,\n maxWidth: proxy.parent.tableSettings.maxWidth,\n width: proxy.parent.tableSettings.width,\n },\n selection: selectionObj.selection\n };\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n if (proxy.editdlgObj) {\n proxy.editdlgObj.hide();\n }\n proxy.parent.formatter.process(proxy.parent, selectionObj.args, selectionObj.args.originalEvent, value);\n proxy.contentModule.getEditPanel().focus();\n proxy.parent.on(events.mouseDown, proxy.cellSelect, proxy);\n };\n Table.prototype.cellSelect = function (e) {\n var target = e.args.target;\n var tdNode = closest(target, 'td,th');\n target = (target.nodeName !== 'TD' && tdNode && this.parent.contentModule.getEditPanel().contains(tdNode)) ?\n tdNode : target;\n removeClass(this.contentModule.getEditPanel().querySelectorAll('table td, table th'), classes.CLS_TABLE_SEL);\n if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {\n target.removeAttribute('class');\n addClass([target], classes.CLS_TABLE_SEL);\n this.curTable = (this.curTable) ? this.curTable : closest(target, 'table');\n this.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.resizeHelper = function (e) {\n if (this.parent.readonly) {\n return;\n }\n var target = e.target || e.targetTouches[0].target;\n var closestTable = closest(target, 'table');\n if (target.nodeName === 'TABLE' || target.nodeName === 'TD' || target.nodeName === 'TH') {\n this.curTable = (closestTable && this.parent.contentModule.getEditPanel().contains(closestTable))\n && (target.nodeName === 'TD' || target.nodeName === 'TH') ?\n closestTable : target;\n this.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[0].cells, 1);\n var rows = [];\n for (var i = 0; i < table.rows.length; i++) {\n rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);\n }\n var height = parseInt(getComputedStyle(table).height, 10);\n var width = parseInt(getComputedStyle(table).width, 10);\n var pos = this.calcPos(table);\n for (var i = 0; columns.length > i; i++) {\n var colReEle = this.parent.createElement('span', {\n attrs: {\n 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n colReEle.classList.add(classes.CLS_RTE_TABLE_RESIZE, classes.CLS_TB_COL_RES);\n colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +\n 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';\n this.contentModule.getEditPanel().appendChild(colReEle);\n }\n for (var i = 0; rows.length > i; i++) {\n var rowReEle = this.parent.createElement('span', {\n attrs: {\n 'data-row': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n rowReEle.classList.add(classes.CLS_RTE_TABLE_RESIZE, classes.CLS_TB_ROW_RES);\n var rowPosLeft = !isNOU(table.getAttribute('cellspacing')) || table.getAttribute('cellspacing') !== '' ?\n 0 : this.calcPos(rows[i]).left;\n rowReEle.style.cssText = 'width: ' + width + 'px; height: 4px; top: ' +\n (this.calcPos(rows[i]).top + pos.top + rows[i].offsetHeight - 2) +\n 'px; left:' + (rowPosLeft + pos.left) + 'px;';\n this.contentModule.getEditPanel().appendChild(rowReEle);\n }\n var tableReBox = this.parent.createElement('span', {\n className: classes.CLS_TB_BOX_RES, attrs: {\n 'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n tableReBox.style.cssText = 'top: ' + (pos.top + height - 4) +\n 'px; left:' + (pos.left + width - 4) + 'px;';\n if (Browser.isDevice) {\n tableReBox.classList.add('e-rmob');\n }\n this.contentModule.getEditPanel().appendChild(tableReBox);\n };\n Table.prototype.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 var offset = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent.nodeName === 'TD' && elem.nodeName === 'TABLE') {\n offsetParent = closest(offsetParent, '.e-control');\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: offset.top - parentOffset.top,\n left: offset.left - parentOffset.left\n };\n };\n Table.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Table.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Table.prototype.resizeStart = function (e) {\n var _this = this;\n if (this.parent.readonly) {\n return;\n }\n if (Browser.isDevice) {\n this.resizeHelper(e);\n }\n var target = e.target;\n if (target.classList.contains(classes.CLS_TB_COL_RES) ||\n target.classList.contains(classes.CLS_TB_ROW_RES) ||\n target.classList.contains(classes.CLS_TB_BOX_RES)) {\n e.preventDefault();\n this.parent.preventDefaultResize(e);\n removeClass(this.curTable.querySelectorAll('td,th'), classes.CLS_TABLE_SEL);\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n this.resizeBtnInit();\n this.hideTableQuickToolbar();\n if (target.classList.contains(classes.CLS_TB_COL_RES)) {\n this.resizeBtnStat.column = true;\n this.columnEle = this.curTable.rows[0].cells[parseInt(target.getAttribute('data-col'), 10)];\n this.colIndex = this.columnEle.cellIndex;\n this.moveEle = e.target;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_ROW_RES)) {\n this.rowEle = this.curTable.rows[parseInt(target.getAttribute('data-row'), 10)];\n this.resizeBtnStat.row = true;\n this.appendHelper();\n }\n if (target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.resizeBtnStat.tableBox = true;\n }\n if (Browser.isDevice && this.helper && !this.helper.classList.contains('e-reicon')) {\n this.helper.classList.add('e-reicon');\n EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n }\n else {\n var args = isBlazor() ? { requestType: 'Table' } : { event: e, requestType: 'Table' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.cancelResizeAction();\n }\n });\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Table.prototype.removeHelper = function (e) {\n var cls = e.target.classList;\n if (!(cls.contains('e-reicon')) && this.helper) {\n EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {\n detach(this.helper);\n }\n this.pageX = null;\n this.helper = null;\n }\n };\n Table.prototype.appendHelper = function () {\n this.helper = this.parent.createElement('div', {\n className: 'e-table-rhelper'\n });\n if (Browser.isDevice) {\n this.helper.classList.add('e-reicon');\n }\n this.contentModule.getEditPanel().appendChild(this.helper);\n this.setHelperHeight();\n };\n Table.prototype.setHelperHeight = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n this.helper.classList.add('e-column-helper');\n this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +\n pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';\n }\n else {\n this.helper.classList.add('e-row-helper');\n this.helper.style.cssText = 'width: ' + getComputedStyle(this.curTable).width + '; top: ' +\n (this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight) +\n 'px; left:' + (this.calcPos(this.rowEle).left + pos.left) + 'px;';\n }\n };\n Table.prototype.updateHelper = function () {\n var pos = this.calcPos(this.curTable);\n if (this.resizeBtnStat.column) {\n var left = pos.left + this.calcPos(this.columnEle).left - 1;\n this.helper.style.left = left + 'px';\n }\n else {\n var top_1 = this.calcPos(this.rowEle).top + pos.top + this.rowEle.offsetHeight;\n this.helper.style.top = top_1 + 'px';\n }\n };\n Table.prototype.resizing = function (e) {\n var _this = this;\n var pageX = this.getPointX(e);\n var pageY = this.getPointY(e);\n var mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);\n var mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);\n this.pageX = pageX;\n this.pageY = pageY;\n var args = isBlazor() ? { requestType: 'table' } : { event: e, requestType: 'table' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.cancelResizeAction();\n }\n else {\n var tableReBox = _this.contentModule.getEditPanel().querySelector('.e-table-box');\n var tableWidth = parseInt(getComputedStyle(_this.curTable).width, 10);\n var tableHeight = parseInt(getComputedStyle(_this.curTable).height, 10);\n var paddingSize = +getComputedStyle(_this.contentModule.getEditPanel()).paddingRight.match(/\\d/g).join('');\n var rteWidth = _this.contentModule.getEditPanel().offsetWidth - paddingSize * 2;\n if (_this.resizeBtnStat.column) {\n var cellColl = _this.curTable.rows[0].cells;\n var width = parseFloat(_this.columnEle.offsetWidth.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 _this.curTable.rows[i].cells[_this.colIndex - 1].style.width =\n _this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';\n _this.curTable.rows[i].cells[_this.colIndex].style.width =\n _this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';\n }\n }\n _this.updateHelper();\n }\n else if (_this.resizeBtnStat.row) {\n _this.parent.preventDefaultResize(e);\n var height = parseFloat(_this.rowEle.clientHeight.toString()) + mouseY;\n if (height > 20) {\n _this.rowEle.style.height = height + 'px';\n }\n _this.curTable.style.height = '';\n tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +\n 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';\n _this.updateHelper();\n }\n else if (_this.resizeBtnStat.tableBox) {\n if (!Browser.isDevice) {\n EventHandler.remove(_this.contentModule.getEditPanel(), 'mouseover', _this.resizeHelper);\n }\n var widthType = _this.curTable.style.width.indexOf('%') > -1;\n _this.curTable.style.width = widthType ? _this.convertPixelToPercentage(tableWidth + mouseX, rteWidth) + '%'\n : tableWidth + mouseX + 'px';\n _this.curTable.style.height = tableHeight + mouseY + 'px';\n tableReBox.classList.add('e-rbox-select');\n tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +\n 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';\n }\n }\n });\n };\n Table.prototype.convertPixelToPercentage = function (value, offsetValue) {\n return (value / offsetValue) * 100;\n };\n Table.prototype.cancelResizeAction = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n this.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 = isBlazor() ? { requestType: 'table' } : { event: e, requestType: 'table' };\n this.parent.trigger(events.resizeStop, args);\n this.parent.formatter.saveData();\n };\n Table.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { column: false, row: false, tableBox: false };\n };\n Table.prototype.addRow = function (selectCell, e, tabkey) {\n var cmd;\n if (tabkey) {\n cmd = {\n item: { command: 'Table', subCommand: 'InsertRowAfter' }\n };\n }\n var value = {\n selection: selectCell,\n subCommand: (tabkey) ? cmd.item.subCommand : e.item.subCommand\n };\n this.parent.formatter.process(this.parent, (tabkey) ? cmd : e, e, value);\n };\n Table.prototype.addColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, width: this.parent.tableSettings.width, subCommand: e.item.subCommand });\n };\n Table.prototype.removeRowColumn = function (selectCell, e) {\n this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });\n this.hideTableQuickToolbar();\n };\n Table.prototype.removeTable = function (selection, args, delKey) {\n var cmd;\n if (delKey) {\n cmd = { item: { command: 'Table', subCommand: 'TableRemove' } };\n }\n var value = {\n selection: selection,\n subCommand: (delKey) ? cmd.item.subCommand : args.item.subCommand\n };\n this.parent.formatter.process(this.parent, (delKey) ? cmd : args, args.originalEvent, value);\n this.contentModule.getEditPanel().focus();\n this.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 close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n }\n });\n addClass([this.popupObj.element], 'e-popup-open');\n this.popupObj.refreshPosition(target);\n };\n Table.prototype.docClick = function (e) {\n var target = e.args.target;\n if (target && target.classList && ((this.popupObj && !closest(target, '#' + this.popupObj.element.id) ||\n (this.editdlgObj && !closest(target, '#' + this.editdlgObj.element.id)))) && !target.classList.contains('e-create-table') &&\n target.offsetParent && !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown')) {\n if (this.popupObj) {\n this.popupObj.hide();\n }\n if (this.editdlgObj) {\n this.editdlgObj.hide();\n }\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n var closestEle = closest(target, 'td');\n var isExist = closestEle && this.parent.contentModule.getEditPanel().contains(closestEle) ? true : false;\n if (target && target.tagName !== 'TD' && target.tagName !== 'TH' && !isExist &&\n closest(target, '.e-rte-quick-popup') === null && target.offsetParent &&\n !target.offsetParent.classList.contains('e-quick-dropdown') &&\n !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')\n && !closest(target, '.e-rte-elements')) {\n removeClass(this.parent.element.querySelectorAll('table td'), classes.CLS_TABLE_SEL);\n if (!Browser.isIE) {\n this.hideTableQuickToolbar();\n }\n }\n if (target && target.classList && !target.classList.contains(classes.CLS_TB_COL_RES) &&\n !target.classList.contains(classes.CLS_TB_ROW_RES) && !target.classList.contains(classes.CLS_TB_BOX_RES)) {\n this.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) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n this.editdlgObj.element.style.maxHeight = 'none';\n this.editdlgObj.content.querySelector('input').focus();\n this.hideTableQuickToolbar();\n };\n Table.prototype.insertTableDialog = function (args) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.popupObj) {\n proxy.popupObj.hide();\n }\n proxy.createDialog(args);\n var dlgContent = proxy.tableCellDlgContent();\n var insert = proxy.l10n.getConstant('dialogInsert');\n var cancel = proxy.l10n.getConstant('dialogCancel');\n proxy.editdlgObj.setProperties({\n height: 'initial', width: '290px', content: dlgContent,\n buttons: [{\n click: proxy.customTable.bind(this, args),\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { proxy.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }]\n });\n proxy.editdlgObj.element.style.maxHeight = 'none';\n proxy.editdlgObj.content.querySelector('input').focus();\n };\n Table.prototype.tableCellDlgContent = function () {\n var tableColumn = this.l10n.getConstant('columns');\n var tableRow = this.l10n.getConstant('rows');\n var tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });\n var content = '<div class=\"e-rte-field\"><input type=\"text\" '\n + ' data-role =\"none\" id=\"tableColumn\" class=\"e-table-column\"/></div>'\n + '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"tableRow\" class=\"e-table-row\" /></div>';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n this.columnTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableColumn,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.columnTextBox.isStringTemplate = true;\n this.columnTextBox.appendTo(tableWrap.querySelector('#tableColumn'));\n this.rowTextBox = new NumericTextBox({\n format: 'n0',\n min: 1,\n value: 3,\n placeholder: tableRow,\n floatLabelType: 'Auto',\n max: 50,\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n this.rowTextBox.isStringTemplate = true;\n this.rowTextBox.appendTo(tableWrap.querySelector('#tableRow'));\n return tableWrap;\n };\n Table.prototype.createDialog = function (args) {\n var _this = this;\n if (this.editdlgObj) {\n this.editdlgObj.hide({ returnValue: true });\n return;\n }\n var tableDialog = this.parent.createElement('div', { className: 'e-rte-edit-table', id: this.rteID + '_tabledialog' });\n this.parent.element.appendChild(tableDialog);\n var insert = this.l10n.getConstant('dialogInsert');\n var cancel = this.l10n.getConstant('dialogCancel');\n var header = this.l10n.getConstant('tabledialogHeader');\n var dialogModel = {\n header: header,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'initial',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }\n },\n {\n click: function (e) { _this.cancelDialog(e); },\n buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n _this.editdlgObj.destroy();\n detach(_this.editdlgObj.element);\n _this.dialogRenderObj.close(event);\n _this.editdlgObj = null;\n }\n };\n this.editdlgObj = this.dialogRenderObj.render(dialogModel);\n this.editdlgObj.appendTo(tableDialog);\n if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n };\n Table.prototype.customTable = function (args, e) {\n var proxy = (this.self) ? this.self : this;\n if (proxy.rowTextBox.value && proxy.columnTextBox.value) {\n var argument = ((Browser.isDevice || (!isNullOrUndefined(args.args)\n && !isNullOrUndefined(args.args.originalEvent) &&\n args.args.originalEvent.action === 'insert-table')\n || proxy.parent.inlineMode.enable) ? args : this);\n proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);\n }\n };\n Table.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.applyProperties = function (args, e) {\n var dialogEle = this.editdlgObj.element;\n var table = closest(args.selectNode[0], 'table');\n table.style.width = dialogEle.querySelector('.e-table-width').value + 'px';\n if (dialogEle.querySelector('.e-cell-padding').value !== '') {\n var tdElm = table.querySelectorAll('td');\n for (var i = 0; i < tdElm.length; i++) {\n var padVal = '';\n if (tdElm[i].style.padding === '') {\n padVal = tdElm[i].getAttribute('style') + ' padding:' +\n dialogEle.querySelector('.e-cell-padding').value + 'px;';\n }\n else {\n tdElm[i].style.padding = dialogEle.querySelector('.e-cell-padding').value + 'px';\n padVal = tdElm[i].getAttribute('style');\n }\n tdElm[i].setAttribute('style', padVal);\n }\n }\n table.cellSpacing = dialogEle.querySelector('.e-cell-spacing').value;\n if (!isNOU(table.cellSpacing) || table.cellSpacing !== '0') {\n addClass([table], classes.CLS_TABLE_BORDER);\n }\n else {\n removeClass([table], classes.CLS_TABLE_BORDER);\n }\n this.parent.formatter.saveData();\n this.editdlgObj.hide({ returnValue: true });\n };\n Table.prototype.tableDlgContent = function (e) {\n var selectNode = e.selectParent[0];\n var tableWidth = this.l10n.getConstant('tableWidth');\n var cellPadding = this.l10n.getConstant('cellpadding');\n var cellSpacing = this.l10n.getConstant('cellspacing');\n var tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });\n var widthVal = closest(selectNode, 'table').getClientRects()[0].width;\n var padVal = closest(selectNode, 'td').style.padding;\n var brdSpcVal = closest(selectNode, 'table').getAttribute('cellspacing');\n var content = '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"tableWidth\" class=\"e-table-width\" '\n + ' /></div>' + '<div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"cellPadding\" class=\"e-cell-padding\" />'\n + ' </div><div class=\"e-rte-field\"><input type=\"text\" data-role =\"none\" id=\"cellSpacing\" class=\"e-cell-spacing\" /></div>';\n var contentElem = parseHtml(content);\n tableWrap.appendChild(contentElem);\n var widthNum = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: widthVal,\n placeholder: tableWidth,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n widthNum.isStringTemplate = true;\n widthNum.appendTo(tableWrap.querySelector('#tableWidth'));\n var padding = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: padVal !== '' ? parseInt(padVal, null) : 0,\n placeholder: cellPadding,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n padding.isStringTemplate = true;\n padding.appendTo(tableWrap.querySelector('#cellPadding'));\n var spacing = new NumericTextBox({\n format: 'n0',\n min: 0,\n value: brdSpcVal !== '' && !isNOU(brdSpcVal) ? parseInt(brdSpcVal, null) : 0,\n placeholder: cellSpacing,\n floatLabelType: 'Auto',\n enableRtl: this.parent.enableRtl, locale: this.parent.locale\n });\n spacing.isStringTemplate = true;\n spacing.appendTo(tableWrap.querySelector('#cellSpacing'));\n return tableWrap;\n };\n /**\n * Destroys the ToolBar.\n * @method destroy\n * @return {void}\n * @hidden\n * @deprecated\n */\n Table.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n */\n Table.prototype.getModuleName = function () {\n return 'table';\n };\n return Table;\n}());\nexport { Table };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Dialog Renderer\n */\nvar DialogRenderer = /** @class */ (function () {\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * dialog render method\n * @hidden\n * @deprecated\n */\n DialogRenderer.prototype.render = function (e) {\n var dlgObj;\n e.beforeOpen = this.beforeOpen.bind(this);\n e.open = this.open.bind(this);\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\n e.beforeClose = this.beforeClose.bind(this);\n dlgObj = new Dialog(e);\n dlgObj.isStringTemplate = true;\n return dlgObj;\n };\n DialogRenderer.prototype.beforeOpen = function (args) {\n this.parent.trigger(events.beforeDialogOpen, args);\n };\n DialogRenderer.prototype.open = function (args) {\n this.parent.trigger(events.dialogOpen, args);\n };\n DialogRenderer.prototype.beforeClose = function (args) {\n this.parent.trigger(events.beforeDialogClose, args, 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 * @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 { TableStyleItems } from '../models/items';\nimport { ToolbarType } from '../base/enum';\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { text: 'Segoe UI', value: 'Segoe UI', cssClass: 'e-segoe-ui' },\n { text: 'Arial', value: 'Arial,Helvetica,sans-serif', cssClass: 'e-arial' },\n { text: 'Georgia', value: 'Georgia,serif', cssClass: 'e-georgia' },\n { text: 'Impact', value: 'Impact,Charcoal,sans-serif', cssClass: 'e-impact' },\n { text: 'Tahoma', value: 'Tahoma,Geneva,sans-serif', cssClass: 'e-tahoma' },\n { text: 'Times New Roman', value: 'Times New Roman,Times,serif', cssClass: 'e-times-new-roman' },\n { text: 'Verdana', value: 'Verdana,Geneva,sans-serif', cssClass: 'e-verdana' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { text: 'Paragraph', value: 'P', cssClass: 'e-paragraph' },\n { text: 'Code', value: 'Pre', cssClass: 'e-code' },\n { text: 'Quotation', value: 'BlockQuote', cssClass: 'e-quote' },\n { text: 'Heading 1', value: 'H1', cssClass: 'e-h1' },\n { text: 'Heading 2', value: 'H2', cssClass: 'e-h2' },\n { text: 'Heading 3', value: 'H3', cssClass: 'e-h3' },\n { text: 'Heading 4', value: 'H4', cssClass: 'e-h4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26',\n ]\n};\n/**\n * Configures the toolbar settings of the RichTextEditor.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property({})\n ], ToolbarSettings.prototype, \"itemConfigs\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RichTextEditor.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('Blob')\n ], ImageSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select, detach } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append, extend, debounce, isBlazor } from '@syncfusion/ej2-base';\nimport { Touch as EJ2Touch } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format } from '../models/toolbar-settings';\nimport { 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 * as CONSTANT from '../../common/constant';\nimport { dispatchEvent, getEditValue, isIDevice, decode, isEditableValueEmpty } from '../base/util';\nimport { DialogRenderer } from '../renderer/dialog-renderer';\n/**\n * Represents the Rich Text Editor component.\n * ```html\n * <textarea id=\"rte\"></textarea>\n * <script>\n * var rteObj = new RichTextEditor();\n * rteObj.appendTo(\"#rte\");\n * </script>\n * ```\n */\nvar RichTextEditor = /** @class */ (function (_super) {\n __extends(RichTextEditor, _super);\n function RichTextEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.defaultResetValue = null;\n _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 * @return {ModuleDeclaration[]}\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n modules.push({ member: 'pasteCleanup', args: [this, this.serviceLocator] });\n }\n if (this.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 * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.onBlurHandler = this.blurHandler.bind(this);\n this.onFocusHandler = this.focusHandler.bind(this);\n this.onResizeHandler = this.resizeHandler.bind(this);\n this.clickPoints = { clientX: 0, clientY: 0 };\n this.initialValue = this.value;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n this.persistData();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.persistData = function () {\n if (this.enablePersistence && this.originalElement.tagName === 'TEXTAREA') {\n this.element.id = this.originalElement.id + '_wrapper';\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNOU(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n }\n };\n ;\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n }\n if (this.element.hasAttribute('tabindex')) {\n this.htmlAttributes = { 'tabindex': this.element.getAttribute('tabindex') };\n this.element.removeAttribute('tabindex');\n }\n if (!this.isBlazor()) {\n this.element.innerHTML = '';\n }\n var invalidAttr = ['class', 'style', 'id', 'ejs-for'];\n var htmlAttr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(/^data-val/.test(this.element.attributes[a].name))) { // data-val for asp.net core data annotation validation.\n htmlAttr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(htmlAttr, this.htmlAttributes, htmlAttr);\n this.setProperties({ htmlAttributes: htmlAttr }, true);\n if (!isNOU(this.htmlAttributes.id)) {\n this.element.id = this.htmlAttributes.id;\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOuterWrapper = this.createElement('div', {\n className: this.element.getAttribute('class')\n });\n if (!this.isBlazor()) {\n this.element.innerHTML = '';\n }\n this.element.parentElement.insertBefore(rteOuterWrapper, this.element);\n if (isBlazor()) {\n rteOuterWrapper.appendChild(this.element);\n this.valueContainer = this.createElement('textarea', {\n id: this.element.id + '-value'\n });\n }\n else {\n this.valueContainer = this.element;\n }\n removeClass([this.valueContainer], this.element.getAttribute('class').split(' '));\n if (this.isBlazor()) {\n addClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n this.element = rteOuterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n addClass([this.valueContainer], classes.CLS_RTE_HIDDEN);\n this.element.appendChild(this.valueContainer);\n };\n /**\n * getPersistData method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the Rich Text Editor component\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n this.focusHandler({});\n }\n };\n /**\n * Blurs the Rich Text Editor component\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n this.blurHandler({});\n }\n };\n /**\n * Selects all the content in RichTextEditor\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n * @param {Range} range - Specify the range which you want to select within the content.\n * The method used to select a particular sentence or word or entire document.\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Executes the commands\n * @param {CommandName} CommandName - Specifies the name of the command to be executed.\n * @param {string | HTMLElement | ILinkCommandsArgs | IImageCommandsArgs} value - Specifies the value that you want to execute.\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value, option) {\n value = this.htmlPurifier(commandName, value);\n if (this.editorMode === 'HTML') {\n var range = this.getRange();\n if (this.iframeSettings.enable) {\n this.formatter.editorManager.nodeSelection.Clear(this.element.ownerDocument);\n }\n var toFocus = (this.iframeSettings.enable &&\n range.startContainer === this.inputElement) ? true : !this.inputElement.contains(range.startContainer);\n if (toFocus) {\n this.focusIn();\n }\n }\n var tool = executeGroup[commandName];\n if (option && option.undo) {\n if (option.undo && this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n }\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n if (option && option.undo) {\n this.formatter.saveData();\n this.formatter.enableUndo(this);\n }\n this.setPlaceHolder();\n 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 case 'createLink':\n var tempNode = this.createElement('a', {\n attrs: {\n href: value.url\n }\n });\n var linkValue = tempNode.outerHTML;\n if (this.enableHtmlSanitizer) {\n linkValue = this.htmlEditorModule.sanitizeHelper(tempNode.outerHTML);\n }\n var href = (linkValue !== '' && (this.createElement('div', {\n innerHTML: linkValue\n }).firstElementChild).getAttribute('href')) || null;\n href = !isNOU(href) ? href : '';\n value.url = href;\n break;\n }\n }\n return value;\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n return divNode.innerHTML.replace(/<br\\s*[\\/]?>/gi, '\\n');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.render = function () {\n if (this.value && !this.valueTemplate) {\n this.setProperties({ value: this.serializeValue(this.value) }, true);\n }\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.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 if (!this.isBlazor()) {\n this.valueContainer.defaultValue = this.value;\n }\n else {\n this.defaultResetValue = this.value;\n }\n }\n (!this.enabled) ? this.unWireEvents() : this.eventInitializer();\n this.renderComplete();\n };\n /**\n * For internal use only - Initialize the event handler\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n /**\n * For internal use only - keydown the event handler;\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n this.restrict(e);\n if (this.editorMode === 'HTML' && ((e.which === 8 && e.code === 'Backspace') || (e.which === 46 && e.code === 'Delete'))) {\n var range = this.getRange();\n var startNode = range.startContainer.nodeName === '#text' ? range.startContainer.parentElement :\n range.startContainer;\n if (closest(startNode, 'pre') &&\n (e.which === 8 && range.startContainer.textContent.charCodeAt(range.startOffset - 1) === 8203) ||\n (e.which === 46 && range.startContainer.textContent.charCodeAt(range.startOffset) === 8203)) {\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer = e.which === 8 ? range.startOffset - 1 : range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, pointer);\n }\n else if ((e.code === 'Backspace' && e.which === 8) &&\n range.startContainer.textContent.charCodeAt(0) === 8203 && range.collapsed) {\n var parentEle = range.startContainer.parentElement;\n var index = void 0;\n var i = void 0;\n for (i = 0; i < parentEle.childNodes.length; i++) {\n if (parentEle.childNodes[i] === range.startContainer) {\n index = i;\n }\n }\n var bool = true;\n var removeNodeArray = [];\n for (i = index; i >= 0; i--) {\n if (parentEle.childNodes[i].nodeType === 3 && parentEle.childNodes[i].textContent.charCodeAt(0) === 8203 && bool) {\n removeNodeArray.push(i);\n }\n else {\n bool = false;\n }\n }\n if (removeNodeArray.length > 0) {\n for (i = removeNodeArray.length - 1; i > 0; i--) {\n parentEle.childNodes[removeNodeArray[i]].textContent = '';\n }\n }\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, range.startOffset);\n }\n }\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action !== 'insert-link' &&\n (e.action && e.action !== 'paste' || e.which === 9 ||\n (e.code === 'Backspace' && e.which === 8))) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n 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('<p><br></p>', this);\n }\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n if (!(e.key === 'Enter' && e.keyCode === 13) && this.inputElement.innerHTML === '<p><br></p>') {\n this.setPlaceHolder();\n }\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.serializeValue = function (value) {\n if (this.editorMode === 'HTML' && !isNOU(value)) {\n if (this.enableHtmlEncode) {\n value = this.htmlEditorModule.sanitizeHelper(decode(value));\n value = this.encode(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n }\n return value;\n };\n /**\n * This method will clean up the HTML against cross-site scripting attack and return the HTML as string.\n * It's only applicable to editorMode as `HTML`.\n * @param {string} value - Specifies the value that you want to sanitize.\n * @return {string}\n */\n RichTextEditor.prototype.sanitizeHtml = function (value) {\n return this.serializeValue(value);\n };\n /**\n * updateValue method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n var inputVal = this.inputElement.innerHTML;\n this.setProperties({ value: isEditableValueEmpty(inputVal) ? null : inputVal });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.triggerEditArea = function (e) {\n if (!isIDevice()) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n else {\n var touch = (e.touches ? e.changedTouches[0] : e);\n if (this.clickPoints.clientX === touch.clientX && this.clickPoints.clientY === touch.clientY) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n }\n };\n RichTextEditor.prototype.notifyMouseUp = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n this.notify(events.mouseUp, { member: 'mouseUp', args: e,\n touchData: { prevClientX: this.clickPoints.clientX, prevClientY: this.clickPoints.clientY,\n clientX: touch.clientX, clientY: touch.clientY }\n });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n this.triggerEditArea(e);\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n if (this.quickToolbarSettings.showOnRightClick && Browser.isDevice) {\n var target = e.target;\n var closestTable = closest(target, 'table');\n if (target && target.nodeName === 'A' || target.nodeName === 'IMG' || (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.contentModule.getEditPanel().contains(closestTable)))) {\n return;\n }\n }\n this.notifyMouseUp(e);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var evenArgs = {\n originalEvent: e,\n cancel: false,\n requestType: 'Paste'\n };\n this.trigger(events.actionBegin, evenArgs, function (pasteArgs) {\n var currentLength = _this.getText().length;\n var selectionLength = _this.getSelection().length;\n var pastedContentLength = (isNOU(e) || isNOU(e.clipboardData))\n ? 0 : e.clipboardData.getData('text/plain').length;\n var totalLength = (currentLength - selectionLength) + pastedContentLength;\n if (_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 if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n }\n var file = e && e.clipboardData && e.clipboardData.items.length > 0 ?\n e.clipboardData.items[0].getAsFile() : null;\n if (value !== null) {\n _this.notify(events.paste, {\n file: file,\n args: e,\n text: value\n });\n }\n setTimeout(function () { _this.formatter.onSuccess(_this, args_1); }, 0);\n }\n }\n else {\n e.preventDefault();\n }\n });\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n * @method destroy\n * @return {void}\n */\n RichTextEditor.prototype.destroy = function () {\n if (this.isDestroyed || !this.isRendered) {\n return;\n }\n if (this.element.offsetParent === null) {\n if (!isNOU(this.toolbarModule)) {\n this.toolbarModule.destroy();\n }\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 if (isBlazor()) {\n detach(this.valueContainer);\n this.valueContainer = this.element.querySelector('.e-blazor-hidden.e-control.e-richtexteditor');\n }\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n detach(this.element);\n if (this.originalElement.innerHTML.trim() !== '') {\n if (!isBlazor()) {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n }\n else {\n this.valueContainer.value = !this.isBlazor() ? this.valueContainer.defaultValue : this.defaultResetValue;\n }\n this.element = this.valueContainer;\n for (var i = 0; i < this.originalElement.classList.length; i++) {\n addClass([this.element], this.originalElement.classList[i]);\n }\n removeClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper = null;\n }\n if (!isNOU(this.cssClass)) {\n 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 * @return {Element}\n */\n RichTextEditor.prototype.getContent = function () {\n if (this.iframeSettings.enable && isBlazor()) {\n return this.inputElement;\n }\n else {\n return this.contentModule.getPanel();\n }\n };\n /**\n * Returns the text content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * Returns the html value of the selected content as string.\n * @return {string}\n */\n RichTextEditor.prototype.getSelectedHtml = function () {\n var range;\n var wrapperElm = this.createElement('div');\n var selection = this.contentModule.getDocument().getSelection();\n if (selection.rangeCount > 0) {\n range = selection.getRangeAt(0);\n var selectedHtml = range.cloneContents();\n wrapperElm.appendChild(selectedHtml);\n }\n return wrapperElm.innerHTML;\n };\n /**\n * It shows the inline quick toolbar\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 RichTextEditor.prototype.hideInlineToolbar = function () {\n this.quickToolbarModule.hideInlineQTBar();\n };\n /**\n * For internal use only - Get the module name.\n * @private\n * @deprecated\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n var val = void 0;\n var nVal = newProp[prop];\n val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;\n if (!isNOU(nVal) && nVal !== '') {\n this.value = this.serializeValue(((this.enableHtmlEncode) ? this.encode(decode(val)) : val));\n }\n this.updatePanelValue();\n this.setPlaceHolder();\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n if (this.toolbarSettings.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n this.resizeHandler();\n }\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n this.autoResize();\n break;\n case 'readonly':\n this.setReadOnly(false);\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false, false);\n break;\n case 'iframeSettings':\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'maxLength':\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'undoRedoSteps':\n case 'undoRedoTimer':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { newProp: newProp, oldProp: oldProp });\n break;\n case 'enableXhtml':\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n break;\n case 'quickToolbarSettings':\n newProp.quickToolbarSettings.showOnRightClick ? this.wireContextEvent() : this.unWireContextEvent();\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(decode(this.inputElement.innerHTML)) }, true);\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n detach(srcList[i]);\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value = this.value;\n value = (this.enableHtmlEncode && this.value) ? decode(value) : value;\n 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 this.inputElement.innerHTML = '<p><br/></p>';\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n 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 * @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 &&\n !isNOU(this.inputElement.firstChild) && this.inputElement.firstChild.nodeName === 'P' &&\n !isNOU(this.inputElement.firstChild.firstChild) && this.inputElement.firstChild.firstChild.nodeName === 'BR') {\n this.placeHolderWrapper.style.display = 'block';\n }\n else {\n this.placeHolderWrapper.style.display = 'none';\n }\n }\n else {\n this.inputElement.setAttribute('placeholder', this.placeholder);\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n 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 * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setReadOnly = function (initial) {\n this.updateReadOnly();\n if (!initial) {\n if (this.readonly && this.enabled) {\n this.unbindEvents();\n }\n else if (this.enabled) {\n this.bindEvents();\n }\n }\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n * @return {void}\n */\n RichTextEditor.prototype.print = function () {\n var _this = this;\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs, function (printingArgs) {\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(_this.inputElement, printWind);\n if (!printingArgs.cancel) {\n var actionArgs = {\n requestType: 'print'\n };\n _this.trigger(events.actionComplete, actionArgs);\n }\n });\n };\n /**\n * Refresh the view of the editor.\n * @public\n */\n RichTextEditor.prototype.refreshUI = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the Rich Text Editor component in full-screen mode.\n */\n RichTextEditor.prototype.showFullScreen = function () {\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the Rich Text Editor component.\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be enable in Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true, muteToolbarUpdate);\n };\n /**\n * Disables the given toolbar items in the Rich Text Editor component.\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be disable in Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false, muteToolbarUpdate);\n };\n /**\n * Removes the give toolbar items from the Rich Text Editor component.\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be remove from Rich Text Editor’s Toolbar.\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n * @public\n * @deprecated\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n this.serviceLocator.register('dialogRenderObject', new DialogRenderer(this));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false, true);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode && !isNOU(this.value)) {\n this.setProperties({ value: this.encode(decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true, false);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.isBlazor = function () {\n return (!isBlazor() ? false : true);\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledString = void 0;\n compiledString = compile(this.valueTemplate);\n var compiledTemplate = compiledString({});\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else {\n var innerHtml = !isNOU(this.element.innerHTML) && this.element.innerHTML.replace(/<(\\/?|\\!?)(!--!--)>/g, '').trim();\n if (innerHtml !== '') {\n if (this.element.tagName === 'TEXTAREA') {\n this.setProperties({ value: decode(innerHtml) });\n }\n else {\n this.setProperties({ value: innerHtml });\n }\n }\n }\n };\n RichTextEditor.prototype.updateResizeFlag = function () {\n this.isResizeInitialized = true;\n };\n /**\n * Image max width calculation method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getInsertImgMaxWidth = function () {\n var maxWidth = this.insertImageSettings.maxWidth;\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 * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var rteHeightPercent;\n var heightPercent;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n if (this.element.offsetHeight === 0 && this.height !== 'auto' && !this.getToolbar()) {\n rteHeight = parseInt(this.height, 10);\n heightPercent = typeof (this.height) === 'string' && this.height.indexOf('%') > -1;\n if (heightPercent) {\n rteHeightPercent = this.height;\n }\n }\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var 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 : rteHeight - (tbHeight + rzHeight) + 'px';\n }\n }\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n 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 * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.value;\n };\n /**\n * Retrieves the Rich Text Editor's XHTML validated HTML content when `enableXhtml` property is enabled.\n * @public\n */\n RichTextEditor.prototype.getXhtml = function () {\n var currentValue = this.value;\n if (this.enableXhtml) {\n currentValue = this.htmlEditorModule.xhtmlValidation.selfEncloseValidation(currentValue);\n }\n return currentValue;\n };\n /**\n * Shows the source HTML/MD markup.\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * Returns the maximum number of characters in the Rich Text Editor.\n * @public\n */\n RichTextEditor.prototype.getCharCount = function () {\n var htmlText = this.editorMode === 'Markdown' ? this.inputElement.value.trim() :\n this.inputElement.textContent.trim();\n return htmlText.length;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n /**\n * getID method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.getID = function () {\n return (this.originalElement.tagName === 'TEXTAREA' ? this.valueContainer.id : this.element.id);\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n this.clickPoints = { clientX: touch.clientX, clientY: touch.clientY };\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n /**\n * preventDefaultResize method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = false;\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n isExpand = this.toolbarModule.baseToolbar.toolbarObj.element.classList.contains(classes.CLS_EXPAND_OPEN);\n }\n this.setContentHeight('', isExpand);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.contentScrollHandler = function (e) {\n this.notify(events.contentscroll, { args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if ((!this.isRTE || this.isFocusOut)) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '<p><br></p>') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n }\n else {\n this.cloneValue = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n var active = document.activeElement;\n if (active === this.element || active === this.getToolbarElement() || active === this.contentModule.getEditPanel()\n || ((this.iframeSettings.enable && active === this.contentModule.getPanel()) &&\n e.target && !e.target.classList.contains('e-img-inner')\n && (e.target && e.target.parentElement\n && !e.target.parentElement.classList.contains('e-img-wrap')))\n || closest(active, '.e-rte-toolbar') === this.getToolbarElement()) {\n this.contentModule.getEditPanel().focus();\n if (!isNOU(this.getToolbarElement())) {\n this.getToolbarElement().setAttribute('tabindex', '-1');\n var items = this.getToolbarElement().querySelectorAll('[tabindex=\"0\"]');\n for (var i = 0; i < items.length; i++) {\n items[i].setAttribute('tabindex', '-1');\n }\n }\n }\n this.preventDefaultResize(e);\n this.trigger('focus', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.saveInterval) && this.saveInterval > 0 && !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>') ? 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 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.onDocumentClick = function (e) {\n var target = e.target;\n var rteElement = closest(target, '.' + classes.CLS_RTE);\n if (!this.element.contains(e.target) && document !== e.target && rteElement !== this.element &&\n !closest(target, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n var rteElement = closest(trg, '.' + classes.CLS_RTE);\n if (rteElement && rteElement === this.element) {\n this.isBlur = false;\n if (trg === this.getToolbarElement()) {\n trg.setAttribute('tabindex', '-1');\n }\n }\n else if (closest(trg, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n var value = this.getUpdatedValue();\n this.setProperties({ value: value });\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n /**\n * invokeChangeEvent method\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.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 * @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 * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.add(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler, this);\n }\n };\n RichTextEditor.prototype.wireContextEvent = function () {\n if (this.quickToolbarSettings.showOnRightClick) {\n EventHandler.add(this.inputElement, 'contextmenu', this.contextHandler, this);\n if (Browser.isDevice) {\n this.touchModule = new EJ2Touch(this.inputElement, { tapHold: this.touchHandler.bind(this), tapHoldThreshold: 500 });\n }\n }\n };\n RichTextEditor.prototype.unWireContextEvent = function () {\n EventHandler.remove(this.inputElement, 'contextmenu', this.contextHandler);\n if (Browser.isDevice && this.touchModule) {\n this.touchModule.destroy();\n }\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.remove(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler);\n }\n };\n RichTextEditor.prototype.touchHandler = function (e) {\n this.notifyMouseUp(e.originalEvent);\n this.triggerEditArea(e.originalEvent);\n };\n RichTextEditor.prototype.contextHandler = function (e) {\n var closestElem = closest(e.target, 'a, table, img');\n if (this.inlineMode.onSelection === false || (!isNOU(closestElem) && this.inputElement.contains(closestElem)\n && (closestElem.tagName === 'IMG' || closestElem.tagName === 'TABLE' || closestElem.tagName === 'A'))) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n var defaultValue = this.valueContainer.defaultValue.trim();\n this.setProperties({ value: defaultValue === '' ? null : (this.isBlazor() ? this.defaultResetValue : defaultValue) });\n };\n /**\n * @hidden\n * @deprecated\n */\n RichTextEditor.prototype.autoResize = function () {\n var _this = this;\n if (this.height === 'auto') {\n if (this.editorMode === 'Markdown') {\n setTimeout(function () { _this.setAutoHeight(_this.inputElement); }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () { _this.setAutoHeight(iframeElement_1); }, 100);\n this.inputElement.style.overflow = 'hidden';\n }\n }\n else {\n this.inputElement.style.overflow = null;\n }\n };\n RichTextEditor.prototype.setAutoHeight = function (element) {\n if (!isNOU(element)) {\n element.style.height = '';\n element.style.height = this.inputElement.scrollHeight + 'px';\n element.style.overflow = 'hidden';\n }\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.element.addEventListener('focusin', this.onFocusHandler, true);\n this.element.addEventListener('focusout', this.onBlurHandler, true);\n this.on(events.contentChanged, this.contentChanged, this);\n this.on(events.resizeInitialized, this.updateResizeFlag, 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 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(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableAutoUrl\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(10000)\n ], RichTextEditor.prototype, \"saveInterval\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeQuickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarStatusUpdate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"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, \"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","dropDown","dropDownModule","args","_i","keys_1","Object","keys","key","j","tbItems","itemStr","addClass","tbElements","classes.CLS_ACTIVE","removeClass","parent","toolbarSettings","formatDropDown","isDestroyed","formatItems","format","types","formatContent","default","content","width","dataBind","alignDropDown","model.alignmentItems","fontNameDropDown","fontNameItems","fontFamily","fontNameContent","name_1","title","fontSizeDropDown","fontSizeItems","fontSize","fontSizeContent","replace","getCollection","getTBarItemsIndex","toolbarItems","itemsIndex","push","updateUndoRedoStatus","baseToolbar","undoRedoStatus","trgItems","undoRedoItems","toolbarObj","selectAll","classes.CLS_TB_ITEM","keys_2","target","enableItems","dispatchEvent","evt","document","createEvent","initEvent","parseHtml","tempNode","createElement","innerHTML","DocumentFragment","createRange","createContextualFragment","getTextNodesUnder","docElement","node","nodes","firstChild","nextSibling","nodeType","concat","toObjectLowerCase","obj","convertedValue","getEditValue","rteObj","updateTextNode","enableHtmlEncode","decode","setProperties","setAttribute","resultElm","childNodes","isPreviousInlineElem","previousParent","paraElm","nodeName","textContent","indexOf","trim","inlineNode","appendChild","detach","imageElm","querySelectorAll","classes.CLS_RTE_IMAGE","add","classes.CLS_IMGINLINE","classes.CLS_IMGBREAK","isEditableValueEmpty","sanitizeHelper","enableHtmlSanitizer","SanitizeHtmlHelper","beforeSanitize","beforeEvent","cancel","helper","extend","trigger","isNullOrUndefined","serializeValue","convertToBlob","dataUrl","arr","split","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","Blob","setEditFrameFocus","editableElement","selector","iframe","querySelector","contentWindow","focus","tableElm","getAttribute","removeAttribute","tdElm","style","borderLeft","removeProperty","borderRight","borderBottom","borderTop","border","classes.CLS_TABLE","getLastTextNode","startChildNodes","finalNode","setAttributes","htmlAttributes","rte","isFrame","initial","contentModule","getDocument","_a","htmlAttr","enabled","setEnable","readonly","setReadOnly","inputElement","placeholder","setPlaceHolder","valueContainer","initialEnd","destroy","modelChanged","keyUp","keyDown","selectionSave","mouseDown","paste","rtlMode","checkUndo","CLS_RTE","CLS_QUICK_TB","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_BTN","CLS_TB_ITEM","CLS_IMGBREAK","CLS_IMGINLINE","CLS_COUNT","CLS_ACTIVE","CLS_TB_ALT_BOR","CLS_RTE_IMAGE","CLS_TABLE","RenderType","ToolbarType","templateItems","tools","alignments","id","icon","tooltip","command","justifyleft","justifycenter","justifyright","justifyfull","fontname","fontsize","fontcolor","backgroundcolor","bold","italic","underline","strikethrough","clearformat","clearall","cut","copy","unorderedlist","orderedlist","indent","outdent","undo","redo","superscript","subscript","createlink","openlink","editlink","removelink","image","filemanager","createtable","removetable","align","caption","remove","openimagelink","editimagelink","removeimagelink","insertlink","display","alttext","dimension","fullscreen","maximize","minimize","lowercase","uppercase","print","formats","sourcecode","preview","viewside","insertcode","tableheader","tableremove","tablerows","tablecolumns","tablecellbackground","tablecellhorizontalalign","tablecellverticalalign","tableeditproperties","styles","imageAlignItems","cssClass","defaultLocale","justifyLeft","justifyCenter","justifyRight","justifyFull","fontName","fontColor","backgroundColor","clearFormat","clearAll","unorderedList","orderedList","createLink","openLink","editLink","removeLink","insertLink","altText","lowerCase","upperCase","insertCode","linkText","linkTooltipLabel","linkWebUrl","linkTitle","linkurl","linkOpenInNewWindow","linkHeader","dialogInsert","dialogCancel","dialogUpdate","imageHeader","imageLinkHeader","mdimageLink","imageUploadMessage","imageDeviceUploadMessage","imageAlternateText","alternateHeader","browse","imageUrl","imageCaption","imageSizeHeader","imageHeight","imageWidth","textPlaceholder","inserttablebtn","tabledialogHeader","tableWidth","cellpadding","cellspacing","columns","rows","tableRows","tableColumns","tableCellHorizontalAlign","tableCellVerticalAlign","createTable","removeTable","tableHeader","tableRemove","tableCellBackground","tableEditProperties","insertColumnLeft","insertColumnRight","deleteColumn","insertRowBefore","insertRowAfter","deleteRow","tableEditHeader","TableHeadingText","TableColText","imageInsertLinkHeader","editImageHeader","alignmentsDropDownLeft","alignmentsDropDownCenter","alignmentsDropDownRight","alignmentsDropDownJustify","imageDisplayDropDownInline","imageDisplayDropDownBreak","tableInsertRowDropDownBefore","tableInsertRowDropDownAfter","tableInsertRowDropDownDelete","tableInsertColumnDropDownLeft","tableInsertColumnDropDownRight","tableInsertColumnDropDownDelete","tableVerticalAlignDropDownTop","tableVerticalAlignDropDownMiddle","tableVerticalAlignDropDownBottom","tableStylesDropDownDashedBorder","tableStylesDropDownAlternateRows","pasteFormat","pasteFormatContent","plainText","cleanFormat","keepFormat","pasteDialogOk","pasteDialogCancel","fileManager","fileDialogHeader","insertcolumnleft","insertcolumnright","deletecolumn","aligntop","alignmiddle","alignbottom","insertrowbefore","insertrowafter","deleterow","ToolbarRenderer","this","wireEvent","prototype","on","events.destroy","unWireEvent","off","popupOverlay","EventHandler","onPopupOverlay","removePopupContainer","toolbarBeforeCreate","mode","enableCollision","toolbarCreated","notify","toolbarClicked","dropDownSelected","beforeDropDownItemRender","dropDownOpen","popupModal","events.selectionSave","dropDownClose","popupContainer","popupEle","parentNode","insertBefore","undefined","renderToolbar","setPanel","renderPanel","overflowMode","rteToolbarObj","Toolbar","beforeCreate","bind","created","clicked","enablePersistence","enableRtl","isStringTemplate","appendTo","renderDropDownButton","css","_this","inlineMode","enable","proxy","DropDownButton","select","beforeOpen","divNode","close","open","beforeItemRender","tabIndex","getElementById","getID","closest","setIsModel","nextElementSibling","zIndex","position","parseInt","toString","paletteSelection","dropDownArgs","currentElement","ele","colorbox","slice","call","borderBottomColor","filter","renderColorPickerDropDown","colorPicker","CLS_RTE_ELEMENTS","range","inlineEle","event","currentDropdown","colorpickerValue","formatter","editorManager","nodeSelection","getRange","startContainer","iframeSettings","ownerDocument","collapsed","inst","getInstance","ColorPicker","showButtons","onclick","toggle","setColorPickerContentWidth","focusEle","pickerRefresh","beforeClose","dropElement","lastElementChild","onmousedown","onkeydown","popupElem","offsetWidth","Popup","refreshPosition","popupInst","relateTo","body","X","Y","targetType","collision","offsetY","colorPickerContent","borderWidth","getComputedStyle","borderBottomWidth","formatUnit","children","renderColorPicker","inline","modeSwitcher","beforeTileRender","change","colorPickerArgs","currentValue","rgba","beforeModeSwitch","presetColors","colorCode","getPanel","toolbarPanel","panel","BaseToolbar","locator","renderFactory","addEventListener","itemConfigs","events.rtlMode","setRtl","removeEventListener","getTemplateObject","container","tagName","template","outerHTML","tooltipText","getObject","toLowerCase","prefixIcon","getItems","this_1","tbItems_1","click","proxy_1","callback_1","getUndoRedoStack","saveData","getToolbarOptions","render","toolbarRenderer","getRenderer","DropDownButtons","initializeInstance","beforeRender","dropdownContent","renderDropDowns","containerType","tbElement","model.templateItems","targetElement","classes.CLS_DROPDOWN_BTN","formatItem","defineProperties","enumerable","classes.CLS_DROPDOWN_POPUP","itemName","fontItem","getEditNode","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","verticalAlignDropDown","tableStylesDropDown","getUpdateItems","dropDownItems","onPropertyChanged","model","newProp","_b","_c","fontItems","classes.CLS_QUICK_TB","_d","_e","_f","_g","getEditPanel","tableRowsDropDown","model.tableRowsItems","tableColumnsDropDown","model.tableColumnsItems","tableCellVerticalAlignDropDown","model.TableCellVerticalAlignItems","displayDropDown","model.imageDisplayItems","imageAlignDropDown","model.imageAlignItems","tableSettings","removeDropDownClasses","destroyDropDowns","onIframeMouseDown","events.modelChanged","ServiceLocator","services","register","name","RendererFactory","rendererMap","addRenderer","rName","getEnumValue","ToolbarAction","toolbarClick","dropDownSelect","renderSelection","controlParent","activeEle","quickToolbarModule","tableQTBar","process","originalEvent","isToolbar","isTransformChild","model.updateDropDownLocale","model.tools","contentRenderer","Content","editPanel","toolbarBindEvent","keyBoardModule","KeyboardEvents","getToolbarElement","keyAction","toolBarKeyDown","keyConfigs","keyConfig","eventName","action","createToolbarElement","enableFloating","tbWrapper","firstElementChild","getToolbarMode","tbMode","Expand","Scrollable","checkToolbarResponsive","tBarMode","MultiRow","addFixedTBarClass","wireEvents","checkIsTransformChild","transformElements","toggleFloatClass","topValue","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","tbHeight","getToolbarHeight","getExpandTBarPopHeight","scrollParentRelativeTop","trgHeight","offsetHeight","bodyStyle","parseFloat","marginTop","paddingTop","targetTop","scrollParentYOffset","isMSPointer","scrollTop","scrollParentRect","scrollParentTop","outOfRange","parent_1","innerHeight","bottom","setStyleAttribute","refreshToolbarOverflow","divEle","iframeEle","targetItem","updateItem","getBaseToolbarObject","disableToolbarItem","removeFixedTBarClass","showFixedTBar","hideFixedTBar","addTBarItem","prefixId","updateToolbarStatus","fullScreen","fullScreenModule","showFullScreen","hideScreen","hideFullScreen","getBaseToolbar","addItems","enableTBarItems","isEnable","muteToolbarUpdate","undoRedoManager","getUndoStatus","removeTBarItems","removeItems","popHeight","expandPopup","refreshOverflow","isToolbarDestroyed","destroyToolbar","unWireScrollElementsEvents","unWireEvents","scrollHandler","getDOMVisibility","el","offsetParent","mouseDownHandler","focusChangeHandler","dropDownBeforeOpenHandler","tbFocusHandler","activeElm","activeElement","isToolbaractive","toolbarItem","tbKeydownHandler","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","curkeyCode","which","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","unwireEvents","oldProp","config","configCache","keyData","Number","getKeyCode","keyVal","toUpperCase","Property","Event","NotifyPropertyChanges","Base","ColorPickerInput","renderColorPickerInput","targetID","suffixID","fontNode","fontColorPicker","fontColorDropDown","backNode","backgroundColorPicker","backgroundColorDropDown","destroyColorPicker","innerEle","BaseQuickToolbar","isDOMElement","popupRenderer","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","popupId","getUniqueID","stringItems","createToolbar","renderPopup","quickTBarObj","refresh","setPosition","x","y","imgWrapper","targetOffsetTop","offsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","left","offsetLeft","popupObj","right","checkCollision","viewPort","parentTop","contentTop","windowY","isCollide","popup","windowHeight","windowWidth","bodyRightSpace","showPopup","eventArgs","isBlazor","beforeQuickToolbarArgs","editPanelTop","editPanelHeight","bodyRight","marginRight","paddingRight","innerWidth","toolbarAvail","getToolbar","toolbarModule","expTBHeight","tBarHeight","cntEle","enableToolbarItem","append","showPopupData","show","duration","isIE","maxWidth","hidePopup","viewSourcePanel","sourceCodeModule","getViewPanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","updateStatus","PopupRenderer","quickToolbarOpen","hide","popupPanel","QuickToolbar","formattedItems","getQTBarOptions","popType","renderType","createQTBar","qTBar","initializeQuickToolbars","onSelection","selectionChangeHandler","onMouseDown","isBlur","isRTE","renderQuickToolbars","linkQTBar","imageQTBar","textQTBar","quickToolbarSettings","link","LinkToolbar","TextToolbar","ImageToolbar","table","TableToolbar","renderInlineQuickToolbar","inlineQTBar","InlineToolbar","showInlineQTBar","hideInlineQTBar","hideQuickToolbars","deBounce","clearTimeout","deBouncer","setTimeout","mouseUpHandler","coordinates","touches","changedTouches","touchData","prevClientX","clientX","prevClientY","offsetX","pageX","closestAnchor","keyDownHandler","inlineQTBarMouseDownHandler","keyUpHandler","onSelectionChange","getSelection","isCollapsed","getInlineBaseToolbar","wireInlineQTBarEvents","events.keyDown","events.keyUp","unWireInlineQTBarEvents","toolbarUpdated","actionOnScroll","onKeyDown","Count","renderCount","appendCount","maxLength","charCountBackground","htmlLength","htmlText","editorMode","string","percentage","member","MarkdownSelection","getLineNumber","textarea","point","substr","getSelectedText","start","selectionStart","selectionEnd","substring","getAllParents","getSelectedLine","getLine","getSelectedParentPoints","lines","parents","selectedPoints","selectedLine","startLength","join","firstPoint","line","points","lastPoint","setSelection","setSelectionRange","save","restore","textArea","isStartWith","isStart","RegExp","replaceSpecialChar","test","isClear","regex","getSelectedInlinePoints","MarkdownToolbarStatus","toolbarStatus","inlinecode","selection","onRefreshHandler","parentsLines","documentNode","isListsApplied","currentFormat","mdSelectionFormats","isAppliedCommand","isApply","lineSplit","listTags","formatTags","checkLine","selectionDirection","codeFormat","isFormat","splitText","cmdPre","pre","selectedText","toLocaleUpperCase","beforeText","afterText","isCode","multiCharRegx","cmd","search","ExecCommandCallBack","commandCallBack","requestType","Formatter","saveSelection","rangeCount","getRangeAt","getAncestorNode","commonAncestorContainer","action_1","headingText","colText","itemCollection","actionBeginArgs","preventDefault","isTableModule","tableModule","ensureInsideTableList","observer","callBack","onSuccess","clipboardAction","CONSTANT.checkUndo","execCommand","enableUndo","onKeyHandler","events","callbackArgs","isNotify","elements","autoResize","undoRedoStack","status","MDLists","markdownSelection","applyListsHandler","tabKey","enterKey","addedLength","isNotFirst","isNotFirstLine","listFormat","olListType","getListRegex","currentAction","getAction","prevIndex","prevLine","prevLineSplit","tabSpaceLength","splitTab","splice","curTabSpace","getTabSpace","prevTabSpace","changeTextAreaValue","nextOrderedListValue","prevLineSplit_1","prefixValue","prefix","curTabSpaceLength","textAreaLength","changedList","prefixNumber","nestedTabSpace","nestedlistorder","nestedListStart","nextPrefixValue","traversIncreased","nextLineLength","lineBreak","nextLine","nextTabSpace","nextLineSplit","shiftTabTargetList","nextPrefix","previousOrderedListValue","tabs","regexFirstCondition","currentLine","ol","currentState","ul","syntax","UL","previousLine","tabSpace","nestedListOrder","olSyntaxList","OL","endLength","perfixObj","preLineTabSpaceLength","appliedLine","prefixPattern","preTabSpaceLength","currentPrefix","isExist","valueOf","pattern","configKey","MDFormats","applyFormats","isAppliedFormat","applyCodeBlock","clearRegex","removeLength","removeText","parentLines","firstPrevText","lastNextText","startNo","lastIndexOf","endNo","repStartText","replaceAt","repEndText","lastLine","input","MDSelectionFormats","applyCommands","isBold","isItalic","isMatch","matchText","Italic","InlineCode","StrikeThrough","singleCharRegx","cmdB","Bold","cmdI","startCmd","endCmd","isApplied","textReplace","repStart","repEnd","regx","regxB","repText","regxTemp","regTest","markdownFormatTags","h6","h5","h4","h3","h2","h1","blockquote","markdownSelectionTags","SubScript","SuperScript","UpperCase","LowerCase","markdownListsTags","htmlKeyConfig","toolbar-focus","insert-link","insert-image","insert-table","indents","outdents","html-source","full-screen","decrease-fontsize","increase-fontsize","justify-center","justify-full","justify-left","justify-right","clear-format","ordered-list","unordered-list","markdownKeyConfig","pasteCleanupGroupingTags","strong","emp","cite","listConversionFilters","first","middle","last","selfClosingTags","UndoRedoCommands","undoRedoSteps","undoRedoTimer","debounceListener","debounce","onAction","props","changEle","steps","removedContent","MDLink","startOffset","endOffset","url","MDTable","textAreaInitial","insertTable","getTable","textNonEmpty","tableCell","insertLine","convertToLetters","dummyElement","parentText","lastLineSplit","syntaxArr","getFormatTag","updateValue","makeSelection","ensureFormatApply","checkValid","syntaxFormatKey","syntaxTag","Formats","syntaxListKey","List","formatSplitZero","ensureStartValid","firstLine","firstLineSplit","ensureEndValid","formatSplitLength","updateValueWithFormat","formatSplit","textApplyFormat","rowNumber","baseChar","letters","String","fromCharCode","emptyText","isCursorBased","isSelectionBased","ClearFormat","clear","replaceRegex","clearSelectionTags","selectionTags","num","expString","regExp","startExp","endExp","clearFormatTags","clearFormatLines","tags","str","len","MarkdownParser","initialize","Observer","listObj","formatObj","linkObj","tableObj","clearObj","editorKeyDown","editorKeyUp","exeValue","MarkdownFormatter","updateFormatter","editElement","doc","MarkdownRender","div","contentPanel","getText","MarkdownEditor","instantiateRenderer","onToolbarClick","getSelectedHtml","onSelectionSave","onSelectionRestore","updateReadOnly","tableConstant","option","toolbarUpdate","IMAGE","TABLE","LINK","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","rootNode","documentFromRange","getNodeArray","endContainer","html","get","setStart","collapse","defaultView","previousSibling","isChildNode","nodeCollection","getNode","startNode","endNode","getNodeCollection","getParentNodeCollection","getParentNodes","reverse","getSelectionNodeCollection","getSelectionNodes","getSelectionNodeCollectionBr","getSelectionNodesBr","regEx","getInsertNodeCollection","getInsertNodes","root","array","setRangePoint","isvalid","size","constant","selectRange","setRange","removeAllRanges","addRange","setSelectionText","startIndex","endIndex","setEnd","setSelectionContents","selectNode","setSelectionNode","selectNodeContents","getSelectedNodes","Clear","insertParentNode","newNode","surroundContents","setCursorPoint","markerClassName","startSelection","endSelection","DOMNode","currentDocument","contents","isBlockNode","Node","ELEMENT_NODE","CONSTANT.BLOCK_TAGS","isLink","blockParentNode","rawAttributes","rawAttr","attributes","attr","orderRawAttr","sort","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","relativeElement","isList","isElement","isEditable","replaceWith","parseHTMLFragment","temp","wrap","wrapper","insertAfter","referenceNode","wrapInner","unWrap","unWrapNode","removeChild","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getRangePoint","ranges","f","getPreviousNode","previousElementSibling","encode","innerText","saveMarker","startTextNode","endTextNode","marker","setMarker","existNode","textNodes","CONSTANT.IGNORE_BLOCK_TAGS","ensureSelfClosingTag","isTable","parNode","tdNode","lastNode","lastChild","createTempNode","getImageTagInSelection","focusNode","blockNodes","collectionNodes","ignoreTableTag","contentEditable","listNodes","CONSTANT.TABLE_BLOCK_TAGS","Lists","domNode","testList","elem","olListRegex","elementStart","testCurrentList","olListStartRegex","spaceList","preElement","nextElement","preElemULStart","nextElemULStart","startElementOLTest","preElementOLTest","nextElementOLTest","enterList","backspaceList","parentList","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","applyLists","isRevert","removeEmptyListElements","checkLists","listEle","openTag","closeTag","newTag","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","GetSpliceNode","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","nodeCutter","isEnd","insertMarker","brTag","cloneNode","previousSib","insertAdjacentHTML","setCursorPosition","markerElem","mrkParentElem","focusSelectionParent","brElm","tempSpanPElem","tempSpan","isSelectAll","formatsNodes","cleanFormats","replaceNode","replaceTag","preFormatMerge","preNodes","ignoreAttr","InsertHtml","Insert","insertNode","editNode","isExternal","isCursor","closestParentNode","closestEle","pasteInsertHTML","preNode","sibNode","lasNode","removeEmptyElements","previousNode","imageFocus","frag","createDocumentFragment","currentBlockNode","getImmediateBlockNode","isSingleNode","containsBlockNode","removingComments","allChildNodes","lastSelectionNode","insertTempNode","isFirstTextNode","firstParaElm","placeCursorEnd","cursorPos","blockNode","splitedElm","createTextNode","elm","innerElement","findDetachEmptyElem","emptyElements","detachableElement","LinkCommand","CONSTANT.LINK","linkCommand","selectParent","localeCompare","anchor","createAchorNode","createLinkNode","anchorEle","currentNode","domSelection","txtArray","inlineNodes","removeNodes","anchorNodes","finalinlineNodes","check","j_1","cln","j_2","attrs","href","linkNode","containsNode","Alignments","JustifyLeft","JustifyCenter","JustifyRight","JustifyFull","applyAlignment","getTableNode","isTableAlign","text-align","alignmentNodes","imageTags","elementNode","imgObj","imageCommand","Indents","indentValue","applyIndents","indentsNodes","parentNodes","marginLeft","indentsValue","CLASS_CAPTION","ImageCommand","CONSTANT.IMAGE","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","src","imgElement","setStyle","imgEle","imgElm_1","calculateStyleValue","height","minWidth","minHeight","maxHeight","capImgWrap","textEle","newTextEle","insertElement","TableCommand","CONSTANT.TABLE","insertRow","insertColumn","tableVerticalAlign","tblBody","tdWid","row","cell","removeEmptyNode","emptyPara","emptyLiChild","selectedCell","newRow","curRow","tabCell","tdElement","curCell","allRows","colIndex","colTemplate","selectedCellIndex","cellIndex","parentTable","deleteCell","sContainer","startChildLength","selectedRowIndex","rowIndex","seletedTable","headerExit","cellCount","childElementCount","createTHead","th","deleteTHead","verticalAlign","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","inlineTags","fontWeight","fontStyle","textDecoration","color","backColor","SelectionCommands","applyFormat","isFormatted","isFontStyle","cursorNode","insertCursorNode","isSubSup","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getInsertNode","splitNode","nodeIndex","pop","nodeValue","bgStyle","bg","formatNodeStyles","formatNodeTagName","GetFormatNode","currentNodeElem","curParentElem","liElement","applyStyles","getChildNode","updateStyles","tag","SelectionBasedExec","validFormats","InsertHtmlExec","applyHtml","pastedElements","allPastedElements","imgElements","allImgElm","imgElem","lastText","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","index1","index2","index3","parentIndex","elementIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","IGNORE_PARENT_TAGS","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","MsWordPaste","olData","ulData","ignorableNodes","borderStyle","removableElements","listContents","wordCleanup","wordPasteStyleConfig","allowedStylePropertiesArray","tempHTMLContent","clipboardData","getData","rtfData","patern2","patern3","pattern4","imageConversion","cleanUp","listConverter","styleCorrection","removeUnwantedElements","breakLineAddition","removeClassName","addTableBorderClass","allTableElm","hasTableBorder","checkVShape","imgSrc","base64Src","imgName","hexValue","hexConversion","convertToBase64","allNodes","byteArr","conHexStringToBytes","hex","base64String","conBytesToBase64","base64Str","byteArrLen","array3","array3length","array4","charAt","imgType","picHead","pic","source","fullImg","elmWithClass","allElements","findDetachElem","brElement","regExpStartElem","regExpEndElem","styleElement","styleClassObject_1","findStyleObject","values","map","removeUnwantedStyle","filterStyles","resultElem","fromClass","getElementsByClassName","getElementsByTagName","styleProperty","valueSplit","changedValue","elmWithStyles","elemStyleProperty","styleValue","styleValues","styleClassObject","tempStyle","classNameCollection","stylesCollection","classNames","prevflagState","tempCleaner","level","stNode","collection","getListContent","currentClassName","listType","nestedLevel","makeConversion","elemColl","temp1","prevList","pLevel","listCount","pElement","listStyle","getListStyle","getNamedItem","pushContent","InsertTextExec","insertText","EditorManager","alignmentObj","indentsObj","selectionObj","inserthtmlObj","insertTextObj","msWordPaste","onWordPaste","HTMLFormatter","statusCollection","ToolbarStatus","targetNode","formatCollection","JSON","parse","stringify","nodesLength","isOrderedList","isUnorderedList","isAlignment","isFormats","pos","textAlign","prop","getPropertyValue","HtmlToolbarStatus","ContentRender","rteContent","contenteditable","IframeContentRender","apply","iFrameContent","contentDocument","setThemeColor","write","XhtmlValidation","enableXhtmlValidation","enableXhtml","clean","AddRootElement","ImageTags","removeTags","RemoveUnsupported","selfEncloseValidation","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","enableTabKey","textCont","spaceLink","httpRegex","wwwRegex","enterSplitText","contentInnerElem","contentWithSpace","spaceBetweenContent","spaceSplit","divElement","paraElem","splitTextContent","resultSplitContent","pasteCleanupModule","selectNodeEle","urlText","urlTextRange","selectParentEle","closestElement","linkDialog","imageDialog","formatterClass","PasteCleanup","isNotFromHtml","containsHtml","dialogRenderObj","pasteClean","imageproperties","htmlRegex","file","getAsFile","imageFormatting","splitBreakLine","pasteCleanupSettings","allowedStyleProps","a","prompt","tempDivElem","pasteDialog","plainFormatting","formatting","makeSpace","imgUploading","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","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","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","info","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","getInsertImgMaxWidth","prevEle","FullScreen","scrollableParent","getScrollableParent","toggleParentOverflow","properties","isAdd","Render","renderer","Link","rteID","showLinkQuickToolbar","onToolbarAction","editAreaClickHandler","quickToolObj","target_1","parentLeft","linkTop","linkLeft","linkPos","pageXOffset","hideLinkQuickToolbar","showOnRightClick","getAnchorNode","isPopupOpen","inputDetails","selectText","linkWebAddress","linkDisplayText","linkTooltip","urlPlace","textPlace","linkDialogEle","linkContent","contentElem","linkTarget","linkUrl","linkOpenLabel","checkBoxObj","CheckBox","linkInsert","linkCancel","selfLink","btnText","checkUrl","linkEle","isUrl","enableAutoUrl","argsValue","code","selectedNode","linkUpdate","Image","isImgUploaded","deletedImg","insertImage","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","parentOffset","offset","documentElement","setAspectRatio","expectedX","expectedY","resizeByPercent","pixToPerc","expected","imgDupMouseMove","mouseX","mouseY","imgDupPos","openImgLink","editImgLink","removeImgLink","isCapLink","captionEle","keyCodeValues","isCursor_1","checkImageBack","checkImageDel","prev","removeResizeEle","event_1","imageRemovePost","alignImage","break","imageWithLinkQTBarItemUpdate","newItems","Math","round","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","uploadUrl","imgHeight","imgWidth","imgSizeWrap","getClientRects","widthNum","NumericTextBox","min","max","heightNum","dialogEle","uploadParentEle","deviceImgUpMsg","imgUpMsg","span","spanMsg","btnEle","autofocus","browserMsg","button","Button","btnClick","selectArgs","multiple","checkExtension","reader_1","FileReader","readAsDataURL","_internalRenderSelect","getButtons","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","insertTableDialog","removeResizeElement","closestTd","tabSelection","tableArrowNavigation","editTable","tdEle","classes.CLS_TB_ALT_BOR","insideList","prevElement","tHead","clsTble","cells","selText","hideTableQuickToolbar","closestTable","range_1","tableCellSelect","col","list","dlgDiv","tblHeader","tableCellLeave","tableCellClick","tableInsert","editdlgObj","curTable","targetTouches","tableResizeEleCreation","colReEle","data-col","unselectable","cssText","rowReEle","data-row","rowPosLeft","tableReBox","column","columnEle","appendHelper","rowEle","tableBox","removeHelper","setHelperHeight","updateHelper","top_1","tableHeight","paddingSize","rteWidth","cellColl","actualwid","totalwid","leftColumnWidth","rightColWidth","convertPixelToPercentage","clientHeight","widthType","offsetValue","selectCell","tabkey","delKey","insertbtn","tableDiv","drawTable","tabindex","rowDiv","data-column","data-cell","createDialog","editContent","tableDlgContent","update","editHeader","applyProperties","dlgContent","tableCellDlgContent","customTable","tableColumn","tableRow","tableWrap","columnTextBox","floatLabelType","rowTextBox","tableDialog","padVal","padding","cellSpacing","cellPadding","widthVal","brdSpcVal","spacing","DialogRenderer","dlgObj","Dialog","closeArgs","executeGroup","strikeThrough","formatBlock","heading","insertHTML","insertHorizontalRule","editImage","insertBrOnReturn","insertOrderedList","insertUnorderedList","insertParagraph","predefinedItems","Custom","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","Resources","IFrameSettings","InlineMode","__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","ensureModuleInjected","getInjectedModules","onCopy","onCut","evenArgs","totalLength","isRendered","destroyDependentModules","timeInterval","clearInterval","allClassName","removeHtmlAttributes","removeAttributes","removeItem","getContent","wrapperElm","selectedHtml","cloneContents","showInlineToolbar","currentRange","targetElm","hideInlineToolbar","nVal","updatePanelValue","countModule","setWidth","setHeight","setCssClass","updateRTL","frameSetting","resources","scripts","removeSheets","setIframeSettings","wireContextEvent","unWireContextEvent","srcList","getTextArea","unbindEvents","bindEvents","printWind","printArgs","printingArgs","outerHeight","outerWidth","resizeTo","screen","availWidth","availHeight","printWindow","actionArgs","removeToolbarItem","L10n","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledString","compiledTemplate","compile","innerHtml","updateResizeFlag","editEle","eleStyle","editEleMaxWidth","imgPadding","paddingLeft","isExpand","heightValue","rteHeightPercent","heightPercent","rteHeight","rzHandle","rzHeight","expandPopHeight","codeElement","tbWrapHeight","getHtml","showSourceCode","getCharCount","preventImgResize","defaultResize","contentScrollHandler","cloneValue","active","isInteracted","saveInterval","autoSaveOnIdle","setInterval","updateValueOnIdle","getUpdatedValue","updateIntervalValue","idleInterval","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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ImF,WACDwyD,EAAevuE,UAAW,iBAAc,IAC3C4W,IACImF,WACDwyD,EAAevuE,UAAW,wBAAqB,IAClD4W,IACImF,WACDwyD,EAAevuE,UAAW,kBAAe,IAC5C4W,IACImF,WACDwyD,EAAevuE,UAAW,6BAA0B,IACvD4W,IACImF,WACDwyD,EAAevuE,UAAW,uBAAoB,IACjD4W,IACImF,WACDwyD,EAAevuE,UAAW,wBAAqB,IAClD4W,IACImF,WACDwyD,EAAevuE,UAAW,0BAAuB,IACpD4W,IACImF,WACDwyD,EAAevuE,UAAW,oBAAiB,IAC9C4W,IACImF,WACDwyD,EAAevuE,UAAW,wBAAqB,IAClD4W,IACImF,WACDwyD,EAAevuE,UAAW,qBAAkB,IAC/C4W,IACImF,WACDwyD,EAAevuE,UAAW,yBAAsB,IACnD4W,IACImF,WACDwyD,EAAevuE,UAAW,wBAAqB,IAClD4W,IACImF,WACDwyD,EAAevuE,UAAW,oBAAiB,IAC9C4W,IACImF,WACDwyD,EAAevuE,UAAW,uBAAoB,IACjD4W,IACImF,WACDwyD,EAAevuE,UAAW,cAAW,IACxC4W,IACImF,WACDwyD,EAAevuE,UAAW,gBAAa,IAC1C4W,IACImF,WACDwyD,EAAevuE,UAAW,yBAAsB,IACnD4W,IACImF,WACDwyD,EAAevuE,UAAW,WAAQ,IACrC4W,IACImF,WACDwyD,EAAevuE,UAAW,mBAAgB,IAC7C4W,IACImF,WACDwyD,EAAevuE,UAAW,YAAS,IACtC4W,IACImF,WACDwyD,EAAevuE,UAAW,aAAU,IACvC4W,IACImF,WACDwyD,EAAevuE,UAAW,eAAY,IACzC4W,IACImF,WACDwyD,EAAevuE,UAAW,kBAAe,IAC5C4W,IACImF,WACDwyD,EAAevuE,UAAW,iBAAc,IAC3C4W,IACImF,WACDwyD,EAAevuE,UAAW,sBAAmB,IAChD4W,IACIkF,WAAS,OACVyyD,EAAevuE,UAAW,gBAAa,IAC1CuuE,EAAiB33D,IACboF,yBACDuyD,IAELiL,mBC1jEFC,IAAqBpnB,OAAOqnB,GAAeC,GAAYC,GAAaC,GAAaC,GAAoBC,GAAkBC,GAAsBC,GAAaC,GAAoBC,GAAcC,6pBjFGvK,qBAKE,iBAKL,qBAQO,gCAKG,mDAUC,0CAUH,gCAKE,iCAKF,iCAKE,8BAKL,kCAKQ,yCAKD,4CAKI,8CAKF,wEAoBX,2BAKO,yCAKO,2CAKL,uCAKC,qCAKH,4CAKU,iDAKL,2CAKD,2CAKD,oCAKN,yBAKH,wBAKE,oBAKN,cAKA,oBAKM,sBAKJ,oBAKE,sBAKA,yBAKG,+BAKG,uCAKK,sCAKN,oCAKI,kCAKN,gCAKI,8BAKN,2BAKC,6BAKC,6BAKD,sBAKC,qBAKF,2BAKD,2BAKG,wBAKC,sBAKH,yBAKC,4BAKE,6BAKD,mCAKO,0DAUF,uCAKA,2BAKX,uBAKO,6BAKD,kDAUQ,sCAKN,yBAKP,yBAKO,qCAKK,+CAKK,wCAKZ,0BAKF,0BAKE,gCAKI,wCAKI,4CAUV,wCAUE,yBAKH,gCAKU,oDAUN,4BAKF,gCAKM,gCAKN,iCAKO,kCAKN,uCAKW,4CAKN,uCAKC,gCAKR,4BAKI,iCAKC,sCAKI,yCAKD,oCAKJ,mCAKG,0BAKZ,yBAKW,sCAKE,wCAKA,wCAKA,sCAKF,wCC7gBR,sBAKI,2BAKC,gCAKI,4CAKD,uCAKJ,+BAKC,gCAKA,oCAKI,kCAKN,+BAKG,sCAKI,oCAKF,+CAUR,4BAKM,yCAKK,mCAKL,qCAKC,2CAKK,oEAUD,4CAKA,8DAUH,kDAUA,mCAKJ,gCAKF,0BAKI,6BAKD,4BAKA,wBAKJ,oBAKA,oBAKA,uBAKG,wBAKF,iCAKS,sCAKN,2BAKD,4BAKE,6CAUF,kCAKI,oCAKF,iEAeF,wBAKF,sBAKA,4CAUM,mCAKC,8BAKN,gCAKM,8CAKF,mCAKD,mCAKK,4CAKE,8CAKA,+CAKC,wDAKM,oDAKV,gDAKM,2DAKM,qDAKZ,+CAKI,4DAKM,uDAKX,iCAKH,kCAKE,uDAUD,mCAKA,gCAKA,+BAKA,2CAKW,iDAKE,kDAKD,uCAKV,uCAKI,gDAKK,8CAKP,qCAKF,+CAUN,2BAKG,mCAKK,0CAKE,sCAKN,gCAKA,8BAKF,6BAKC,iCAKG,yCAKK,wCAKN,iCAKA,mCAKC,mDAUA,4CAKI,+CAKG,ygBkC3fb,6BACG,4BACJ,4BACG,8BACD,6BACA,sCACS,wCAKN,+BAKH,4BAIA,kFAsBG,mCAKC,qCAKC,gCAKN,iCW5DO,gCACD,iCACE,kCACD,oDAEA,2CACG,wCACF,gdvBPL,oCAKG,8BAKJ,gCAKC,4BAKL,uWFpBA,mBAKF,uBAKK,iCAKK,8BAKP,6BAKK,yBAKR,+BAKc,uCAKP,yCAKS,2CAKP"}
|