{"version":3,"sources":["webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/ajax-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/contextMenu-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/details-view-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/navigation-pane-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/search-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/toolbar-settings.js","webpack:///./node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/upload-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/enter-key.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/dialog-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js","webpack:///./node_modules/@syncfusion/ej2-vue-richtexteditor/src/rich-text-editor/richtexteditor.component.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/util.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/classes.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/ms-word-clean-up.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-text.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/xhtml-validation.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/image-module.js","webpack:///./node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js"],"names":["ServiceLocator","this","services","prototype","register","name","type","getService","CLS_RTE","CLS_RTL","CLS_DISABLED","CLS_SCRIPT_SHEET","CLS_STYLE_SHEET","CLS_TOOLBAR","CLS_TB_FIXED","CLS_TB_FLOAT","CLS_TB_ABS_FLOAT","CLS_INLINE","CLS_RTE_EXPAND_TB","CLS_FULL_SCREEN","CLS_QUICK_TB","CLS_POP","CLS_TB_STATIC","CLS_QUICK_POP","CLS_QUICK_DROPDOWN","CLS_IMAGE_POP","CLS_INLINE_POP","CLS_INLINE_DROPDOWN","CLS_DROPDOWN_POPUP","CLS_DROPDOWN_ICONS","CLS_DROPDOWN_ITEMS","CLS_DROPDOWN_BTN","CLS_RTE_CONTENT","CLS_TB_ITEM","CLS_TB_WRAP","CLS_SHOW","CLS_HIDE","CLS_VISIBLE","CLS_FOCUS","CLS_RM_WHITE_SPACE","CLS_IMGRIGHT","CLS_IMGLEFT","CLS_IMGCENTER","CLS_IMGBREAK","CLS_CAPTION","CLS_RTE_CAPTION","CLS_CAPINLINE","CLS_IMGINLINE","CLS_COUNT","CLS_WARNING","CLS_ERROR","CLS_ICONS","CLS_ACTIVE","CLS_EXPAND_OPEN","CLS_RTE_ELEMENTS","CLS_TB_BTN","CLS_HR_SEPARATOR","CLS_TB_IOS_FIX","CLS_LIST_PRIMARY_CONTENT","CLS_NUMBERFORMATLIST_TB_BTN","CLS_BULLETFORMATLIST_TB_BTN","CLS_FORMATS_TB_BTN","CLS_FONT_NAME_TB_BTN","CLS_FONT_SIZE_TB_BTN","CLS_FONT_COLOR_TARGET","CLS_BACKGROUND_COLOR_TARGET","CLS_COLOR_CONTENT","CLS_FONT_COLOR_DROPDOWN","CLS_BACKGROUND_COLOR_DROPDOWN","CLS_COLOR_PALETTE","CLS_FONT_COLOR_PICKER","CLS_BACKGROUND_COLOR_PICKER","CLS_RTE_READONLY","CLS_RTE_HIDDEN","CLS_RTE_RES_HANDLE","CLS_RTE_IMAGE","CLS_RESIZE","CLS_IMG_FOCUS","CLS_RTE_DRAG_IMAGE","CLS_RTE_UPLOAD_POPUP","CLS_POPUP_OPEN","CLS_IMG_RESIZE","CLS_DROPAREA","CLS_IMG_INNER","CLS_UPLOAD_FILES","CLS_RTE_DIALOG_UPLOAD","CLS_CUSTOM_TILE","CLS_NOCOLOR_ITEM","CLS_TABLE","CLS_RTE_FIXED_TB_EXPAND","CLS_RTE_TB_ENABLED","Link","parent","serviceLocator","rteID","element","id","i10n","addEventListener","rendererFactory","dialogRenderObj","isDestroyed","on","linkDialog","showDialog","closeDialog","onKeyDown","showLinkQuickToolbar","clearDialogObj","onToolbarAction","onIframeMouseDown","removeLink","editLink","openLink","editAreaClickHandler","destroy","args","item","subCommand","notify","removeEventListener","off","dialogObj","hide","returnValue","e","action","pageX","pageY","quickToolbarModule","linkQTBar","quickToolObj","target_1","parentTop","getBoundingClientRect","top","parentLeft","left","range","formatter","editorManager","nodeSelection","getRange","contentModule","getDocument","forEach","call","elements","index","nodeName","isNotify","tbElement","toolbarModule","getToolbarElement","linkTop","linkLeft","linkPos","tbHeight","offsetHeight","getExpandTBarPopHeight","iframeSettings","window","pageYOffset","touches","changedTouches","pageXOffset","clientX","clientY","showPopup","endContainer","hideLinkQuickToolbar","document","body","contains","hidePopup","readonly","showOnRightClick","quickToolbarSettings","which","editorMode","target","getAnchorNode","getRenderer","Content","isPopupOpen","classList","childNodes","length","startContainer","parentElement","event","originalEvent","close","openDialog","preventDefault","isInternal","getEditPanel","focus","save","selectNodeEle","getNodeCollection","selectParentEle","getParentNodeCollection","eventArgs","command","undefined","selectNode","selection","selectParent","textArea","markdownSelection","selectionStart","selectionEnd","member","text","getSelectedText","module","inputDetails","_this","linkWebAddress","getConstant","linkDisplayText","linkTooltip","urlPlace","textPlace","title","linkDialogEle","createElement","className","appendChild","linkContent","htmlTextbox","content","contentElem","linkTarget","querySelector","linkUrl","linkText","linkTitle","linkOpenLabel","checkBoxObj","label","checked","enableRtl","isStringTemplate","appendTo","selectText","toString","linkInsert","linkCancel","selectObj","selfLink","dialogModel","header","cssClass","locale","showCloseIcon","closeOnEscape","width","height","isModal","isDevice","buttons","click","insertlink","bind","buttonModel","isPrimary","cancelDialog","animationSettings","effect","isBlur","restore","render","style","maxHeight","value","url","textContent","btnText","checkUrl","startOffset","endOffset","add","ownerDocument","onDocumentClick","inlineQTBar","linkEle","isUrl","enableAutoUrl","indexOf","proxy","parentNode","getPanel","isIE","enable","argsValue","contentWindow","getUndoRedoStack","saveData","code","argsVal","process","regexp","test","setSelectionRange","tagName","href","selectedNode","linkUpdate","getAttribute","innerText","toolbarSettings","inlineMode","getID","remove","getModuleName","Render","locator","renderer","contentRenderer","renderPanel","refresh","requestType","keyUp","node","enterKey","innerHTML","setCursorPoint","__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","__decorate","decorators","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","keyCode","_super","KeyboardEvents","options","keyPressHandler","isAltKey","altKey","isCtrlKey","ctrlKey","isShiftKey","shiftKey","isMetaKey","metaKey","curkeyCode","keys","keyConfigs","_i","keys_1","configCollection","split","_a","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","trim","keyAction","unwireEvents","onPropertyChanged","newProp","oldProp","wireEvents","eventName","config","configCache","toLowerCase","keyData","Number","getKeyCode","keyVal","toUpperCase","charCodeAt","ViewSource","sourceCode","onInitialEnd","updateSourceCode","observer","unWireEvent","getSourceCode","wireEvent","keyboardModule","previewKeyDown","keyConfig","previewElement","mouseDownHandler","wireBaseKeyDown","keyDown","unWireBaseKeyDown","selector","baseToolbar","toolbarObj","callBack","trigger","targetItem","tbItems","updateItem","getBaseToolbarObject","updateValueData","rteContent","marginTop","getTextAreaValue","display","disableToolbarItem","items","enableToolbarItem","getToolbar","setContentHeight","updateValue","placeholder","placeHolderWrapper","invokeChangeEvent","editHTML","serializeValue","enableUndo","getViewPanel","executeGroup","ExecCommandCallBack","commandCallBack","AjaxSettings","apply","fileItems","folderItems","layoutItems","ContextMenuSettings","columnArray","field","headerText","minWidth","template","customAttributes","class","format","DetailsViewSettings","NavigationPaneSettings","SearchSettings","toolbarItems","ToolbarSettings","UploadSettings","Expand","ImageSettings","FileManagerSettings","getImageUrl","uploadUrl","visible","file","folder","layout","maxWidth","autoUpload","minFileSize","maxFileSize","allowedExtensions","autoClose","TableSettings","QuickToolbarSettings","PasteCleanupSettings","FontFamily","FontSize","Format","FontColor","BackgroundColor","NumberFormatList","BulletFormatList","Resources","IFrameSettings","InlineMode","setAttributes","htmlAttributes","rte","isFrame","initial","iFrame","htmlAttr","enabled","setEnable","setReadOnly","setAttribute","inputElement","setPlaceHolder","validateAttr","valueContainer","FullScreen","showFullScreen","hideQuickToolbars","scrollableParent","classes","evenArgs","cancel","beginEventArgs","enableFloating","toggleParentOverflow","properties","removeItems","removeFixedTBarClass","hideFullScreen","elem","querySelectorAll","addFixedTBarClass","isAdd","EnterKeyAction","enterHandler","getRangeNode","startNode","endNode","isTableEnter","closest","curElement","blockElement","domNode","isBlockNode","shiftKey_1","actionBeginArgs","deleteContents","focusElem","previousSibling","currentFocusElem","lastChild","shiftEnterKey","nearBlockNode","blockParentNode","isImageNode","isFocusedFirst","startNodeText","splitFirstText","substring","removeBRElement","isNearBlockLengthZero","newElem","createInsertElement","nodeCutter","SplitNode","cloneNode","insertElem","firstChild","insertBefore","finalFocusElem","nextElementSibling","brElm","startParentElem","insertElm","insertAfter","children","currentParent","currentNode","previousNode","currentParentLastChild","isLastNodeLength","focusBRElem","lineBreakBRElem","insertBRElement","outerBRElem","insertFocusContent","nextSibling","currentElement","userAgent","isEmptyBrInserted","insertNode","brElm2","DialogRenderer","dlgObj","beforeOpen","open","beforeClose","beforeOpenCallback","closeArgs","container","__assign","assign","t","s","n","RichTextEditor","defaultResetValue","isResizeInitialized","isFocusOut","isRTE","needsID","requiredModules","modules","push","showCharCount","fileManagerSettings","enableResize","updateEnable","tabindex","tabIndex","eventInitializer","unWireEvents","preRender","onBlurHandler","blurHandler","onFocusHandler","focusHandler","onResizeHandler","resizeHandler","clickPoints","initialValue","initializeServices","setContainer","persistData","role","enablePersistence","originalElement","data","localStorage","getItem","setProperties","JSON","parse","valueTemplate","setValue","hasAttribute","removeAttribute","invalidAttr","a","attributes","rteOuterWrapper","getPersistData","addOnPersist","focusIn","focusOut","blur","selectAll","selectRange","getSelection","str","txt","executeCommand","commandName","option","htmlPurifier","Clear","toFocus","tool","undo","execCommand","enableHtmlSanitizer","htmlEditorModule","sanitizeHelper","outerHTML","tableSettings","temp","attrs","src","imageValue","insertImageSettings","minHeight","tempNode","linkValue","encode","divNode","replace","renderModule","sourceCodeModule","RTERender","enableXhtml","getXhtml","defaultValue","renderComplete","cleanList","currentStartContainer","currentEndContainer","currentStartOffset","isSameContainer","closestLI","collapsed","currentLastElem","setSelectionText","restrict","regEx","RegExp","String","fromCharCode","pointer","parentEle","bool","removeNodeArray","nodeType","autoResize","allowedKeys","onKeyHandler","enableHtmlEncode","sanitizeHtml","inputVal","triggerEditArea","touch","notifyMouseUp","touchData","prevClientX","prevClientY","mouseUp","closestTable","detail","toLocaleLowerCase","setStart","setEnd","ensureModuleInjected","getInjectedModules","onCopy","onCut","onPaste","pasteArgs","currentLength","getText","selectionLength","pastedContentLength","clipboardData","getData","totalLength","contentEditable","maxLength","pasteCleanupModule","args_1","htmlValue","getAsFile","isWordPaste","setTimeout","onSuccess","clipboardAction","isRendered","offsetParent","destroyDependentModules","timeInterval","clearInterval","allClassName","removeHtmlAttributes","removeAttributes","removeItem","removeProperty","undoRedoManager","getContent","getSelectedHtml","wrapperElm","rangeCount","getRangeAt","selectedHtml","cloneContents","showInlineToolbar","currentRange","targetElm","x","getClientRects","y","showInlineQTBar","hideInlineToolbar","hideInlineQTBar","prop","nVal","val","updatePanelValue","countModule","setWidth","refreshToolbarOverflow","setHeight","setCssClass","updateRTL","frameSetting","resources","iframe","files","scripts","removeSheets","styles","setIframeSettings","renderCount","wireContextEvent","unWireContextEvent","srcList","getTextArea","firstElementChild","childElementCount","updateReadOnly","editPanel","mode","unbindEvents","bindEvents","print","printWind","printArgs","printingArgs","outerHeight","outerWidth","info","resizeTo","screen","availWidth","availHeight","actionArgs","refreshUI","fullScreenModule","muteToolbarUpdate","enableTBarItems","removeToolbarItem","removeTBarItems","localeObj","enterKeyModule","styleSrc","scriptSrc","InjectSheet","scriptSheet","scriptEle","createScriptElement","styleEle","createStyleElement","rel","compiledTemplate","innerHtml","updateResizeFlag","getInsertImgMaxWidth","imgPadding","imgResizeBorder","editEle","eleStyle","getComputedStyle","editEleMaxWidth","offsetWidth","parseFloat","paddingLeft","paddingRight","marginLeft","marginRight","isExpand","heightValue","rteHeightPercent","topValue","heightPercent","cntEle","rteHeight","parseInt","getToolbarHeight","rzHandle","rzHeight","expandPopHeight","codeElement","tbWrapHeight","getHtml","currentValue","xhtmlValidation","selfEncloseValidation","showSourceCode","getCharCount","htmlLength","htmlText","InsertLink","InsertImage","InsertTable","tbObj","getBaseToolbar","getInlineBaseToolbar","preventDefaultResize","preventImgResize","defaultResize","defaultView","scrollHandler","contentScrollHandler","cloneValue","active","activeElement","isInteracted","saveInterval","autoSaveOnIdle","setInterval","updateValueOnIdle","toolbarItem","getUpdatedValue","tableModule","removeResizeElement","updateIntervalValue","clearTimeout","idleInterval","updateStatus","html","markdown","status_1","getUndoStatus","redo","rteElement","trg","relatedTarget","documentNode","contentChanged","wireScrollElementsEvents","scrollParentElements","contextHandler","touchModule","tapHold","touchHandler","tapHoldThreshold","unWireScrollElementsEvents","closestElem","onSelection","resetHandler","setAutoHeight","iframeElement_1","overflow","scrollHeight","currentTarget","array","arrayKey","formElement","touchEndEvent","touchStartEvent","editorKeyDown","modelProps","testProp","props","watch","emitProbs","modelProps_1","props_1","isExecute","RichTextEditorComponent","propKeys","models","hasChildDirective","hasInjectedModules","tagMapper","tagNameMapper","isVue3","ej2Instances","_trigger","bindProperties","_setProperties","clearTemplate","templateNames","templateCollection","templateNames_1","tempName","elementCollection","elementCollection_1","ele","__vue__","$destroy","muteOnChange","referModels","map","model","vueInstance","$emit","eventProp","successHandler","match","propKey","$props","isLazyUpdate","h","slots","$slots","default","RichTextEditorPlugin","install","Vue","component","DropDownButtons","renderFactory","initializeInstance","toolbarRenderer","Toolbar","beforeRender","dropdownContent","renderDropDowns","containerType","targetElement","formatOLItem","numberFormatList","types","slice","defineProperties","enumerable","numberFormatListDropDown","renderListDropDown","itemName","formatULItem","bulletFormatList","bulletFormatListDropDown","formatItem","formatContent","formatDropDown","renderDropDownButton","iconCss","fontItem","fontFamily","fontNameContent","fontNameDropDown","getEditNode","fontsize","fontSize","fontSizeContent","fontSizeDropDown","alignDropDown","imageAlignmentDropDown","imageDisplayDropDown","rowDropDown","columnDropDown","cellDropDown","verticalAlignDropDown","tableStylesDropDown","getUpdateItems","dropDownItems","_b","_c","fontItems","_d","_e","_f","_g","formatItems","tableRowsDropDown","tableColumnsDropDown","tableCellVerticalAlignDropDown","displayDropDown","imageAlignDropDown","removeDropDownClasses","destroyDropDowns","setRtl","ColorPickerInput","tools","itemConfigs","renderColorPickerInput","targetID","suffixID","fontNode","icon","fontColorPicker","renderColorPicker","fontColorDropDown","renderColorPickerDropDown","backNode","backgroundColorPicker","backgroundColorDropDown","defaultColorPicker","destroyColorPicker","innerEle","borderBottomColor","fontColor","font","fontBorder","columns","presetColors","colorCode","modeSwitcher","backgroundColor","background","backgroundBorder","RTL","TAGNAME","SplitButton","ejInstance","btn","wrapper","idx","len","nodeValue","initWrapper","createPrimaryButton","renderControl","createSecondaryButton","setActiveElem","secondaryBtnObj","setAria","addItems","isUniqueId","btnModel","iconPosition","disabled","primaryBtnObj","btnElem","dropDownBtnModel","createPopupOnClick","dropDown","relateTo","callBackPromise","Deferred","observedArgs","resolve","activeElem","toggle","concat","getElementById","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","clickHandler","dataBind","promise","Promise","reject","catch","then","TicksData","ColorRangeData","LimitData","TooltipData","bootstrapTooltipOffset","bootstrap4TooltipOffset","classNames","root","rtl","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","scale","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","transition","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","localeText","incrementTitle","decrementTitle","l10n","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","initCultureInfo","initCultureFunc","formChecker","isForm","formResetValue","min","max","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","formatNumber","numberOfDecimals","getNumberFormat","makeRoundNumber","elementVal","maximumFractionDigits","minimumFractionDigits","useGrouping","decimalPart","precision","decimals","toFixed","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","getTheme","setCSSClass","setElementWidth","oldCSSClass","setEnabled","isVisible","tooltipElement","showOn","theme","getPropertyValue","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","hiddenInput","Math","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","currDir","setBarColor","tooltipValue","setTooltipContent","tooltipObj","addTooltipClass","setAriaAttrValue","setPreviousVal","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","setTooltipTransform","tooltipCollision","position","tooltipOffsetValue","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","showTipPointer","animation","duration","opensOn","beforeCollision","tooltipBeforeClose","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","setLocale","buttonFocusOut","repeatButton","hVal","handleValueUpdate","step","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","focusHandle","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","zIndex","isAndroid","smallStep","showSmallTicks","largeStep","li","steps","customStep","abs","start","islargeTick","tickWidth","Infinity","k","largestep","startValue","repeat","j","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","sanitize","spanElement","tickText","tickElement","tickValuePosition","otherChild","first","other","right","ariaValueText","isTickFormatted","valuenow","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","minValue","maxValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","pos","updateRangeValue","previous","changeEventArgs","previousValue","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","num","top_1","stepValueCalculation","percentStep","remain","addition","pow","round","positionToValue","diff","total","evt","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","xPostion","yPostion","rangeBarDragged","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","hover","formResetHandler","curTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","keyEntity","setMinMaxValue","setTooltip","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","color","border","APPLY","CANCEL","CURRENT","CONTAINER","CTRLBTN","CTRLSWITCH","DISABLED","FORMATSWITCH","HANDLER","HEX","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","HSVCONTAINER","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","TILE","presets","ColorPicker","Apply","Cancel","ModeSwitcher","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","roundValue","noColor","slicedValue","initialInputValue","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createInput","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","onOpen","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","X","Y","targetType","collision","offsetY","bindCallBackEvent","observeOpenArgs","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","paletteGroup","appendElement","appendPalette","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","row","tile","roundedColor","palette","presetName","addTileSelection","noColorEle","attr","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","previewContainer","colorValue","isPicker","createNumericInput","numericInput","showSpinButton","floatLabelType","inputHandler","inputWrap","appendValueSwitchBtn","hexInput","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","join","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","selectedEle","convertRgbToNumberArray","getValue","closePopup","pickerKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","stopPropagation","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","tiles","prevSelectedEle","pop","tilePosition","keySelectionChanges","newEle","cIdx","emptyCount","inputValueChange","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","floor","f","q","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","_loop_1","this_1","reduce","count_1","cls","ToolbarRenderer","popupOverlay","onPopupOverlay","removePopupContainer","toolbarBeforeCreate","enableCollision","toolbarCreated","toolbarClicked","dropDownSelected","beforeDropDownItemRender","dropDownOpen","listEle","popupModal","dropDownClose","popupContainer","renderToolbar","setPanel","overflowMode","rteToolbarObj","beforeCreate","created","clicked","select","beforeItemRender","popupElement","inlineEle","currentDropdown","setIsModel","paletteSelection","dropDownArgs","colorbox","colorPicker","defaultColor","initialBackgroundColor","colorpickerValue","onclick","focusEle","setColorPickerContentWidth","pickerRefresh","dropElement","onmousedown","onkeydown","popupElem","colorPickerContent","borderWidth","beforeTileRender","colorPickerArgs","beforeModeSwitch","toolbarPanel","panel","ToolbarAction","toolbarClick","dropDownSelect","renderSelection","controlParent","activeEle","tableQTBar","listItem","listStyle","listImage","isToolbar","isTransformChild","addRenderer","editableElement","toolbarBindEvent","keyBoardModule","toolBarKeyDown","createToolbarElement","tbWrapper","getToolbarMode","tbMode","Scrollable","checkToolbarResponsive","tBarMode","MultiRow","dropDownModule","checkIsTransformChild","transformElements","toggleFloatClass","scrollParent","isBody","isFloat","floatOffset","floatingToolbarOffset","scrollParentRelativeTop","trgHeight","bodyStyle","paddingTop","targetTop","scrollParentYOffset","isMSPointer","scrollTop","scrollParentRect","scrollParentTop","outOfRange","parent_1","innerHeight","divEle","iframeEle","showFixedTBar","isIos","hideFixedTBar","trgItem","addTBarItem","prefixId","prefixIcon","tooltipText","updateToolbarStatus","tbElements","fullScreen","hideScreen","getObject","isEnable","trgItems","enableItems","popHeight","expandPopup","refreshOverflow","isToolbarDestroyed","destroyToolbar","getDOMVisibility","el","focusChangeHandler","dropDownBeforeOpenHandler","tbFocusHandler","activeElm","isToolbaractive","tbKeydownHandler","toolbarClickHandler","toolbarActionModule","onRefresh","refreshToolbar","RendererFactory","rendererMap","rName","RenderType","ToolbarType","DialogType","undoRedoItems","inlineNode","getIndex","some","hasClass","getDropDownValue","returnType","result","isIDevice","getFormattedFontSize","isIFrame","getTooltipText","itemLocale","setToolbarStatus","isPopToolbar","self","updateDropDownFontFormatLocale","itemStr","alignItems","fontNameItems","name_1","fontSizeItems","getCollection","getTBarItemsIndex","itemsIndex","updateUndoRedoStatus","undoRedoStatus","keys_2","dispatchEvent","createEvent","initEvent","parseHtml","DocumentFragment","createRange","createContextualFragment","getTextNodesUnder","docElement","nodes","toObjectLowerCase","obj","convertedValue","getEditValue","rteObj","updateTextNode","decode","resultElm","isPreviousInlineElem","previousParent","imageElm","getDefaultValue","currentVal","isEditableValueEmpty","beforeSanitize","beforeEvent","helper","convertToBlob","dataUrl","arr","mime","bstr","atob","u8arr","Uint8Array","Blob","getLocaleFontFormat","localeItems","setEditFrameFocus","paraElm","tableElm","tdElm","borderLeft","borderRight","borderBottom","borderTop","getLastTextNode","startChildNodes","finalNode","getDefaultHtmlTbStatus","bold","italic","subscript","superscript","strikethrough","orderedlist","unorderedlist","underline","alignments","backgroundcolor","fontcolor","fontname","formats","createlink","insertcode","KEY_DOWN","ACTION","FORMAT_TYPE","KEY_DOWN_HANDLER","LIST_TYPE","KEY_UP_HANDLER","KEY_UP","MODEL_CHANGED_PLUGIN","MODEL_CHANGED","MS_WORD_CLEANUP_PLUGIN","MS_WORD_CLEANUP","ON_BEGIN","SPACE_ACTION","BaseToolbar","getClass","getTemplateObject","getItems","proxy_1","callback_1","tbItems_1","getToolbarOptions","templateItems","alignmentLocale","alignmentItems","imageAlignItems","displayLocale","imageDisplayItems","tableCellItems","tableRowLocale","tableRowsItems","tableColumnLocale","tableColumnsItems","tableVerticalLocale","TableCellVerticalAlignItems","tableStyleLocale","TableStyleItems","predefinedItems","getLocale","updateDropDownLocale","Count","appendCount","charCountBackground","string","percentage","load","initialLoad","initialEnd","iframeMouseDown","toolbarRefresh","refreshBegin","toolbarUpdated","bindOnEnd","htmlToolbarClick","markdownToolbarClick","modelChanged","toolbarRenderComplete","enableFullScreen","disableFullScreen","execCommandCallBack","imageToolbarAction","linkToolbarAction","windowResize","resizeStart","onResize","resizeStop","insertLink","unLink","actionBegin","actionComplete","updatedToolbarStatus","updateToolbarItem","insertImage","insertCompleted","imageLink","imageAlt","imageDelete","imageCaption","imageSize","updateSource","beforeDropDownOpen","selectionSave","selectionRestore","expandPopupClick","mouseDown","sourceCodeMouseDown","editAreaClick","scroll","contentscroll","colorPickerChanged","tableColorPickerChanged","focusChange","renderInlineToolbar","paste","rtlMode","createTable","docClick","tableToolbarAction","checkUndo","readOnlyMode","pasteClean","beforeDialogOpen","dialogOpen","beforeDialogClose","dialogClose","beforeQuickToolbarOpen","quickToolbarOpen","quickToolbarClose","imageSelected","imageUploading","imageUploadSuccess","imageUploadFailed","imageRemoving","afterImageDelete","drop","beforeImageUpload","resizeInitialized","renderFileManager","beforeImageDrop","dynamicModule","updateTbItemsStatus","showLinkDialog","closeLinkDialog","showImageDialog","closeImageDialog","showTableDialog","closeTableDialog","BaseQuickToolbar","isDOMElement","popupRenderer","Popup","dropDownButtons","colorPickerObj","appendPopupContent","toolbarElement","popupType","popupId","stringItems","createToolbar","renderPopup","quickTBarObj","setPosition","imgWrapper","targetOffsetTop","parentOffsetTop","parentData","editTop","tBarElementHeight","editHeight","popWidth","popupObj","checkCollision","viewPort","contentTop","windowY","popup","posY","windowHeight","windowWidth","bodyRightSpace","beforeQuickToolbarArgs","editPanelTop","editPanelHeight","bodyRight","innerWidth","toolbarAvail","expTBHeight","tBarHeight","showPopupData","show","viewSourcePanel","removeEleFromDOM","addQTBarItem","removeQTBarItem","PopupRenderer","popupPanel","QuickToolbar","formattedItems","getQTBarOptions","popType","renderType","createQTBar","qTBar","initializeQuickToolbars","selectionChangeHandler","onMouseDown","keyUpQT","renderQuickToolbars","imageQTBar","textQTBar","link","LinkToolbar","TextToolbar","image","ImageToolbar","table","TableToolbar","renderInlineQuickToolbar","InlineToolbar","deBounce","deBouncer","mouseUpHandler","offsetX","closestAnchor","keyDownHandler","inlineQTBarMouseDownHandler","keyUpHandler","onSelectionChange","isCollapsed","wireInlineQTBarEvents","unWireInlineQTBarEvents","actionOnScroll","Formatter","saveSelection","getAncestorNode","commonAncestorContainer","action_1","itemCollection","isTableModule","ensureInsideTableList","enterAction","selectType","events","callbackArgs","undoRedoStack","status","IMAGE","TABLE","LINK","INSERT_ROW","INSERT_COLUMN","DELETEROW","DELETECOLUMN","REMOVETABLE","TABLEHEADER","TABLE_VERTICAL_ALIGN","TABLE_MERGE","TABLE_VERTICAL_SPLIT","TABLE_HORIZONTAL_SPLIT","TABLE_MOVE","ALIGNMENT_TYPE","INDENT_TYPE","DEFAULT_TAG","BLOCK_TAGS","IGNORE_BLOCK_TAGS","TABLE_BLOCK_TAGS","SELECTION_TYPE","INSERTHTML_TYPE","INSERT_TEXT_TYPE","CLEAR_TYPE","NodeSelection","startNodeName","endNodeName","saveInstance","cloneRange","rootNode","documentFromRange","getNodeArray","get","collapse","isChildNode","nodeCollection","getNode","getParentNodes","reverse","splice","getSelectionNodeCollection","getSelectionNodes","getSelectionNodeCollectionBr","getSelectionNodesBr","getInsertNodeCollection","getInsertNodes","isStart","setRangePoint","isvalid","size","constant","setRange","removeAllRanges","addRange","startIndex","endIndex","setSelectionContents","setSelectionNode","selectNodeContents","getSelectedNodes","insertParentNode","newNode","surroundContents","point","htmlKeyConfig","selfClosingTags","markerClassName","startSelection","endSelection","DOMNode","currentDocument","contents","Node","ELEMENT_NODE","isLink","rawAttributes","rawAttr","orderRawAttr","sort","attrKey","attrValue","clearAttributes","openTagString","closeTagString","createTagString","relativeElement","isList","isElement","isEditable","replaceWith","parseHTMLFragment","wrap","referenceNode","wrapInner","unWrap","unWrapNode","getSelectedNode","TEXT_NODE","nodeFinds","existNodes","isEditorArea","getRangePoint","ranges","getPreviousNode","previousElementSibling","saveMarker","startTextNode","endTextNode","marker","setMarker","isTableStart","existNode","textNodes","markerStart","markerEnd","ensureSelfClosingTag","isTable","parNode","tdNode","lastNode","createTempNode","ignoreBr","getImageTagInSelection","focusNode","blockNodes","collectionNodes","ignoreTableTag","listNodes","Lists","applyListsHandler","spaceKeyAction","testList","olListRegex","elementStart","testCurrentList","olListStartRegex","currentContent","spaceList","preElement","nextElement","preElemULStart","nextElemULStart","startElementOLTest","preElementOLTest","nextElementOLTest","enterList","startNodeParent","GetSpliceNode","insertTag","backspaceList","parentList","commonAncestor","startEle","endEle","isNested","ignoreDefault","currentAction","getAction","revertList","revertClean","nestedList","cleanNode","prevSibling","noPreviousElement","firstNode","firstNodeOL","siblingListOL","siblingListLI","siblingListLIFirst","nestedElement","nestedElementLI","firstNodeLI","listsNodes","setSelectionBRConfig","allSelectedNode","selectedNodes","currentFormatNodes","previousCurrentNode","tempElem","preNode","postNode","applyLists","startElem","endElem","isRevert","removeEmptyListElements","checkLists","elemAtt","openTag","closeTag","newTag","replaceHTML","collectionString","listElem","nodesTemp","liParents","contentNodes","findUnSelected","rightIndent","indentElements","lastElement","childElements","z","childLI","viewNode","siblingList","wrapperclass","childNode","nodeInnerHtml","emptyUl","emptyLi","InsertMethods","WrapBefore","textNode","isAfter","AppendBefore","Wrap","unwrap","NodeCutter","clone","setStartBefore","setEndAfter","fragment","extractContents","spliceEmptyNode","isEmpty","isImgElm","GetCursorStart","indexes","GetCursorRange","cursorRange","TrimLineBreak","GetCursorNode","line","Formats","applyFormats","onKeyUp","getParentNode","endCon","pTag","replaceChild","brNode","startCon","preElem","endPreElem","liParent","deleteContent","removeCodeContent","lastEmpty","lastBeforeBr","startParent","paraFocus","isNotEndCursor","referNode","isEnd","insertMarker","brTag","previousSib","insertAdjacentHTML","setCursorPosition","markerElem","mrkParentElem","focusSelectionParent","tempSpanPElem","tempSpan","isSelectAll","formatsNodes","exeValue","cleanFormats","replaceNode","replaceTag","preFormatMerge","preNodes","ignoreAttr","InsertHtml","Insert","editNode","isExternal","isCursor","closestParentNode","closestEle","pasteInsertHTML","sibNode","lasNode","removeEmptyElements","parentNode1","imageFocus","frag","createDocumentFragment","paraElem","isSingleNode","currentBlockNode","getImmediateBlockNode","containsBlockNode","removingComments","lastSelectionNode","allChildNodes","insertTempNode","isFirstTextNode","firstParaElm","nearestAnchor","immediateBlockNode","rangeElement","placeCursorEnd","cursorPos","blockNode","liNode","insertAdjacentElement","splitedElm","createTextNode","elm","innerElement","findDetachEmptyElem","removableElement","emptyElements","detachableElement","LinkCommand","linkCommand","createLink","domSelection","localeCompare","anchor","createAchorNode","removeText","createLinkNode","anchorEle","txtArray","inlineNodes","removeNodes","anchorNodes","finalinlineNodes","check","j_1","cln","j_2","linkNode","containsNode","Alignments","applyAlignment","getTableNode","cellNode","isTableAlign","alignmentNodes","imageTags","elementNode","imgObj","imageCommand","Indents","indentValue","applyIndents","isRtl","indentsNodes","parentNodes","marginLeftOrRight","indentsValue","CLASS_IMAGE_RIGHT","CLASS_IMAGE_LEFT","CLASS_IMAGE_CENTER","CLASS_IMAGE_BREAK","CLASS_CAPTION","CLASS_CAPTION_INLINE","CLASS_IMAGE_INLINE","ImageCommand","createImage","insertImageLink","openImageLink","editImageLink","removeImageLink","removeImage","insertAltTextImage","imageDimension","imageJustifyLeft","imageJustifyCenter","imageJustifyRight","imageInline","imageBreak","isReplaced","imgElement","setStyle","imgEle","imgElm_1","altText","calculateStyleValue","styleValue","capImgWrap","textEle","newTextEle","insertElement","TableCommand","insertRow","insertColumn","deleteRow","deleteColumn","removeTable","tableHeader","tableVerticalAlign","cellMerge","HorizontalSplit","VerticalSplit","tableMove","tblBody","tdWid","rows","cell","removeEmptyNode","emptyLiChild","getSelectedCellMinMaxIndex","selectedCells","curTable","minI","maxI","minJ","maxJ","selectedCellIndex","getCorrespondingIndex","minMaxIndex","FindIndex","startRow","endRow","startColumn","endColumn","isBelow","selectedCell","lastRow","cloneRow","allCells","getCorrespondingColumns","minVal","newRow","isHeaderSelect","tdElement","selectedRow","curCell","curRow","allRows","colIndex","previousWidth","currentWidth","currentTabElm","thTdElm","dataset","oldWidth","colTemplate","tBodyHeadEle","rowIndex","deleteIndex","selectedMinMaxIndex","minCol","maxCol","currentRow","currentCell","currentCellIndex","colSpanVal","rowHeadEle","nextFocusCell","sContainer","startChildLength","rowSpanVal","prepend","focusTrEle","selectedTable","headerExit","cellCount","colSpanCount","createTHead","th","deleteTHead","tableCell","verticalAlign","mergeCellContent","minMaxIndexes","getSelectedMinMaxIndexes","firstCell","rowSelectedCells","totalWidth","updateRowSpanStyle","updateColSpanStyle","colValue","colMin","eleArray","updateCellAttribute","rowValue","rowMin","firstIndex","spanCount","correspondingCells","minRow","maxRow","currentRowCol","targetRowCol","activeCell","newCell","activeCellIndex","activeCellRowSpan","avgCount","ceil","avgRowIndex","newTrEle","avgWidth","isNaN","correspondingColumns","activeCellcolSpan","elementArray","colspan","colEle","ele_1","colspan_1","rowSpan","columnIndex","cells","nextIndex","nextCol","highlightCells","startCell","endCell","minRowIndex","maxRowIndex","minColIndex","maxColIndex","minMaxValues","MinMax","activeCellTag","targetCellTag","activeRowIndex","activeColumnIndex","targetRowIndex","targetColumnIndex","activeCellList","activeIndexes","targetIndexes","IsFormatted","getFormattedNode","getFormatParent","isFormattedNode","isBold","isItalic","isUnderline","isStrikethrough","isSuperscript","isSubscript","isFontColor","isFontName","isFontSize","isBackgroundColor","validTags","inlineTags","fontWeight","fontStyle","textDecoration","backColor","SelectionCommands","applyFormat","validFormats","isFormatted","isFormat","preventRestore","isFontStyle","cursorNode","insertCursorNode","isSubSup","formatNode","insertFormat","removeFormat","applySelection","cursorNodes","cursorFormat","getCursorFormat","emptySpaceNode","brElem","getInsertNode","bgStyle","splitNode","startText","nodeIndex","bg","formatNodeStyles","formatNodeTagName","nodeTraverse","GetFormatNode","currentNodeElem","curParentElem","liElement","toLocaleUpperCase","applyStyles","getChildNode","updateStyles","tag","SelectionBasedExec","InsertHtmlExec","applyHtml","pastedElements","allPastedElements","imgElements","allImgElm","imgElem","ClearFormat","clear","defaultTag","lastText","exactNodes","cloneSelectNodes","clearInlines","reSelection","cloneParentNodes","clearBlocks","selectionNodes","endIndexNode","spliceParent","removeParent","index1","index2","index3","parentIndex","elementIndex","NONVALID_TAGS","NONVALID_PARENT_TAGS","IGNORE_PARENT_TAGS","currentInlineNode","removeInlineParent","ClearFormatExec","applyClear","UndoRedoManager","undoRedoSteps","undoRedoTimer","debounceListener","onAction","currentContainer","changEle","shift","removedContent","MsWordPaste","olData","ulData","ignorableNodes","borderStyle","removableElements","listContents","wordCleanup","wordPasteStyleConfig","allowedStylePropertiesArray","tempHTMLContent","rtfData","patern","patern2","patern3","pattern4","imageConversion","addListClass","cleanUp","listConverter","styleCorrection","removeUnwantedElements","breakLineAddition","removeClassName","addTableBorderClass","allNodes","allTableElm","hasTableBorder","checkVShape","imgSrc","base64Src","imgName","linkRegex","hexValue","hexConversion","convertToBase64","byteArr","conHexStringToBytes","base64String","conBytesToBase64","base64","base64Str","base64Char","byteArrLen","array3","array3length","array4","imgType","picHead","pic","source","fullImg","elmWithClass","allElements","findDetachElem","brElement","regExpStartElem","regExpEndElem","styleElement","styleClassObject_1","findStyleObject","removeUnwantedStyle","filterStyles","resultElem","fromClass","getElementsByClassName","getElementsByTagName","styleProperty","valueSplit","changedValue","elmWithStyles","elemStyleProperty","styleValues","styleClassObject","tempStyle","classNameCollection","stylesCollection","prevflagState","tempCleaner","level","stNode","collection","currentListStyle","getListContent","listStyleType","getlistStyleType","currentClassName","textAlign","listType","nestedLevel","listStyleTypeName","makeConversion","elemColl","temp1","listContent","currentListClass","prevList","pLevel","listCount","pElement","getNamedItem","currentStyle","pushContent","styleNodes","InsertTextExec","insertText","EditorManager","listObj","formatObj","alignmentObj","indentsObj","linkObj","selectionObj","inserthtmlObj","insertTextObj","clearObj","tableObj","msWordPaste","editorKeyUp","onWordPaste","onBegin","HTMLFormatter","updateFormatter","editElement","doc","statusCollection","ToolbarStatus","targetNode","fontName","formatCollection","stringify","nodesLength","isNodeChanged","isOrderedList","isUnorderedList","isAlignment","isFormats","isNumberFormatList","isBulletFormatList","pattern","search","align","list","HtmlToolbarStatus","toolbarStatus","prevToolbarStatus","onRefreshHandler","tbStatusString","ContentRender","div","contentPanel","IFRAMEHEADER","IframeContentRender","iFrameBodyContent","iFrameContent","contentDocument","setThemeColor","write","XhtmlValidation","enableXhtmlValidation","clean","AddRootElement","ImageTags","removeTags","RemoveUnsupported","valueLength","arrayValue","valueTemp","valueDupe","valueOriginal","imgRegexp","exec","lastIndexOf","imgNodes","img","RemoveElementNode","rmvNode","parentArray","rmvArray","underlineEle","spanEle","strongEle","boldEle","attrArray","RemoveAttributeByName","attrName","hasChildNodes","childEle","HtmlEditor","rangeCollection","isImageDelete","nodeSelectionObj","colorPickerModule","instantiateRenderer","onToolbarClick","onSelectionSave","onSelectionRestore","contenteditable","restrictKeys","backSpaceCleanup","deleteCleanup","enableTabKey","textCont","spaceLink","currentRange_1","editorValue","orderedList_1","unOrderedList","isUnOrderedList","eventArgs_1","oldRangeElement","deleteRangeElement","deleteOldRangeElement","ulListStartRegex","isLiElement","getRootBlockNode","getRangeLiNode","normalize","rootElement","getRangeElement","getCaretIndex","preCaretRange","rangeBlockNode","rangeLiNode","regex","httpRegex","wwwRegex","enterSplitText","contentInnerElem","contentWithSpace","spaceBetweenContent","spaceSplit","divElement","splitTextContent","resultSplitContent","splitText","urlText","urlTextRange","closestElement","imageDialog","formatterClass","toolbarUpdate","Image","isImgUploaded","isAllowedTypes","deletedImg","onWindowResize","showImageQuickToolbar","caption","deleteImg","insertImgLink","insertAltText","alignmentSelect","afterRender","imagePaste","dragDrop","dragStart","dragEnter","dragOver","imageClick","undoStack","resize","onCutHandler","outline","resizeEnd","resizeBtnInit","getPointX","prevSelectedImgEle","imgResizeDiv","imageResize","getPointY","stopImmediatePropagation","resizeBtnStat","topLeft","topRight","botLeft","botRight","resizeStartArgs","cancelResizeAction","imgResizePos","resizeImgDupPos","touchMoveEvent","resizing","calcPos","imgWid","imgHgt","borWid","devWid","ignoreOffset","documentElement","setAspectRatio","expectedX","expectedY","resizeByPercent","percentageValue","pixToPerc","expected","imgDupMouseMove","resizingArgs","mouseX","mouseY","imgDupPos","openImgLink","editImgLink","removeImgLink","isCapLink","captionEle","keyCodeValues","isCursor_1","checkImageBack","checkImageDel","prev","removeResizeEle","event_1","imageRemovePost","alignImage","break","imageWithLinkQTBarItemUpdate","newItems","hideImageQuickToolbar","imagDialog","linkWrap","inputLink","linkargs_1","selfImage","altWrap","altHeader","getAlt","inputAlt","altArgs_1","alt","insertAlt","captionClass","absoluteUrl","removeUrl","URL","baseURI","removingImgName","xhr","XMLHttpRequest","readyState","triggerPost","response","responseType","send","File","ajax","formData","FormData","append","draggable","imgWrap","imgInner","imgCaption","imgSizeHeader","dialogContent","imgsizeInput","selectObj_1","insertSize","imgDialog","imgInsert","imglinkCancel","imgHeader","insertImageUrl","uploadObj","removing","path","imgUpload","linkHeader","linkHeaderText","imageUrlPopup","imgUrl","placeUrl","inputUrl","spellcheck","getButtons","matchUrl","imgHeight","imgWidth","imgSizeWrap","widthVal","changedWidthValue","heightVal","changedHeightValue","widthNum","input","inputWidthValue","inputValue","heightNum","inputHeightValue","dialogEle","uploadParentEle","deviceImgUpMsg","imgUpMsg","spanMsg","btnEle","autofocus","browserMsg","button","btnClick","fileSelect","rawFile","selectArgs","filesData","beforeUploadArgs","uploadEle","asyncSettings","saveUrl","dropArea","multiple","allowedTypes","selected","isServerRendered","checkExtension","reader_1","FileReader","saveFormat","createObjectURL","readAsDataURL","_internalRenderSelect","beforeUpload","currentRequestHeader","currentRequest","customFormDatas","customFormData","uploadFiles","uploading","success","operation","failure","dataTransfer","effectAllowed","dropEffect","isImgOrFileDrop","caretRangeFromPoint","rangeParent","rangeOffset","getDropRange","uploadArea","insertDragImage","startRange","elementFromPoint","startCharIndexCharacter","rangeRect","activePopupElement","imgFiles","fileName","onSelect","imgArgs_1","validFiles","statusCode","validationMessages","imageTag","reader","uploadMethod","dragEvent","imageElement","isUploading","viewPortElement","disable","timeOut","refreshPopup","canceling","imageUploadingArgs","uploadFailure","uploadSuccess","imgPosition","rtePosition","reader_2","showPopupToolBar","imageSrc","defaultLocale","toolsLocale","fontNameLocale","formatsLocale","numberFormatListLocale","bulletFormatListLocale"],"mappings":"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ejlB,UAAW,wBAAoB,GACjD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,yBAAqB,GAClD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,2BAAuB,GACpD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,4BAAwB,GACrD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,qBAAiB,GAC9C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,yBAAqB,GAClD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,sBAAkB,GAC/C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,0BAAsB,GACnD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,yBAAqB,GAClD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,qBAAiB,GAC9C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,wBAAoB,GACjD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,eAAW,GACxC,GAAW,CACP,kBACDilB,EAAejlB,UAAW,iBAAa,GAC1C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,0BAAsB,GACnD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,YAAQ,GACrC,GAAW,CACP,kBACDilB,EAAejlB,UAAW,oBAAgB,GAC7C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,aAAS,GACtC,GAAW,CACP,kBACDilB,EAAejlB,UAAW,cAAU,GACvC,GAAW,CACP,kBACDilB,EAAejlB,UAAW,gBAAY,GACzC,GAAW,CACP,kBACDilB,EAAejlB,UAAW,mBAAe,GAC5C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,kBAAc,GAC3C,GAAW,CACP,kBACDilB,EAAejlB,UAAW,0BAAsB,GACnD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,yBAAqB,GAClD,GAAW,CACP,kBACDilB,EAAejlB,UAAW,uBAAmB,GAChD,GAAW,CACP,eAAS,OACVilB,EAAejlB,UAAW,iBAAa,GAC1CilB,EAAiB,GAAW,CACxB,QACDA,GACIA,EAtvEwB,CAuvEjC,QC5zEE,GAAwC,WACxC,IAAI1Q,EAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EA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","file":"js/chunk-1b25f757.72621c7a.js","sourcesContent":["import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * ServiceLocator\n *\n * @hidden\n\n */\nvar ServiceLocator = /** @class */ (function () {\n function ServiceLocator() {\n this.services = {};\n }\n /* eslint-disable */\n /**\n * register method\n *\n * @param {string} name - specifies the name.\n * @param {T} type - specifies the type.\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n ServiceLocator.prototype.register = function (name, type) {\n if (isNullOrUndefined(this.services[name])) {\n this.services[name] = type;\n }\n };\n /**\n * getService method\n *\n * @param {string} name - specifies the name.\n * @returns {void}\n * @hidden\n\n */\n ServiceLocator.prototype.getService = function (name) {\n if (isNullOrUndefined(this.services[name])) {\n // eslint-disable-next-line\n throw \"The service \" + name + \" is not registered\";\n }\n return this.services[name];\n };\n return ServiceLocator;\n}());\nexport { ServiceLocator };\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n\n */\nexport var CLS_RTE = 'e-richtexteditor';\n/**\n * @hidden\n\n */\nexport var CLS_RTL = 'e-rtl';\n/**\n * @hidden\n\n */\nexport var CLS_CONTENT = 'e-content';\n/**\n * @hidden\n\n */\nexport var CLS_DISABLED = 'e-disabled';\n/**\n * @hidden\n\n */\nexport var CLS_SCRIPT_SHEET = 'rte-iframe-script-sheet';\n/**\n * @hidden\n\n */\nexport var CLS_STYLE_SHEET = 'rte-iframe-style-sheet';\n/**\n * @hidden\n\n */\nexport var CLS_TOOLBAR = 'e-rte-toolbar';\n/**\n * @hidden\n\n */\nexport var CLS_TB_FIXED = 'e-rte-tb-fixed';\n/**\n * @hidden\n\n */\nexport var CLS_TB_FLOAT = 'e-rte-tb-float';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ABS_FLOAT = 'e-rte-tb-abs-float';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE = 'e-rte-inline';\n/**\n * @hidden\n\n */\nexport var CLS_TB_INLINE = 'e-rte-tb-inline';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_EXPAND_TB = 'e-rte-tb-expand';\n/**\n * @hidden\n\n */\nexport var CLS_FULL_SCREEN = 'e-rte-full-screen';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_TB = 'e-rte-quick-toolbar';\n/**\n * @hidden\n\n */\nexport var CLS_POP = 'e-rte-pop';\n/**\n * @hidden\n\n */\nexport var CLS_TB_STATIC = 'e-tb-static';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_POP = 'e-rte-quick-popup';\n/**\n * @hidden\n\n */\nexport var CLS_QUICK_DROPDOWN = 'e-quick-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_IMAGE_POP = 'e-rte-image-popup';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE_POP = 'e-rte-inline-popup';\n/**\n * @hidden\n\n */\nexport var CLS_INLINE_DROPDOWN = 'e-rte-inline-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_POPUP = 'e-rte-dropdown-popup';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_ICONS = 'e-rte-dropdown-icons';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_ITEMS = 'e-rte-dropdown-items';\n/**\n * @hidden\n\n */\nexport var CLS_DROPDOWN_BTN = 'e-rte-dropdown-btn';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_CONTENT = 'e-rte-content';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ITEM = 'e-toolbar-item';\n/**\n * @hidden\n\n */\nexport var CLS_TB_EXTENDED = 'e-toolbar-extended';\n/**\n * @hidden\n\n */\nexport var CLS_TB_WRAP = 'e-toolbar-wrapper';\n/**\n * @hidden\n\n */\nexport var CLS_POPUP = 'e-popup';\n/**\n * @hidden\n\n */\nexport var CLS_SEPARATOR = 'e-separator';\n/**\n * @hidden\n\n */\nexport var CLS_MINIMIZE = 'e-minimize';\n/**\n * @hidden\n\n */\nexport var CLS_MAXIMIZE = 'e-maximize';\n/**\n * @hidden\n\n */\nexport var CLS_BACK = 'e-back';\n/**\n * @hidden\n\n */\nexport var CLS_SHOW = 'e-show';\n/**\n * @hidden\n\n */\nexport var CLS_HIDE = 'e-hide';\n/**\n * @hidden\n\n */\nexport var CLS_VISIBLE = 'e-visible';\n/**\n * @hidden\n\n */\nexport var CLS_FOCUS = 'e-focused';\n/**\n * @hidden\n\n */\nexport var CLS_RM_WHITE_SPACE = 'e-remove-white-space';\n/**\n * @hidden\n\n */\nexport var CLS_IMGRIGHT = 'e-imgright';\n/**\n * @hidden\n\n */\nexport var CLS_IMGLEFT = 'e-imgleft';\n/**\n * @hidden\n\n */\nexport var CLS_IMGCENTER = 'e-imgcenter';\n/**\n * @hidden\n\n */\nexport var CLS_IMGBREAK = 'e-imgbreak';\n/**\n * @hidden\n\n */\nexport var CLS_CAPTION = 'e-img-caption';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_CAPTION = 'e-rte-img-caption';\n/**\n * @hidden\n\n */\nexport var CLS_CAPINLINE = 'e-caption-inline';\n/**\n * @hidden\n\n */\nexport var CLS_IMGINLINE = 'e-imginline';\n/**\n * @hidden\n\n */\nexport var CLS_COUNT = 'e-rte-character-count';\n/**\n * @hidden\n\n */\nexport var CLS_WARNING = 'e-warning';\n/**\n * @hidden\n\n */\nexport var CLS_ERROR = 'e-error';\n/**\n * @hidden\n\n */\nexport var CLS_ICONS = 'e-icons';\n/**\n * @hidden\n\n */\nexport var CLS_ACTIVE = 'e-active';\n/**\n * @hidden\n\n */\nexport var CLS_EXPAND_OPEN = 'e-expand-open';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_ELEMENTS = 'e-rte-elements';\n/**\n * @hidden\n\n */\nexport var CLS_TB_BTN = 'e-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_HR_SEPARATOR = 'e-rte-horizontal-separator';\n/**\n * @hidden\n\n */\nexport var CLS_TB_IOS_FIX = 'e-tbar-ios-fixed';\n/**\n * @hidden\n\n */\nexport var CLS_LIST_PRIMARY_CONTENT = 'e-rte-list-primary-content';\n/**\n * @hidden\n\n */\nexport var CLS_NUMBERFORMATLIST_TB_BTN = 'e-rte-numberformatlist-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_BULLETFORMATLIST_TB_BTN = 'e-rte-bulletformatlist-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_FORMATS_TB_BTN = 'e-formats-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_NAME_TB_BTN = 'e-font-name-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_SIZE_TB_BTN = 'e-font-size-tbar-btn';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_TARGET = 'e-rte-fontcolor-element';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_TARGET = 'e-rte-backgroundcolor-element';\n/**\n * @hidden\n\n */\nexport var CLS_COLOR_CONTENT = 'e-rte-color-content';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_DROPDOWN = 'e-rte-fontcolor-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_DROPDOWN = 'e-rte-backgroundcolor-dropdown';\n/**\n * @hidden\n\n */\nexport var CLS_COLOR_PALETTE = 'e-rte-square-palette';\n/**\n * @hidden\n\n */\nexport var CLS_FONT_COLOR_PICKER = 'e-rte-fontcolor-colorpicker';\n/**\n * @hidden\n\n */\nexport var CLS_BACKGROUND_COLOR_PICKER = 'e-rte-backgroundcolor-colorpicker';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_READONLY = 'e-rte-readonly';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE_SEL = 'e-cell-select';\n/**\n * @hidden\n\n */\nexport var CLS_TB_DASH_BOR = 'e-dashed-border';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ALT_BOR = 'e-alternate-border';\n/**\n * @hidden\n\n */\nexport var CLS_TB_COL_RES = 'e-column-resize';\n/**\n * @hidden\n\n */\nexport var CLS_TB_ROW_RES = 'e-row-resize';\n/**\n * @hidden\n\n */\nexport var CLS_TB_BOX_RES = 'e-table-box';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_HIDDEN = 'e-rte-hidden';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_KEEP_FORMAT = 'e-rte-keepformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_REMOVE_FORMAT = 'e-rte-removeformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_PLAIN_FORMAT = 'e-rte-plainformat';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_OK = 'e-rte-pasteok';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_PASTE_CANCEL = 'e-rte-pastecancel';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DIALOG_MIN_HEIGHT = 'e-rte-dialog-minheight';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_HANDLE = 'e-resize-handle';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_EAST = 'e-south-east';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_IMAGE = 'e-rte-image';\n/**\n * @hidden\n\n */\nexport var CLS_RESIZE = 'e-resize';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_FOCUS = 'e-img-focus';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DRAG_IMAGE = 'e-rte-drag-image';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_UPLOAD_POPUP = 'e-rte-upload-popup';\n/**\n * @hidden\n\n */\nexport var CLS_POPUP_OPEN = 'e-popup-open';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_RESIZE = 'e-img-resize';\n/**\n * @hidden\n\n */\nexport var CLS_DROPAREA = 'e-droparea';\n/**\n * @hidden\n\n */\nexport var CLS_IMG_INNER = 'e-img-inner';\n/**\n * @hidden\n\n */\nexport var CLS_UPLOAD_FILES = 'e-upload-files';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_DIALOG_UPLOAD = 'e-rte-dialog-upload';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_RES_CNT = 'e-rte-resize';\n/**\n * @hidden\n\n */\nexport var CLS_CUSTOM_TILE = 'e-custom-tile';\n/**\n * @hidden\n\n */\nexport var CLS_NOCOLOR_ITEM = 'e-nocolor-item';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE = 'e-rte-table';\n/**\n * @hidden\n\n */\nexport var CLS_TABLE_BORDER = 'e-rte-table-border';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_TABLE_RESIZE = 'e-rte-table-resize';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';\n/**\n * @hidden\n\n */\nexport var CLS_RTE_TB_ENABLED = 'e-rte-toolbar-enabled';\n","import { EventHandler, detach, isNullOrUndefined, select, extend, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { closest, addClass, removeClass, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_RTE_ELEMENTS } from '../base/classes';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Link` module is used to handle undo actions.\n */\nvar Link = /** @class */ (function () {\n function Link(parent, serviceLocator) {\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.addEventListener();\n this.serviceLocator = serviceLocator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n }\n Link.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.insertLink, this.linkDialog, this);\n this.parent.on(events.showLinkDialog, this.showDialog, this);\n this.parent.on(events.closeLinkDialog, this.closeDialog, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.insertCompleted, this.showLinkQuickToolbar, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, this);\n this.parent.on(events.linkToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.unLink, this.removeLink, this);\n this.parent.on(events.editLink, this.editLink, this);\n this.parent.on(events.openLink, this.openLink, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n Link.prototype.onToolbarAction = function (args) {\n var item = args.args.item;\n switch (item.subCommand) {\n case 'OpenLink':\n this.parent.notify(events.openLink, args);\n break;\n case 'EditLink':\n this.parent.notify(events.editLink, args);\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, args);\n break;\n }\n };\n Link.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.insertLink, this.linkDialog);\n this.parent.off(events.showLinkDialog, this.showDialog);\n this.parent.off(events.closeLinkDialog, this.closeDialog);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.insertCompleted, this.showLinkQuickToolbar);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\n this.parent.off(events.linkToolbarAction, this.onToolbarAction);\n this.parent.off(events.unLink, this.removeLink);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.editLink, this.editLink);\n this.parent.off(events.openLink, this.openLink);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.destroy, this.destroy);\n };\n Link.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.showLinkQuickToolbar = function (e) {\n if (!isNullOrUndefined(e.args) && e.args.action !== 'enter' &&\n e.args.action !== 'space') {\n var pageX = void 0;\n var pageY = void 0;\n if (e.type !== 'Links' || isNullOrUndefined(this.parent.quickToolbarModule) ||\n isNullOrUndefined(this.parent.quickToolbarModule.linkQTBar)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var parentTop = this.parent.element.getBoundingClientRect().top;\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var target_1;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target_1 = ((element.nodeName === '#text') ? (element.parentNode) : element);\n }\n });\n if (e.isNotify) {\n var tbElement = this.parent.toolbarModule.getToolbarElement();\n var linkTop = target_1.getBoundingClientRect().top;\n var linkLeft = target_1.getBoundingClientRect().left;\n var linkPos = linkTop - parentTop;\n var tbHeight = (tbElement) ? (tbElement.offsetHeight + this.parent.toolbarModule.getExpandTBarPopHeight()) : 0;\n pageX = (this.parent.iframeSettings.enable) ? parentLeft + linkLeft : target_1.getBoundingClientRect().left;\n pageY = window.pageYOffset + ((this.parent.iframeSettings.enable) ?\n (parentTop + tbHeight + linkTop) : (parentTop + linkPos));\n }\n else {\n var args = void 0;\n args = e.args.touches ? e.args.changedTouches[0] : args = e.args;\n pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + parentTop + args.clientY : args.pageY;\n }\n if (this.quickToolObj.linkQTBar) {\n this.quickToolObj.linkQTBar.showPopup(pageX, pageY, range.endContainer);\n }\n }\n };\n Link.prototype.hideLinkQuickToolbar = function () {\n if (this.quickToolObj && this.quickToolObj.linkQTBar && document.body.contains(this.quickToolObj.linkQTBar.element)) {\n this.quickToolObj.linkQTBar.hidePopup();\n }\n };\n Link.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideLinkQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.linkQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n target = this.getAnchorNode(target);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.linkQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'A' && (target.childNodes.length > 0 && target.childNodes[0].nodeName !== 'IMG') &&\n e.args.target.nodeName !== 'IMG' &&\n !isNOU(closest(this.parent.getRange().startContainer.parentElement, 'A')) && !isNOU(closest(this.parent.getRange().endContainer.parentElement, 'A'))) {\n if (isPopupOpen) {\n return;\n }\n this.showLinkQuickToolbar({\n args: args,\n isNotify: false,\n type: 'Links',\n elements: [args.target]\n });\n }\n else {\n this.hideLinkQuickToolbar();\n }\n }\n };\n Link.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'insert-link':\n this.openDialog(true, event);\n originalEvent.preventDefault();\n break;\n }\n };\n Link.prototype.openDialog = function (isInternal, event) {\n if (!isInternal) {\n this.parent.contentModule.getEditPanel().focus();\n }\n if (this.parent.editorMode === 'HTML') {\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n var selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var eventArgs = {\n args: event ? event.args : {\n item: { command: 'Links', subCommand: 'CreateLink' },\n originalEvent: undefined\n },\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n };\n this.linkDialog(eventArgs);\n }\n else {\n var textArea = this.parent.contentModule.getEditPanel();\n this.parent.formatter.editorManager.markdownSelection.save(textArea.selectionStart, textArea.selectionEnd);\n this.linkDialog({\n args: {\n item: { command: 'Links', subCommand: 'Link' },\n originalEvent: event && event.args\n },\n member: 'link',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertLink'\n });\n }\n };\n Link.prototype.showDialog = function () {\n this.openDialog(false);\n };\n Link.prototype.closeDialog = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Link.prototype.clearDialogObj = function () {\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\n }\n };\n Link.prototype.linkDialog = function (e, inputDetails) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n if (this.parent.editorMode === 'HTML' && (e.selectParent.length > 0 &&\n !isNullOrUndefined(e.selectParent[0].classList) &&\n e.selectParent[0].classList.contains('e-rte-anchor')) && isNullOrUndefined(inputDetails)) {\n this.editLink(e);\n return;\n }\n var linkWebAddress = this.i10n.getConstant('linkWebUrl');\n var linkDisplayText = this.i10n.getConstant('linkText');\n var linkTooltip = this.i10n.getConstant('linkTooltipLabel');\n var urlPlace = this.i10n.getConstant('linkurl');\n var textPlace = this.i10n.getConstant('textPlaceholder');\n var title = this.i10n.getConstant('linkTitle');\n var linkDialogEle = this.parent.createElement('div', {\n className: 'e-rte-link-dialog', id: this.rteID + '_rtelink'\n });\n this.parent.element.appendChild(linkDialogEle);\n var linkContent = this.parent.createElement('div', {\n className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'\n });\n var htmlTextbox = (this.parent.editorMode === 'HTML') ? '
' +\n '
' +\n '
' + '
' +\n '
' : '';\n var content = '
' + '
' +\n '
' +\n '
' + '
' +\n '' +\n '
' + htmlTextbox;\n var contentElem = parseHtml(content);\n linkContent.appendChild(contentElem);\n var linkTarget = linkContent.querySelector('.e-rte-linkTarget');\n var linkUrl = linkContent.querySelector('.e-rte-linkurl');\n var linkText = linkContent.querySelector('.e-rte-linkText');\n var linkTitle = linkContent.querySelector('.e-rte-linkTitle');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var selectText = (this.parent.editorMode === 'HTML') ?\n e.selection.getRange(this.parent.contentModule.getDocument()).toString() : e.text;\n var linkInsert = this.i10n.getConstant('dialogInsert');\n var linkCancel = this.i10n.getConstant('dialogCancel');\n var selection = e.selection;\n var selectObj = { selfLink: this, selection: e.selection, selectParent: e.selectParent, args: e.args };\n var dialogModel = {\n header: this.i10n.getConstant('linkHeader'),\n content: linkContent,\n cssClass: CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '310px', height: 'inherit',\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertlink.bind(selectObj),\n buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }\n },\n { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat', content: linkCancel } }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n var args = _this.dialogObj;\n _this.dialogRenderObj.close(args);\n _this.dialogObj = null;\n }\n };\n // eslint-disable-next-line\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(linkDialogEle);\n linkDialogEle.style.maxHeight = 'inherit';\n if (isNullOrUndefined(this.dialogObj)) {\n return;\n }\n if (!isNullOrUndefined(inputDetails)) {\n linkUrl.value = inputDetails.url;\n linkText.value = inputDetails.text;\n linkTitle.value = inputDetails.title;\n // eslint-disable-next-line\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n this.dialogObj.element.querySelector('.e-insertLink').textContent = inputDetails.btnText;\n }\n this.checkUrl(false);\n if ((this.parent.editorMode === 'HTML' && isNullOrUndefined(inputDetails) && ((!isNullOrUndefined(selectText)\n && selectText !== '') && (e.selection.range.startOffset === 0) || e.selection.range.startOffset !==\n e.selection.range.endOffset)) || e.module === 'Markdown') {\n linkText.value = selectText;\n }\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n if (this.quickToolObj) {\n this.hideLinkQuickToolbar();\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n // eslint-disable-next-line\n Link.prototype.insertlink = function (e) {\n var linkEle = this.selfLink.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl').value;\n var linkText = linkEle.querySelector('.e-rte-linkText').value;\n var linkTitle;\n if (this.selfLink.parent.editorMode === 'HTML') {\n linkTitle = linkEle.querySelector('.e-rte-linkTitle').value;\n }\n var target = (this.selfLink.checkBoxObj.checked) ? '_blank' : null;\n if (linkUrl === '') {\n this.selfLink.checkUrl(true);\n return;\n }\n if (!this.selfLink.isUrl(linkUrl)) {\n linkText = (linkText === '') ? linkUrl : linkText;\n if (!this.selfLink.parent.enableAutoUrl) {\n linkUrl = linkUrl.indexOf('http') > -1 ? linkUrl : 'http://' + linkUrl;\n }\n else {\n // eslint-disable-next-line\n linkUrl = linkUrl;\n }\n }\n else {\n this.selfLink.checkUrl(false);\n }\n var proxy = this.selfLink;\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(this.selection.range.startContainer.parentNode, '[id='\n // eslint-disable-next-line\n + \"'\" + proxy.parent.contentModule.getPanel().id + \"'\" + ']'))) {\n proxy.parent.contentModule.getEditPanel().focus();\n if (Browser.isIE && proxy.parent.iframeSettings.enable) {\n this.selection.restore();\n }\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.parent.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var value = {\n url: linkUrl, text: linkText, title: linkTitle, target: target,\n selection: this.selection, selectParent: this.selectParent\n };\n if (document.body.contains(proxy.dialogObj.element)) {\n this.selfLink.dialogObj.hide({ returnValue: false });\n }\n if (isIDevice() && proxy.parent.iframeSettings.enable) {\n select('iframe', proxy.parent.element).contentWindow.focus();\n }\n if (proxy.parent.editorMode === 'HTML') {\n this.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var argsValue;\n if (!isNullOrUndefined(this.args) &&\n this.args.code === 'KeyK') {\n var originalEvent = this.args;\n extend(this.args, { item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent }, true);\n var argsVal = {\n item: { command: 'Links', subCommand: 'CreateLink' }, originalEvent: originalEvent\n };\n argsValue = argsVal;\n }\n else {\n argsValue = this.args;\n }\n this.selfLink.parent.formatter.process(this.selfLink.parent, argsValue, (!isNullOrUndefined(this.args) &&\n this.args.originalEvent), value);\n this.selfLink.parent.contentModule.getEditPanel().focus();\n };\n Link.prototype.isUrl = function (url) {\n // eslint-disable-next-line\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Link.prototype.checkUrl = function (e) {\n var linkEle = this.dialogObj.element;\n var linkUrl = linkEle.querySelector('.e-rte-linkurl');\n if (e) {\n addClass([linkUrl], 'e-error');\n linkUrl.setSelectionRange(0, linkUrl.value.length);\n linkUrl.focus();\n }\n else {\n removeClass([linkUrl], 'e-error');\n }\n };\n Link.prototype.removeLink = function (e) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (isIDevice() && this.parent.iframeSettings.enable) {\n select('iframe', this.parent.element).contentWindow.focus();\n }\n else {\n this.parent.contentModule.getEditPanel().focus();\n }\n this.hideLinkQuickToolbar();\n };\n Link.prototype.openLink = function (e) {\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: selectParentEle.href,\n target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n }\n };\n Link.prototype.getAnchorNode = function (element) {\n var selectParent = closest(element, 'a');\n return (selectParent ? selectParent : element);\n };\n Link.prototype.editLink = function (e) {\n var selectedNode = this.getAnchorNode(e.selectNode[0]);\n var selectParentEle = this.getAnchorNode(e.selectParent[0]);\n selectParentEle = selectedNode.nodeName === 'A' ? selectedNode : selectParentEle;\n if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.getAttribute('href'), text: selectParentEle.innerText,\n title: selectParentEle.title, target: selectParentEle.target,\n header: this.i10n.getConstant('editLink'), btnText: linkUpdate\n };\n this.linkDialog(e, inputDetails);\n }\n };\n // eslint-disable-next-line\n Link.prototype.cancelDialog = function (e) {\n this.selfLink.parent.isBlur = false;\n this.selfLink.dialogObj.hide({ returnValue: true });\n if (isIDevice()) {\n this.selection.restore();\n }\n else {\n this.selfLink.parent.contentModule.getEditPanel().focus();\n }\n };\n Link.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!isNullOrUndefined(this.dialogObj) && ((\n // eslint-disable-next-line\n !closest(target, '[id=' + \"'\" + this.dialogObj.element.id + \"'\" + ']') && this.parent.toolbarSettings.enable &&\n this.parent.getToolbarElement() && !this.parent.getToolbarElement().contains(e.target)) ||\n (((this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target)) ||\n this.parent.inlineMode.enable && !closest(target, '#' + this.dialogObj.element.id)) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_CreateLink') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_CreateLink')))) {\n this.dialogObj.hide({ returnValue: true });\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Link.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n */\n Link.prototype.getModuleName = function () {\n return 'link';\n };\n return Link;\n}());\nexport { Link };\n","import { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar Render = /** @class */ (function () {\n /**\n * Constructor for render module\n *\n * @param {IRichTextEditor} parent - specifies the parent\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\n */\n function Render(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderer = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n /**\n * To initialize Rich Text Editor header, content and footer rendering\n *\n * @returns {void}\n * @hidden\n\n */\n Render.prototype.render = function () {\n // eslint-disable-next-line\n var rteObj = this.parent;\n this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n this.contentRenderer.renderPanel();\n };\n /**\n * Refresh the entire RichTextEditor.\n *\n * @param {NotifyArgs} e - specifies the arguments.\n * @returns {void}\n */\n Render.prototype.refresh = function (e) {\n if (e === void 0) { e = { requestType: 'refresh' }; }\n this.parent.notify(e.requestType + \"-begin\", e);\n };\n /**\n * Destroy the entire RichTextEditor.\n *\n * @returns {void}\n */\n Render.prototype.destroy = function () {\n this.removeEventListener();\n };\n Render.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.modelChanged, this.refresh, this);\n this.parent.on(events.keyUp, this.keyUp, this);\n };\n Render.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.modelChanged, this.refresh);\n this.parent.off(events.keyUp, this.keyUp);\n };\n Render.prototype.keyUp = function (e) {\n if (this.parent.editorMode === 'HTML') {\n switch (e.args.which) {\n case 46:\n case 8:\n // eslint-disable-next-line\n var childNodes = this.parent.contentModule.getEditPanel().childNodes;\n if ((childNodes.length === 0) ||\n (childNodes.length === 1 && childNodes[0].childNodes.length === 0 && ((childNodes[0].tagName === 'BR') ||\n ((childNodes[0].tagName === 'P' || childNodes[0].tagName === 'DIV') && childNodes[0].textContent === '')))) {\n var node = this.parent.contentModule.getEditPanel();\n if (this.parent.enterKey === 'DIV') {\n node.innerHTML = '

';\n }\n else if (this.parent.enterKey === 'BR') {\n node.innerHTML = '
';\n }\n else {\n node.innerHTML = '


';\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), node.childNodes[0], 0);\n }\n break;\n }\n }\n };\n return Render;\n}());\nexport { Render };\n","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 *
;\n * \n * ```\n *\n * @hidden\n\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element - specifies the elements.\n * @param {KeyboardEventsModel} options - specify the options\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e - specifies the event arguments.\n * @returns {void}\n */\n _this.keyPressHandler = function (e) {\n /* eslint-disable */\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var isMetaKey = e.metaKey;\n /* eslint-enable */\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && (isCtrlKey === rKeyObj.ctrlKey || isMetaKey) &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n }\n }\n }\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp - specifies the keyboard event.\n * @param {KeyboardEventsModel} oldProp - specifies the old property.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void}\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} - specifies the key data\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { removeClass, selectAll, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { CLS_EXPAND_OPEN, CLS_TB_ITEM, CLS_ACTIVE } from '../base/classes';\nimport * as CONSTANT from '../../common/constant';\nimport { RenderType } from '../base/enum';\nimport { KeyboardEvents } from '../actions/keyboard';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar ViewSource = /** @class */ (function () {\n /**\n * Constructor for view source module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} locator - specifies the locator.\n * @returns {void}\n */\n function ViewSource(parent, locator) {\n this.parent = parent;\n var serviceLocator = locator;\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.addEventListener();\n }\n ViewSource.prototype.addEventListener = function () {\n this.parent.on(events.sourceCode, this.sourceCode, this);\n this.parent.on(events.initialEnd, this.onInitialEnd, this);\n this.parent.on(events.updateSource, this.updateSourceCode, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n ViewSource.prototype.onInitialEnd = function () {\n this.parent.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ViewSource.prototype.removeEventListener = function () {\n this.unWireEvent();\n this.parent.off(events.sourceCode, this.sourceCode);\n this.parent.off(events.updateSource, this.updateSourceCode);\n this.parent.off(events.initialEnd, this.onInitialEnd);\n this.parent.off(events.destroy, this.destroy);\n this.parent.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.onKeyDown);\n };\n ViewSource.prototype.getSourceCode = function () {\n return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' });\n };\n ViewSource.prototype.wireEvent = function (element) {\n this.keyboardModule = new KeyboardEvents(element, {\n keyAction: this.previewKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n EventHandler.add(this.previewElement, 'mousedown', this.mouseDownHandler, this);\n };\n ViewSource.prototype.unWireEvent = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n if (this.previewElement) {\n EventHandler.remove(this.previewElement, 'mousedown', this.mouseDownHandler);\n }\n };\n ViewSource.prototype.wireBaseKeyDown = function () {\n this.parent.keyboardModule = new KeyboardEvents(this.contentModule.getEditPanel(), {\n keyAction: this.parent.keyDown.bind(this.parent), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n };\n ViewSource.prototype.unWireBaseKeyDown = function () {\n this.parent.keyboardModule.destroy();\n };\n ViewSource.prototype.mouseDownHandler = function (e) {\n this.parent.notify(events.sourceCodeMouseDown, { args: e });\n };\n ViewSource.prototype.previewKeyDown = function (event) {\n switch (event.action) {\n case 'html-source':\n this.updateSourceCode(event);\n event.preventDefault();\n break;\n case 'toolbar-focus':\n if (this.parent.toolbarSettings.enable) {\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.parent.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n }\n };\n ViewSource.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'html-source':\n e.event.preventDefault();\n this.sourceCode(e);\n e.callBack({\n requestType: 'SourceCode',\n editorMode: 'HTML',\n event: e.event\n });\n break;\n }\n };\n /**\n * sourceCode method\n *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.sourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n if (isNullOrUndefined(this.previewElement)) {\n this.previewElement = this.getSourceCode();\n }\n this.parent.updateValueData();\n if (this.parent.iframeSettings.enable) {\n var rteContent = void 0;\n if (isNullOrUndefined(this.parent.element.querySelector('#' + this.parent.element.id + '_source-view'))) {\n rteContent = this.parent.createElement('div', {\n className: 'e-source-content', id: this.parent.element.id + '_source-view'\n });\n }\n else {\n rteContent = this.parent.element.querySelector('#' + this.parent.element.id + '_source-view');\n }\n rteContent.appendChild(this.previewElement);\n this.parent.element.appendChild(rteContent);\n rteContent.style.height = this.contentModule.getPanel().style.height;\n rteContent.style.marginTop = this.contentModule.getPanel().style.marginTop;\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getPanel().style.display = 'none';\n rteContent.style.display = 'block';\n this.getPanel().style.display = 'block';\n }\n else {\n this.contentModule.getPanel().appendChild(this.previewElement);\n this.getPanel().value = this.getTextAreaValue();\n this.contentModule.getEditPanel().style.display = 'none';\n this.previewElement.style.display = 'block';\n }\n this.parent.isBlur = false;\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n this.parent.enableToolbarItem('SourceCode');\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n removeClass(tbItems, [CLS_ACTIVE]);\n this.parent.setContentHeight('sourceCode', true);\n this.wireEvent(this.previewElement);\n this.unWireBaseKeyDown();\n this.previewElement.focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && !this.parent.iframeSettings.enable) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.e-rte-placeholder');\n placeHolderWrapper.style.display = 'none';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });\n this.parent.invokeChangeEvent();\n };\n /**\n * updateSourceCode method\n *\n * @param {ClickEventArgs} args - specifies the click event.\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.updateSourceCode = function (args) {\n this.parent.isBlur = false;\n this.parent.trigger(events.actionBegin, { requestType: 'Preview', targetItem: 'Preview', args: args });\n var editHTML = this.getPanel();\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'Preview', updateItem: 'SourceCode',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n var serializeValue = this.parent.serializeValue(editHTML.value);\n var value;\n if (serializeValue === null || serializeValue === '') {\n if (this.parent.enterKey === 'DIV') {\n value = '

';\n }\n else if (this.parent.enterKey === 'BR') {\n value = '
';\n }\n else {\n value = '


';\n }\n }\n else {\n value = serializeValue;\n }\n if (this.parent.iframeSettings.enable) {\n editHTML.parentElement.style.display = 'none';\n editHTML.style.display = 'none';\n this.contentModule.getPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n else {\n editHTML.style.display = 'none';\n this.contentModule.getEditPanel().style.display = 'block';\n this.contentModule.getEditPanel().innerHTML = value;\n }\n this.parent.isBlur = false;\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n if (this.parent.getToolbar()) {\n removeClass([this.parent.getToolbar()], [CLS_EXPAND_OPEN]);\n }\n this.parent.setContentHeight('preview', true);\n this.unWireEvent();\n this.wireBaseKeyDown();\n this.contentModule.getEditPanel().focus();\n this.parent.updateValue();\n if (!isNullOrUndefined(this.parent.placeholder) && this.contentModule.getEditPanel().innerText.length === 0) {\n var placeHolderWrapper = this.parent.element.querySelector('.rte-placeholder.e-rte-placeholder');\n placeHolderWrapper.style.display = 'block';\n }\n this.parent.trigger(events.actionComplete, { requestType: 'Preview', targetItem: 'Preview', args: args });\n this.parent.formatter.enableUndo(this.parent);\n this.parent.invokeChangeEvent();\n };\n ViewSource.prototype.getTextAreaValue = function () {\n return (this.contentModule.getEditPanel().innerHTML === '


') ||\n (this.contentModule.getEditPanel().innerHTML === '

') ||\n (this.contentModule.getEditPanel().innerHTML === '
') ||\n (this.contentModule.getEditPanel().childNodes.length === 1 &&\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'P' &&\n this.contentModule.getEditPanel().innerHTML.length === 7) ||\n (this.contentModule.getEditPanel().childNodes[0].tagName === 'DIV' &&\n this.contentModule.getEditPanel().innerHTML.length === 11)) ? '' : this.parent.value;\n };\n /**\n * getPanel method\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.getPanel = function () {\n return this.parent.element && this.parent.element.querySelector('.e-rte-srctextarea');\n };\n /**\n * getViewPanel method\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.getViewPanel = function () {\n return (this.parent.iframeSettings.enable && this.getPanel()) ? this.getPanel().parentElement : this.getPanel();\n };\n /**\n * Destroy the entire RichTextEditor.\n *\n * @returns {void}\n * @hidden\n\n */\n ViewSource.prototype.destroy = function () {\n this.removeEventListener();\n };\n return ViewSource;\n}());\nexport { ViewSource };\n","/**\n * @hidden\n\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: '
'\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: '
'\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","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","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 * Specifies the Ajax settings of the File Manager.\n */\nvar AjaxSettings = /** @class */ (function (_super) {\n __extends(AjaxSettings, _super);\n function AjaxSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"downloadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"getImageUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"uploadUrl\", void 0);\n __decorate([\n Property(null)\n ], AjaxSettings.prototype, \"url\", void 0);\n return AjaxSettings;\n}(ChildProperty));\nexport { AjaxSettings };\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';\nexport var fileItems = ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Download', 'Rename', '|', 'Details'];\nexport var folderItems = ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', 'Download', '|', 'Details'];\nexport var layoutItems = [\n 'SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'\n];\n/**\n * Specifies the ContextMenu settings of the File Manager.\n */\nvar ContextMenuSettings = /** @class */ (function (_super) {\n __extends(ContextMenuSettings, _super);\n function ContextMenuSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(fileItems)\n ], ContextMenuSettings.prototype, \"file\", void 0);\n __decorate([\n Property(folderItems)\n ], ContextMenuSettings.prototype, \"folder\", void 0);\n __decorate([\n Property(layoutItems)\n ], ContextMenuSettings.prototype, \"layout\", void 0);\n __decorate([\n Property(true)\n ], ContextMenuSettings.prototype, \"visible\", void 0);\n return ContextMenuSettings;\n}(ChildProperty));\nexport { ContextMenuSettings };\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 * Specifies the columns in the details view of the file manager.\n */\nexport var columnArray = [\n {\n field: 'name', headerText: 'Name', minWidth: 120,\n template: '${name}', customAttributes: { class: 'e-fe-grid-name' }\n },\n {\n field: '_fm_modified', headerText: 'DateModified', type: 'dateTime',\n format: 'MMMM dd, yyyy HH:mm', minWidth: 120, width: '190'\n },\n {\n field: 'size', headerText: 'Size', minWidth: 90, width: '110', template: '${size}'\n }\n];\n/**\n * Specifies the grid settings of the File Manager.\n */\nvar DetailsViewSettings = /** @class */ (function (_super) {\n __extends(DetailsViewSettings, _super);\n function DetailsViewSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], DetailsViewSettings.prototype, \"columnResizing\", void 0);\n __decorate([\n Property(columnArray)\n ], DetailsViewSettings.prototype, \"columns\", void 0);\n return DetailsViewSettings;\n}(ChildProperty));\nexport { DetailsViewSettings };\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 * Specifies the navigationpane settings of the File Manager.\n */\nvar NavigationPaneSettings = /** @class */ (function (_super) {\n __extends(NavigationPaneSettings, _super);\n function NavigationPaneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('650px')\n ], NavigationPaneSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('240px')\n ], NavigationPaneSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(true)\n ], NavigationPaneSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], NavigationPaneSettings.prototype, \"sortOrder\", void 0);\n return NavigationPaneSettings;\n}(ChildProperty));\nexport { NavigationPaneSettings };\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 * Specifies the Search settings of the File Manager.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n __extends(SearchSettings, _super);\n function SearchSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"allowSearchOnTyping\", void 0);\n __decorate([\n Property('contains')\n ], SearchSettings.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], SearchSettings.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(null)\n ], SearchSettings.prototype, \"placeholder\", void 0);\n return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\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';\nexport var toolbarItems = ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename',\n 'SortBy', 'Refresh', 'Selection', 'View', 'Details'];\n/**\n * Specifies the Toolbar settings of the FileManager.\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(toolbarItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"visible\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\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 * Specifies the Ajax settings of the File Manager.\n */\nvar UploadSettings = /** @class */ (function (_super) {\n __extends(UploadSettings, _super);\n function UploadSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], UploadSettings.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(true)\n ], UploadSettings.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(false)\n ], UploadSettings.prototype, \"autoClose\", void 0);\n __decorate([\n Property(0)\n ], UploadSettings.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], UploadSettings.prototype, \"maxFileSize\", void 0);\n return UploadSettings;\n}(ChildProperty));\nexport { UploadSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { AjaxSettings, ContextMenuSettings } from '@syncfusion/ej2-filemanager';\nimport { DetailsViewSettings, NavigationPaneSettings } from '@syncfusion/ej2-filemanager';\nimport { SearchSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarSettings as FileToolbarSettings } from '@syncfusion/ej2-filemanager';\nimport { UploadSettings } from '@syncfusion/ej2-filemanager';\nimport { ToolbarType } from '../base/enum';\nimport { backgroundColor, fontColor, fontFamily, fontSize, formatItems, predefinedItems, TableStyleItems, numberFormatList, bulletFormatList } from './items';\n/**\n * Configures the toolbar settings of the RichTextEditor.\n */\nvar ToolbarSettings = /** @class */ (function (_super) {\n __extends(ToolbarSettings, _super);\n function ToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], ToolbarSettings.prototype, \"enableFloating\", void 0);\n __decorate([\n Property(ToolbarType.Expand)\n ], ToolbarSettings.prototype, \"type\", void 0);\n __decorate([\n Property(predefinedItems)\n ], ToolbarSettings.prototype, \"items\", void 0);\n __decorate([\n Property({})\n ], ToolbarSettings.prototype, \"itemConfigs\", void 0);\n return ToolbarSettings;\n}(ChildProperty));\nexport { ToolbarSettings };\n/**\n * Configures the image settings of the RichTextEditor.\n */\nvar ImageSettings = /** @class */ (function (_super) {\n __extends(ImageSettings, _super);\n function ImageSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(['.jpeg', '.jpg', '.png'])\n ], ImageSettings.prototype, \"allowedTypes\", void 0);\n __decorate([\n Property('inline')\n ], ImageSettings.prototype, \"display\", void 0);\n __decorate([\n Property('Blob')\n ], ImageSettings.prototype, \"saveFormat\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], ImageSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"path\", void 0);\n __decorate([\n Property(true)\n ], ImageSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property(0)\n ], ImageSettings.prototype, \"minHeight\", void 0);\n __decorate([\n Property(null)\n ], ImageSettings.prototype, \"maxHeight\", void 0);\n __decorate([\n Property(false)\n ], ImageSettings.prototype, \"resizeByPercent\", void 0);\n return ImageSettings;\n}(ChildProperty));\nexport { ImageSettings };\n/**\n * Configures the file manager settings of the RichTextEditor.\n */\nvar FileManagerSettings = /** @class */ (function (_super) {\n __extends(FileManagerSettings, _super);\n function FileManagerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ getImageUrl: null, url: null, uploadUrl: null }, AjaxSettings)\n ], FileManagerSettings.prototype, \"ajaxSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Complex({ visible: true, file: ['Open', '|', 'Cut', 'Copy', '|', 'Delete', 'Rename', '|', 'Details'], folder: ['Open', '|', 'Cut', 'Copy', 'Paste', '|', 'Delete', 'Rename', '|', 'Details'], layout: ['SortBy', 'View', 'Refresh', '|', 'Paste', '|', 'NewFolder', 'Upload', '|', 'Details', '|', 'SelectAll'] }, ContextMenuSettings)\n ], FileManagerSettings.prototype, \"contextMenuSettings\", void 0);\n __decorate([\n Property('')\n ], FileManagerSettings.prototype, \"cssClass\", void 0);\n __decorate([\n Complex({}, DetailsViewSettings)\n ], FileManagerSettings.prototype, \"detailsViewSettings\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"enable\", void 0);\n __decorate([\n Complex({ maxWidth: '650px', minWidth: '240px', visible: true }, NavigationPaneSettings)\n ], FileManagerSettings.prototype, \"navigationPaneSettings\", void 0);\n __decorate([\n Property('/')\n ], FileManagerSettings.prototype, \"path\", void 0);\n __decorate([\n Property(null)\n ], FileManagerSettings.prototype, \"rootAliasName\", void 0);\n __decorate([\n Complex({}, SearchSettings)\n ], FileManagerSettings.prototype, \"searchSettings\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showFileExtension\", void 0);\n __decorate([\n Property(false)\n ], FileManagerSettings.prototype, \"showHiddenItems\", void 0);\n __decorate([\n Property(true)\n ], FileManagerSettings.prototype, \"showThumbnail\", void 0);\n __decorate([\n Property('Ascending')\n ], FileManagerSettings.prototype, \"sortOrder\", void 0);\n __decorate([\n Complex({ visible: true, items: ['NewFolder', 'Upload', 'Cut', 'Copy', 'Paste', 'Delete', 'Download', 'Rename', 'SortBy', 'Refresh', 'Selection', 'View', 'Details'] }, FileToolbarSettings)\n ], FileManagerSettings.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({ autoUpload: true, minFileSize: 0, maxFileSize: 30000000, allowedExtensions: '', autoClose: false }, UploadSettings)\n ], FileManagerSettings.prototype, \"uploadSettings\", void 0);\n __decorate([\n Property('LargeIcons')\n ], FileManagerSettings.prototype, \"view\", void 0);\n return FileManagerSettings;\n}(ChildProperty));\nexport { FileManagerSettings };\nvar TableSettings = /** @class */ (function (_super) {\n __extends(TableSettings, _super);\n function TableSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('100%')\n ], TableSettings.prototype, \"width\", void 0);\n __decorate([\n Property(TableStyleItems)\n ], TableSettings.prototype, \"styles\", void 0);\n __decorate([\n Property(true)\n ], TableSettings.prototype, \"resize\", void 0);\n __decorate([\n Property(0)\n ], TableSettings.prototype, \"minWidth\", void 0);\n __decorate([\n Property(null)\n ], TableSettings.prototype, \"maxWidth\", void 0);\n return TableSettings;\n}(ChildProperty));\nexport { TableSettings };\n/**\n * Configures the quick toolbar settings of the RichTextEditor.\n */\nvar QuickToolbarSettings = /** @class */ (function (_super) {\n __extends(QuickToolbarSettings, _super);\n function QuickToolbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], QuickToolbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], QuickToolbarSettings.prototype, \"showOnRightClick\", void 0);\n __decorate([\n Property('hide')\n ], QuickToolbarSettings.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(['Open', 'Edit', 'UnLink'])\n ], QuickToolbarSettings.prototype, \"link\", void 0);\n __decorate([\n Property(['Replace', 'Align', 'Caption', 'Remove', '-', 'InsertLink', 'OpenImageLink', 'EditImageLink', 'RemoveImageLink', 'Display', 'AltText', 'Dimension'])\n ], QuickToolbarSettings.prototype, \"image\", void 0);\n __decorate([\n Property(['Cut', 'Copy', 'Paste'])\n ], QuickToolbarSettings.prototype, \"text\", void 0);\n __decorate([\n Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])\n ], QuickToolbarSettings.prototype, \"table\", void 0);\n return QuickToolbarSettings;\n}(ChildProperty));\nexport { QuickToolbarSettings };\n/**\n * Configures the Paste Cleanup settings of the RichTextEditor.\n */\nvar PasteCleanupSettings = /** @class */ (function (_super) {\n __extends(PasteCleanupSettings, _super);\n function PasteCleanupSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"prompt\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedAttrs\", void 0);\n __decorate([\n Property(['background', 'background-color', 'border', 'border-bottom', 'border-left', 'border-radius', 'border-right', 'border-style', 'border-top', 'border-width', 'clear', 'color', 'cursor', 'direction', 'display', 'float', 'font', 'font-family', 'font-size', 'font-weight', 'font-style', 'height', 'left', 'line-height', 'list-style-type', 'margin', 'margin-top', 'margin-left', 'margin-right', 'margin-bottom', 'max-height', 'max-width', 'min-height', 'min-width', 'overflow', 'overflow-x', 'overflow-y', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'position', 'right', 'table-layout', 'text-align', 'text-decoration', 'text-indent', 'top', 'vertical-align', 'visibility', 'white-space', 'width'])\n ], PasteCleanupSettings.prototype, \"allowedStyleProps\", void 0);\n __decorate([\n Property(null)\n ], PasteCleanupSettings.prototype, \"deniedTags\", void 0);\n __decorate([\n Property(true)\n ], PasteCleanupSettings.prototype, \"keepFormat\", void 0);\n __decorate([\n Property(false)\n ], PasteCleanupSettings.prototype, \"plainText\", void 0);\n return PasteCleanupSettings;\n}(ChildProperty));\nexport { PasteCleanupSettings };\n/**\n * Configures the font family settings of the RichTextEditor.\n */\nvar FontFamily = /** @class */ (function (_super) {\n __extends(FontFamily, _super);\n function FontFamily() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontFamily.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], FontFamily.prototype, \"width\", void 0);\n __decorate([\n Property(fontFamily)\n ], FontFamily.prototype, \"items\", void 0);\n return FontFamily;\n}(ChildProperty));\nexport { FontFamily };\n/**\n * Configures the font size settings of the RichTextEditor.\n */\nvar FontSize = /** @class */ (function (_super) {\n __extends(FontSize, _super);\n function FontSize() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FontSize.prototype, \"default\", void 0);\n __decorate([\n Property('35px')\n ], FontSize.prototype, \"width\", void 0);\n __decorate([\n Property(fontSize)\n ], FontSize.prototype, \"items\", void 0);\n return FontSize;\n}(ChildProperty));\nexport { FontSize };\n/**\n * Configures the format settings of the RichTextEditor.\n */\nvar Format = /** @class */ (function (_super) {\n __extends(Format, _super);\n function Format() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], Format.prototype, \"default\", void 0);\n __decorate([\n Property('65px')\n ], Format.prototype, \"width\", void 0);\n __decorate([\n Property(formatItems)\n ], Format.prototype, \"types\", void 0);\n return Format;\n}(ChildProperty));\nexport { Format };\n/**\n * Configures the font Color settings of the RichTextEditor.\n */\nvar FontColor = /** @class */ (function (_super) {\n __extends(FontColor, _super);\n function FontColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ff0000')\n ], FontColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], FontColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], FontColor.prototype, \"columns\", void 0);\n __decorate([\n Property(fontColor)\n ], FontColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], FontColor.prototype, \"modeSwitcher\", void 0);\n return FontColor;\n}(ChildProperty));\nexport { FontColor };\n/**\n * Configures the background Color settings of the RichTextEditor.\n */\nvar BackgroundColor = /** @class */ (function (_super) {\n __extends(BackgroundColor, _super);\n function BackgroundColor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#ffff00')\n ], BackgroundColor.prototype, \"default\", void 0);\n __decorate([\n Property('Palette')\n ], BackgroundColor.prototype, \"mode\", void 0);\n __decorate([\n Property(10)\n ], BackgroundColor.prototype, \"columns\", void 0);\n __decorate([\n Property(backgroundColor)\n ], BackgroundColor.prototype, \"colorCode\", void 0);\n __decorate([\n Property(false)\n ], BackgroundColor.prototype, \"modeSwitcher\", void 0);\n return BackgroundColor;\n}(ChildProperty));\nexport { BackgroundColor };\n/**\n * Configures the numberFormatList settings of the RichTextEditor.\n */\nvar NumberFormatList = /** @class */ (function (_super) {\n __extends(NumberFormatList, _super);\n function NumberFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(numberFormatList)\n ], NumberFormatList.prototype, \"types\", void 0);\n return NumberFormatList;\n}(ChildProperty));\nexport { NumberFormatList };\n/**\n * Configures the bulletFormatList settings of the RichTextEditor.\n */\nvar BulletFormatList = /** @class */ (function (_super) {\n __extends(BulletFormatList, _super);\n function BulletFormatList() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(bulletFormatList)\n ], BulletFormatList.prototype, \"types\", void 0);\n return BulletFormatList;\n}(ChildProperty));\nexport { BulletFormatList };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex } from '@syncfusion/ej2-base';\n/**\n * Objects used for configuring the iframe resources properties.\n */\nvar Resources = /** @class */ (function (_super) {\n __extends(Resources, _super);\n function Resources() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property([])\n ], Resources.prototype, \"styles\", void 0);\n __decorate([\n Property([])\n ], Resources.prototype, \"scripts\", void 0);\n return Resources;\n}(ChildProperty));\nexport { Resources };\n/**\n * Configures the iframe settings of the RTE.\n */\nvar IFrameSettings = /** @class */ (function (_super) {\n __extends(IFrameSettings, _super);\n function IFrameSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], IFrameSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], IFrameSettings.prototype, \"attributes\", void 0);\n __decorate([\n Complex({}, Resources)\n ], IFrameSettings.prototype, \"resources\", void 0);\n return IFrameSettings;\n}(ChildProperty));\nexport { IFrameSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the inlineMode property of the RTE.\n */\nvar InlineMode = /** @class */ (function (_super) {\n __extends(InlineMode, _super);\n function InlineMode() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], InlineMode.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], InlineMode.prototype, \"onSelection\", void 0);\n return InlineMode;\n}(ChildProperty));\nexport { InlineMode };\n","/**\n * @param {string} htmlAttributes - specifies the string value\n * @param {IRichTextEditor} rte - specifies the rte value\n * @param {boolean} isFrame - specifies the boolean value\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\n * @hidden\n */\nexport function setAttributes(htmlAttributes, rte, isFrame, initial) {\n var target;\n if (isFrame) {\n var iFrame = rte.contentModule.getDocument();\n target = iFrame.querySelector('body');\n }\n else {\n target = rte.element;\n }\n if (Object.keys(htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n target.classList.add(htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {\n rte.enabled = false;\n rte.setEnable();\n }\n else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {\n rte.readonly = true;\n rte.setReadOnly(initial);\n }\n else if (htmlAttr === 'style') {\n target.setAttribute('style', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'tabindex') {\n rte.inputElement.setAttribute('tabindex', htmlAttributes[htmlAttr]);\n }\n else if (htmlAttr === 'placeholder') {\n rte.placeholder = htmlAttributes[htmlAttr];\n rte.setPlaceHolder();\n }\n else {\n var validateAttr = ['name', 'required'];\n if (validateAttr.indexOf(htmlAttr) > -1) {\n rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n else {\n target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);\n }\n }\n }\n }\n}\n","import { Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\n/**\n * `FullScreen` module is used to maximize and minimize screen\n */\nvar FullScreen = /** @class */ (function () {\n function FullScreen(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n /**\n * showFullScreen method\n *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n\n */\n FullScreen.prototype.showFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n this.scrollableParent = getScrollableParent(this.parent.element);\n if (!this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n var evenArgs = {\n cancel: false,\n requestType: 'Maximize',\n targetItem: 'Maximize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\n if (_this.parent.toolbarSettings.enableFloating &&\n !_this.parent.inlineMode.enable && _this.parent.toolbarSettings.enable) {\n _this.parent.getToolbarElement().style.width = '100%';\n _this.parent.getToolbarElement().style.top = '0px';\n }\n _this.parent.element.classList.add(classes.CLS_FULL_SCREEN);\n _this.toggleParentOverflow(true);\n _this.parent.setContentHeight();\n if (_this.parent.toolbarModule) {\n if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n if (Browser.isDevice) {\n _this.parent.toolbarModule.removeFixedTBarClass();\n }\n _this.parent.toolbarModule.updateItem({\n targetItem: 'Maximize',\n updateItem: 'Minimize',\n baseToolbar: _this.parent.getBaseToolbarObject()\n });\n }\n _this.parent.trigger(events.actionComplete, { requestType: 'Maximize', targetItem: 'Maximize', args: event });\n }\n });\n }\n };\n /**\n * hideFullScreen method\n *\n * @param {MouseEvent} event - specifies the mouse event\n * @returns {void}\n * @hidden\n\n */\n FullScreen.prototype.hideFullScreen = function (event) {\n var _this = this;\n if (this.parent.toolbarSettings.enable === true && this.parent.editorMode !== 'Markdown'\n && !isNOU(this.parent.quickToolbarModule)) {\n this.parent.quickToolbarModule.hideQuickToolbars();\n }\n if (this.parent.element.classList.contains(classes.CLS_FULL_SCREEN)) {\n var evenArgs = {\n cancel: false,\n requestType: 'Minimize',\n targetItem: 'Minimize',\n args: event\n };\n this.parent.trigger(events.actionBegin, evenArgs, function (beginEventArgs) {\n if (!beginEventArgs.cancel) {\n _this.parent.element.classList.remove(classes.CLS_FULL_SCREEN);\n var elem = document.querySelectorAll('.e-rte-overflow');\n for (var i = 0; i < elem.length; i++) {\n removeClass([elem[i]], ['e-rte-overflow']);\n }\n _this.parent.setContentHeight();\n if (_this.parent.toolbarModule) {\n if (!_this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {\n _this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);\n }\n _this.parent.toolbarModule.updateItem({\n targetItem: 'Minimize',\n updateItem: 'Maximize',\n baseToolbar: _this.parent.getBaseToolbarObject()\n });\n if (Browser.isDevice && _this.parent.inlineMode.enable) {\n _this.parent.toolbarModule.addFixedTBarClass();\n }\n }\n _this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });\n }\n });\n }\n };\n // eslint-disable-next-line\n FullScreen.prototype.toggleParentOverflow = function (isAdd) {\n if (isNOU(this.scrollableParent)) {\n return;\n }\n for (var i = 0; i < this.scrollableParent.length; i++) {\n if (this.scrollableParent[i].nodeName === '#document') {\n var elem = document.querySelector('body');\n addClass([elem], ['e-rte-overflow']);\n }\n else {\n var elem = this.scrollableParent[i];\n addClass([elem], ['e-rte-overflow']);\n }\n }\n };\n FullScreen.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n switch (originalEvent.action) {\n case 'full-screen':\n this.showFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n case 'escape':\n this.hideFullScreen(event.args);\n originalEvent.preventDefault();\n break;\n }\n };\n FullScreen.prototype.addEventListener = function () {\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n FullScreen.prototype.removeEventListener = function () {\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.destroy, this.destroy);\n };\n /**\n * destroy method\n *\n * @returns {void}\n * @hidden\n\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 { isNullOrUndefined as isNOU, detach, Browser } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `EnterKey` module is used to handle enter key press actions.\n */\nvar EnterKeyAction = /** @class */ (function () {\n function EnterKeyAction(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n EnterKeyAction.prototype.addEventListener = function () {\n this.parent.on(events.enterHandler, this.enterHandler, this);\n this.parent.on(events.destroy, this.destroy, this);\n };\n EnterKeyAction.prototype.destroy = function () {\n this.removeEventListener();\n };\n EnterKeyAction.prototype.removeEventListener = function () {\n this.parent.off(events.enterHandler, this.enterHandler);\n this.parent.off(events.destroy, this.destroy);\n };\n EnterKeyAction.prototype.getRangeNode = function () {\n this.range = this.parent.getRange();\n this.startNode = this.range.startContainer.nodeName === '#text' ? this.range.startContainer.parentElement :\n this.range.startContainer;\n this.endNode = this.range.endContainer.nodeName === '#text' ? this.range.endContainer.parentElement :\n this.range.endContainer;\n };\n EnterKeyAction.prototype.enterHandler = function (e) {\n var _this = this;\n this.getRangeNode();\n var isTableEnter = true;\n if (!isNOU(this.startNode.closest('TABLE')) && !isNOU(this.endNode.closest('TABLE'))) {\n isTableEnter = false;\n var curElement = this.startNode;\n var blockElement = curElement;\n while (!this.parent.formatter.editorManager.domNode.isBlockNode(curElement)) {\n blockElement = curElement;\n curElement = curElement.parentElement;\n }\n isTableEnter = blockElement.tagName === 'TD' ? false : true;\n }\n if (e.args.which === 13 && e.args.code === 'Enter') {\n if (isNOU(this.startNode.closest('LI')) && isNOU(this.endNode.closest('LI')) && isTableEnter &&\n isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE'))) {\n var shiftKey_1 = e.args.shiftKey;\n var actionBeginArgs = {\n cancel: false,\n name: events.actionBegin,\n requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction',\n originalEvent: e.args\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {\n _this.range.deleteContents();\n if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&\n _this.range.startContainer.parentElement !== _this.parent.inputElement) {\n if (_this.parent.enterKey === 'BR') {\n _this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n _this.range.startContainer.parentElement.innerHTML = '
';\n }\n }\n else if (_this.range.startContainer === _this.parent.inputElement && _this.range.startContainer.innerHTML === '') {\n _this.range.startContainer.innerHTML = '
';\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);\n }\n else if (_this.parent.inputElement === _this.range.startContainer) {\n var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];\n if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.previousSibling.textContent.length);\n }\n else {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);\n if (focusElem.previousSibling.textContent.length === 0) {\n detach(focusElem.previousSibling);\n }\n else if (focusElem.textContent.length === 0) {\n var currentFocusElem = focusElem.previousSibling.lastChild;\n while (currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);\n detach(focusElem);\n }\n else if (_this.parent.enterKey !== 'BR' &&\n focusElem.previousSibling.textContent.length !== 0 && focusElem.textContent.length !== 0) {\n e.args.preventDefault();\n return;\n }\n }\n _this.getRangeNode();\n }\n }\n if (_this.range.startContainer === _this.range.endContainer &&\n _this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);\n _this.getRangeNode();\n }\n if ((_this.parent.enterKey === 'P' && !shiftKey_1) || (_this.parent.enterKey === 'DIV' && !shiftKey_1) ||\n (_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||\n (_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {\n var nearBlockNode = void 0;\n if (isTableEnter && _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {\n nearBlockNode = _this.startNode;\n }\n else {\n nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);\n }\n var isImageNode = false;\n var isFocusedFirst = false;\n if (_this.range.startOffset != 0 && _this.range.endOffset != 0 && _this.range.startContainer === _this.range.endContainer &&\n !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {\n var startNodeText = _this.range.startContainer.textContent;\n var splitFirstText = startNodeText.substring(0, _this.range.startOffset);\n if (splitFirstText.charCodeAt(_this.range.startOffset - 1) != 160 && splitFirstText.trim().length === 0) {\n isFocusedFirst = true;\n }\n }\n else if (_this.range.startOffset === 0 && _this.range.endOffset === 0) {\n isFocusedFirst = true;\n }\n _this.removeBRElement(nearBlockNode);\n if (((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&\n !(!isNOU(_this.range.startContainer.previousSibling) &&\n (_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {\n var isNearBlockLengthZero = void 0;\n var newElem = void 0;\n if (_this.range.startContainer.nodeName === 'IMG') {\n newElem = _this.createInsertElement(shiftKey_1);\n isImageNode = true;\n isNearBlockLengthZero = false;\n }\n else {\n if (nearBlockNode.textContent.trim().length !== 0) {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n isNearBlockLengthZero = false;\n }\n else {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);\n isNearBlockLengthZero = true;\n }\n }\n var insertElem = _this.createInsertElement(shiftKey_1);\n while (newElem.firstChild) {\n insertElem.appendChild(newElem.firstChild);\n }\n nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);\n if (!isNearBlockLengthZero) {\n var currentFocusElem = insertElem;\n var finalFocusElem = void 0;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n finalFocusElem = currentFocusElem;\n currentFocusElem = currentFocusElem.lastChild;\n }\n finalFocusElem.innerHTML = '
';\n if (!isImageNode) {\n detach(nearBlockNode);\n }\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);\n }\n else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {\n if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);\n }\n else {\n var insertElem = _this.createInsertElement(shiftKey_1);\n insertElem.innerHTML = '
';\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);\n }\n }\n else {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);\n if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&\n newElem.childNodes[0].textContent.length === 0) {\n detach(newElem.childNodes[0]);\n }\n if (newElem.textContent.trim().length === 0) {\n var brElm = _this.parent.createElement('br');\n if (_this.startNode.nodeName === 'A') {\n var startParentElem = _this.startNode.parentElement;\n _this.startNode.parentElement.insertBefore(brElm, _this.startNode);\n detach(_this.startNode);\n _this.startNode = startParentElem;\n }\n else {\n _this.startNode.appendChild(brElm);\n }\n if (newElem.childNodes[0].textContent === '\\n') {\n detach(newElem.childNodes[0]);\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);\n }\n if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||\n _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {\n var insertElm = _this.createInsertElement(shiftKey_1);\n while (newElem.firstChild) {\n insertElm.appendChild(newElem.firstChild);\n }\n _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);\n detach(newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode) ?\n insertElm : _this.startNode, 0);\n }\n }\n e.args.preventDefault();\n }\n if ((_this.parent.enterKey === 'BR' && !shiftKey_1) || (_this.parent.shiftEnterKey === 'BR' && shiftKey_1)) {\n var currentParent = void 0;\n if (!_this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {\n var currentNode = _this.startNode;\n var previousNode = currentNode;\n while (!_this.parent.formatter.editorManager.domNode.isBlockNode(currentNode)) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n currentParent = currentNode === _this.parent.inputElement ?\n previousNode : currentNode;\n }\n else {\n currentParent = _this.startNode;\n }\n _this.removeBRElement(currentParent);\n var isEmptyBrInserted = false;\n var currentParentLastChild = currentParent.lastChild;\n while (!isNOU(currentParentLastChild) && !(currentParentLastChild.nodeName === '#text' || currentParentLastChild.nodeName === 'BR')) {\n currentParentLastChild = currentParentLastChild.lastChild;\n }\n var isLastNodeLength = _this.range.startContainer === currentParentLastChild ?\n _this.range.startContainer.textContent.length : currentParent.textContent.length;\n if (currentParent !== _this.parent.inputElement &&\n _this.parent.formatter.editorManager.domNode.isBlockNode(currentParent) &&\n _this.range.startOffset === _this.range.endOffset &&\n _this.range.startOffset === isLastNodeLength) {\n var focusBRElem = _this.parent.createElement('br');\n if (currentParentLastChild.nodeName === 'BR' && currentParent.textContent.length === 0) {\n _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, currentParentLastChild);\n }\n else {\n var lineBreakBRElem = _this.parent.createElement('br');\n _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, _this.range.startContainer);\n _this.parent.formatter.editorManager.domNode.insertAfter(lineBreakBRElem, _this.range.startContainer);\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusBRElem, 0);\n }\n else if (!isNOU(currentParent) && currentParent !== _this.parent.inputElement && currentParent.nodeName !== 'BR') {\n if (currentParent.textContent.trim().length === 0 || (currentParent.textContent.trim().length === 1 &&\n currentParent.textContent.charCodeAt(0) === 8203)) {\n var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(newElem, currentParent);\n var outerBRElem = _this.parent.createElement('br');\n newElem.parentElement.insertBefore(outerBRElem, newElem);\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);\n }\n else {\n var newElem = void 0;\n var outerBRElem = _this.parent.createElement('br');\n if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&\n !isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR') {\n newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);\n _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);\n _this.insertFocusContent();\n var currentFocusElem = outerBRElem.nextSibling;\n while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {\n currentFocusElem = currentFocusElem.lastChild;\n }\n _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, 0);\n isEmptyBrInserted = true;\n }\n else {\n _this.insertBRElement();\n }\n }\n }\n else {\n _this.insertBRElement();\n }\n e.args.preventDefault();\n }\n _this.parent.trigger(events.actionComplete, { requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction', args: e.args });\n }\n });\n }\n }\n };\n EnterKeyAction.prototype.removeBRElement = function (currentElement) {\n if (Browser.userAgent.indexOf('Firefox') != -1 &&\n this.range.endOffset === currentElement.textContent.length &&\n currentElement.lastChild.nodeName === 'BR') {\n detach(currentElement.lastChild);\n }\n };\n EnterKeyAction.prototype.insertBRElement = function () {\n var isEmptyBrInserted = false;\n var brElm = this.parent.createElement('br');\n if (this.startNode.nodeName === 'BR' && this.endNode.nodeName === 'BR' && this.range.startOffset === 0 && this.range.startOffset === this.range.endOffset) {\n this.parent.formatter.editorManager.domNode.insertAfter(brElm, this.startNode);\n isEmptyBrInserted = true;\n }\n else {\n if (this.startNode === this.parent.inputElement && !isNOU(this.range.startContainer.previousSibling) &&\n this.range.startContainer.previousSibling.nodeName === 'BR' && this.range.startContainer.textContent.length === 0) {\n isEmptyBrInserted = true;\n }\n this.range.insertNode(brElm);\n }\n if (isEmptyBrInserted || (!isNOU(brElm.nextElementSibling) && brElm.nextElementSibling.tagName === 'BR') || (!isNOU(brElm.nextSibling) && brElm.nextSibling.textContent.length > 0)) {\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) ? brElm.nextSibling : brElm, 0);\n isEmptyBrInserted = false;\n }\n else {\n var brElm2 = this.parent.createElement('br');\n this.range.insertNode(brElm2);\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), brElm, 0);\n }\n };\n EnterKeyAction.prototype.insertFocusContent = function () {\n if (this.range.startContainer.textContent.length === 0) {\n if (this.range.startContainer.nodeName === '#text') {\n this.range.startContainer.parentElement.innerHTML = '​';\n }\n else {\n this.range.startContainer.innerHTML = '​';\n }\n }\n };\n EnterKeyAction.prototype.createInsertElement = function (shiftKey) {\n var insertElem;\n if ((this.parent.enterKey === 'DIV' && !shiftKey) || (this.parent.shiftEnterKey === 'DIV' && shiftKey)) {\n insertElem = this.parent.createElement('div');\n }\n else if ((this.parent.enterKey === 'P' && !shiftKey) || (this.parent.shiftEnterKey === 'P' && shiftKey)) {\n insertElem = this.parent.createElement('p');\n }\n return insertElem;\n };\n return EnterKeyAction;\n}());\nexport { EnterKeyAction };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * Dialog Renderer\n */\nvar DialogRenderer = /** @class */ (function () {\n function DialogRenderer(parent) {\n this.parent = parent;\n }\n /**\n * dialog render method\n *\n * @param {DialogModel} e - specifies the dialog model.\n * @returns {void}\n * @hidden\n\n */\n DialogRenderer.prototype.render = function (e) {\n var dlgObj;\n e.beforeOpen = this.beforeOpen.bind(this);\n e.open = this.open.bind(this);\n if (isNOU(e.close)) {\n e.close = this.close.bind(this);\n }\n e.beforeClose = this.beforeClose.bind(this);\n // eslint-disable-next-line\n dlgObj = new Dialog(e);\n dlgObj.isStringTemplate = true;\n return dlgObj;\n };\n DialogRenderer.prototype.beforeOpen = function (args) {\n this.parent.trigger(events.beforeDialogOpen, args, this.beforeOpenCallback.bind(this, args));\n };\n DialogRenderer.prototype.beforeOpenCallback = function (args) {\n if (args.cancel) {\n this.parent.notify(events.clearDialogObj, null);\n }\n };\n DialogRenderer.prototype.open = function (args) {\n this.parent.trigger(events.dialogOpen, args);\n };\n DialogRenderer.prototype.beforeClose = function (args) {\n this.parent.trigger(events.beforeDialogClose, args, function (closeArgs) {\n if (!closeArgs.cancel) {\n if (closeArgs.container.classList.contains('e-popup-close')) {\n closeArgs.cancel = true;\n }\n }\n });\n };\n /**\n * dialog close method\n *\n * @param {Object} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n DialogRenderer.prototype.close = function (args) {\n this.parent.trigger(events.dialogClose, args);\n };\n return DialogRenderer;\n}());\nexport { DialogRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Complex, Browser, addClass, select, detach } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, formatUnit, L10n, closest } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, Event, removeClass, print as printWindow, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, compile, append, extend, debounce } from '@syncfusion/ej2-base';\nimport { Touch as EJ2Touch } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Render } from '../renderer/render';\nimport { ViewSource } from '../renderer/view-source';\nimport { executeGroup } from './interface';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { RenderType, ToolbarType, DialogType } from './enum';\nimport { ExecCommandCallBack } from '../actions/execute-command-callback';\nimport { KeyboardEvents } from '../actions/keyboard';\nimport { ToolbarSettings, ImageSettings, QuickToolbarSettings, FontFamily, FontSize, Format, NumberFormatList, BulletFormatList } from '../models/toolbar-settings';\nimport { FileManagerSettings } from '../models/toolbar-settings';\nimport { TableSettings, PasteCleanupSettings } from '../models/toolbar-settings';\nimport { FontColor, BackgroundColor } from '../models/toolbar-settings';\nimport { IFrameSettings } from '../models/iframe-settings';\nimport { InlineMode } from '../models/inline-mode';\nimport { defaultLocale } from '../models/default-locale';\nimport { setAttributes } from '../actions/html-attributes';\nimport { FullScreen } from '../actions/full-screen';\nimport { EnterKeyAction } from '../actions/enter-key';\nimport * as CONSTANT from '../../common/constant';\nimport { dispatchEvent, getEditValue, isIDevice, decode, isEditableValueEmpty, getDefaultValue } from '../base/util';\nimport { DialogRenderer } from '../renderer/dialog-renderer';\n/**\n * Represents the Rich Text Editor component.\n * ```html\n * \n * \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\n */\n _this.isFocusOut = false;\n /**\n * @hidden\n\n */\n _this.isRTE = false;\n /**\n * @hidden\n\n */\n _this.isBlur = true;\n _this.needsID = true;\n return _this;\n }\n /**\n * To provide the array of modules needed for component rendering\n *\n * @returns {ModuleDeclaration[]} - specifies the declaration.\n * @hidden\n\n */\n RichTextEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.toolbarSettings.enable) {\n modules.push({ member: 'toolbar', args: [this, this.serviceLocator] });\n modules.push({\n member: 'link',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'table',\n args: [this, this.serviceLocator]\n });\n modules.push({\n member: 'image',\n args: [this, this.serviceLocator]\n });\n if (this.quickToolbarSettings.enable) {\n modules.push({ member: 'quickToolbar', args: [this, this.serviceLocator] });\n }\n }\n if (this.showCharCount) {\n modules.push({ member: 'count', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'Markdown') {\n modules.push({ member: 'markdownEditor', args: [this, this.serviceLocator] });\n }\n if (this.editorMode === 'HTML') {\n modules.push({ member: 'htmlEditor', args: [this, this.serviceLocator] });\n modules.push({ member: 'pasteCleanup', args: [this, this.serviceLocator] });\n }\n if (this.fileManagerSettings.enable) {\n modules.push({ member: 'fileManager', args: [this, this.serviceLocator] });\n }\n if (this.enableResize) {\n modules.push({ member: 'resize', args: [this] });\n }\n return modules;\n };\n RichTextEditor.prototype.updateEnable = function () {\n if (this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n this.element.setAttribute('aria-disabled', 'false');\n if (!isNOU(this.htmlAttributes.tabindex)) {\n this.inputElement.setAttribute('tabindex', this.htmlAttributes.tabindex);\n }\n else {\n this.inputElement.setAttribute('tabindex', '0');\n }\n }\n else {\n if (this.getToolbar()) {\n removeClass(this.getToolbar().querySelectorAll('.' + classes.CLS_ACTIVE), classes.CLS_ACTIVE);\n removeClass([this.getToolbar()], [classes.CLS_TB_FLOAT, classes.CLS_TB_ABS_FLOAT]);\n }\n addClass([this.element], classes.CLS_DISABLED);\n this.element.tabIndex = -1;\n this.element.setAttribute('aria-disabled', 'true');\n this.inputElement.setAttribute('tabindex', '-1');\n }\n };\n /**\n * setEnable method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setEnable = function () {\n this.updateEnable();\n // eslint-disable-next-line\n (this.enabled) ? this.eventInitializer() : this.unWireEvents();\n };\n /**\n * For internal use only - Initialize the event handler;\n *\n * @returns {void}\n * @hidden\n * @private\n */\n RichTextEditor.prototype.preRender = function () {\n this.onBlurHandler = this.blurHandler.bind(this);\n this.onFocusHandler = this.focusHandler.bind(this);\n this.onResizeHandler = this.resizeHandler.bind(this);\n this.clickPoints = { clientX: 0, clientY: 0 };\n this.initialValue = this.value;\n this.serviceLocator = new ServiceLocator;\n this.initializeServices();\n this.setContainer();\n this.persistData();\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n attributes(this.element, { role: 'application' });\n };\n RichTextEditor.prototype.persistData = function () {\n if (this.enablePersistence && this.originalElement.tagName === 'TEXTAREA') {\n this.element.id = this.originalElement.id + '_wrapper';\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNOU(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n }\n };\n RichTextEditor.prototype.setContainer = function () {\n this.originalElement = this.element.cloneNode(true);\n if (this.value === null || this.valueTemplate !== null) {\n this.setValue();\n }\n if (this.element.hasAttribute('tabindex')) {\n this.htmlAttributes = { 'tabindex': this.element.getAttribute('tabindex') };\n this.element.removeAttribute('tabindex');\n }\n this.element.innerHTML = '';\n var invalidAttr = ['class', 'style', 'id', 'ejs-for'];\n var htmlAttr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(/^data-val/.test(this.element.attributes[a].name))) { // data-val for asp.net core data annotation validation.\n htmlAttr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(htmlAttr, this.htmlAttributes, htmlAttr);\n this.setProperties({ htmlAttributes: htmlAttr }, true);\n if (!isNOU(this.htmlAttributes.id)) {\n this.element.id = this.htmlAttributes.id;\n }\n if (this.element.tagName === 'TEXTAREA') {\n var rteOuterWrapper = this.createElement('div', {\n className: this.element.getAttribute('class')\n });\n this.element.innerHTML = '';\n this.element.parentElement.insertBefore(rteOuterWrapper, this.element);\n this.valueContainer = this.element;\n removeClass([this.valueContainer], this.element.getAttribute('class').split(' '));\n this.element = rteOuterWrapper;\n }\n else {\n this.valueContainer = this.createElement('textarea', {\n id: this.getID() + '-value'\n });\n }\n this.valueContainer.name = this.getID();\n addClass([this.valueContainer], classes.CLS_RTE_HIDDEN);\n this.element.appendChild(this.valueContainer);\n };\n /**\n * getPersistData method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n /**\n * Focuses the Rich Text Editor component\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.focusIn = function () {\n if (this.enabled) {\n this.inputElement.focus();\n this.focusHandler({});\n }\n };\n /**\n * Blurs the Rich Text Editor component\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.focusOut = function () {\n if (this.enabled) {\n this.inputElement.blur();\n this.blurHandler({});\n }\n };\n /**\n * Selects all the content in RichTextEditor\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.selectAll = function () {\n this.notify(events.selectAll, {});\n };\n /**\n * Selects a content range or an element\n *\n * @param {Range} range - Specify the range which you want to select within the content.\n * The method used to select a particular sentence or word or entire document.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.selectRange = function (range) {\n this.notify(events.selectRange, { range: range });\n };\n /**\n * Retrieves the HTML markup content from currently selected content of RichTextEditor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getSelection = function () {\n var str = '';\n this.notify(events.getSelectedHtml, {\n callBack: function (txt) {\n str = txt;\n }\n });\n return str;\n };\n /**\n * Executes the commands\n *\n * @returns {void}\n * @param {CommandName} commandName - Specifies the name of the command to be executed.\n * @param {string | HTMLElement | ILinkCommandsArgs | IImageCommandsArgs} value - Specifies the value that you want to execute.\n * @param {ExecuteCommandOption} option - specifies the command option\n * @public\n */\n RichTextEditor.prototype.executeCommand = function (commandName, value, option) {\n value = this.htmlPurifier(commandName, value);\n if (this.editorMode === 'HTML') {\n var range = this.getRange();\n if (this.iframeSettings.enable) {\n this.formatter.editorManager.nodeSelection.Clear(this.element.ownerDocument);\n }\n var toFocus = (this.iframeSettings.enable &&\n range.startContainer === this.inputElement) ? true : !this.inputElement.contains(range.startContainer);\n if (toFocus) {\n this.focusIn();\n }\n }\n var tool = executeGroup[commandName];\n if (option && option.undo) {\n if (option.undo && this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n }\n this.formatter.editorManager.execCommand(tool.command, tool.subCommand ? tool.subCommand : (value ? value : tool.value), null, null, (value ? value : tool.value), (value ? value : tool.value));\n if (option && option.undo) {\n this.formatter.saveData();\n this.formatter.enableUndo(this);\n }\n this.setPlaceHolder();\n this.notify(events.contentChanged, {});\n };\n RichTextEditor.prototype.htmlPurifier = function (command, value) {\n if (this.editorMode === 'HTML') {\n switch (command) {\n case 'insertHTML':\n if (this.enableHtmlSanitizer) {\n if (typeof value === 'string') {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value.outerHTML);\n }\n }\n break;\n case 'insertTable':\n if (isNOU(value.width)) {\n value.width = { minWidth: this.tableSettings.minWidth,\n maxWidth: this.tableSettings.maxWidth, width: this.tableSettings.width };\n }\n break;\n case 'insertImage': {\n var temp = this.createElement('img', {\n attrs: {\n src: value.url\n }\n });\n var imageValue = temp.outerHTML;\n if (this.enableHtmlSanitizer) {\n imageValue = this.htmlEditorModule.sanitizeHelper(temp.outerHTML);\n }\n var url = (imageValue !== '' && (this.createElement('div', {\n innerHTML: imageValue\n }).firstElementChild).getAttribute('src')) || null;\n url = !isNOU(url) ? url : '';\n value.url = url;\n if (isNOU(value.width)) {\n value.width = { minWidth: this.insertImageSettings.minWidth,\n maxWidth: this.insertImageSettings.maxWidth, width: this.insertImageSettings.width };\n }\n if (isNOU(value.height)) {\n value.height = { minHeight: this.insertImageSettings.minHeight,\n maxHeight: this.insertImageSettings.maxHeight, height: this.insertImageSettings.height };\n }\n break;\n }\n case 'createLink': {\n var tempNode = this.createElement('a', {\n attrs: {\n href: value.url\n }\n });\n var linkValue = tempNode.outerHTML;\n if (this.enableHtmlSanitizer) {\n linkValue = this.htmlEditorModule.sanitizeHelper(tempNode.outerHTML);\n }\n var href = (linkValue !== '' && (this.createElement('div', {\n innerHTML: linkValue\n }).firstElementChild).getAttribute('href')) || null;\n href = !isNOU(href) ? href : '';\n value.url = href;\n break;\n }\n }\n }\n return value;\n };\n RichTextEditor.prototype.encode = function (value) {\n var divNode = this.createElement('div');\n divNode.innerText = value.trim();\n // eslint-disable-next-line\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n /**\n * For internal use only - To Initialize the component rendering.\n *\n * @returns {void}\n * @private\n\n */\n RichTextEditor.prototype.render = function () {\n if (this.value && !this.valueTemplate) {\n this.setProperties({ value: this.serializeValue(this.value) }, true);\n }\n this.renderModule = new Render(this, this.serviceLocator);\n this.sourceCodeModule = new ViewSource(this, this.serviceLocator);\n this.notify(events.initialLoad, {});\n this.trigger(events.load);\n this.RTERender();\n // eslint-disable-next-line\n var execCommandCallBack = new ExecCommandCallBack(this);\n this.notify(events.initialEnd, {});\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.toolbarSettings.enable && this.toolbarSettings.type === 'Expand' && !isNOU(this.getToolbar()) &&\n (this.toolbarSettings.items.indexOf('Undo') > -1 && this.toolbarSettings.items.indexOf('Redo') > -1)) {\n this.disableToolbarItem(['Undo', 'Redo']);\n }\n this.setContentHeight();\n if (this.value !== null) {\n this.valueContainer.defaultValue = this.value;\n }\n // eslint-disable-next-line\n (!this.enabled) ? this.unWireEvents() : this.eventInitializer();\n this.renderComplete();\n };\n /**\n * For internal use only - Initialize the event handler\n *\n * @returns {void}\n * @private\n\n * @hidden\n */\n RichTextEditor.prototype.eventInitializer = function () {\n this.wireEvents();\n };\n RichTextEditor.prototype.cleanList = function (e) {\n var range = this.getRange();\n var currentStartContainer = range.startContainer;\n var currentEndContainer = range.endContainer;\n var currentStartOffset = range.startOffset;\n var isSameContainer = currentStartContainer === currentEndContainer ? true : false;\n var currentEndOffset;\n var endNode = range.endContainer.nodeName === '#text' ? range.endContainer.parentElement :\n range.endContainer;\n var closestLI = closest(endNode, 'LI');\n if (!isNOU(closestLI) && endNode.textContent.length === range.endOffset &&\n !range.collapsed) {\n closestLI.textContent = closestLI.textContent.trim();\n currentEndOffset = closestLI.textContent.length - 1;\n var currentLastElem = closestLI;\n while (currentLastElem.nodeName !== '#text') {\n currentLastElem = currentLastElem.lastChild;\n }\n this.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), isSameContainer ? currentLastElem : currentStartContainer, currentLastElem, currentStartOffset, currentLastElem.textContent.length);\n }\n };\n /**\n * For internal use only - keydown the event handler;\n *\n * @param {KeyboardEvent} e - specifies the event.\n * @returns {void}\n * @private\n\n * @hidden\n */\n RichTextEditor.prototype.keyDown = function (e) {\n this.notify(events.keyDown, { member: 'keydown', args: e });\n this.restrict(e);\n if (this.editorMode === 'HTML') {\n this.cleanList(e);\n }\n if (this.editorMode === 'HTML' && ((e.which === 8 && e.code === 'Backspace') || (e.which === 46 && e.code === 'Delete'))) {\n var range = this.getRange();\n var startNode = range.startContainer.nodeName === '#text' ? range.startContainer.parentElement :\n range.startContainer;\n if (closest(startNode, 'pre') &&\n (e.which === 8 && range.startContainer.textContent.charCodeAt(range.startOffset - 1) === 8203) ||\n (e.which === 46 && range.startContainer.textContent.charCodeAt(range.startOffset) === 8203)) {\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer = e.which === 8 ? range.startOffset - 1 : range.startOffset;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, pointer);\n }\n else if ((e.code === 'Backspace' && e.which === 8) &&\n range.startContainer.textContent.charCodeAt(0) === 8203 && range.collapsed) {\n var parentEle = range.startContainer.parentElement;\n var index = void 0;\n var i = void 0;\n for (i = 0; i < parentEle.childNodes.length; i++) {\n if (parentEle.childNodes[i] === range.startContainer) {\n index = i;\n }\n }\n var bool = true;\n var removeNodeArray = [];\n for (i = index; i >= 0; i--) {\n if (parentEle.childNodes[i].nodeType === 3 && parentEle.childNodes[i].textContent.charCodeAt(0) === 8203 && bool) {\n removeNodeArray.push(i);\n }\n else {\n bool = false;\n }\n }\n if (removeNodeArray.length > 0) {\n for (i = removeNodeArray.length - 1; i > 0; i--) {\n parentEle.childNodes[removeNodeArray[i]].textContent = '';\n }\n }\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), range.startContainer, range.startOffset);\n }\n }\n if (this.formatter.getUndoRedoStack().length === 0) {\n this.formatter.saveData();\n }\n if (e.action !== 'insert-link' &&\n (e.action && e.action !== 'paste' && e.action !== 'space'\n || e.which === 9 || (e.code === 'Backspace' && e.which === 8))) {\n this.formatter.process(this, null, e);\n switch (e.action) {\n case 'toolbar-focus':\n if (this.toolbarSettings.enable) {\n // eslint-disable-next-line\n var selector = '.e-toolbar-item[aria-disabled=\"false\"][title] [tabindex]';\n this.toolbarModule.baseToolbar.toolbarObj.element.querySelector(selector).focus();\n }\n break;\n case 'escape':\n this.contentModule.getEditPanel().focus();\n break;\n }\n }\n if (!isNOU(this.placeholder)) {\n if ((!isNOU(this.placeHolderWrapper)) && (this.inputElement.textContent.length !== 1)) {\n this.placeHolderWrapper.style.display = 'none';\n }\n else {\n this.setPlaceHolder();\n }\n }\n this.autoResize();\n };\n RichTextEditor.prototype.keyUp = function (e) {\n this.notify(events.keyUp, { member: 'keyup', args: e });\n if (e.code === 'KeyX' && e.which === 88 && e.keyCode === 88 && e.ctrlKey && (this.inputElement.innerHTML === '' ||\n this.inputElement.innerHTML === '
')) {\n this.inputElement.innerHTML = getEditValue(getDefaultValue(this), this);\n }\n var allowedKeys = e.which === 32 || e.which === 13 || e.which === 8 || e.which === 46;\n if (((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys) || (this.editorMode === 'Markdown'\n && ((e.key !== 'shift' && !e.ctrlKey) && e.key && e.key.length === 1 || allowedKeys)) && !this.inlineMode.enable) {\n this.formatter.onKeyHandler(this, e);\n }\n if (this.inputElement && this.inputElement.textContent.length !== 0\n || this.element.querySelectorAll('.e-toolbar-item.e-active').length > 0) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n if (!isNOU(this.placeholder)) {\n if (!(e.key === 'Enter' && e.keyCode === 13) && (this.inputElement.innerHTML === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
')) {\n this.setPlaceHolder();\n }\n }\n };\n /**\n * @param {string} value - specifies the value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.serializeValue = function (value) {\n if (this.editorMode === 'HTML' && !isNOU(value)) {\n if (this.enableHtmlEncode) {\n value = this.htmlEditorModule.sanitizeHelper(decode(value));\n value = this.encode(value);\n }\n else {\n value = this.htmlEditorModule.sanitizeHelper(value);\n }\n }\n return value;\n };\n /**\n * This method will clean up the HTML against cross-site scripting attack and return the HTML as string.\n * It's only applicable to editorMode as `HTML`.\n *\n * @param {string} value - Specifies the value that you want to sanitize.\n * @returns {string} - specifies the the string value\n */\n RichTextEditor.prototype.sanitizeHtml = function (value) {\n return this.serializeValue(value);\n };\n /**\n * updateValue method\n *\n * @param {string} value - specifies the string value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.updateValue = function (value) {\n if (isNOU(value)) {\n var inputVal = this.inputElement.innerHTML;\n this.setProperties({ value: isEditableValueEmpty(inputVal) ? null : inputVal });\n }\n else {\n this.setProperties({ value: value });\n }\n };\n RichTextEditor.prototype.triggerEditArea = function (e) {\n if (!isIDevice()) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n else {\n var touch = (e.touches ? e.changedTouches[0] : e);\n if (this.clickPoints.clientX === touch.clientX && this.clickPoints.clientY === touch.clientY) {\n this.notify(events.editAreaClick, { member: 'editAreaClick', args: e });\n }\n }\n };\n RichTextEditor.prototype.notifyMouseUp = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n this.notify(events.mouseUp, { member: 'mouseUp', args: e,\n touchData: { prevClientX: this.clickPoints.clientX, prevClientY: this.clickPoints.clientY,\n clientX: touch.clientX, clientY: touch.clientY }\n });\n if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||\n (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0))) {\n this.notify(events.toolbarRefresh, { args: e });\n }\n this.triggerEditArea(e);\n };\n RichTextEditor.prototype.mouseUp = function (e) {\n if (this.quickToolbarSettings.showOnRightClick && Browser.isDevice) {\n var target = e.target;\n var closestTable = closest(target, 'table');\n if (target && target.nodeName === 'A' || target.nodeName === 'IMG' || (target.nodeName === 'TD' || target.nodeName === 'TH' ||\n target.nodeName === 'TABLE' || (closestTable && this.contentModule.getEditPanel().contains(closestTable)))) {\n return;\n }\n }\n this.notifyMouseUp(e);\n if (e.detail === 3) {\n var range = this.getRange();\n var selection = this.formatter.editorManager.domNode.getSelection();\n if (/\\s+$/.test(selection.toString())) {\n if (!isNOU(range.startContainer.parentElement) && (!isNOU(range.startContainer.parentElement.nextSibling) &&\n (range.startContainer.parentElement.nextSibling.nodeType !== 3 ||\n /\\s+$/.test(range.startContainer.parentElement.nextSibling.textContent)) || range.startOffset === range.endOffset)\n || range.startContainer.parentElement.tagName.toLocaleLowerCase() === 'li') {\n range.setStart(range.startContainer, range.startOffset);\n range.setEnd(range.startContainer, range.startContainer.textContent.length);\n }\n }\n }\n };\n /**\n * @param {Function} module - specifies the module function.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.ensureModuleInjected = function (module) {\n return this.getInjectedModules().indexOf(module) >= 0;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onCopy = function () {\n this.contentModule.getDocument().execCommand('copy', false, null);\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onCut = function () {\n this.contentModule.getDocument().execCommand('cut', false, null);\n };\n /**\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onPaste = function (e) {\n var _this = this;\n var evenArgs = {\n originalEvent: e,\n cancel: false,\n requestType: 'Paste'\n };\n this.trigger(events.actionBegin, evenArgs, function (pasteArgs) {\n var currentLength = _this.getText().trim().length;\n var selectionLength = _this.getSelection().length;\n var pastedContentLength = (isNOU(e) || isNOU(e.clipboardData))\n ? 0 : e.clipboardData.getData('text/plain').length;\n var totalLength = (currentLength - selectionLength) + pastedContentLength;\n if (_this.editorMode === 'Markdown') {\n if (!(_this.maxLength === -1 || totalLength <= _this.maxLength)) {\n e.preventDefault();\n }\n return;\n }\n if (!pasteArgs.cancel && _this.inputElement.contentEditable === 'true' &&\n (_this.maxLength === -1 || totalLength <= _this.maxLength)) {\n if (!isNOU(_this.pasteCleanupModule)) {\n _this.notify(events.pasteClean, { args: e });\n }\n else {\n var args_1 = { requestType: 'Paste', editorMode: _this.editorMode, event: e };\n var value = null;\n var htmlValue = false;\n if (e && !isNOU(e.clipboardData)) {\n value = e.clipboardData.getData('text/plain');\n htmlValue = e.clipboardData.getData('text/html').indexOf('MsoNormal') > 0;\n }\n var file = e && e.clipboardData && e.clipboardData.items.length > 0 ?\n e.clipboardData.items[0].getAsFile() : null;\n if (value !== null) {\n _this.notify(events.paste, {\n file: file,\n args: e,\n text: value,\n isWordPaste: htmlValue\n });\n }\n setTimeout(function () {\n _this.formatter.onSuccess(_this, args_1);\n }, 0);\n }\n }\n else {\n e.preventDefault();\n }\n });\n };\n /**\n * @param {string} action - specifies the string value.\n * @param {MouseEvent} event - specifies the event.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.clipboardAction = function (action, event) {\n switch (action.toLowerCase()) {\n case 'cut':\n this.onCut();\n this.formatter.onSuccess(this, {\n requestType: 'Cut',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'copy':\n this.onCopy();\n this.formatter.onSuccess(this, {\n requestType: 'Copy',\n editorMode: this.editorMode,\n event: event\n });\n break;\n case 'paste':\n this.onPaste(event);\n break;\n }\n };\n /**\n * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n *\n * @returns {void}\n */\n RichTextEditor.prototype.destroy = function () {\n if (this.isDestroyed || !this.isRendered) {\n return;\n }\n if (this.element.offsetParent === null && !isNOU(this.toolbarModule)) {\n this.toolbarModule.destroy();\n return;\n }\n this.notify(events.destroy, {});\n this.destroyDependentModules();\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n this.unWireEvents();\n if (this.originalElement.tagName === 'TEXTAREA') {\n this.element.parentElement.insertBefore(this.valueContainer, this.element);\n this.valueContainer.id = this.getID();\n this.valueContainer.removeAttribute('name');\n detach(this.element);\n if (this.originalElement.innerHTML.trim() !== '') {\n this.valueContainer.value = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.valueContainer.value = this.valueContainer.defaultValue;\n }\n this.element = this.valueContainer;\n for (var i = 0; i < this.originalElement.classList.length; i++) {\n addClass([this.element], this.originalElement.classList[i]);\n }\n removeClass([this.element], classes.CLS_RTE_HIDDEN);\n }\n else {\n if (this.originalElement.innerHTML.trim() !== '') {\n this.element.innerHTML = this.originalElement.innerHTML.trim();\n this.setProperties({ value: (!isNOU(this.initialValue) ? this.initialValue : null) }, true);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n if (this.placeholder && this.placeHolderWrapper) {\n this.placeHolderWrapper = null;\n }\n if (!isNOU(this.cssClass)) {\n var allClassName = this.cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n removeClass([this.element], allClassName[i]);\n }\n }\n }\n this.removeHtmlAttributes();\n this.removeAttributes();\n _super.prototype.destroy.call(this);\n this.isRendered = false;\n if (this.enablePersistence) {\n window.localStorage.removeItem(this.getModuleName() + this.element.id);\n }\n };\n RichTextEditor.prototype.removeHtmlAttributes = function () {\n if (this.htmlAttributes) {\n var keys = Object.keys(this.htmlAttributes);\n for (var i = 0; i < keys.length && this.element.hasAttribute(keys[i]); i++) {\n this.element.removeAttribute(keys[i]);\n }\n }\n };\n RichTextEditor.prototype.removeAttributes = function () {\n if (!this.enabled) {\n removeClass([this.element], classes.CLS_DISABLED);\n }\n if (this.enableRtl) {\n removeClass([this.element], classes.CLS_RTL);\n }\n if (this.readonly) {\n removeClass([this.element], classes.CLS_RTE_READONLY);\n }\n if (this.element.style.width !== '' && this.originalElement.style.width === '') {\n this.element.style.removeProperty('width');\n }\n if (this.element.style.height !== '' && this.originalElement.style.height === '') {\n this.element.style.removeProperty('height');\n }\n this.element.removeAttribute('aria-disabled');\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n };\n RichTextEditor.prototype.destroyDependentModules = function () {\n /* destroy dependent modules */\n this.renderModule.destroy();\n this.formatter.editorManager.undoRedoManager.destroy();\n this.sourceCodeModule.destroy();\n };\n /**\n * Returns the HTML or Text inside the RichTextEditor.\n *\n * @returns {Element} - specifies the element.\n */\n RichTextEditor.prototype.getContent = function () {\n return this.contentModule.getPanel();\n };\n /**\n * Returns the text content as string.\n *\n * @returns {string} - specifies the string value.\n */\n RichTextEditor.prototype.getText = function () {\n return this.contentModule.getText();\n };\n /**\n * Returns the html value of the selected content as string.\n *\n * @returns {string} - specifies the string value.\n */\n RichTextEditor.prototype.getSelectedHtml = function () {\n var range;\n var wrapperElm = this.createElement('div');\n var selection = this.contentModule.getDocument().getSelection();\n if (selection.rangeCount > 0) {\n range = selection.getRangeAt(0);\n var selectedHtml = range.cloneContents();\n wrapperElm.appendChild(selectedHtml);\n }\n return wrapperElm.innerHTML;\n };\n /**\n * It shows the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.showInlineToolbar = function () {\n if (this.inlineMode.enable) {\n var currentRange = this.getRange();\n var targetElm = currentRange.endContainer.nodeName === '#text' ?\n currentRange.endContainer.parentElement : currentRange.endContainer;\n var x = currentRange.getClientRects()[0].left;\n var y = currentRange.getClientRects()[0].top;\n this.quickToolbarModule.showInlineQTBar(x, y, targetElm);\n }\n };\n /**\n * It hides the inline quick toolbar\n *\n * @returns {void}\n */\n RichTextEditor.prototype.hideInlineToolbar = function () {\n this.quickToolbarModule.hideInlineQTBar();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @private\n\n */\n RichTextEditor.prototype.getModuleName = function () {\n return 'richtexteditor';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} newProp - specifies the the property.\n * @param {RichTextEditorModel} oldProp - specifies the old property.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enterKey':\n case 'value': {\n var nVal = void 0;\n if (prop === 'enterKey') {\n if (this.value === null || this.value === '

' || this.value === '


' ||\n this.value === '
') {\n nVal = null;\n }\n else {\n nVal = this.value;\n }\n }\n else {\n nVal = newProp[prop];\n }\n var val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;\n if ((!isNOU(nVal) && nVal !== '') || prop === 'enterKey') {\n this.value = this.serializeValue(((this.enableHtmlEncode) ? this.encode(decode(val)) : val));\n }\n this.updatePanelValue();\n this.setPlaceHolder();\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n if (this.enableXhtml) {\n this.setProperties({ value: this.getXhtml() }, true);\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n }\n case 'valueTemplate':\n this.setValue();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'width':\n this.setWidth(newProp[prop]);\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n this.resizeHandler();\n }\n break;\n case 'height':\n this.setHeight(newProp[prop]);\n this.setContentHeight();\n this.autoResize();\n break;\n case 'readonly':\n this.setReadOnly(false);\n break;\n case 'cssClass':\n this.element.classList.remove(oldProp[prop]);\n this.setCssClass(newProp[prop]);\n break;\n case 'enabled':\n this.setEnable();\n break;\n case 'enableRtl':\n this.updateRTL();\n break;\n case 'placeholder':\n this.placeholder = newProp[prop];\n this.setPlaceHolder();\n break;\n case 'htmlAttributes':\n setAttributes(this.htmlAttributes, this, false, false);\n break;\n case 'iframeSettings': {\n var frameSetting = oldProp[prop];\n if (frameSetting.resources) {\n var iframe = this.contentModule.getDocument();\n var header = iframe.querySelector('head');\n var files = void 0;\n if (frameSetting.resources.scripts) {\n files = header.querySelectorAll('.' + classes.CLS_SCRIPT_SHEET);\n this.removeSheets(files);\n }\n if (frameSetting.resources.styles) {\n files = header.querySelectorAll('.' + classes.CLS_STYLE_SHEET);\n this.removeSheets(files);\n }\n }\n this.setIframeSettings();\n break;\n }\n case 'locale':\n _super.prototype.refresh.call(this);\n break;\n case 'inlineMode':\n this.notify(events.modelChanged, { module: 'quickToolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'toolbarSettings':\n this.notify(events.modelChanged, { module: 'toolbar', newProp: newProp, oldProp: oldProp });\n this.setContentHeight();\n break;\n case 'maxLength':\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'showCharCount':\n if (newProp[prop] && this.countModule) {\n this.countModule.renderCount();\n }\n else if (newProp[prop] === false && this.countModule) {\n this.countModule.destroy();\n }\n break;\n case 'enableHtmlEncode':\n this.updateValueData();\n this.updatePanelValue();\n this.setPlaceHolder();\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n break;\n case 'undoRedoSteps':\n case 'undoRedoTimer':\n this.formatter.editorManager.observer.notify(CONSTANT.MODEL_CHANGED, { newProp: newProp, oldProp: oldProp });\n break;\n case 'enableXhtml':\n this.notify(events.xhtmlValidation, { module: 'XhtmlValidation', newProp: newProp, oldProp: oldProp });\n break;\n case 'quickToolbarSettings':\n // eslint-disable-next-line\n newProp.quickToolbarSettings.showOnRightClick ? this.wireContextEvent() : this.unWireContextEvent();\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n default:\n this.notify(events.modelChanged, { newProp: newProp, oldProp: oldProp });\n break;\n }\n }\n };\n /**\n * @hidden\n * @returns {void}\n\n */\n RichTextEditor.prototype.updateValueData = function () {\n if (this.enableHtmlEncode) {\n this.setProperties({ value: this.encode(decode(this.inputElement.innerHTML)) }, true);\n }\n else {\n this.setProperties({\n value: /<[a-z][\\s\\S]*>/i.test(this.inputElement.innerHTML) ? this.inputElement.innerHTML :\n decode(this.inputElement.innerHTML)\n });\n }\n };\n RichTextEditor.prototype.removeSheets = function (srcList) {\n var i;\n for (i = 0; i < srcList.length; i++) {\n detach(srcList[i]);\n }\n };\n RichTextEditor.prototype.updatePanelValue = function () {\n var value = this.value;\n value = (this.enableHtmlEncode && this.value) ? decode(value) : value;\n var getTextArea = this.element.querySelector('.e-rte-srctextarea');\n if (value) {\n if (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = this.value;\n }\n if (this.valueContainer) {\n this.valueContainer.value = (this.enableHtmlEncode) ? this.value : value;\n }\n if (this.editorMode === 'HTML' && this.inputElement && this.inputElement.innerHTML.trim() !== value.trim()) {\n this.inputElement.innerHTML = value;\n }\n else if (this.editorMode === 'Markdown' && this.inputElement\n && this.inputElement.value.trim() !== value.trim()) {\n this.inputElement.value = value;\n }\n }\n else {\n if (getTextArea && getTextArea.style.display === 'block') {\n getTextArea.value = '';\n }\n if (this.editorMode === 'HTML') {\n if (this.enterKey === 'DIV') {\n this.inputElement.innerHTML = '

';\n }\n else if (this.enterKey === 'BR') {\n this.inputElement.innerHTML = '
';\n }\n else {\n this.inputElement.innerHTML = '


';\n if (value === '' && this.formatter && this.inputElement) {\n this.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), this.inputElement.firstElementChild, this.inputElement.firstElementChild.childElementCount);\n }\n }\n }\n else {\n this.inputElement.value = '';\n }\n if (this.valueContainer) {\n this.valueContainer.value = '';\n }\n }\n if (this.showCharCount) {\n this.countModule.refresh();\n }\n };\n RichTextEditor.prototype.setHeight = function (height) {\n if (height !== 'auto') {\n this.element.style.height = formatUnit(height);\n }\n else {\n this.element.style.height = 'auto';\n }\n if (this.toolbarSettings.type === 'Expand' && (typeof (this.height) === 'string' &&\n this.height.indexOf('px') > -1 || typeof (this.height) === 'number')) {\n this.element.classList.add(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n else {\n this.element.classList.remove(classes.CLS_RTE_FIXED_TB_EXPAND);\n }\n };\n /**\n * setPlaceHolder method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setPlaceHolder = function () {\n if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {\n if (this.editorMode !== 'Markdown') {\n if (!this.placeHolderWrapper) {\n this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' });\n if (this.inputElement) {\n this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);\n }\n attributes(this.placeHolderWrapper, {\n 'style': 'font-size: 14px; padding: 16px; margin-left: 0px; margin-right: 0px;'\n });\n }\n this.placeHolderWrapper.innerHTML = this.placeholder;\n if (this.inputElement.textContent.length === 0 && !isNOU(this.inputElement.firstChild) && (this.inputElement.firstChild.nodeName === 'BR' ||\n ((this.inputElement.firstChild.nodeName === 'P' || this.inputElement.firstChild.nodeName === 'DIV') && !isNOU(this.inputElement.firstChild.firstChild) &&\n this.inputElement.firstChild.firstChild.nodeName === 'BR'))) {\n this.placeHolderWrapper.style.display = 'block';\n }\n else {\n this.placeHolderWrapper.style.display = 'none';\n }\n }\n else {\n this.inputElement.setAttribute('placeholder', this.placeholder);\n }\n }\n };\n RichTextEditor.prototype.setWidth = function (width) {\n if (width !== 'auto') {\n setStyleAttribute(this.element, { 'width': formatUnit(this.width) });\n }\n else {\n this.element.style.width = 'auto';\n }\n };\n RichTextEditor.prototype.setCssClass = function (cssClass) {\n if (!isNOU(cssClass)) {\n var allClassName = cssClass.split(' ');\n for (var i = 0; i < allClassName.length; i++) {\n if (allClassName[i].trim() !== '') {\n this.element.classList.add(allClassName[i]);\n }\n }\n }\n };\n RichTextEditor.prototype.updateRTL = function () {\n this.notify(events.rtlMode, { enableRtl: this.enableRtl });\n if (this.enableRtl) {\n this.element.classList.add(classes.CLS_RTL);\n }\n else {\n this.element.classList.remove(classes.CLS_RTL);\n }\n };\n RichTextEditor.prototype.updateReadOnly = function () {\n this.notify(events.readOnlyMode, { editPanel: this.inputElement, mode: this.readonly });\n };\n /**\n * setReadOnly method\n *\n * @param {boolean} initial - specifies the boolean value\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setReadOnly = function (initial) {\n this.updateReadOnly();\n if (!initial) {\n if (this.readonly && this.enabled) {\n this.unbindEvents();\n }\n else if (this.enabled) {\n this.bindEvents();\n }\n }\n };\n /**\n * By default, prints all the pages of the RichTextEditor.\n *\n * @returns {void}\n */\n RichTextEditor.prototype.print = function () {\n var _this = this;\n var printWind;\n var printArgs = {\n element: this.inputElement,\n requestType: 'print',\n cancel: false\n };\n this.trigger(events.actionBegin, printArgs, function (printingArgs) {\n printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth);\n if (Browser.info.name === 'msie') {\n printWind.resizeTo(screen.availWidth, screen.availHeight);\n }\n printWind = printWindow(_this.inputElement, printWind);\n if (!printingArgs.cancel) {\n var actionArgs = {\n requestType: 'print'\n };\n _this.trigger(events.actionComplete, actionArgs);\n }\n });\n };\n /**\n * Refresh the view of the editor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.refreshUI = function () {\n this.renderModule.refresh();\n };\n /**\n * Shows the Rich Text Editor component in full-screen mode.\n *\n * @returns {void}\n */\n RichTextEditor.prototype.showFullScreen = function () {\n this.fullScreenModule.showFullScreen();\n };\n /**\n * Enables the give toolbar items in the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be enable in Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.enableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, true, muteToolbarUpdate);\n };\n /**\n * Disables the given toolbar items in the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * @param {boolean} muteToolbarUpdate enable/disables the toolbar item status in RichTextEditor.\n * that you want to be disable in Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.disableToolbarItem = function (items, muteToolbarUpdate) {\n this.toolbarModule.enableTBarItems(this.getBaseToolbarObject(), items, false, muteToolbarUpdate);\n };\n /**\n * Removes the give toolbar items from the Rich Text Editor component.\n *\n * @returns {void}\n * @param {string | string[]} items - Specifies the single or collection of items\n * that you want to be remove from Rich Text Editor’s Toolbar.\n *\n * @public\n */\n RichTextEditor.prototype.removeToolbarItem = function (items) {\n this.toolbarModule.removeTBarItems(items);\n };\n /**\n * Get the selected range from the RichTextEditor's content.\n *\n * @returns {void}\n * @public\n\n */\n RichTextEditor.prototype.getRange = function () {\n return this.formatter.editorManager.nodeSelection.getRange(this.contentModule.getDocument());\n };\n RichTextEditor.prototype.initializeServices = function () {\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n this.serviceLocator.register('rteLocale', this.localeObj = new L10n(this.getModuleName(), defaultLocale, this.locale));\n this.serviceLocator.register('dialogRenderObject', new DialogRenderer(this));\n };\n RichTextEditor.prototype.RTERender = function () {\n var rendererFactory = this.serviceLocator.getService('rendererFactory');\n this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n this.fullScreenModule = new FullScreen(this);\n this.enterKeyModule = new EnterKeyAction(this);\n this.renderModule.render();\n this.inputElement = this.contentModule.getEditPanel();\n this.setHeight(this.height);\n setAttributes(this.htmlAttributes, this, false, true);\n if (this.iframeSettings) {\n this.setIframeSettings();\n }\n this.setCssClass(this.cssClass);\n this.updateEnable();\n this.setPlaceHolder();\n this.updateRTL();\n this.updateReadOnly();\n this.updatePanelValue();\n if (this.enableHtmlEncode && !isNOU(this.value)) {\n this.setProperties({ value: this.encode(decode(this.value)) });\n }\n };\n RichTextEditor.prototype.setIframeSettings = function () {\n if (this.iframeSettings.resources) {\n var styleSrc = this.iframeSettings.resources.styles;\n var scriptSrc = this.iframeSettings.resources.scripts;\n if (this.iframeSettings.resources.scripts.length > 0) {\n this.InjectSheet(true, scriptSrc);\n }\n if (this.iframeSettings.resources.styles.length > 0) {\n this.InjectSheet(false, styleSrc);\n }\n }\n if (this.iframeSettings.attributes) {\n setAttributes(this.iframeSettings.attributes, this, true, false);\n }\n };\n RichTextEditor.prototype.InjectSheet = function (scriptSheet, srcList) {\n try {\n if (srcList && srcList.length > 0) {\n var iFrame = this.contentModule.getDocument();\n var target = iFrame.querySelector('head');\n for (var i = 0; i < srcList.length; i++) {\n if (scriptSheet) {\n var scriptEle = this.createScriptElement();\n scriptEle.src = srcList[i];\n target.appendChild(scriptEle);\n }\n else {\n var styleEle = this.createStyleElement();\n styleEle.href = srcList[i];\n target.appendChild(styleEle);\n }\n }\n }\n }\n catch (e) {\n return;\n }\n };\n RichTextEditor.prototype.createScriptElement = function () {\n var scriptEle = this.createElement('script', {\n className: classes.CLS_SCRIPT_SHEET\n });\n scriptEle.type = 'text/javascript';\n return scriptEle;\n };\n RichTextEditor.prototype.createStyleElement = function () {\n var styleEle = this.createElement('link', {\n className: classes.CLS_STYLE_SHEET\n });\n styleEle.rel = 'stylesheet';\n return styleEle;\n };\n RichTextEditor.prototype.setValue = function () {\n if (this.valueTemplate) {\n if (typeof this.valueTemplate === 'string') {\n this.setProperties({ value: this.valueTemplate });\n }\n else {\n var compiledTemplate = compile(this.valueTemplate)(\"\", this, 'valueTemplate');\n for (var i = 0; i < compiledTemplate.length; i++) {\n var item = compiledTemplate[i];\n append([item], this.element);\n }\n this.setProperties({ value: this.element.innerHTML.trim() });\n }\n }\n else {\n // eslint-disable-next-line\n var innerHtml = !isNOU(this.element.innerHTML) && this.element.innerHTML.replace(/<(\\/?|\\!?)(!--!--)>/g, '').trim();\n if (innerHtml !== '') {\n if (this.element.tagName === 'TEXTAREA') {\n this.setProperties({ value: decode(innerHtml) });\n }\n else {\n this.setProperties({ value: innerHtml });\n }\n }\n }\n };\n RichTextEditor.prototype.updateResizeFlag = function () {\n this.isResizeInitialized = true;\n };\n /**\n * Image max width calculation method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getInsertImgMaxWidth = function () {\n var maxWidth = this.insertImageSettings.maxWidth;\n // eslint-disable-next-line\n var imgPadding = 12;\n var imgResizeBorder = 2;\n var editEle = this.contentModule.getEditPanel();\n var eleStyle = window.getComputedStyle(editEle);\n var editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +\n parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +\n parseFloat(eleStyle.marginLeft.split('px')[0]) + parseFloat(eleStyle.marginRight.split('px')[0]));\n return isNOU(maxWidth) ? editEleMaxWidth : maxWidth;\n };\n /**\n * setContentHeight method\n *\n * @param {string} target - specifies the target value.\n * @param {boolean} isExpand - specifies the bollean value.\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.setContentHeight = function (target, isExpand) {\n var heightValue;\n var topValue = 0;\n var rteHeightPercent;\n var heightPercent = typeof (this.height) === 'string' && this.height.indexOf('%') > -1;\n var cntEle = (this.sourceCodeModule.getPanel() &&\n this.sourceCodeModule.getPanel().parentElement.style.display === 'block') ? this.sourceCodeModule.getPanel().parentElement :\n this.contentModule.getPanel();\n var rteHeight = this.element.offsetHeight;\n if (rteHeight === 0 && this.height !== 'auto' && !this.getToolbar()) {\n rteHeight = parseInt(this.height, 10);\n if (heightPercent) {\n rteHeightPercent = this.height;\n }\n }\n var tbHeight = this.getToolbar() ? this.toolbarModule.getToolbarHeight() : 0;\n var rzHandle = this.element.querySelector('.' + classes.CLS_RTE_RES_HANDLE);\n var rzHeight = this.enableResize ? (!isNOU(rzHandle) ? (rzHandle.offsetHeight + 8) : 0) : 0;\n var expandPopHeight = this.getToolbar() ? this.toolbarModule.getExpandTBarPopHeight() : 0;\n if (this.toolbarSettings.type === ToolbarType.Expand && isExpand && target !== 'preview') {\n heightValue = (this.height === 'auto' && rzHeight === 0) ? 'auto' : rteHeight - (tbHeight + expandPopHeight + rzHeight) + 'px';\n topValue = (!this.toolbarSettings.enableFloating) ? expandPopHeight : 0;\n }\n else {\n if (this.height === 'auto' && !(this.element.classList.contains('e-rte-full-screen')) && !this.isResizeInitialized) {\n heightValue = 'auto';\n }\n else {\n heightValue = heightPercent && rteHeightPercent ? rteHeightPercent : rteHeight - (tbHeight + rzHeight) + 'px';\n }\n }\n if (target !== 'windowResize') {\n if (this.iframeSettings.enable) {\n if (heightValue !== 'auto') {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\n else {\n setStyleAttribute(cntEle, { height: heightValue, marginTop: topValue + 'px' });\n }\n }\n if (this.iframeSettings.enable && target === 'sourceCode') {\n var codeElement = select('.' + classes.CLS_RTE_CONTENT, this.element);\n setStyleAttribute(codeElement, { height: heightValue, marginTop: topValue + 'px' });\n }\n if (this.toolbarSettings.enableFloating && this.getToolbar() && !this.inlineMode.enable) {\n var tbWrapHeight = (isExpand ? (tbHeight + expandPopHeight) : tbHeight) + 'px';\n setStyleAttribute(this.getToolbar().parentElement, { height: tbWrapHeight });\n }\n if (rzHeight === 0) {\n this.autoResize();\n }\n };\n /**\n * Retrieves the HTML from RichTextEditor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getHtml = function () {\n return this.serializeValue(this.contentModule.getEditPanel().innerHTML);\n };\n /**\n * Retrieves the Rich Text Editor's XHTML validated HTML content when `enableXhtml` property is enabled.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getXhtml = function () {\n var currentValue = this.value;\n if (!isNOU(currentValue) && this.enableXhtml) {\n currentValue = this.htmlEditorModule.xhtmlValidation.selfEncloseValidation(currentValue);\n }\n return currentValue;\n };\n /**\n * Shows the source HTML/MD markup.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showSourceCode = function () {\n if (this.readonly) {\n return;\n }\n this.notify(events.sourceCode, {});\n };\n /**\n * Returns the maximum number of characters in the Rich Text Editor.\n *\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.getCharCount = function () {\n var htmlText = this.editorMode === 'Markdown' ? this.inputElement.value.trim() :\n this.inputElement.textContent.trim();\n var htmlLength;\n if (this.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n htmlLength = htmlText.length;\n }\n return htmlLength;\n };\n /**\n * Show the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.showDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.showLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.showImageDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.showTableDialog, {});\n }\n };\n /**\n * Close the dialog in the Rich Text Editor.\n *\n * @param {DialogType} type - specifies the dialog type.\n * @returns {void}\n * @public\n */\n RichTextEditor.prototype.closeDialog = function (type) {\n if (type === DialogType.InsertLink) {\n this.notify(events.closeLinkDialog, {});\n }\n else if (type === DialogType.InsertImage) {\n this.notify(events.closeImageDialog, {});\n }\n else if (type === DialogType.InsertTable) {\n this.notify(events.closeTableDialog, {});\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getBaseToolbarObject = function () {\n var tbObj;\n if (this.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n tbObj = this.quickToolbarModule && this.quickToolbarModule.getInlineBaseToolbar();\n }\n else {\n tbObj = this.toolbarModule && this.toolbarModule.getBaseToolbar();\n }\n return tbObj;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getToolbar = function () {\n return this.toolbarModule ? this.toolbarModule.getToolbarElement() : null;\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.getToolbarElement = function () {\n return this.toolbarModule && this.toolbarModule.getToolbarElement();\n };\n /**\n * @returns {void}\n * getID method\n *\n * @hidden\n\n */\n RichTextEditor.prototype.getID = function () {\n return (this.originalElement.tagName === 'TEXTAREA' ? this.valueContainer.id : this.element.id);\n };\n RichTextEditor.prototype.mouseDownHandler = function (e) {\n var touch = (e.touches ? e.changedTouches[0] : e);\n addClass([this.element], [classes.CLS_FOCUS]);\n this.preventDefaultResize(e);\n this.notify(events.mouseDown, { args: e });\n this.clickPoints = { clientX: touch.clientX, clientY: touch.clientY };\n };\n RichTextEditor.prototype.preventImgResize = function (e) {\n if (e.target.nodeName.toLocaleLowerCase() === 'img') {\n e.preventDefault();\n }\n };\n /**\n * preventDefaultResize method\n *\n * @param {FocusEvent} e - specifies the event.\n * @returns {void}\n * @hidden\n\n */\n // eslint-disable-next-line\n RichTextEditor.prototype.preventDefaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().addEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', false, 'false');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', false, 'false');\n }\n };\n // eslint-disable-next-line\n RichTextEditor.prototype.defaultResize = function (e) {\n if (Browser.info.name === 'msie') {\n this.contentModule.getEditPanel().removeEventListener('mscontrolselect', this.preventImgResize);\n }\n else if (Browser.info.name === 'mozilla') {\n this.contentModule.getDocument().execCommand('enableObjectResizing', true, 'true');\n this.contentModule.getDocument().execCommand('enableInlineTableEditing', true, 'true');\n }\n };\n RichTextEditor.prototype.resizeHandler = function () {\n var isExpand = false;\n if (!document.body.contains(this.element)) {\n document.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n return;\n }\n if (this.toolbarSettings.enable && !this.inlineMode.enable) {\n this.toolbarModule.refreshToolbarOverflow();\n isExpand = this.toolbarModule.baseToolbar.toolbarObj.element.classList.contains(classes.CLS_EXPAND_OPEN);\n }\n this.setContentHeight('windowResize', isExpand);\n this.notify(events.windowResize, null);\n };\n RichTextEditor.prototype.scrollHandler = function (e) {\n this.notify(events.scroll, { args: e });\n };\n RichTextEditor.prototype.contentScrollHandler = function (e) {\n this.notify(events.contentscroll, { args: e });\n };\n RichTextEditor.prototype.focusHandler = function (e) {\n if ((!this.isRTE || this.isFocusOut)) {\n this.isRTE = this.isFocusOut ? false : true;\n this.isFocusOut = false;\n addClass([this.element], [classes.CLS_FOCUS]);\n if (this.editorMode === 'HTML') {\n this.cloneValue = (this.inputElement.innerHTML === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
') ? 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 === '


' || this.inputElement.innerHTML === '

' ||\n this.inputElement.innerHTML === '
') ? null : this.enableHtmlEncode ?\n this.encode(decode(this.inputElement.innerHTML)) : this.inputElement.innerHTML;\n if (getTextArea && getTextArea.style.display === 'block') {\n value = getTextArea.value;\n }\n }\n else {\n value = this.inputElement.value === '' ? null :\n this.inputElement.value;\n }\n return value;\n };\n RichTextEditor.prototype.updateValueOnIdle = function () {\n if (!isNOU(this.tableModule) && !isNOU(this.inputElement.querySelector('.e-table-box.e-rbox-select'))) {\n return;\n }\n this.setProperties({ value: this.getUpdatedValue() }, true);\n this.valueContainer.value = this.value;\n this.invokeChangeEvent();\n };\n RichTextEditor.prototype.updateIntervalValue = function () {\n clearTimeout(this.idleInterval);\n this.idleInterval = setTimeout(this.updateValueOnIdle.bind(this), 0);\n };\n RichTextEditor.prototype.updateStatus = function (e) {\n if (!isNOU(e.html) || !isNOU(e.markdown)) {\n var status_1 = this.formatter.editorManager.undoRedoManager.getUndoStatus();\n var eventArgs = {\n undo: status_1.undo,\n redo: status_1.redo,\n html: e.html,\n markdown: e.markdown\n };\n this.trigger(events.updatedToolbarStatus, eventArgs);\n }\n };\n RichTextEditor.prototype.onDocumentClick = function (e) {\n var target = e.target;\n var rteElement = closest(target, '.' + classes.CLS_RTE);\n if (!this.element.contains(e.target) && document !== e.target && rteElement !== this.element &&\n !closest(target, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = true;\n this.isRTE = false;\n }\n this.notify(events.docClick, { args: e });\n if (Browser.info.name !== 'msie' && e.detail > 3) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.blurHandler = function (e) {\n var trg = e.relatedTarget;\n if (trg) {\n var rteElement = closest(trg, '.' + classes.CLS_RTE);\n if (rteElement && rteElement === this.element) {\n this.isBlur = false;\n if (trg === this.getToolbarElement()) {\n trg.setAttribute('tabindex', '-1');\n }\n }\n else if (closest(trg, '[aria-owns=\"' + this.getID() + '\"]')) {\n this.isBlur = false;\n }\n else {\n this.isBlur = true;\n trg = null;\n }\n }\n if (this.isBlur && isNOU(trg)) {\n removeClass([this.element], [classes.CLS_FOCUS]);\n this.notify(events.focusChange, {});\n var value = this.getUpdatedValue();\n this.setProperties({ value: value });\n this.notify(events.toolbarRefresh, { args: e, documentNode: document });\n this.invokeChangeEvent();\n this.isFocusOut = true;\n this.isBlur = false;\n dispatchEvent(this.valueContainer, 'focusout');\n this.defaultResize(e);\n this.trigger('blur', { event: e, isInteracted: Object.keys(e).length === 0 ? false : true });\n if (!isNOU(this.timeInterval)) {\n clearInterval(this.timeInterval);\n this.timeInterval = null;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n }\n else {\n this.isRTE = true;\n }\n };\n /**\n * invokeChangeEvent method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.contentChanged = function () {\n if (this.autoSaveOnIdle) {\n if (!isNOU(this.saveInterval)) {\n clearTimeout(this.timeInterval);\n this.timeInterval = setTimeout(this.updateIntervalValue.bind(this), this.saveInterval);\n }\n }\n };\n /**\n * invokeChangeEvent method\n *\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.invokeChangeEvent = function () {\n var currentValue;\n if (this.enableXhtml) {\n currentValue = this.getXhtml();\n }\n else {\n currentValue = this.value;\n }\n var eventArgs = {\n value: currentValue\n };\n if (this.value !== this.cloneValue) {\n this.trigger('change', eventArgs);\n this.cloneValue = this.value;\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.wireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.add(element, 'scroll', this.scrollHandler, this);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.add(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler, this);\n }\n };\n RichTextEditor.prototype.wireContextEvent = function () {\n if (this.quickToolbarSettings.showOnRightClick) {\n EventHandler.add(this.inputElement, 'contextmenu', this.contextHandler, this);\n if (Browser.isDevice) {\n this.touchModule = new EJ2Touch(this.inputElement, { tapHold: this.touchHandler.bind(this), tapHoldThreshold: 500 });\n }\n }\n };\n RichTextEditor.prototype.unWireContextEvent = function () {\n EventHandler.remove(this.inputElement, 'contextmenu', this.contextHandler);\n if (Browser.isDevice && this.touchModule) {\n this.touchModule.destroy();\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.unWireScrollElementsEvents = function () {\n this.scrollParentElements = getScrollableParent(this.element);\n for (var _i = 0, _a = this.scrollParentElements; _i < _a.length; _i++) {\n var element = _a[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (!this.iframeSettings.enable) {\n EventHandler.remove(this.contentModule.getPanel(), 'scroll', this.contentScrollHandler);\n }\n };\n RichTextEditor.prototype.touchHandler = function (e) {\n this.notifyMouseUp(e.originalEvent);\n this.triggerEditArea(e.originalEvent);\n };\n RichTextEditor.prototype.contextHandler = function (e) {\n var closestElem = closest(e.target, 'a, table, img');\n if (this.inlineMode.onSelection === false || (!isNOU(closestElem) && this.inputElement.contains(closestElem)\n && (closestElem.tagName === 'IMG' || closestElem.tagName === 'TABLE' || closestElem.tagName === 'A'))) {\n e.preventDefault();\n }\n };\n RichTextEditor.prototype.resetHandler = function () {\n var defaultValue = this.valueContainer.defaultValue.trim();\n this.setProperties({ value: defaultValue === '' ? null : defaultValue });\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n RichTextEditor.prototype.autoResize = function () {\n var _this = this;\n if (this.height === 'auto') {\n if (this.editorMode === 'Markdown') {\n setTimeout(function () {\n _this.setAutoHeight(_this.inputElement);\n }, 0);\n }\n else if (this.iframeSettings.enable) {\n var iframeElement_1 = this.element.querySelector('#' + this.getID() + '_rte-view');\n setTimeout(function () {\n _this.setAutoHeight(iframeElement_1);\n }, 100);\n this.inputElement.style.overflow = 'hidden';\n }\n }\n else {\n this.inputElement.style.overflow = null;\n }\n };\n RichTextEditor.prototype.setAutoHeight = function (element) {\n if (!isNOU(element)) {\n element.style.height = '';\n element.style.height = this.inputElement.scrollHeight + 'px';\n element.style.overflow = 'hidden';\n }\n };\n RichTextEditor.prototype.wireEvents = function () {\n this.element.addEventListener('focusin', this.onFocusHandler, true);\n this.element.addEventListener('focusout', this.onBlurHandler, true);\n this.on(events.contentChanged, this.contentChanged, this);\n this.on(events.resizeInitialized, this.updateResizeFlag, this);\n this.on(events.updateTbItemsStatus, this.updateStatus, this);\n if (this.readonly && this.enabled) {\n return;\n }\n this.bindEvents();\n };\n RichTextEditor.prototype.restrict = function (e) {\n if (this.maxLength >= 0) {\n var element = this.editorMode === 'Markdown' ? this.contentModule.getText() :\n e.currentTarget.textContent.trim();\n var array = [8, 16, 17, 37, 38, 39, 40, 46, 65];\n var arrayKey = void 0;\n for (var i = 0; i <= array.length - 1; i++) {\n if (e.which === array[i]) {\n if (e.ctrlKey && e.which === 65) {\n return;\n }\n else if (e.which !== 65) {\n arrayKey = array[i];\n return;\n }\n }\n }\n if ((element.length >= this.maxLength && this.maxLength !== -1) && e.which !== arrayKey) {\n e.preventDefault();\n }\n }\n };\n RichTextEditor.prototype.bindEvents = function () {\n this.keyboardModule = new KeyboardEvents(this.inputElement, {\n keyAction: this.keyDown.bind(this), keyConfigs: __assign({}, this.formatter.keyConfig, this.keyConfig), eventName: 'keydown'\n });\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetHandler, this);\n }\n EventHandler.add(this.inputElement, 'keyup', this.keyUp, this);\n EventHandler.add(this.inputElement, 'paste', this.onPaste, this);\n EventHandler.add(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30), this);\n EventHandler.add(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler, this);\n this.wireContextEvent();\n this.formatter.editorManager.observer.on(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown, this);\n this.element.ownerDocument.defaultView.addEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);\n EventHandler.add(this.inputElement, 'focusout', this.blurHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler, this);\n EventHandler.add(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown, this);\n }\n this.wireScrollElementsEvents();\n };\n RichTextEditor.prototype.onIframeMouseDown = function (e) {\n this.isBlur = false;\n this.notify(events.iframeMouseDown, e);\n };\n RichTextEditor.prototype.editorKeyDown = function (e) {\n switch (e.event.action) {\n case 'copy':\n this.onCopy();\n break;\n case 'cut':\n this.onCut();\n break;\n }\n if (e.callBack && (e.event.action === 'copy' || e.event.action === 'cut' || e.event.action === 'delete')) {\n e.callBack({\n requestType: e.event.action,\n editorMode: 'HTML',\n event: e.event\n });\n }\n };\n RichTextEditor.prototype.unWireEvents = function () {\n this.element.removeEventListener('focusin', this.onFocusHandler, true);\n this.element.removeEventListener('focusout', this.onBlurHandler, true);\n this.off(events.contentChanged, this.contentChanged);\n this.off(events.resizeInitialized, this.updateResizeFlag);\n this.off(events.updateTbItemsStatus, this.updateStatus);\n if (this.readonly && this.enabled) {\n return;\n }\n this.unbindEvents();\n };\n RichTextEditor.prototype.unbindEvents = function () {\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n var formElement = closest(this.valueContainer, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetHandler);\n }\n EventHandler.remove(this.inputElement, 'keyup', this.keyUp);\n EventHandler.remove(this.inputElement, 'paste', this.onPaste);\n EventHandler.remove(this.inputElement, Browser.touchEndEvent, debounce(this.mouseUp, 30));\n EventHandler.remove(this.inputElement, Browser.touchStartEvent, this.mouseDownHandler);\n this.unWireContextEvent();\n if (this.formatter) {\n this.formatter.editorManager.observer.off(CONSTANT.KEY_DOWN_HANDLER, this.editorKeyDown);\n }\n this.element.ownerDocument.defaultView.removeEventListener('resize', this.onResizeHandler, true);\n if (this.iframeSettings.enable) {\n EventHandler.remove(this.inputElement, 'focusin', this.focusHandler);\n EventHandler.remove(this.inputElement, 'focusout', this.blurHandler);\n EventHandler.remove(this.inputElement.ownerDocument, 'scroll', this.contentScrollHandler);\n EventHandler.remove(this.inputElement.ownerDocument, Browser.touchStartEvent, this.onIframeMouseDown);\n }\n this.unWireScrollElementsEvents();\n };\n __decorate([\n Complex({}, ToolbarSettings)\n ], RichTextEditor.prototype, \"toolbarSettings\", void 0);\n __decorate([\n Complex({}, QuickToolbarSettings)\n ], RichTextEditor.prototype, \"quickToolbarSettings\", void 0);\n __decorate([\n Complex({}, PasteCleanupSettings)\n ], RichTextEditor.prototype, \"pasteCleanupSettings\", void 0);\n __decorate([\n Complex({}, IFrameSettings)\n ], RichTextEditor.prototype, \"iframeSettings\", void 0);\n __decorate([\n Complex({}, ImageSettings)\n ], RichTextEditor.prototype, \"insertImageSettings\", void 0);\n __decorate([\n Complex({}, TableSettings)\n ], RichTextEditor.prototype, \"tableSettings\", void 0);\n __decorate([\n Property(0)\n ], RichTextEditor.prototype, \"floatingToolbarOffset\", void 0);\n __decorate([\n Complex({}, InlineMode)\n ], RichTextEditor.prototype, \"inlineMode\", void 0);\n __decorate([\n Complex({}, FileManagerSettings)\n ], RichTextEditor.prototype, \"fileManagerSettings\", void 0);\n __decorate([\n Property('100%')\n ], RichTextEditor.prototype, \"width\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableResize\", void 0);\n __decorate([\n Property({})\n ], RichTextEditor.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"autoSaveOnIdle\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enabled\", void 0);\n __decorate([\n Property(true)\n ], RichTextEditor.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableHtmlEncode\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableXhtml\", void 0);\n __decorate([\n Property('auto')\n ], RichTextEditor.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"value\", void 0);\n __decorate([\n Property('P')\n ], RichTextEditor.prototype, \"enterKey\", void 0);\n __decorate([\n Property('BR')\n ], RichTextEditor.prototype, \"shiftEnterKey\", void 0);\n __decorate([\n Property(30)\n ], RichTextEditor.prototype, \"undoRedoSteps\", void 0);\n __decorate([\n Property(300)\n ], RichTextEditor.prototype, \"undoRedoTimer\", void 0);\n __decorate([\n Property('HTML')\n ], RichTextEditor.prototype, \"editorMode\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"keyConfig\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"showCharCount\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableTabKey\", void 0);\n __decorate([\n Property(false)\n ], RichTextEditor.prototype, \"enableAutoUrl\", void 0);\n __decorate([\n Property(-1)\n ], RichTextEditor.prototype, \"maxLength\", void 0);\n __decorate([\n Complex({}, Format)\n ], RichTextEditor.prototype, \"format\", void 0);\n __decorate([\n Complex({}, NumberFormatList)\n ], RichTextEditor.prototype, \"numberFormatList\", void 0);\n __decorate([\n Complex({}, BulletFormatList)\n ], RichTextEditor.prototype, \"bulletFormatList\", void 0);\n __decorate([\n Complex({}, FontFamily)\n ], RichTextEditor.prototype, \"fontFamily\", void 0);\n __decorate([\n Complex({}, FontSize)\n ], RichTextEditor.prototype, \"fontSize\", void 0);\n __decorate([\n Complex({}, FontColor)\n ], RichTextEditor.prototype, \"fontColor\", void 0);\n __decorate([\n Complex({}, BackgroundColor)\n ], RichTextEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(10000)\n ], RichTextEditor.prototype, \"saveInterval\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeDialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"dialogClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeQuickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarOpen\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"quickToolbarClose\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarStatusUpdate\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"updatedToolbarStatus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageSelected\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageUpload\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploading\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadSuccess\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageUploadFailed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"imageRemoving\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterImageDelete\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforePasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"afterPasteCleanup\", void 0);\n __decorate([\n Event()\n ], RichTextEditor.prototype, \"beforeImageDrop\", void 0);\n __decorate([\n Property(null)\n ], RichTextEditor.prototype, \"formatter\", void 0);\n RichTextEditor = __decorate([\n NotifyPropertyChanges\n ], RichTextEditor);\n return RichTextEditor;\n}(Component));\nexport { RichTextEditor };\n","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 { isUndefined } from '@syncfusion/ej2-base';\nimport { ComponentBase, EJComponentDecorator, getProps, gh } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { RichTextEditor } from '@syncfusion/ej2-richtexteditor';\n\nexport var properties = ['isLazyUpdate', 'autoSaveOnIdle', 'backgroundColor', 'bulletFormatList', 'cssClass', 'editorMode', 'enableAutoUrl', 'enableHtmlEncode', 'enableHtmlSanitizer', 'enablePersistence', 'enableResize', 'enableRtl', 'enableTabKey', 'enableXhtml', 'enabled', 'enterKey', 'fileManagerSettings', 'floatingToolbarOffset', 'fontColor', 'fontFamily', 'fontSize', 'format', 'formatter', 'height', 'htmlAttributes', 'iframeSettings', 'inlineMode', 'insertImageSettings', 'keyConfig', 'locale', 'maxLength', 'numberFormatList', 'pasteCleanupSettings', 'placeholder', 'quickToolbarSettings', 'readonly', 'saveInterval', 'shiftEnterKey', 'showCharCount', 'tableSettings', 'toolbarSettings', 'undoRedoSteps', 'undoRedoTimer', 'value', 'valueTemplate', 'width', 'actionBegin', 'actionComplete', 'afterImageDelete', 'afterPasteCleanup', 'beforeDialogClose', 'beforeDialogOpen', 'beforeImageDrop', 'beforeImageUpload', 'beforePasteCleanup', 'beforeQuickToolbarOpen', 'beforeSanitizeHtml', 'blur', 'change', 'created', 'destroyed', 'dialogClose', 'dialogOpen', 'focus', 'imageRemoving', 'imageSelected', 'imageUploadFailed', 'imageUploadSuccess', 'imageUploading', 'quickToolbarClose', 'quickToolbarOpen', 'resizeStart', 'resizeStop', 'resizing', 'toolbarClick', 'toolbarStatusUpdate', 'updatedToolbarStatus'];\nexport var modelProps = ['value'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0];\nexport var watch = testProp[1];\nexport var emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n var props_1 = modelProps_1[_i];\n emitProbs.push('update:' + props_1);\n}\nexport var isExecute = gh ? false : true;\n/**\n * `ejs-richtexteditor` represents the VueJS RichTextEditor Component.\n * ```vue\n * \n * ```\n */\nvar RichTextEditorComponent = /** @class */ (function (_super) {\n __extends(RichTextEditorComponent, _super);\n function RichTextEditorComponent() {\n var _this = _super.call(this, arguments) || this;\n _this.propKeys = properties;\n _this.models = modelProps;\n _this.hasChildDirective = false;\n _this.hasInjectedModules = true;\n _this.tagMapper = {};\n _this.tagNameMapper = {};\n _this.isVue3 = !isExecute;\n _this.ej2Instances = new RichTextEditor({});\n _this.ej2Instances._trigger = _this.ej2Instances.trigger;\n _this.ej2Instances.trigger = _this.trigger;\n _this.bindProperties();\n _this.ej2Instances._setProperties = _this.ej2Instances.setProperties;\n _this.ej2Instances.setProperties = _this.setProperties;\n _this.ej2Instances.clearTemplate = _this.clearTemplate;\n return _this;\n }\n RichTextEditorComponent.prototype.clearTemplate = function (templateNames) {\n if (!templateNames) {\n templateNames = Object.keys(this.templateCollection || {});\n }\n if (templateNames.length && this.templateCollection) {\n for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n var tempName = templateNames_1[_i];\n var elementCollection = this.templateCollection[tempName];\n if (elementCollection && elementCollection.length) {\n for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n var ele = elementCollection_1[_a];\n var destroy = getValue('__vue__.$destroy', ele);\n if (destroy) {\n ele.__vue__.$destroy();\n }\n if (ele.innerHTML) {\n ele.innerHTML = '';\n }\n }\n delete this.templateCollection[tempName];\n }\n }\n }\n };\n RichTextEditorComponent.prototype.setProperties = function (prop, muteOnChange) {\n var _this = this;\n if (this.isVue3) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if (this.ej2Instances && this.ej2Instances._setProperties) {\n this.ej2Instances._setProperties(prop, muteOnChange);\n }\n if (prop && this.models && this.models.length) {\n Object.keys(prop).map(function (key) {\n _this.models.map(function (model) {\n if ((key === model) && !(/datasource/i.test(key))) {\n if (_this.isVue3) {\n _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n }\n else {\n _this.$emit('update:' + key, prop[key]);\n _this.$emit('modelchanged', prop[key]);\n }\n }\n });\n });\n }\n };\n RichTextEditorComponent.prototype.trigger = function (eventName, eventProp, successHandler) {\n if (!isExecute) {\n this.models = !this.models ? this.ej2Instances.referModels : this.models;\n }\n if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/checked|value/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n }\n else {\n if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n }\n else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n var key = this.models.toString().match(/currentView|selectedDate/) || [];\n var propKey = key[0];\n if (eventProp && key && !isUndefined(eventProp[propKey])) {\n if (!isExecute) {\n this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n }\n else {\n this.$emit('update:' + propKey, eventProp[propKey]);\n this.$emit('modelchanged', eventProp[propKey]);\n }\n }\n }\n if ((this.ej2Instances && this.ej2Instances._trigger)) {\n this.ej2Instances._trigger(eventName, eventProp, successHandler);\n }\n };\n RichTextEditorComponent.prototype.render = function (createElement) {\n var h = gh || createElement;\n var slots = null;\n if (!isNullOrUndefined(this.$slots.default)) {\n slots = gh ? this.$slots.default() : this.$slots.default;\n }\n return h('textarea', slots);\n };\n RichTextEditorComponent.prototype.cleanList = function (e) {\n return this.ej2Instances.cleanList(e);\n };\n RichTextEditorComponent.prototype.closeDialog = function (type) {\n return this.ej2Instances.closeDialog(type);\n };\n RichTextEditorComponent.prototype.disableToolbarItem = function (items, muteToolbarUpdate) {\n return this.ej2Instances.disableToolbarItem(items, muteToolbarUpdate);\n };\n RichTextEditorComponent.prototype.enableToolbarItem = function (items, muteToolbarUpdate) {\n return this.ej2Instances.enableToolbarItem(items, muteToolbarUpdate);\n };\n RichTextEditorComponent.prototype.executeCommand = function (commandName, value, option) {\n return this.ej2Instances.executeCommand(commandName, value, option);\n };\n RichTextEditorComponent.prototype.focusIn = function () {\n return this.ej2Instances.focusIn();\n };\n RichTextEditorComponent.prototype.focusOut = function () {\n return this.ej2Instances.focusOut();\n };\n RichTextEditorComponent.prototype.getCharCount = function () {\n return this.ej2Instances.getCharCount();\n };\n RichTextEditorComponent.prototype.getContent = function () {\n return this.ej2Instances.getContent();\n };\n RichTextEditorComponent.prototype.getHtml = function () {\n return this.ej2Instances.getHtml();\n };\n RichTextEditorComponent.prototype.getRange = function () {\n return this.ej2Instances.getRange();\n };\n RichTextEditorComponent.prototype.getSelectedHtml = function () {\n return this.ej2Instances.getSelectedHtml();\n };\n RichTextEditorComponent.prototype.getSelection = function () {\n return this.ej2Instances.getSelection();\n };\n RichTextEditorComponent.prototype.getText = function () {\n return this.ej2Instances.getText();\n };\n RichTextEditorComponent.prototype.getXhtml = function () {\n return this.ej2Instances.getXhtml();\n };\n RichTextEditorComponent.prototype.hideInlineToolbar = function () {\n return this.ej2Instances.hideInlineToolbar();\n };\n RichTextEditorComponent.prototype.print = function () {\n return this.ej2Instances.print();\n };\n RichTextEditorComponent.prototype.refreshUI = function () {\n return this.ej2Instances.refreshUI();\n };\n RichTextEditorComponent.prototype.removeToolbarItem = function (items) {\n return this.ej2Instances.removeToolbarItem(items);\n };\n RichTextEditorComponent.prototype.sanitizeHtml = function (value) {\n return this.ej2Instances.sanitizeHtml(value);\n };\n RichTextEditorComponent.prototype.selectAll = function () {\n return this.ej2Instances.selectAll();\n };\n RichTextEditorComponent.prototype.selectRange = function (range) {\n return this.ej2Instances.selectRange(range);\n };\n RichTextEditorComponent.prototype.showDialog = function (type) {\n return this.ej2Instances.showDialog(type);\n };\n RichTextEditorComponent.prototype.showFullScreen = function () {\n return this.ej2Instances.showFullScreen();\n };\n RichTextEditorComponent.prototype.showInlineToolbar = function () {\n return this.ej2Instances.showInlineToolbar();\n };\n RichTextEditorComponent.prototype.showSourceCode = function () {\n return this.ej2Instances.showSourceCode();\n };\n RichTextEditorComponent = __decorate([\n EJComponentDecorator({\n props: properties,\n model: {\n event: 'modelchanged'\n }\n }, isExecute)\n \n ], RichTextEditorComponent);\n return RichTextEditorComponent;\n}(ComponentBase));\nexport { RichTextEditorComponent };\nexport var RichTextEditorPlugin = {\n name: 'ejs-richtexteditor',\n install: function (Vue) {\n Vue.component(RichTextEditorPlugin.name, RichTextEditorComponent);\n }\n};\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 ('' +\n '' + content + '');\n };\n /**\n * renderDropDowns method\n *\n * @param {IDropDownRenderArgs} args - specifies the arguments\n * @returns {void}\n * @hidden\n\n */\n DropDownButtons.prototype.renderDropDowns = function (args) {\n var _this = this;\n this.initializeInstance();\n var type = args.containerType;\n var tbElement = args.container;\n model.templateItems.forEach(function (item) {\n var targetElement = undefined;\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'numberformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_NumberFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatOLItem = _this.parent.numberFormatList.types.slice();\n formatOLItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'NumberFormatList', enumerable: true }\n });\n });\n _this.numberFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-order-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'NumberFormatList', items: formatOLItem, element: targetElement\n });\n break;\n }\n case 'bulletformatlist': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_BulletFormatList', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatULItem = _this.parent.bulletFormatList.types.slice();\n formatULItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Lists', enumerable: true }, subCommand: { value: 'BulletFormatList', enumerable: true }\n });\n });\n _this.bulletFormatListDropDown = _this.toolbarRenderer.renderListDropDown({\n cssClass: 'e-unorder-list' + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n itemName: 'BulletFormatList', items: formatULItem, element: targetElement\n });\n break;\n }\n case 'formats': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Formats', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var formatItem = _this.parent.format.types.slice();\n formatItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Formats', enumerable: true }, subCommand: { value: item.value, enumerable: true }\n });\n });\n var formatContent = isNullOrUndefined(_this.parent.format.default) ? formatItem[0].text :\n _this.parent.format.default;\n _this.formatDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-formats e-icons' : ''),\n content: _this.dropdownContent(_this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItem, formatContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FORMATS_TB_BTN,\n itemName: 'Formats', items: formatItem, element: targetElement\n });\n break;\n }\n case 'fontname': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontName', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontItem = _this.parent.fontFamily.items.slice();\n fontItem.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }\n });\n });\n var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem[0].text :\n _this.parent.fontFamily.default;\n _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),\n content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItem, fontNameContent, 'text', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,\n itemName: 'FontName', items: fontItem, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontFamily.default)) {\n _this.getEditNode().style.fontFamily = _this.parent.fontFamily.default;\n }\n break;\n }\n case 'fontsize': {\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_FontSize', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n var fontsize = _this.parent.fontSize.items.slice();\n fontsize.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }\n });\n });\n var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize[1].text :\n _this.parent.fontSize.default;\n _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({\n content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text'))),\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,\n itemName: 'FontSize', items: fontsize, element: targetElement\n });\n if (!isNullOrUndefined(_this.parent.fontSize.default)) {\n _this.getEditNode().style.fontSize = _this.parent.fontSize.default;\n }\n break;\n }\n case 'alignments':\n targetElement = select('#' + _this.parent.getID() + '_' + type + '_Alignments', tbElement);\n if (isNullOrUndefined(targetElement) || targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n _this.alignDropDown = _this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS,\n itemName: 'Alignments', items: model.alignmentItems, element: targetElement\n });\n break;\n case 'align':\n _this.imageAlignmentDropDown(type, tbElement, targetElement);\n break;\n case 'display':\n _this.imageDisplayDropDown(type, tbElement, targetElement);\n break;\n case 'tablerows':\n _this.rowDropDown(type, tbElement, targetElement);\n break;\n case 'tablecolumns':\n _this.columnDropDown(type, tbElement, targetElement);\n break;\n case 'tablecell':\n _this.cellDropDown(type, tbElement, targetElement);\n break;\n case 'tablecellverticalalign':\n _this.verticalAlignDropDown(type, tbElement, targetElement);\n break;\n case 'styles':\n _this.tableStylesDropDown(type, tbElement, targetElement);\n break;\n }\n }\n });\n };\n DropDownButtons.prototype.getUpdateItems = function (items, value) {\n var dropDownItems = items.slice();\n dropDownItems.forEach(function (item) {\n Object.defineProperties(item, {\n command: { value: (value === 'Format' ? 'Formats' : 'Font'), enumerable: true },\n subCommand: { value: (value === 'Format' ? item.value : value), enumerable: true }\n });\n });\n return dropDownItems;\n };\n DropDownButtons.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var type;\n var content;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontFamily':\n if (this.fontNameDropDown) {\n for (var _b = 0, _c = Object.keys(newProp.fontFamily); _b < _c.length; _b++) {\n var fontFamily = _c[_b];\n switch (fontFamily) {\n case 'default':\n case 'width': {\n var fontItems = this.fontNameDropDown.items;\n type = !isNullOrUndefined(closest(this.fontNameDropDown.element, '.' + classes.CLS_QUICK_TB)) ?\n 'quick' : 'toolbar';\n var fontNameContent = isNullOrUndefined(this.parent.fontFamily.default) ? fontItems[0].text :\n this.parent.fontFamily.default;\n content = this.dropdownContent(this.parent.fontFamily.width, type, ((type === 'quick') ? '' : getDropDownValue(fontItems, fontNameContent, 'text', 'text')));\n this.fontNameDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n this.getEditNode().style.fontFamily = this.parent.fontFamily.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-family');\n }\n break;\n }\n case 'items':\n this.fontNameDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontFamily.items, 'FontName')\n });\n break;\n }\n }\n }\n break;\n case 'fontSize':\n if (this.fontSizeDropDown) {\n for (var _d = 0, _e = Object.keys(newProp.fontSize); _d < _e.length; _d++) {\n var fontSize = _e[_d];\n switch (fontSize) {\n case 'default':\n case 'width': {\n var fontsize = this.fontSizeDropDown.items;\n type = !isNullOrUndefined(closest(this.fontSizeDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var fontSizeContent = isNullOrUndefined(this.parent.fontSize.default) ? fontsize[1].text :\n this.parent.fontSize.default;\n content = this.dropdownContent(this.parent.fontSize.width, type, getFormattedFontSize(getDropDownValue(fontsize, fontSizeContent.replace(/\\s/g, ''), 'value', 'text')));\n this.fontSizeDropDown.setProperties({ content: content });\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n this.getEditNode().style.fontSize = this.parent.fontSize.default;\n }\n else {\n this.getEditNode().style.removeProperty('font-size');\n }\n break;\n }\n case 'items':\n this.fontSizeDropDown.setProperties({\n items: this.getUpdateItems(newProp.fontSize.items, 'FontSize')\n });\n break;\n }\n }\n }\n break;\n case 'format':\n if (this.formatDropDown) {\n for (var _f = 0, _g = Object.keys(newProp.format); _f < _g.length; _f++) {\n var format = _g[_f];\n switch (format) {\n case 'default':\n case 'width': {\n var formatItems = this.formatDropDown.items;\n type = !isNullOrUndefined(closest(this.formatDropDown.element, '.' + classes.CLS_QUICK_TB)) ? 'quick' : 'toolbar';\n var formatContent = isNullOrUndefined(this.parent.format.default) ? formatItems[0].text :\n this.parent.format.default;\n content = this.dropdownContent(this.parent.format.width, type, ((type === 'quick') ? '' : getDropDownValue(formatItems, formatContent, 'text', 'text')));\n this.formatDropDown.setProperties({ content: content });\n break;\n }\n case 'types':\n this.formatDropDown.setProperties({\n items: this.getUpdateItems(newProp.format.types, 'Format')\n });\n break;\n }\n }\n }\n break;\n }\n }\n };\n DropDownButtons.prototype.getEditNode = function () {\n return this.parent.contentModule.getEditPanel();\n };\n DropDownButtons.prototype.rowDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableRows', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-rows e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableRows',\n items: model.tableRowsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.columnDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableColumns', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableColumnsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-columns e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableColumns',\n items: model.tableColumnsItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.cellDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCell', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableRowsDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCell',\n items: model.tableCellItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.verticalAlignDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_TableCellVerticalAlign', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.tableCellVerticalAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-table-cell-ver-align e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'TableCellVerticalAlign',\n items: model.TableCellVerticalAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageDisplayDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Display', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.displayDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-display e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Display',\n items: model.imageDisplayItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.imageAlignmentDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Align', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-justify-left e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Align',\n items: model.imageAlignItems,\n element: targetElement\n });\n };\n DropDownButtons.prototype.tableStylesDropDown = function (type, tbElement, targetElement) {\n targetElement = select('#' + this.parent.getID() + '_' + type + '_Styles', tbElement);\n if (targetElement.classList.contains(classes.CLS_DROPDOWN_BTN)) {\n return;\n }\n this.imageAlignDropDown = this.toolbarRenderer.renderDropDownButton({\n iconCss: 'e-style e-icons',\n cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ICONS + ' ' + classes.CLS_QUICK_DROPDOWN,\n itemName: 'Styles',\n items: this.parent.tableSettings.styles,\n element: targetElement\n });\n };\n DropDownButtons.prototype.removeDropDownClasses = function (target) {\n removeClass([target], [\n classes.CLS_DROPDOWN_BTN,\n classes.CLS_DROPDOWN_POPUP,\n classes.CLS_DROPDOWN_ICONS,\n classes.CLS_DROPDOWN_ITEMS\n ]);\n };\n /**\n * destroyDropDowns method\n *\n * @returns {void}\n * @hidden\n\n */\n DropDownButtons.prototype.destroyDropDowns = function () {\n if (this.formatDropDown) {\n this.removeDropDownClasses(this.formatDropDown.element);\n this.formatDropDown.destroy();\n }\n if (this.fontNameDropDown) {\n this.removeDropDownClasses(this.fontNameDropDown.element);\n this.fontNameDropDown.destroy();\n }\n if (this.fontSizeDropDown) {\n this.removeDropDownClasses(this.fontSizeDropDown.element);\n this.fontSizeDropDown.destroy();\n }\n if (this.alignDropDown) {\n this.removeDropDownClasses(this.alignDropDown.element);\n this.alignDropDown.destroy();\n }\n if (this.imageAlignDropDown) {\n this.removeDropDownClasses(this.imageAlignDropDown.element);\n this.imageAlignDropDown.destroy();\n }\n if (this.displayDropDown) {\n this.removeDropDownClasses(this.displayDropDown.element);\n this.displayDropDown.destroy();\n }\n if (this.tableRowsDropDown) {\n this.removeDropDownClasses(this.tableRowsDropDown.element);\n this.tableRowsDropDown.destroy();\n }\n if (this.tableColumnsDropDown) {\n this.removeDropDownClasses(this.tableColumnsDropDown.element);\n this.tableColumnsDropDown.destroy();\n }\n if (this.tableCellVerticalAlignDropDown) {\n this.removeDropDownClasses(this.tableCellVerticalAlignDropDown.element);\n this.tableCellVerticalAlignDropDown.destroy();\n }\n if (this.numberFormatListDropDown) {\n this.removeDropDownClasses(this.numberFormatListDropDown.element);\n this.numberFormatListDropDown.destroy();\n }\n if (this.bulletFormatListDropDown) {\n this.removeDropDownClasses(this.bulletFormatListDropDown.element);\n this.bulletFormatListDropDown.destroy();\n }\n };\n DropDownButtons.prototype.setRtl = function (args) {\n if (this.formatDropDown) {\n this.formatDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontNameDropDown) {\n this.fontNameDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.fontSizeDropDown) {\n this.fontSizeDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.alignDropDown) {\n this.alignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageAlignDropDown) {\n this.imageAlignDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.displayDropDown) {\n this.displayDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.numberFormatListDropDown) {\n this.numberFormatListDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.bulletFormatListDropDown) {\n this.bulletFormatListDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n DropDownButtons.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.beforeDropDownItemRender, this.beforeRender, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n DropDownButtons.prototype.onIframeMouseDown = function () {\n dispatchEvent(document, 'mousedown');\n };\n DropDownButtons.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.beforeDropDownItemRender, this.beforeRender);\n this.parent.off(events.destroy, this.removeEventListener);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return DropDownButtons;\n}());\nexport { DropDownButtons };\n","import { select, detach, extend } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { getIndex, toObjectLowerCase } from '../base/util';\nimport { templateItems, tools } from '../models/items';\n/**\n * `Color Picker` module is used to handle ColorPicker actions.\n */\nvar ColorPickerInput = /** @class */ (function () {\n function ColorPickerInput(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n ColorPickerInput.prototype.initializeInstance = function () {\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n };\n /**\n * renderColorPickerInput method\n *\n * @param {IColorPickerRenderArgs} args - specify the arguments.\n * @returns {void}\n * @hidden\n\n */\n ColorPickerInput.prototype.renderColorPickerInput = function (args) {\n var _this = this;\n this.initializeInstance();\n var suffixID = args.containerType;\n var tbElement = args.container;\n var targetID;\n var options;\n templateItems.forEach(function (item) {\n if (getIndex(item, args.items) !== -1) {\n switch (item) {\n case 'fontcolor': {\n targetID = _this.parent.getID() + '_' + suffixID + '_FontColor_Target';\n var fontNode = _this.parent.createElement('input');\n fontNode.id = targetID;\n fontNode.classList.add(classes.CLS_FONT_COLOR_TARGET);\n document.body.appendChild(fontNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_FontColor', tbElement),\n target: (targetID)\n };\n _this.fontColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'fontcolor');\n _this.fontColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'fontcolor', _this.fontColorPicker);\n break;\n }\n case 'backgroundcolor': {\n targetID = _this.parent.getID() + '_' + suffixID + '_BackgroundColor_Target';\n var backNode = _this.parent.createElement('input');\n backNode.id = targetID;\n backNode.classList.add(classes.CLS_BACKGROUND_COLOR_TARGET);\n document.body.appendChild(backNode);\n options = {\n cssClass: _this.tools[item.toLocaleLowerCase()].icon\n + ' ' + classes.CLS_RTE_ELEMENTS + ' ' + classes.CLS_ICONS,\n value: _this.tools[item.toLocaleLowerCase()].value,\n command: _this.tools[item.toLocaleLowerCase()].command,\n subCommand: _this.tools[item.toLocaleLowerCase()].subCommand,\n element: select('#' + _this.parent.getID() + '_' + suffixID + '_BackgroundColor', tbElement),\n target: (targetID)\n };\n _this.backgroundColorPicker = _this.toolbarRenderer.renderColorPicker(options, 'backgroundcolor');\n _this.backgroundColorDropDown = _this.toolbarRenderer.renderColorPickerDropDown(options, 'backgroundcolor', _this.backgroundColorPicker, _this.defaultColorPicker);\n break;\n }\n }\n }\n });\n };\n ColorPickerInput.prototype.destroy = function () {\n this.removeEventListener();\n this.destroyColorPicker();\n };\n /**\n * destroyColorPicker method\n *\n * @returns {void}\n * @hidden\n\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 this.defaultColorPicker = innerEle.children[0].style.borderBottomColor;\n detach(innerEle);\n }\n this.backgroundColorDropDown.destroy();\n }\n };\n ColorPickerInput.prototype.setRtl = function (args) {\n if (this.fontColorPicker) {\n this.fontColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.fontColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.backgroundColorPicker) {\n this.backgroundColorPicker.setProperties({ enableRtl: args.enableRtl });\n this.backgroundColorDropDown.setProperties({ enableRtl: args.enableRtl });\n }\n };\n ColorPickerInput.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRenderComplete, this.renderColorPickerInput, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n };\n ColorPickerInput.prototype.onPropertyChanged = function (model) {\n var newProp = model.newProp;\n var element;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'fontColor':\n if (this.fontColorPicker) {\n for (var _b = 0, _c = Object.keys(newProp.fontColor); _b < _c.length; _b++) {\n var font = _c[_b];\n switch (font) {\n case 'default': {\n this.fontColorPicker.setProperties({ value: newProp.fontColor.default });\n element = this.fontColorDropDown.element;\n var fontBorder = element.querySelector('.' + this.tools['fontcolor'].icon);\n fontBorder.style.borderBottomColor = newProp.fontColor.default;\n break;\n }\n case 'mode':\n this.fontColorPicker.setProperties({ mode: newProp.fontColor.mode });\n break;\n case 'columns':\n this.fontColorPicker.setProperties({ columns: newProp.fontColor.columns });\n break;\n case 'colorCode':\n this.fontColorPicker.setProperties({ presetColors: newProp.fontColor.colorCode });\n break;\n case 'modeSwitcher':\n this.fontColorPicker.setProperties({ modeSwitcher: newProp.fontColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n case 'backgroundColor':\n if (this.backgroundColorPicker) {\n for (var _d = 0, _e = Object.keys(newProp.backgroundColor); _d < _e.length; _d++) {\n var background = _e[_d];\n switch (background) {\n case 'default': {\n this.backgroundColorPicker.setProperties({ value: newProp.backgroundColor.default });\n element = this.backgroundColorDropDown.element;\n var backgroundBorder = element.querySelector('.' + this.tools['backgroundcolor'].icon);\n backgroundBorder.style.borderBottomColor = newProp.backgroundColor.default;\n break;\n }\n case 'mode':\n this.backgroundColorPicker.setProperties({ mode: newProp.backgroundColor.mode });\n break;\n case 'columns':\n this.backgroundColorPicker.setProperties({ columns: newProp.backgroundColor.columns });\n break;\n case 'colorCode':\n this.backgroundColorPicker.setProperties({ presetColors: newProp.backgroundColor.colorCode });\n break;\n case 'modeSwitcher':\n this.backgroundColorPicker.setProperties({ modeSwitcher: newProp.backgroundColor.modeSwitcher });\n break;\n }\n }\n }\n break;\n }\n }\n };\n ColorPickerInput.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRenderComplete, this.renderColorPickerInput);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroyColorPicker, this.destroyColorPicker);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n };\n return ColorPickerInput;\n}());\nexport { ColorPickerInput };\n","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};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Event, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {SplitButtonModel} options - Specifies the splitbutton model\n * @param {string|HTMLButtonElement} element - Specifies the element\n * @hidden\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n *\n * @private\n * @returns {void}\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = this.createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = this.createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the Component rendering.\n *\n * @returns {void}\n * @private\n */\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.renderControl();\n };\n SplitButton.prototype.renderControl = function () {\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n this.renderComplete();\n };\n /**\n * Adds a new item to the menu. By default, new item appends to the list as the last item,\n * but you can insert based on the text parameter.\n *\n * @param { ItemModel[] } items - Specifies an array of JSON data.\n * @param { string } text - Specifies the text to insert the newly added item in the menu.\n * @returns {void}.\n */\n SplitButton.prototype.addItems = function (items, text) {\n _super.prototype.addItems.call(this, items, text);\n this.secondaryBtnObj.items = this.items;\n };\n /**\n * Removes the items from the menu.\n *\n * @param { string[] } items - Specifies an array of string to remove the items.\n * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n * @returns {void}.\n */\n SplitButton.prototype.removeItems = function (items, isUniqueId) {\n _super.prototype.removeItems.call(this, items, isUniqueId);\n this.secondaryBtnObj.items = this.items;\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n iconPosition: this.iconPosition,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel);\n this.primaryBtnObj.createElement = this.createElement;\n this.primaryBtnObj.appendTo(this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = this.createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n createPopupOnClick: this.createPopupOnClick\n };\n dropDownBtnModel.beforeItemRender = function (args) {\n if (_this.createPopupOnClick) {\n _this.secondaryBtnObj.dropDown.relateTo = _this.wrapper;\n _this.dropDown = _this.secondaryBtnObj.dropDown;\n }\n _this.trigger('beforeItemRender', args);\n };\n dropDownBtnModel.open = function (args) {\n _this.trigger('open', args);\n };\n dropDownBtnModel.close = function (args) {\n _this.trigger('close', args);\n };\n dropDownBtnModel.select = function (args) {\n _this.trigger('select', args);\n };\n dropDownBtnModel.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n dropDownBtnModel.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeClose', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n if (!this.createPopupOnClick) {\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n }\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent + ' splitbutton', 'aria-owns': this.element.id + '_dropdownbtn-popup'\n });\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @returns {void}\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n var classList = [RTL];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n if (this.element) {\n var element = document.getElementById(this.element.id);\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], classList);\n ['aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n }\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n _super.prototype.destroy.call(this);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {SplitButtonModel} newProp - Specifies new properties\n * @param {SplitButtonModel} oldProp - Specifies old properties\n * @returns {void}\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'iconPosition', 'cssClass', 'disabled', 'enableRtl'];\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl', 'createPopupOnClick'];\n if (Object.keys(newProp).indexOf('items') > -1) {\n this.secondaryBtnObj.items = newProp.items;\n this.secondaryBtnObj.dataBind();\n }\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n }\n }\n };\n /**\n * Sets the focus to SplitButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n SplitButton.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"created\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\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 { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n // eslint-disable-next-line\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) == \"none\") {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? this.min.toString() : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? parseFloat(formatUnit(this.min.toString())) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isMaterialTooltip = this.isMaterial && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': min.toString(), 'aria-valuemax': max.toString()\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n this.firstHandle.classList.add(classNames.sliderTabHandle);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n this.secondHandle.classList.add(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n _this.tooltipObj.content = observedArgs.text;\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || (this.isMaterial && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isBootstrap4 || this.isTailwind || this.isBootstrap5,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.focusHandle = function () {\n if (!this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.getHandle().classList.add(classNames.sliderTabHandle);\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span, tickWidth);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement, tickWidth) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n this.focusHandle();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: this.tooltipObj.content, isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min > this.max) {\n this.min = this.max;\n }\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && this.handlePos2 < this.handlePos1) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n // eslint-disable-next-line\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n // eslint-disable-next-line\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n // eslint-disable-next-line\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n if (evt.target === handle) {\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = this.isMaterial && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n this.changeEvent('changed', evt);\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === this.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, this.min, 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (handlepos > this.handlePos2) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (handlepos < this.handlePos1) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n this.focusHandle();\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n var curTarget = event.currentTarget;\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && this.tooltipObj && this.isMaterialTooltip &&\n !curTarget.classList.contains(classNames.sliderHandleFocused) &&\n !curTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeMaterialTooltip();\n }\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n * @method destroy\n * @return {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition = this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\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};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n createPopupOnClick: this.createPopupOnClick,\n open: this.onOpen.bind(this),\n click: function () {\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.split(' '));\n }\n if (Browser.isDevice) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'presentation' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n if (this.value === null) {\n this.value = '#008000ff';\n }\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat();\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat();\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb));\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat();\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n if (this.enableOpacity) {\n this.setProperties({ 'value': cValue }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba },\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","import { addClass, Browser, removeClass, EventHandler, formatUnit, isNullOrUndefined, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { getInstance, closest, selectAll, detach } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport * as classes from '../base/classes';\nimport * as events from '../base/constant';\nimport { CLS_TOOLBAR, CLS_DROPDOWN_BTN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_INLINE_DROPDOWN, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_BULLETFORMATLIST_TB_BTN, CLS_NUMBERFORMATLIST_TB_BTN, CLS_LIST_PRIMARY_CONTENT } from '../base/classes';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { hasClass } from '../base/util';\n/**\n * `Toolbar renderer` module is used to render toolbar in RichTextEditor.\n *\n * @hidden\n\n */\nvar ToolbarRenderer = /** @class */ (function () {\n /**\n * Constructor for toolbar renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n */\n function ToolbarRenderer(parent) {\n this.parent = parent;\n this.wireEvent();\n }\n ToolbarRenderer.prototype.wireEvent = function () {\n this.parent.on(events.destroy, this.unWireEvent, this);\n };\n ToolbarRenderer.prototype.unWireEvent = function () {\n this.parent.off(events.destroy, this.unWireEvent);\n if (this.popupOverlay) {\n EventHandler.remove(this.popupOverlay, 'click touchmove', this.onPopupOverlay);\n }\n this.removePopupContainer();\n };\n ToolbarRenderer.prototype.toolbarBeforeCreate = function (e) {\n if (this.mode === 'Extended') {\n e.enableCollision = false;\n }\n };\n ToolbarRenderer.prototype.toolbarCreated = function () {\n this.parent.notify(events.toolbarCreated, this);\n };\n ToolbarRenderer.prototype.toolbarClicked = function (args) {\n if (!this.parent.enabled) {\n return;\n }\n if (!this.parent.readonly || isNullOrUndefined(args.item)) {\n this.parent.notify(events.toolbarClick, args);\n }\n this.parent.trigger('toolbarClick', args);\n };\n ToolbarRenderer.prototype.dropDownSelected = function (args) {\n this.parent.notify(events.dropDownSelect, args);\n this.onPopupOverlay();\n };\n ToolbarRenderer.prototype.beforeDropDownItemRender = function (args) {\n if (this.parent.readonly || !this.parent.enabled) {\n return;\n }\n this.parent.notify(events.beforeDropDownItemRender, args);\n };\n ToolbarRenderer.prototype.dropDownOpen = function (args) {\n if (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1 && !isNOU(args.element.parentElement.querySelector('.e-cell-merge')) &&\n (!isNOU(args.element.parentElement.querySelector('.e-cell-horizontal-split')) || !isNOU(args.element.parentElement.querySelector('.e-cell-vertical-split')))) {\n var listEle = args.element.querySelectorAll('li');\n if (this.parent.inputElement.querySelectorAll('.e-cell-select').length === 1) {\n addClass([listEle[0]], 'e-disabled');\n removeClass([listEle[1], listEle[2]], 'e-disabled');\n }\n else if (this.parent.inputElement.querySelectorAll('.e-cell-select').length > 1) {\n removeClass([listEle[0]], 'e-disabled');\n addClass([listEle[1], listEle[2]], 'e-disabled');\n }\n }\n if (Browser.isDevice && !args.element.parentElement.classList.contains(classes.CLS_QUICK_DROPDOWN)) {\n this.popupModal(args.element.parentElement);\n }\n this.parent.notify(events.selectionSave, args);\n };\n ToolbarRenderer.prototype.dropDownClose = function (args) {\n this.removePopupContainer();\n this.parent.notify(events.selectionRestore, args);\n };\n ToolbarRenderer.prototype.removePopupContainer = function () {\n if (Browser.isDevice && !isNullOrUndefined(this.popupContainer)) {\n var popupEle = this.popupContainer.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n this.popupContainer.parentNode.insertBefore(popupEle, this.popupContainer.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(this.popupContainer);\n this.popupContainer = undefined;\n }\n };\n /**\n * renderToolbar method\n *\n * @param {IToolbarOptions} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderToolbar = function (args) {\n this.setPanel(args.target);\n this.renderPanel();\n this.mode = args.overflowMode;\n args.rteToolbarObj.toolbarObj = new Toolbar({\n items: args.items,\n width: '100%',\n overflowMode: args.overflowMode,\n beforeCreate: this.toolbarBeforeCreate.bind(this),\n created: this.toolbarCreated.bind(this),\n clicked: this.toolbarClicked.bind(this),\n enablePersistence: args.enablePersistence,\n enableRtl: args.enableRtl\n });\n args.rteToolbarObj.toolbarObj.isStringTemplate = true;\n args.rteToolbarObj.toolbarObj.createElement = this.parent.createElement;\n args.rteToolbarObj.toolbarObj.appendTo(args.target);\n };\n /**\n * renderDropDownButton method\n *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderDropDownButton = function (args) {\n var _this = this;\n var css;\n args.element.classList.add(CLS_DROPDOWN_BTN);\n css = args.cssClass + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN;\n if (this.parent.inlineMode.enable && Browser.isDevice) {\n css = css + ' ' + CLS_INLINE_DROPDOWN;\n }\n // eslint-disable-next-line\n var proxy = this;\n var dropDown = new DropDownButton({\n items: args.items,\n iconCss: args.iconCss,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n // eslint-disable-next-line\n for (var index = 0; index < args.element.childNodes.length; index++) {\n var divNode = _this.parent.createElement('div');\n divNode.innerHTML = dropDown.content.trim();\n if (divNode.textContent.trim() !== ''\n && args.element.childNodes[index].textContent.trim() === divNode.textContent.trim()) {\n if (!args.element.childNodes[index].classList.contains('e-active')) {\n addClass([args.element.childNodes[index]], 'e-active');\n }\n }\n else {\n removeClass([args.element.childNodes[index]], 'e-active');\n }\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n return dropDown;\n };\n /**\n * renderListDropDown method\n *\n * @param {IDropDownModel} args - specifies the the arguments.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderListDropDown = function (args) {\n // eslint-disable-next-line\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((args.itemName === 'NumberFormatList') ? CLS_NUMBERFORMATLIST_TB_BTN : CLS_BULLETFORMATLIST_TB_BTN));\n var content = proxy.parent.createElement('span', { className: CLS_LIST_PRIMARY_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n items: args.items,\n cssClass: css,\n content: args.content,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n select: this.dropDownSelected.bind(this),\n beforeOpen: function (args) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n args.cancel = true;\n return;\n }\n var element = (args.event) ? args.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n if (args.event && args.event.type === 'click' && (element.classList.contains(CLS_LIST_PRIMARY_CONTENT)\n || element.parentElement.classList.contains(CLS_LIST_PRIMARY_CONTENT))) {\n args.cancel = true;\n return;\n }\n proxy.parent.notify(events.beforeDropDownOpen, args);\n },\n close: this.dropDownClose.bind(this),\n open: this.dropDownOpen.bind(this),\n beforeItemRender: this.beforeDropDownItemRender.bind(this)\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n dropDown.appendTo(args.element);\n args.element.tabIndex = -1;\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n if (args.element.childElementCount === 1) {\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n }\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n return dropDown;\n };\n // eslint-disable-next-line\n ToolbarRenderer.prototype.onPopupOverlay = function (args) {\n if (!isNullOrUndefined(this.popupOverlay)) {\n closest(this.popupOverlay, '.e-popup-container').style.display = 'none';\n this.popupOverlay.style.display = 'none';\n removeClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.setIsModel = function (element) {\n if (!closest(element, '.e-popup-container')) {\n this.popupContainer = this.parent.createElement('div', {\n className: 'e-rte-modal-popup e-popup-container e-center'\n });\n element.parentNode.insertBefore(this.popupContainer, element);\n this.popupContainer.appendChild(element);\n this.popupContainer.style.zIndex = element.style.zIndex;\n this.popupContainer.style.display = 'flex';\n element.style.position = 'relative';\n addClass([element], 'e-popup-modal');\n this.popupOverlay = this.parent.createElement('div', { className: 'e-popup-overlay' });\n // eslint-disable-next-line\n this.popupOverlay.style.zIndex = (parseInt(element.style.zIndex, null) - 1).toString();\n this.popupOverlay.style.display = 'block';\n this.popupContainer.appendChild(this.popupOverlay);\n EventHandler.add(this.popupOverlay, 'click touchmove', this.onPopupOverlay, this);\n }\n else {\n element.parentElement.style.display = 'flex';\n this.popupOverlay = element.nextElementSibling;\n this.popupOverlay.style.display = 'block';\n addClass([this.popupOverlay], 'e-popup-overlay');\n }\n };\n ToolbarRenderer.prototype.paletteSelection = function (dropDownArgs, currentElement) {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var colorbox = [].slice.call(selectAll('.e-tile', ele.parentElement));\n removeClass(colorbox, 'e-selected');\n var style = currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n (colorbox.filter(function (colorbox) {\n if (colorbox.style.backgroundColor === style) {\n addClass([colorbox], 'e-selected');\n }\n }));\n };\n /**\n * renderColorPickerDropDown method\n *\n * @param {IColorPickerModel} args - specifies the arguments.\n * @param {string} item - specifies the item.\n * @param {ColorPicker} colorPicker - specifies the colorpicker.\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderColorPickerDropDown = function (args, item, colorPicker, defaultColor) {\n var _this = this;\n // eslint-disable-next-line\n var proxy = this;\n var css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');\n css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));\n var content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });\n var inlineEle = proxy.parent.createElement('span', { className: args.cssClass });\n var range;\n var initialBackgroundColor = (isNullOrUndefined(defaultColor)) ? proxy.parent.backgroundColor.default : defaultColor;\n inlineEle.style.borderBottomColor = (item === 'backgroundcolor') ?\n initialBackgroundColor : proxy.parent.fontColor.default;\n content.appendChild(inlineEle);\n var dropDown = new DropDownButton({\n target: colorPicker.element.parentElement, cssClass: css,\n enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,\n beforeOpen: function (dropDownArgs) {\n if (proxy.parent.readonly || !proxy.parent.enabled) {\n dropDownArgs.cancel = true;\n return;\n }\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n proxy.currentElement = dropDown.element;\n proxy.currentDropdown = dropDown;\n proxy.paletteSelection(dropDownArgs, proxy.currentElement);\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n dropDownArgs.cancel = true;\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n proxy.parent.notify(events.selectionRestore, {});\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n var parentNode = range.startContainer.parentNode;\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n (closest(range.startContainer.parentNode, 'td,th')) ||\n (proxy.parent.iframeSettings.enable && !hasClass(parentNode.ownerDocument.querySelector('body'), 'e-lib')))\n && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, {\n item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n else {\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n var inst = getInstance(ele, ColorPicker);\n inst.showButtons = (dropDownArgs.element.querySelector('.e-color-palette')) ? false : true;\n inst.dataBind();\n }\n dropDownArgs.element.onclick = function (args) {\n if (args.target.classList.contains('e-cancel')) {\n dropDown.toggle();\n }\n };\n },\n open: function (dropDownArgs) {\n _this.setColorPickerContentWidth(colorPicker);\n var focusEle;\n var ele = dropDownArgs.element.querySelector('.e-control.e-colorpicker');\n if (dropDownArgs.element.querySelector('.e-color-palette')) {\n focusEle = ele.parentElement.querySelector('.e-palette');\n }\n else {\n focusEle = ele.parentElement.querySelector('e-handler');\n }\n if (focusEle) {\n focusEle.focus();\n }\n if (Browser.isDevice) {\n _this.popupModal(dropDownArgs.element.parentElement);\n }\n _this.pickerRefresh(dropDownArgs);\n },\n beforeClose: function (dropDownArgs) {\n var element = (dropDownArgs.event) ? dropDownArgs.event.target : null;\n if (dropDownArgs.event && dropDownArgs.event.type === 'click' && (element.classList.contains(CLS_COLOR_CONTENT)\n || element.parentElement.classList.contains(CLS_COLOR_CONTENT))) {\n var colorpickerValue = element.classList.contains(CLS_RTE_ELEMENTS) ? element.style.borderBottomColor :\n element.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor;\n range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed) {\n proxy.parent.notify(events.tableColorPickerChanged, { item: {\n command: args.command, subCommand: args.subCommand,\n value: colorpickerValue\n }\n });\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, { item: { command: args.command, subCommand: args.subCommand,\n value: colorpickerValue }\n });\n }\n return;\n }\n },\n close: function (dropDownArgs) {\n proxy.parent.notify(events.selectionRestore, {});\n var dropElement = closest(dropDownArgs.element.parentElement, '.e-popup-container');\n if (dropElement) {\n dropElement.style.display = 'none';\n dropElement.lastElementChild.style.display = 'none';\n removeClass([dropElement.lastElementChild], 'e-popup-overlay');\n }\n if (Browser.isDevice && !isNullOrUndefined(dropElement)) {\n var popupEle = dropElement.querySelector('.e-dropdown-popup.e-tbar-btn.e-control');\n if (popupEle) {\n dropElement.parentNode.insertBefore(popupEle, dropElement.nextSibling);\n popupEle.style.removeProperty('position');\n removeClass([popupEle], 'e-popup-modal');\n }\n detach(dropElement);\n proxy.popupContainer = undefined;\n }\n }\n });\n dropDown.isStringTemplate = true;\n dropDown.createElement = proxy.parent.createElement;\n args.element.setAttribute('role', 'button');\n dropDown.appendTo(args.element);\n var popupElement = document.getElementById(dropDown.element.id + '-popup');\n popupElement.setAttribute('aria-owns', this.parent.getID());\n dropDown.element.insertBefore(content, dropDown.element.querySelector('.e-caret'));\n args.element.tabIndex = -1;\n dropDown.element.removeAttribute('type');\n dropDown.element.onmousedown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n dropDown.element.onkeydown = function () {\n proxy.parent.notify(events.selectionSave, {});\n };\n return dropDown;\n };\n ToolbarRenderer.prototype.pickerRefresh = function (dropDownArgs) {\n if (this.parent.backgroundColor.mode === 'Picker') {\n var popupElem = dropDownArgs.element.parentElement;\n popupElem.style.width = (popupElem.offsetWidth + 5).toString() + 'px';\n getInstance(popupElem, Popup).refreshPosition(popupElem);\n popupElem.style.width = (popupElem.offsetWidth - 5).toString() + 'px';\n }\n };\n ToolbarRenderer.prototype.popupModal = function (element) {\n var popupInst = getInstance(element, Popup);\n popupInst.relateTo = document.body;\n popupInst.position = { X: 0, Y: 0 };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupInst.dataBind();\n this.setIsModel(element);\n };\n ToolbarRenderer.prototype.setColorPickerContentWidth = function (colorPicker) {\n var colorPickerContent = colorPicker.element.nextSibling;\n if (colorPickerContent.style.width === '0px') {\n colorPickerContent.style.width = '';\n var borderWidth = parseInt(getComputedStyle(colorPickerContent).borderBottomWidth, 10);\n colorPickerContent.style.width = formatUnit(colorPickerContent.children[0].offsetWidth\n + borderWidth + borderWidth);\n }\n };\n /**\n * renderColorPicker method\n *\n * @param {IColorPickerModel} args - specifies the arguments\n * @param {string} item - specifies the string values\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderColorPicker = function (args, item) {\n // eslint-disable-next-line\n var proxy = this;\n var value;\n var colorPicker = new ColorPicker({\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl,\n inline: true,\n value: '#fff',\n created: function () {\n var value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;\n colorPicker.setProperties({ value: value });\n },\n mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),\n modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),\n beforeTileRender: function (args) {\n args.element.classList.add(CLS_COLOR_PALETTE);\n args.element.classList.add(CLS_CUSTOM_TILE);\n if (args.value === '') {\n args.element.classList.add(CLS_NOCOLOR_ITEM);\n }\n },\n change: function (colorPickerArgs) {\n var colorpickerValue = colorPickerArgs.currentValue.rgba;\n colorPickerArgs.item = {\n command: args.command,\n subCommand: args.subCommand,\n value: colorpickerValue\n };\n proxy.parent.notify(events.selectionRestore, {});\n proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());\n if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' || range.startContainer.nodeName === 'BODY' ||\n closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor') {\n proxy.parent.notify(events.tableColorPickerChanged, colorPickerArgs);\n }\n else {\n proxy.parent.notify(events.colorPickerChanged, colorPickerArgs);\n }\n proxy.currentDropdown.toggle();\n },\n beforeModeSwitch: function (args) {\n value = colorPicker.value;\n if (value === '') {\n colorPicker.setProperties({ value: ((args.mode === 'Picker') ? '#008000ff' : '') }, true);\n }\n colorPicker.showButtons = args.mode === 'Palette' ? false : true;\n }\n });\n colorPicker.isStringTemplate = true;\n colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;\n colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :\n this.parent.fontColor.colorCode;\n colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;\n colorPicker.createElement = this.parent.createElement;\n colorPicker.appendTo(document.getElementById(args.target));\n return colorPicker;\n };\n /**\n * The function is used to render Rich Text Editor toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n ToolbarRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_TOOLBAR);\n };\n /**\n * Get the toolbar element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n ToolbarRenderer.prototype.getPanel = function () {\n return this.toolbarPanel;\n };\n /**\n * Set the toolbar element of RichTextEditor\n *\n * @returns {void}\n * @param {Element} panel - specifies the element.\n * @hidden\n\n */\n ToolbarRenderer.prototype.setPanel = function (panel) {\n this.toolbarPanel = panel;\n };\n return ToolbarRenderer;\n}());\nexport { ToolbarRenderer };\n","import { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { ServiceLocator } from '../services/service-locator';\nimport { RendererFactory } from '../services/renderer-factory';\n/**\n * `ToolbarAction` module is used to toolbar click action\n */\nvar ToolbarAction = /** @class */ (function () {\n function ToolbarAction(parent) {\n this.parent = parent;\n this.addEventListener();\n this.serviceLocator = new ServiceLocator;\n this.serviceLocator.register('rendererFactory', new RendererFactory);\n }\n ToolbarAction.prototype.addEventListener = function () {\n this.parent.on(events.toolbarClick, this.toolbarClick, this);\n this.parent.on(events.dropDownSelect, this.dropDownSelect, this);\n this.parent.on(events.colorPickerChanged, this.renderSelection, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n ToolbarAction.prototype.toolbarClick = function (args) {\n if (isNOU(args.item)) {\n return;\n }\n if (!isNOU(args.item.controlParent)) {\n // eslint-disable-next-line\n var activeEle = args.item.controlParent\n .activeEle;\n if (activeEle) {\n activeEle.tabIndex = -1;\n }\n }\n if (args.item.command === 'NumberFormatList' || args.item.command === 'BulletFormatList') {\n if (args.originalEvent.target.classList.contains('e-order-list') || args.originalEvent.target.classList.contains('e-unorder-list')) {\n args.item.command = 'Lists';\n args.item.subCommand = args.item.subCommand === 'NumberFormatList' ? 'OL' : 'UL';\n }\n }\n if (args.item.command === 'Lists') {\n if (args.originalEvent.target.classList.contains('e-caret') &&\n (args.originalEvent.target.parentElement.classList.contains('e-rte-bulletformatlist-dropdown') || args.originalEvent.target.parentElement.classList.contains('e-rte-numberformatlist-dropdown'))) {\n args.item.command = args.item.subCommand = null;\n }\n }\n this.parent.notify(events.htmlToolbarClick, args);\n this.parent.notify(events.markdownToolbarClick, args);\n };\n ToolbarAction.prototype.dropDownSelect = function (e) {\n this.parent.notify(events.selectionRestore, {});\n if (!(document.body.contains(document.body.querySelector('.e-rte-quick-toolbar'))\n && e.item && (e.item.command === 'Images' || e.item.command === 'Display' || e.item.command === 'Table'))) {\n var value = e.item.controlParent && this.parent.quickToolbarModule && this.parent.quickToolbarModule.tableQTBar\n && this.parent.quickToolbarModule.tableQTBar.element.contains(e.item.controlParent.element) ? 'Table' : null;\n if (e.item.command === 'Lists') {\n var listItem = { listStyle: e.item.value, listImage: e.item.listImage, type: e.item.subCommand };\n this.parent.formatter.process(this.parent, e, e.originalEvent, listItem);\n }\n else {\n this.parent.formatter.process(this.parent, e, e.originalEvent, value);\n }\n }\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.renderSelection = function (args) {\n this.parent.notify(events.selectionRestore, {});\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n this.parent.notify(events.selectionSave, {});\n };\n ToolbarAction.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarClick, this.toolbarClick);\n this.parent.off(events.dropDownSelect, this.dropDownSelect);\n this.parent.off(events.colorPickerChanged, this.renderSelection);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n return ToolbarAction;\n}());\nexport { ToolbarAction };\n","import { addClass, Browser, EventHandler, detach, removeClass, select, selectAll, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType, ToolbarType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice } from '../base/util';\nimport { updateDropDownFontFormatLocale } from '../base/util';\nimport * as model from '../models/items';\nimport { ToolbarRenderer } from '../renderer/toolbar-renderer';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ToolbarAction } from './toolbar-action';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar Toolbar = /** @class */ (function () {\n function Toolbar(parent, serviceLocator) {\n this.parent = parent;\n this.isToolbar = false;\n this.locator = serviceLocator;\n this.isTransformChild = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n model.updateDropDownLocale(this.parent);\n updateDropDownFontFormatLocale(this.parent);\n this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));\n this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);\n this.baseToolbar = new BaseToolbar(this.parent, this.locator);\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, model.tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = model.tools;\n }\n }\n Toolbar.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editableElement = this.contentRenderer.getEditPanel();\n this.editPanel = this.contentRenderer.getPanel();\n };\n Toolbar.prototype.toolbarBindEvent = function () {\n if (!this.parent.inlineMode.enable) {\n this.keyBoardModule = new KeyboardEvents(this.getToolbarElement(), {\n keyAction: this.toolBarKeyDown.bind(this), keyConfigs: this.parent.formatter.keyConfig, eventName: 'keydown'\n });\n }\n };\n Toolbar.prototype.toolBarKeyDown = function (e) {\n switch (e.action) {\n case 'escape':\n this.parent.contentModule.getEditPanel().focus();\n break;\n }\n };\n Toolbar.prototype.createToolbarElement = function () {\n this.tbElement = this.parent.createElement('div', { id: this.parent.getID() + '_toolbar' });\n if (!Browser.isDevice && this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n else {\n if (this.parent.toolbarSettings.enableFloating && !this.parent.inlineMode.enable) {\n this.tbWrapper = this.parent.createElement('div', {\n id: this.parent.getID() + '_toolbar_wrapper',\n innerHTML: this.tbElement.outerHTML,\n className: classes.CLS_TB_WRAP\n });\n this.tbElement = this.tbWrapper.firstElementChild;\n this.parent.element.insertBefore(this.tbWrapper, this.editPanel);\n }\n else {\n this.parent.element.insertBefore(this.tbElement, this.editPanel);\n }\n }\n };\n Toolbar.prototype.getToolbarMode = function () {\n var tbMode;\n switch (this.parent.toolbarSettings.type) {\n case ToolbarType.Expand:\n tbMode = 'Extended';\n break;\n case ToolbarType.Scrollable:\n tbMode = 'Scrollable';\n break;\n default:\n tbMode = 'MultiRow';\n }\n if (isIDevice() && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tbMode = ToolbarType.Scrollable;\n }\n return tbMode;\n };\n Toolbar.prototype.checkToolbarResponsive = function (ele) {\n if (!Browser.isDevice || isIDevice()) {\n return false;\n }\n var tBarMode;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n tBarMode = ToolbarType.MultiRow;\n }\n else {\n tBarMode = this.parent.toolbarSettings.type;\n }\n this.baseToolbar.render({\n container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items,\n mode: tBarMode,\n target: ele\n });\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([ele], ['e-rte-tb-mobile']);\n if (this.parent.inlineMode.enable) {\n this.addFixedTBarClass();\n }\n else {\n addClass([ele], [classes.CLS_TB_STATIC]);\n }\n }\n this.wireEvents();\n this.dropDownModule.renderDropDowns({\n container: ele,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),\n items: this.parent.toolbarSettings.items\n });\n return true;\n };\n Toolbar.prototype.checkIsTransformChild = function () {\n this.isTransformChild = false;\n var transformElements = selectAll('[style*=\"transform\"]', document);\n for (var i = 0; i < transformElements.length; i++) {\n if (!isNullOrUndefined(transformElements[i].contains) && transformElements[i].contains(this.parent.element)) {\n this.isTransformChild = true;\n break;\n }\n }\n };\n Toolbar.prototype.toggleFloatClass = function (e) {\n var topValue;\n var isBody = false;\n var isFloat = false;\n var scrollParent;\n var floatOffset = this.parent.floatingToolbarOffset;\n if (e && this.parent.iframeSettings.enable && this.parent.inputElement.ownerDocument === e.target) {\n scrollParent = e.target.body;\n }\n else if (e && e.target !== document) {\n scrollParent = e.target;\n }\n else {\n isBody = true;\n scrollParent = document.body;\n }\n var tbHeight = this.getToolbarHeight() + this.getExpandTBarPopHeight();\n if (this.isTransformChild) {\n topValue = 0;\n var scrollParentRelativeTop = 0;\n var trgHeight = this.parent.element.offsetHeight;\n if (isBody) {\n var bodyStyle = window.getComputedStyle(scrollParent);\n scrollParentRelativeTop = parseFloat(bodyStyle.marginTop.split('px')[0]) + parseFloat(bodyStyle.paddingTop.split('px')[0]);\n }\n var targetTop = this.parent.element.getBoundingClientRect().top;\n var scrollParentYOffset = (Browser.isMSPointer && isBody) ? window.pageYOffset : scrollParent.parentElement.scrollTop;\n var scrollParentRect = scrollParent.getBoundingClientRect();\n var scrollParentTop = (!isBody) ? scrollParentRect.top : (scrollParentRect.top + scrollParentYOffset);\n var outOfRange = ((targetTop - ((!isBody) ? scrollParentTop : 0))\n + trgHeight > tbHeight + floatOffset) ? false : true;\n if (targetTop > (scrollParentTop + floatOffset) || targetTop < -trgHeight || ((targetTop < 0) ? outOfRange : false)) {\n isFloat = false;\n removeClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n }\n else if (targetTop < (scrollParentTop + floatOffset)) {\n if (targetTop < 0) {\n topValue = (-targetTop) + scrollParentTop;\n }\n else {\n topValue = scrollParentTop - targetTop;\n }\n topValue = (isBody) ? topValue - scrollParentRelativeTop : topValue;\n addClass([this.tbElement], [classes.CLS_TB_ABS_FLOAT]);\n isFloat = true;\n }\n }\n else {\n var parent_1 = this.parent.element.getBoundingClientRect();\n if (window.innerHeight < parent_1.top) {\n return;\n }\n topValue = (e && e.target !== document) ? scrollParent.getBoundingClientRect().top : 0;\n if ((parent_1.bottom < (floatOffset + tbHeight + topValue)) || parent_1.bottom < 0 || parent_1.top > floatOffset + topValue) {\n isFloat = false;\n }\n else if (parent_1.top < floatOffset) {\n isFloat = true;\n }\n }\n if (!isFloat) {\n removeClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { top: 0 + 'px', width: '100%' });\n }\n else {\n addClass([this.tbElement], [classes.CLS_TB_FLOAT]);\n setStyleAttribute(this.tbElement, { width: this.parent.element.offsetWidth + 'px', top: (floatOffset + topValue) + 'px' });\n }\n };\n Toolbar.prototype.renderToolbar = function () {\n this.initializeInstance();\n this.createToolbarElement();\n if (this.checkToolbarResponsive(this.tbElement)) {\n return;\n }\n if (this.parent.inlineMode.enable) {\n this.parent.notify(events.renderInlineToolbar, {});\n }\n else {\n this.baseToolbar.render({\n container: 'toolbar',\n items: this.parent.toolbarSettings.items,\n mode: this.getToolbarMode(),\n target: this.tbElement\n });\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating) {\n this.checkIsTransformChild();\n this.toggleFloatClass();\n }\n addClass([this.parent.element], [classes.CLS_RTE_TB_ENABLED]);\n if (this.parent.toolbarSettings.type === ToolbarType.Expand) {\n addClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n }\n }\n }\n this.wireEvents();\n if (this.parent.inlineMode.enable && !isIDevice()) {\n this.addFixedTBarClass();\n }\n if (!this.parent.inlineMode.enable) {\n this.dropDownModule.renderDropDowns({\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.parent.notify(events.renderColorPicker, {\n container: this.tbElement,\n containerType: 'toolbar',\n items: this.parent.toolbarSettings.items\n });\n this.refreshToolbarOverflow();\n }\n var divEle = this.parent.element.querySelector('.e-rte-srctextarea');\n var iframeEle = this.parent.element.querySelector('.e-source-content');\n if ((!this.parent.iframeSettings.enable && (!isNOU(divEle) && divEle.style.display === 'block')) ||\n (this.parent.iframeSettings.enable && (!isNOU(iframeEle) && iframeEle.style.display === 'block'))) {\n this.parent.notify(events.updateToolbarItem, {\n targetItem: 'SourceCode', updateItem: 'Preview',\n baseToolbar: this.parent.getBaseToolbarObject()\n });\n this.parent.disableToolbarItem(this.parent.toolbarSettings.items);\n }\n };\n /**\n * addFixedTBarClass method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.addFixedTBarClass = function () {\n addClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n /**\n * removeFixedTBarClass method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.removeFixedTBarClass = function () {\n removeClass([this.tbElement], [classes.CLS_TB_FIXED]);\n };\n Toolbar.prototype.showFixedTBar = function () {\n addClass([this.tbElement], [classes.CLS_SHOW]);\n if (Browser.isIos) {\n addClass([this.tbElement], [classes.CLS_TB_IOS_FIX]);\n }\n };\n Toolbar.prototype.hideFixedTBar = function () {\n // eslint-disable-next-line\n (!this.isToolbar) ? removeClass([this.tbElement], [classes.CLS_SHOW, classes.CLS_TB_IOS_FIX]) : this.isToolbar = false;\n };\n /**\n * updateItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.updateItem = function (args) {\n var item = this.tools[args.updateItem.toLocaleLowerCase()];\n var trgItem = this.tools[args.targetItem.toLocaleLowerCase()];\n var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];\n if (!isNOU(index)) {\n var prefixId = this.parent.inlineMode.enable ? '_quick_' : '_toolbar_';\n args.baseToolbar.toolbarObj.items[index].id = this.parent.getID() + prefixId + item.id;\n args.baseToolbar.toolbarObj.items[index].prefixIcon = item.icon;\n args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;\n args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;\n args.baseToolbar.toolbarObj.dataBind();\n }\n else {\n this.addTBarItem(args, 0);\n }\n };\n Toolbar.prototype.updateToolbarStatus = function (args) {\n if (!this.tbElement || (this.parent.inlineMode.enable && (isIDevice() || !Browser.isDevice))) {\n return;\n }\n var options = {\n args: args,\n dropDownModule: this.dropDownModule,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.tbElement),\n tbItems: this.baseToolbar.toolbarObj.items\n };\n setToolbarStatus(options, (this.parent.inlineMode.enable ? true : false), this.parent);\n };\n Toolbar.prototype.fullScreen = function (e) {\n this.parent.fullScreenModule.showFullScreen(e);\n };\n Toolbar.prototype.hideScreen = function (e) {\n this.parent.fullScreenModule.hideFullScreen(e);\n };\n /**\n * getBaseToolbar method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getBaseToolbar = function () {\n return this.baseToolbar;\n };\n /**\n * addTBarItem method\n *\n * @param {IUpdateItemsModel} args - specifies the arguments.\n * @param {number} index - specifies the index value.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.addTBarItem = function (args, index) {\n args.baseToolbar.toolbarObj.addItems([args.baseToolbar.getObject(args.updateItem, 'toolbar')], index);\n };\n /**\n * enableTBarItems method\n *\n * @param {BaseToolbar} baseToolbar - specifies the toolbar.\n * @param {string} items - specifies the string value.\n * @param {boolean} isEnable - specifies the boolean value.\n * @param {boolean} muteToolbarUpdate - specifies the toolbar.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.enableTBarItems = function (baseToolbar, items, isEnable, muteToolbarUpdate) {\n var trgItems = getTBarItemsIndex(getCollection(items), baseToolbar.toolbarObj.items);\n this.tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n for (var i = 0; i < trgItems.length; i++) {\n var item = this.tbItems[trgItems[i]];\n if (item) {\n baseToolbar.toolbarObj.enableItems(item, isEnable);\n }\n }\n if (!select('.e-rte-srctextarea', this.parent.element) && !muteToolbarUpdate) {\n updateUndoRedoStatus(baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * removeTBarItems method\n *\n * @param {string} items - specifies the string value.\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.removeTBarItems = function (items) {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var trgItems = getTBarItemsIndex(getCollection(items), this.baseToolbar.toolbarObj.items);\n this.tbItems = (this.parent.inlineMode.enable) ? selectAll('.' + classes.CLS_TB_ITEM, this.baseToolbar.toolbarObj.element)\n : selectAll('.' + classes.CLS_TB_ITEM, this.parent.element);\n for (var i = 0; i < trgItems.length; i++) {\n this.baseToolbar.toolbarObj.removeItems(this.tbItems[trgItems[i]]);\n }\n };\n /**\n * getExpandTBarPopHeight method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getExpandTBarPopHeight = function () {\n var popHeight = 0;\n if (this.parent.toolbarSettings.type === ToolbarType.Expand && this.tbElement.classList.contains('e-extended-toolbar')) {\n var expandPopup = select('.e-toolbar-extended', this.tbElement);\n if (expandPopup && this.tbElement.classList.contains('e-expand-open')\n || expandPopup && expandPopup.classList.contains('e-popup-open')) {\n addClass([expandPopup], [classes.CLS_VISIBLE]);\n popHeight = popHeight + expandPopup.offsetHeight;\n removeClass([expandPopup], [classes.CLS_VISIBLE]);\n }\n else {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n }\n return popHeight;\n };\n /**\n * getToolbarHeight method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getToolbarHeight = function () {\n return this.tbElement.offsetHeight;\n };\n /**\n * getToolbarElement method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.getToolbarElement = function () {\n return select('.' + classes.CLS_TOOLBAR, this.parent.element);\n };\n /**\n * refreshToolbarOverflow method\n *\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.refreshToolbarOverflow = function () {\n this.baseToolbar.toolbarObj.refreshOverflow();\n };\n Toolbar.prototype.isToolbarDestroyed = function () {\n return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;\n };\n Toolbar.prototype.destroyToolbar = function () {\n if (this.isToolbarDestroyed()) {\n this.parent.unWireScrollElementsEvents();\n this.unWireEvents();\n this.parent.notify(events.destroyColorPicker, {});\n this.dropDownModule.destroyDropDowns();\n this.baseToolbar.toolbarObj.destroy();\n this.removeEventListener();\n removeClass([this.parent.element], [classes.CLS_RTE_TB_ENABLED]);\n removeClass([this.parent.element], [classes.CLS_RTE_EXPAND_TB]);\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (!isNullOrUndefined(tbWrapper)) {\n detach(tbWrapper);\n }\n else if (!isNullOrUndefined(tbElement)) {\n detach(tbElement);\n }\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.destroy = function () {\n if (this.isToolbarDestroyed()) {\n this.destroyToolbar();\n if (this.keyBoardModule) {\n this.keyBoardModule.destroy();\n }\n }\n };\n Toolbar.prototype.scrollHandler = function (e) {\n if (!this.parent.inlineMode.enable) {\n if (this.parent.toolbarSettings.enableFloating && this.getDOMVisibility(this.tbElement)) {\n this.toggleFloatClass(e.args);\n }\n }\n };\n Toolbar.prototype.getDOMVisibility = function (el) {\n if (!el.offsetParent && el.offsetWidth === 0 && el.offsetHeight === 0) {\n return false;\n }\n return true;\n };\n Toolbar.prototype.mouseDownHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.showFixedTBar();\n }\n };\n Toolbar.prototype.focusChangeHandler = function () {\n if (Browser.isDevice && this.parent.inlineMode.enable && !isIDevice()) {\n this.isToolbar = false;\n this.hideFixedTBar();\n }\n };\n Toolbar.prototype.dropDownBeforeOpenHandler = function () {\n this.isToolbar = true;\n };\n // eslint-disable-next-line\n Toolbar.prototype.tbFocusHandler = function (e) {\n var activeElm = document.activeElement;\n var isToolbaractive = closest(activeElm, '.e-rte-toolbar');\n if (activeElm === this.parent.getToolbarElement() || isToolbaractive === this.parent.getToolbarElement()) {\n var toolbarItem = this.parent.getToolbarElement().querySelectorAll('.e-expended-nav');\n for (var i = 0; i < toolbarItem.length; i++) {\n if (isNOU(this.parent.getToolbarElement().querySelector('.e-insert-table-btn'))) {\n toolbarItem[i].setAttribute('tabindex', '0');\n }\n else {\n toolbarItem[i].setAttribute('tabindex', '1');\n }\n }\n }\n };\n Toolbar.prototype.tbKeydownHandler = function (e) {\n if (e.target.classList.contains('e-dropdown-btn') ||\n e.target.getAttribute('id') === this.parent.getID() + '_toolbar_CreateTable') {\n e.target.setAttribute('tabindex', '0');\n }\n };\n Toolbar.prototype.toolbarClickHandler = function (e) {\n var trg = closest(e.originalEvent.target, '.e-hor-nav');\n if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {\n if (!trg.classList.contains('e-nav-active')) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', false);\n }\n else {\n addClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n this.parent.setContentHeight('toolbar', true);\n }\n }\n else if (Browser.isDevice || this.parent.inlineMode.enable) {\n this.isToolbar = true;\n }\n if (isNOU(trg) && this.parent.toolbarSettings.type === ToolbarType.Expand) {\n removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n if (this.parent.inlineMode.enable && isIDevice()) {\n return;\n }\n EventHandler.add(this.tbElement, 'focusin', this.tbFocusHandler, this);\n EventHandler.add(this.tbElement, 'keydown', this.tbKeydownHandler, this);\n };\n Toolbar.prototype.unWireEvents = function () {\n EventHandler.remove(this.tbElement, 'focusin', this.tbFocusHandler);\n EventHandler.remove(this.tbElement, 'keydown', this.tbKeydownHandler);\n };\n Toolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.dropDownModule = new DropDownButtons(this.parent, this.locator);\n this.toolbarActionModule = new ToolbarAction(this.parent);\n this.parent.on(events.initialEnd, this.renderToolbar, this);\n this.parent.on(events.scroll, this.scrollHandler, this);\n this.parent.on(events.bindOnEnd, this.toolbarBindEvent, this);\n this.parent.on(events.toolbarUpdated, this.updateToolbarStatus, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.refreshBegin, this.onRefresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.enableFullScreen, this.fullScreen, this);\n this.parent.on(events.disableFullScreen, this.hideScreen, this);\n this.parent.on(events.updateToolbarItem, this.updateItem, this);\n this.parent.on(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler, this);\n this.parent.on(events.expandPopupClick, this.parent.setContentHeight, this.parent);\n this.parent.on(events.focusChange, this.focusChangeHandler, this);\n this.parent.on(events.mouseDown, this.mouseDownHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseDownHandler, this);\n if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.on(events.toolbarClick, this.toolbarClickHandler, this);\n }\n };\n Toolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderToolbar);\n this.parent.off(events.scroll, this.scrollHandler);\n this.parent.off(events.bindOnEnd, this.toolbarBindEvent);\n this.parent.off(events.toolbarUpdated, this.updateToolbarStatus);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.refreshBegin, this.onRefresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.enableFullScreen, this.parent.fullScreenModule.showFullScreen);\n this.parent.off(events.disableFullScreen, this.parent.fullScreenModule.hideFullScreen);\n this.parent.off(events.updateToolbarItem, this.updateItem);\n this.parent.off(events.beforeDropDownOpen, this.dropDownBeforeOpenHandler);\n this.parent.off(events.expandPopupClick, this.parent.setContentHeight);\n this.parent.off(events.focusChange, this.focusChangeHandler);\n this.parent.off(events.mouseDown, this.mouseDownHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseDownHandler);\n if (!this.parent.inlineMode.enable && !isIDevice()) {\n this.parent.off(events.toolbarClick, this.toolbarClickHandler);\n }\n };\n Toolbar.prototype.onRefresh = function () {\n this.refreshToolbarOverflow();\n this.parent.setContentHeight('', true);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n Toolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n this.refreshToolbar();\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n this.refreshToolbar();\n };\n Toolbar.prototype.refreshToolbar = function () {\n if (isNullOrUndefined(this.baseToolbar.toolbarObj)) {\n this.baseToolbar = this.parent.getBaseToolbarObject();\n }\n var tbWrapper = select('.' + classes.CLS_TB_WRAP, this.parent.element);\n var tbElement = select('.' + classes.CLS_TOOLBAR, this.parent.element);\n if (tbElement || tbWrapper) {\n this.destroyToolbar();\n }\n if (this.parent.toolbarSettings.enable) {\n this.addEventListener();\n this.renderToolbar();\n this.parent.wireScrollElementsEvents();\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.baseToolbar, this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n this.parent.notify(events.dynamicModule, {});\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @hidden\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n *\n * @hidden\n\n */\nvar RendererFactory = /** @class */ (function () {\n function RendererFactory() {\n this.rendererMap = {};\n }\n /**\n * addRenderer method\n *\n * @param {RenderType} name - specifies the render type\n * @param {IRenderer} type - specifies the renderer.\n * @returns {void}\n * @hidden\n\n */\n RendererFactory.prototype.addRenderer = function (name, type) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n this.rendererMap[rName] = type;\n }\n };\n /**\n * getRenderer method\n *\n * @param {RenderType} name - specifies the render type\n * @returns {void}\n * @hidden\n\n */\n RendererFactory.prototype.getRenderer = function (name) {\n var rName = getEnumValue(RenderType, name);\n if (isNullOrUndefined(this.rendererMap[rName])) {\n // eslint-disable-next-line\n throw \"The renderer \" + rName + \" is not found\";\n }\n else {\n return this.rendererMap[rName];\n }\n };\n return RendererFactory;\n}());\nexport { RendererFactory };\n","/**\n * Defines types of Render\n *\n * @hidden\n\n */\nexport var RenderType;\n(function (RenderType) {\n /* eslint-disable */\n /** Defines RenderType as Toolbar */\n RenderType[RenderType[\"Toolbar\"] = 0] = \"Toolbar\";\n /** Defines RenderType as Content */\n RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n /** Defines RenderType as Popup */\n RenderType[RenderType[\"Popup\"] = 2] = \"Popup\";\n /** Defines RenderType as LinkToolbar */\n RenderType[RenderType[\"LinkToolbar\"] = 3] = \"LinkToolbar\";\n /** Defines RenderType as TextToolbar */\n RenderType[RenderType[\"TextToolbar\"] = 4] = \"TextToolbar\";\n /** Defines RenderType as ImageToolbar */\n RenderType[RenderType[\"ImageToolbar\"] = 5] = \"ImageToolbar\";\n /** Defines RenderType as InlineToolbar */\n RenderType[RenderType[\"InlineToolbar\"] = 6] = \"InlineToolbar\";\n /** Defines RenderType as TableToolbar */\n RenderType[RenderType[\"TableToolbar\"] = 7] = \"TableToolbar\";\n /* eslint-enable */\n})(RenderType || (RenderType = {}));\n/**\n * Defines types to be used as Toolbar.\n */\nexport var ToolbarType;\n(function (ToolbarType) {\n /* eslint-disable */\n /** Defines ToolbarType as Standard */\n ToolbarType[\"Expand\"] = \"Expand\";\n /** Defines ToolbarType as MultiRow */\n ToolbarType[\"MultiRow\"] = \"MultiRow\";\n /** Defines ToolbarType as Scrollable */\n ToolbarType[\"Scrollable\"] = \"Scrollable\";\n /* eslint-enable */\n})(ToolbarType || (ToolbarType = {}));\n/**\n * Defines the type of dialog, which open or close in the Rich Text Editor.\n */\nexport var DialogType;\n(function (DialogType) {\n /* eslint-disable */\n /** Defines ToolbarType as Standard */\n DialogType[\"InsertLink\"] = \"InsertLink\";\n /** Defines ToolbarType as MultiRow */\n DialogType[\"InsertImage\"] = \"InsertImage\";\n /** Defines ToolbarType as Scrollable */\n DialogType[\"InsertTable\"] = \"InsertTable\";\n /* eslint-enable */\n})(DialogType || (DialogType = {}));\n","/**\n * Defines util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined as isNOU, addClass, removeClass, selectAll, createElement } from '@syncfusion/ej2-base';\nimport { Browser, detach, SanitizeHtmlHelper, extend } from '@syncfusion/ej2-base';\nimport * as classes from '../base/classes';\nimport * as model from '../models/items';\nimport { toolsLocale, fontNameLocale, formatsLocale, numberFormatListLocale, bulletFormatListLocale } from '../models/default-locale';\nvar undoRedoItems = ['Undo', 'Redo'];\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n/**\n * @param {string} val - specifies the string value\n * @param {string} items - specifies the value\n * @returns {number} - returns the number value\n * @hidden\n */\nexport function getIndex(val, items) {\n var index = -1;\n items.some(function (item, i) {\n if (typeof item === 'string' && val === item.toLocaleLowerCase()) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n}\n/**\n * @param {Element} element - specifies the element\n * @param {string} className - specifies the string value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function hasClass(element, className) {\n var hasClass = false;\n if (element.classList.contains(className)) {\n hasClass = true;\n }\n return hasClass;\n}\n/**\n * @param {IDropDownItemModel} items - specifies the item model\n * @param {string} value - specifies the string value\n * @param {string} type - specifies the string value\n * @param {string} returnType - specifies the return type\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function getDropDownValue(items, value, type, returnType) {\n var data;\n var result;\n for (var k = 0; k < items.length; k++) {\n if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'text' && items[k].text.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n else if (type === 'subCommand' && items[k].subCommand.toLocaleLowerCase() === value.toLocaleLowerCase()) {\n data = items[k];\n break;\n }\n }\n if (!isNOU(data)) {\n switch (returnType) {\n case 'text':\n result = data.text;\n break;\n case 'value':\n result = data.value;\n break;\n case 'iconCss':\n result = data.iconCss;\n break;\n }\n }\n return result;\n}\n/**\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function getFormattedFontSize(value) {\n if (isNOU(value)) {\n return '';\n }\n return value;\n}\n/**\n * @param {MouseEvent} e - specifies the mouse event\n * @param {HTMLElement} parentElement - specifies the parent element\n * @param {boolean} isIFrame - specifies the boolean value\n * @returns {number} - returns the number\n * @hidden\n */\nexport function pageYOffset(e, parentElement, isIFrame) {\n var y = 0;\n if (isIFrame) {\n y = window.pageYOffset + parentElement.getBoundingClientRect().top + e.clientY;\n }\n else {\n y = e.pageY;\n }\n return y;\n}\n/**\n * @param {string} item - specifies the string\n * @param {ServiceLocator} serviceLocator - specifies the service locator\n * @returns {string} - returns the string\n * @hidden\n */\nexport function getTooltipText(item, serviceLocator) {\n var i10n = serviceLocator.getService('rteLocale');\n var itemLocale = toolsLocale[item];\n var tooltipText = i10n.getConstant(itemLocale);\n return tooltipText;\n}\n/**\n * @param {ISetToolbarStatusArgs} e - specifies the e element\n * @param {boolean} isPopToolbar - specifies the boolean value\n * @param {IRichTextEditor} self - specifies the parent element\n * @returns {void}\n * @hidden\n */\nexport function setToolbarStatus(e, isPopToolbar, self) {\n updateDropDownFontFormatLocale(self);\n var dropDown = e.dropDownModule;\n var data = e.args;\n var keys = Object.keys(e.args);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n for (var j = 0; j < e.tbItems.length; j++) {\n var item = e.tbItems[j].subCommand;\n var itemStr = item && item.toLocaleLowerCase();\n if (item && (itemStr === key) || (item === 'UL' && key === 'unorderedlist') || (item === 'OL' && key === 'orderedlist') ||\n (itemStr === 'pre' && key === 'insertcode')) {\n if (typeof data[key] === 'boolean') {\n if (data[key] === true) {\n addClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n else {\n removeClass([e.tbElements[j]], [classes.CLS_ACTIVE]);\n }\n }\n else if ((typeof data[key] === 'string' || data[key] === null) &&\n getIndex(key, e.parent.toolbarSettings.items) > -1) {\n var value = ((data[key]) ? data[key] : '');\n var result = '';\n switch (key) {\n case 'formats': {\n if (isNOU(dropDown.formatDropDown) || isPopToolbar ||\n (!isNOU(dropDown.formatDropDown) && dropDown.formatDropDown.isDestroyed)) {\n break;\n }\n var formatItems = e.parent.format.types;\n var formatContent = isNOU(e.parent.format.default) ? formatItems[0].text :\n e.parent.format.default;\n result = getDropDownValue(formatItems, value, 'subCommand', 'text');\n dropDown.formatDropDown.content = ('' +\n ''\n + (isNOU(result) ? formatContent : result) +\n '');\n dropDown.formatDropDown.dataBind();\n break;\n }\n case 'alignments': {\n if (isNOU(dropDown.alignDropDown) ||\n (!isNOU(dropDown.alignDropDown) && dropDown.alignDropDown.isDestroyed)) {\n break;\n }\n var alignItems = model.alignmentItems;\n result = getDropDownValue(alignItems, value, 'subCommand', 'iconCss');\n dropDown.alignDropDown.iconCss = isNOU(result) ? 'e-icons e-justify-left' : result;\n dropDown.alignDropDown.dataBind();\n break;\n }\n case 'fontname': {\n if (isNOU(dropDown.fontNameDropDown) || isPopToolbar ||\n (!isNOU(dropDown.fontNameDropDown) && dropDown.fontNameDropDown.isDestroyed)) {\n break;\n }\n var fontNameItems = e.parent.fontFamily.items;\n result = getDropDownValue(fontNameItems, value, 'value', 'text');\n var fontNameContent = isNOU(e.parent.fontFamily.default) ? fontNameItems[0].text :\n e.parent.fontFamily.default;\n var name_1 = (isNOU(result) ? fontNameContent : result);\n e.tbElements[j].title = name_1;\n dropDown.fontNameDropDown.content = ('' +\n ''\n + name_1 + '');\n dropDown.fontNameDropDown.dataBind();\n break;\n }\n case 'fontsize': {\n if (isNOU(dropDown.fontSizeDropDown) ||\n (!isNOU(dropDown.fontSizeDropDown) && dropDown.fontSizeDropDown.isDestroyed)) {\n break;\n }\n var fontSizeItems = e.parent.fontSize.items;\n var fontSizeContent = isNOU(e.parent.fontSize.default) ? fontSizeItems[1].text :\n e.parent.fontSize.default;\n result = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\\s/g, '') : value), 'value', 'text');\n dropDown.fontSizeDropDown.content = ('' +\n ''\n + getFormattedFontSize(result) + '');\n dropDown.fontSizeDropDown.dataBind();\n break;\n }\n }\n }\n }\n }\n }\n}\n/**\n * @param {string} items - specifies the string value\n * @returns {string[]} - returns the array value\n * @hidden\n */\nexport function getCollection(items) {\n if (typeof items === 'object') {\n return items;\n }\n else {\n return [items];\n }\n}\n/**\n * @param {string[]} items - specifies the array of string value\n * @param {IToolbarItemModel} toolbarItems - specifies the tool bar model\n * @returns {number} - returns the number\n * @hidden\n */\nexport function getTBarItemsIndex(items, toolbarItems) {\n var itemsIndex = [];\n for (var i = 0; i < items.length; i++) {\n for (var j = 0; j < toolbarItems.length; j++) {\n if (toolbarItems[j].type === 'Separator') {\n continue;\n }\n else {\n if (items[i] === 'OrderedList' && toolbarItems[j].subCommand === 'OL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'UnorderedList' && toolbarItems[j].subCommand === 'UL') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'InsertCode' && toolbarItems[j].subCommand === 'Pre') {\n itemsIndex.push(j);\n break;\n }\n else if (items[i] === 'FileManager' && toolbarItems[j].subCommand === 'File') {\n itemsIndex.push(j);\n break;\n }\n else if (typeof (items[i]) === 'object' && items[i].command === 'Custom') {\n itemsIndex.push(i);\n break;\n }\n else if (items[i] === toolbarItems[j].subCommand) {\n itemsIndex.push(j);\n break;\n }\n }\n }\n }\n return itemsIndex;\n}\n/**\n * @param {BaseToolbar} baseToolbar - specifies the base\n * @param {boolean} undoRedoStatus - specifies the boolean value\n * @returns {void}\n * @hidden\n */\nexport function updateUndoRedoStatus(baseToolbar, undoRedoStatus) {\n var i = 0;\n var trgItems = getTBarItemsIndex(getCollection(undoRedoItems), baseToolbar.toolbarObj.items);\n var tbItems = selectAll('.' + classes.CLS_TB_ITEM, baseToolbar.toolbarObj.element);\n var keys = Object.keys(undoRedoStatus);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var target = tbItems[trgItems[i]];\n if (target) {\n baseToolbar.toolbarObj.enableItems(target, undoRedoStatus[key]);\n }\n i++;\n }\n}\n/**\n * To dispatch the event manually\n *\n * @param {Element} element - specifies the element.\n * @param {string} type - specifies the string type.\n * @returns {void}\n * @hidden\n\n */\nexport function dispatchEvent(element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n}\n/**\n * To parse the HTML\n *\n * @param {string} value - specifies the string value\n * @returns {DocumentFragment} - returns the document\n * @hidden\n */\nexport function parseHtml(value) {\n var tempNode = createElement('template');\n tempNode.innerHTML = value;\n if (tempNode.content instanceof DocumentFragment) {\n return tempNode.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n}\n/**\n * @param {Document} docElement - specifies the document element\n * @param {Element} node - specifies the node\n * @returns {Node[]} - returns the node array\n * @hidden\n */\nexport function getTextNodesUnder(docElement, node) {\n var nodes = [];\n for (node = node.firstChild; node; node = node.nextSibling) {\n if (node.nodeType === 3) {\n nodes.push(node);\n }\n else {\n nodes = nodes.concat(getTextNodesUnder(docElement, node));\n }\n }\n return nodes;\n}\n/**\n * @param {IToolsItemConfigs} obj - specifies the configuration\n * @returns {void}\n * @hidden\n */\nexport function toObjectLowerCase(obj) {\n var convertedValue = {};\n var keys = Object.keys(obj);\n for (var i = 0; i < Object.keys(obj).length; i++) {\n convertedValue[keys[i].toLocaleLowerCase()] = obj[keys[i]];\n }\n return convertedValue;\n}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the string\n * @hidden\n */\nexport function getEditValue(value, rteObj) {\n var val;\n if (value !== null && value !== '') {\n val = rteObj.enableHtmlEncode ? updateTextNode(decode(value), rteObj) : updateTextNode(value, rteObj);\n rteObj.setProperties({ value: val }, true);\n }\n else {\n if (rteObj.enterKey === 'DIV') {\n val = rteObj.enableHtmlEncode ? '<div><br/></div>' : '

';\n }\n else if (rteObj.enterKey === 'BR') {\n val = rteObj.enableHtmlEncode ? '<br/>' : '
';\n }\n else {\n val = rteObj.enableHtmlEncode ? '<p><br/></p>' : '


';\n }\n }\n return val;\n}\n/**\n * @param {string} value - specifies the value\n * @param {IRichTextEditor} rteObj - specifies the rich text editor instance.\n * @returns {string} - returns the string\n * @hidden\n */\nexport function updateTextNode(value, rteObj) {\n var tempNode = document.createElement('div');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var insertElem = void 0;\n while (tempNode.firstChild) {\n if (rteObj.enterKey !== 'BR' && ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n if (rteObj.enterKey === 'DIV') {\n insertElem = createElement('div');\n }\n else {\n insertElem = createElement('p');\n }\n resultElm.appendChild(insertElem);\n insertElem.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = insertElem;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\n/**\n * @param {IRichTextEditor} rteObj - specifies the rte object\n * @returns {string} - returns the value based on enter configuration.\n * @hidden\n */\nexport function getDefaultValue(rteObj) {\n var currentVal;\n if (rteObj.enterKey === 'DIV') {\n currentVal = rteObj.enableHtmlEncode ? '<div><br/></div>' : '

';\n }\n else if (rteObj.enterKey === 'BR') {\n currentVal = rteObj.enableHtmlEncode ? '<br/>' : '
';\n }\n else {\n currentVal = rteObj.enableHtmlEncode ? '<p><br/></p>' : '


';\n }\n return currentVal;\n}\n/**\n * @param {string} value - specifies the value\n * @returns {boolean} - returns the boolean value\n * @hidden\n */\nexport function isEditableValueEmpty(value) {\n return (value === '


' || value === '<p><br></p>'\n || value === '

' || value === '<div><br></div>'\n || value === '
' || value === '<br>'\n || value === '') ? true : false;\n}\n/**\n * @param {string} value - specifies the string value\n * @returns {string} - returns the string\n * @hidden\n */\nexport function decode(value) {\n return value.replace(/&/g, '&').replace(/&lt;/g, '<')\n .replace(/</g, '<').replace(/&gt;/g, '>')\n .replace(/>/g, '>').replace(/ /g, ' ')\n .replace(/&nbsp;/g, ' ').replace(/"/g, '');\n}\n/**\n * @param {string} value - specifies the string value\n * @param {IRichTextEditor} parent - specifies the rte\n * @returns {string} - returns the string value\n * @hidden\n */\nexport function sanitizeHelper(value, parent) {\n if (parent.enableHtmlSanitizer) {\n var item = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(item, item, beforeEvent);\n parent.trigger('beforeSanitizeHtml', item);\n if (item.cancel && !isNOU(item.helper)) {\n value = item.helper(value);\n }\n else if (!item.cancel) {\n value = SanitizeHtmlHelper.serializeValue(item, value);\n }\n }\n return value;\n}\n/**\n * @param {string} dataUrl - specifies the string value\n * @returns {BaseToolbar} - returns the value\n * @hidden\n */\n//Converting the base64 url to blob\nexport function convertToBlob(dataUrl) {\n var arr = dataUrl.split(',');\n var mime = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n/**\n * @param {IRichTextEditor} self - specifies the rte\n * @param {string} localeItems - specifies the locale items\n * @param {IDropDownItemModel} item - specifies the dropdown item\n * @returns {string} - returns the value\n * @hidden\n */\nexport function getLocaleFontFormat(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.value || localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\n/**\n * @param {IRichTextEditor} self - specifies the rte\n * @returns {void}\n * @hidden\n */\nexport function updateDropDownFontFormatLocale(self) {\n model.fontFamily.forEach(function (item, i) {\n model.fontFamily[i].text = getLocaleFontFormat(self, fontNameLocale, model.fontFamily[i]);\n });\n model.formatItems.forEach(function (item, i) {\n model.formatItems[i].text = getLocaleFontFormat(self, formatsLocale, model.formatItems[i]);\n });\n model.numberFormatList.forEach(function (item, i) {\n model.numberFormatList[i].text = getLocaleFontFormat(self, numberFormatListLocale, model.numberFormatList[i]);\n });\n model.bulletFormatList.forEach(function (item, i) {\n model.bulletFormatList[i].text = getLocaleFontFormat(self, bulletFormatListLocale, model.bulletFormatList[i]);\n });\n}\n","/**\n * Defines common util methods used by Rich Text Editor.\n */\nimport { isNullOrUndefined, Browser, createElement, detach } from '@syncfusion/ej2-base';\nimport * as classes from '../rich-text-editor/base/classes';\nvar inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n/**\n * @returns {void}\n * @hidden\n */\nexport function isIDevice() {\n var result = false;\n if (Browser.isDevice && Browser.isIos) {\n result = true;\n }\n return result;\n}\n/**\n * @param {Element} editableElement - specifies the editable element.\n * @param {string} selector - specifies the string values.\n * @returns {void}\n * @hidden\n */\nexport function setEditFrameFocus(editableElement, selector) {\n if (editableElement.nodeName === 'BODY' && !isNullOrUndefined(selector)) {\n var iframe = top.window.document.querySelector(selector);\n if (!isNullOrUndefined(iframe)) {\n iframe.contentWindow.focus();\n }\n }\n}\n/**\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\n */\nexport function updateTextNode(value) {\n var tempNode = document.createElement('div');\n tempNode.innerHTML = value;\n tempNode.setAttribute('class', 'tempDiv');\n var resultElm = document.createElement('div');\n var childNodes = tempNode.childNodes;\n if (childNodes.length > 0) {\n var isPreviousInlineElem = void 0;\n var previousParent = void 0;\n var paraElm = void 0;\n while (tempNode.firstChild) {\n if ((tempNode.firstChild.nodeName === '#text' &&\n (tempNode.firstChild.textContent.indexOf('\\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||\n inlineNode.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n resultElm.appendChild(paraElm);\n paraElm.appendChild(tempNode.firstChild);\n }\n else {\n previousParent.appendChild(tempNode.firstChild);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\\n' ||\n (tempNode.firstChild.textContent.indexOf('\\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {\n detach(tempNode.firstChild);\n }\n else {\n resultElm.appendChild(tempNode.firstChild);\n isPreviousInlineElem = false;\n }\n }\n var tableElm = resultElm.querySelectorAll('table');\n for (var i = 0; i < tableElm.length; i++) {\n if (tableElm[i].getAttribute('border') === '0') {\n tableElm[i].removeAttribute('border');\n }\n var tdElm = tableElm[i].querySelectorAll('td');\n for (var j = 0; j < tdElm.length; j++) {\n if (tdElm[j].style.borderLeft === 'none') {\n tdElm[j].style.removeProperty('border-left');\n }\n if (tdElm[j].style.borderRight === 'none') {\n tdElm[j].style.removeProperty('border-right');\n }\n if (tdElm[j].style.borderBottom === 'none') {\n tdElm[j].style.removeProperty('border-bottom');\n }\n if (tdElm[j].style.borderTop === 'none') {\n tdElm[j].style.removeProperty('border-top');\n }\n if (tdElm[j].style.border === 'none') {\n tdElm[j].style.removeProperty('border');\n }\n }\n if (!tableElm[i].classList.contains(classes.CLS_TABLE)) {\n tableElm[i].classList.add(classes.CLS_TABLE);\n }\n }\n var imageElm = resultElm.querySelectorAll('img');\n for (var i = 0; i < imageElm.length; i++) {\n if (!imageElm[i].classList.contains(classes.CLS_RTE_IMAGE)) {\n imageElm[i].classList.add(classes.CLS_RTE_IMAGE);\n }\n if (!(imageElm[i].classList.contains(classes.CLS_IMGINLINE) ||\n imageElm[i].classList.contains(classes.CLS_IMGBREAK))) {\n imageElm[i].classList.add(classes.CLS_IMGINLINE);\n }\n }\n }\n return resultElm.innerHTML;\n}\n/**\n * @param {Node} startChildNodes - specifies the node\n * @returns {void}\n * @hidden\n */\nexport function getLastTextNode(startChildNodes) {\n var finalNode = startChildNodes;\n do {\n if (finalNode.childNodes.length > 0) {\n finalNode = finalNode.childNodes[0];\n }\n } while (finalNode.childNodes.length > 0);\n return finalNode;\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultHtmlTbStatus() {\n return {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n unorderedlist: false,\n underline: false,\n alignments: null,\n backgroundcolor: null,\n fontcolor: null,\n fontname: null,\n fontsize: null,\n formats: null,\n createlink: false,\n insertcode: false\n };\n}\n/**\n * @returns {void}\n * @hidden\n */\nexport function getDefaultMDTbStatus() {\n return {\n bold: false,\n italic: false,\n subscript: false,\n superscript: false,\n strikethrough: false,\n orderedlist: false,\n uppercase: false,\n lowercase: false,\n inlinecode: false,\n unorderedlist: false,\n formats: null\n };\n}\n","/**\n * Constant values for Common\n */\n/**\n * Keydown event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN = 'keydown';\n/**\n * Undo and Redo action HTML plugin events\n *\n * @hidden\n */\nexport var ACTION = 'action';\n/**\n * Formats plugin events\n *\n * @hidden\n */\nexport var FORMAT_TYPE = 'format-type';\n/**\n * Keydown handler event trigger\n *\n * @hidden\n */\nexport var KEY_DOWN_HANDLER = 'keydown-handler';\n/**\n * List plugin events\n *\n * @hidden\n */\nexport var LIST_TYPE = 'list-type';\n/**\n * Keyup handler event trigger\n *\n * @hidden\n */\nexport var KEY_UP_HANDLER = 'keyup-handler';\n/**\n * Keyup event trigger\n *\n * @hidden\n */\nexport var KEY_UP = 'keyup';\n/**\n * Model changed plugin event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED_PLUGIN = 'model_changed_plugin';\n/**\n * Model changed event trigger\n *\n * @hidden\n */\nexport var MODEL_CHANGED = 'model_changed';\n/**\n * PasteCleanup plugin for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP_PLUGIN = 'ms_word_cleanup_plugin';\n/**\n * PasteCleanup for MSWord content\n *\n * @hidden\n */\nexport var MS_WORD_CLEANUP = 'ms_word_cleanup';\n/**\n * ActionBegin event callback\n *\n * @hidden\n */\nexport var ON_BEGIN = 'onBegin';\n/**\n * Callback for spacelist action\n *\n * @hidden\n */\nexport var SPACE_ACTION = 'actionBegin';\n","import { RenderType } from '../base/enum';\nimport { CLS_HR_SEPARATOR } from '../base/classes';\nimport * as events from '../base/constant';\nimport { getTooltipText, toObjectLowerCase } from '../base/util';\nimport { tools, templateItems } from '../models/items';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\n/**\n * `Toolbar` module is used to handle Toolbar actions.\n */\nvar BaseToolbar = /** @class */ (function () {\n function BaseToolbar(parent, serviceLocator) {\n this.tools = {};\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n if (this.parent.toolbarSettings && Object.keys(this.parent.toolbarSettings.itemConfigs).length > 0) {\n extend(this.tools, tools, toObjectLowerCase(this.parent.toolbarSettings.itemConfigs), true);\n }\n else {\n this.tools = tools;\n }\n }\n BaseToolbar.prototype.addEventListener = function () {\n this.parent.on(events.rtlMode, this.setRtl, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n BaseToolbar.prototype.removeEventListener = function () {\n this.parent.off(events.rtlMode, this.setRtl);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n BaseToolbar.prototype.setRtl = function (args) {\n if (!isNullOrUndefined(this.toolbarObj)) {\n this.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n BaseToolbar.prototype.getClass = function (item) {\n var classes;\n switch (item) {\n case 'fontsize':\n classes = 'e-rte-inline-size-template';\n break;\n case 'fontcolor':\n case 'backgroundcolor':\n classes = 'e-rte-inline-color-template';\n break;\n default:\n classes = 'e-rte-inline-template';\n break;\n }\n return classes;\n };\n BaseToolbar.prototype.getTemplateObject = function (itemStr, container) {\n var tagName;\n switch (itemStr) {\n case 'fontcolor':\n case 'backgroundcolor':\n case 'numberformatlist':\n case 'bulletformatlist':\n tagName = 'span';\n break;\n default:\n tagName = 'button';\n break;\n }\n return {\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand,\n template: this.parent.createElement(tagName, {\n id: this.parent.getID() + '_' + container\n + '_' + this.tools[itemStr.toLocaleLowerCase()].id\n }).outerHTML,\n cssClass: this.parent.inlineMode.enable ? this.getClass(itemStr) : '',\n tooltipText: getTooltipText(itemStr, this.locator)\n };\n };\n /**\n * getObject method\n *\n * @param {string} item - specifies the string value\n * @param {string} container - specifies the value of string\n * @returns {IToolbarItemModel} - returns the model element\n * @hidden\n\n */\n BaseToolbar.prototype.getObject = function (item, container) {\n var itemStr = item.toLowerCase();\n if (templateItems.indexOf(itemStr) !== -1) {\n return this.getTemplateObject(itemStr, container);\n }\n else {\n switch (itemStr) {\n case '|':\n return { type: 'Separator' };\n case '-':\n return { type: 'Separator', cssClass: CLS_HR_SEPARATOR };\n default:\n return {\n id: this.parent.getID() + '_' + container + '_' + this.tools[itemStr.toLocaleLowerCase()].id,\n prefixIcon: this.tools[itemStr.toLocaleLowerCase()].icon,\n tooltipText: getTooltipText(itemStr, this.locator),\n command: this.tools[itemStr.toLocaleLowerCase()].command,\n subCommand: this.tools[itemStr.toLocaleLowerCase()].subCommand\n };\n }\n }\n };\n /**\n * @param {string} tbItems - specifies the string value\n * @param {string} container - specifies the container value\n * @returns {ItemModel} - retunrs the model element\n * @hidden\n\n */\n BaseToolbar.prototype.getItems = function (tbItems, container) {\n var _this = this;\n if (this.parent.toolbarSettings.items.length < 1) {\n return [];\n }\n var items = [];\n var _loop_1 = function (item) {\n switch (typeof item) {\n case 'string':\n items.push(this_1.getObject(item, container));\n break;\n default:\n if (!isNullOrUndefined(item.click)) {\n var proxy_1 = item;\n var callback_1 = proxy_1.click;\n proxy_1.click = function () {\n if (proxy_1.undo && _this.parent.formatter.getUndoRedoStack().length === 0) {\n _this.parent.formatter.saveData();\n }\n callback_1.call(_this);\n if ((_this.parent.formatter.getUndoRedoStack()[_this.parent.formatter.getUndoRedoStack().length - 1].text.trim()\n === _this.parent.inputElement.innerHTML.trim())) {\n return;\n }\n if (proxy_1.undo) {\n _this.parent.formatter.saveData();\n }\n };\n }\n items.push(item);\n }\n };\n var this_1 = this;\n for (var _i = 0, tbItems_1 = tbItems; _i < tbItems_1.length; _i++) {\n var item = tbItems_1[_i];\n _loop_1(item);\n }\n return items;\n };\n BaseToolbar.prototype.getToolbarOptions = function (args) {\n return {\n target: args.target,\n rteToolbarObj: this,\n items: this.getItems(args.items, args.container),\n overflowMode: args.mode,\n enablePersistence: this.parent.enablePersistence,\n enableRtl: this.parent.enableRtl\n };\n };\n /**\n * render method\n *\n * @param {IToolbarRenderOptions} args - specifies the toolbar options\n * @returns {void}\n * @hidden\n\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","/* eslint-disable */\n/**\n * Export items model\n */\nexport var templateItems = ['alignments', 'formats', 'fontname', 'fontsize', 'fontcolor', 'backgroundcolor', 'align', 'display', 'tablerows', 'tablecolumns', 'tablecell', 'tablecellhorizontalalign', 'tablecellverticalalign', 'styles', 'numberformatlist', 'bulletformatlist'];\nexport var tools = {\n 'alignments': {\n 'id': 'Alignments',\n 'icon': 'e-alignments',\n 'tooltip': 'Alignments',\n 'command': 'Alignments',\n 'subCommand': 'Alignments'\n },\n 'justifyleft': {\n 'id': 'JustifyLeft',\n 'icon': 'e-justify-left',\n 'tooltip': 'JustifyLeft',\n 'command': 'Alignments',\n 'subCommand': 'JustifyLeft'\n },\n 'justifycenter': {\n 'id': 'JustifyCenter',\n 'icon': 'e-justify-center',\n 'tooltip': 'JustifyCenter',\n 'command': 'Alignments',\n 'subCommand': 'JustifyCenter'\n },\n 'justifyright': {\n 'id': 'JustifyRight',\n 'icon': 'e-justify-right',\n 'tooltip': 'JustifyRight',\n 'command': 'Alignments',\n 'subCommand': 'JustifyRight'\n },\n 'justifyfull': {\n 'id': 'JustifyFull',\n 'icon': 'e-justify-full',\n 'tooltip': 'JustifyFull',\n 'command': 'Alignments',\n 'subCommand': 'JustifyFull'\n },\n 'fontname': {\n 'id': 'FontName',\n 'icon': 'e-font-name',\n 'tooltip': 'Font Name',\n 'command': 'Font',\n 'subCommand': 'FontName'\n },\n 'fontsize': {\n 'id': 'FontSize',\n 'icon': 'e-font-size',\n 'tooltip': 'Font Size',\n 'command': 'Font',\n 'subCommand': 'FontSize'\n },\n 'fontcolor': {\n 'id': 'FontColor',\n 'icon': 'e-font-color',\n 'tooltip': 'Font Color',\n 'command': 'Font',\n 'subCommand': 'FontColor',\n 'value': '#ff0000ff'\n },\n 'backgroundcolor': {\n 'id': 'BackgroundColor',\n 'icon': 'e-background-color',\n 'tooltip': 'Background Color',\n 'command': 'Font',\n 'subCommand': 'BackgroundColor',\n 'value': '#ffff00ff'\n },\n 'bold': {\n 'id': 'Bold',\n 'icon': 'e-bold',\n 'tooltip': 'Bold',\n 'command': 'Style',\n 'subCommand': 'Bold'\n },\n 'italic': {\n 'id': 'Italic',\n 'icon': 'e-italic',\n 'tooltip': 'Italic',\n 'command': 'Style',\n 'subCommand': 'Italic'\n },\n 'underline': {\n 'id': 'Underline',\n 'icon': 'e-underline',\n 'tooltip': 'Underline',\n 'command': 'Style',\n 'subCommand': 'Underline'\n },\n 'strikethrough': {\n 'id': 'StrikeThrough',\n 'icon': 'e-strike-through',\n 'tooltip': 'StrikeThrough',\n 'command': 'Style',\n 'subCommand': 'StrikeThrough'\n },\n 'clearformat': {\n 'id': 'ClearFormat',\n 'icon': 'e-clear-format',\n 'tooltip': 'Clear Format',\n 'command': 'Clear',\n 'subCommand': 'ClearFormat'\n },\n 'clearall': {\n 'id': 'ClearAll',\n 'icon': 'e-clear-all',\n 'tooltip': 'Clear All',\n 'command': 'Clear',\n 'subCommand': 'ClearAll'\n },\n 'cut': {\n 'id': 'Cut',\n 'icon': 'e-cut',\n 'tooltip': 'Cut',\n 'command': 'ClipBoard',\n 'subCommand': 'Cut'\n },\n 'copy': {\n 'id': 'Copy',\n 'icon': 'e-copy',\n 'tooltip': 'Copy',\n 'command': 'ClipBoard',\n 'subCommand': 'Copy'\n },\n 'paste': {\n 'id': 'Paste',\n 'icon': 'e-paste',\n 'tooltip': 'Paste',\n 'command': 'ClipBoard',\n 'subCommand': 'Paste'\n },\n 'unorderedlist': {\n 'id': 'UnorderedList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bulleted List',\n 'command': 'Lists',\n 'subCommand': 'UL'\n },\n 'orderedlist': {\n 'id': 'OrderedList',\n 'icon': 'e-order-list',\n 'tooltip': 'Numbered List',\n 'command': 'Lists',\n 'subCommand': 'OL'\n },\n 'numberformatlist': {\n 'id': 'NumberFormatList',\n 'icon': 'e-order-list',\n 'tooltip': 'Number Format List',\n 'command': 'NumberFormatList',\n 'subCommand': 'NumberFormatList'\n },\n 'bulletformatlist': {\n 'id': 'BulletFormatList',\n 'icon': 'e-unorder-list',\n 'tooltip': 'Bullet Format List',\n 'command': 'BulletFormatList',\n 'subCommand': 'BulletFormatList'\n },\n 'indent': {\n 'id': 'Indent',\n 'icon': 'e-indent',\n 'tooltip': 'Increase Indent',\n 'command': 'Indents',\n 'subCommand': 'Indent'\n },\n 'outdent': {\n 'id': 'Outdent',\n 'icon': 'e-outdent',\n 'tooltip': 'Decrease Indent',\n 'command': 'Indents',\n 'subCommand': 'Outdent'\n },\n 'undo': {\n 'id': 'Undo',\n 'icon': 'e-undo',\n 'tooltip': 'Undo',\n 'command': 'Actions',\n 'subCommand': 'Undo'\n },\n 'redo': {\n 'id': 'Redo',\n 'icon': 'e-redo',\n 'tooltip': 'Redo',\n 'command': 'Actions',\n 'subCommand': 'Redo'\n },\n 'superscript': {\n 'id': 'SuperScript',\n 'icon': 'e-super-script',\n 'tooltip': 'Superscript',\n 'command': 'Effects',\n 'subCommand': 'SuperScript'\n },\n 'subscript': {\n 'id': 'SubScript',\n 'icon': 'e-sub-script',\n 'tooltip': 'Subscript',\n 'command': 'Effects',\n 'subCommand': 'SubScript'\n },\n 'createlink': {\n 'id': 'CreateLink',\n 'icon': 'e-create-link',\n 'tooltip': 'Insert Hyperlink',\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n },\n 'openlink': {\n 'id': 'OpenLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Links',\n 'subCommand': 'OpenLink'\n },\n 'editlink': {\n 'id': 'EditLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Links',\n 'subCommand': 'EditLink'\n },\n 'removelink': {\n 'id': 'RemoveLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Links',\n 'subCommand': 'RemoveLink'\n },\n 'image': {\n 'id': 'Image',\n 'icon': 'e-image',\n 'tooltip': 'Insert Image',\n 'command': 'Images',\n 'subCommand': 'Image'\n },\n 'filemanager': {\n 'id': 'FileManager',\n 'icon': 'e-rte-file-manager',\n 'tooltip': 'File Manager',\n 'command': 'Files',\n 'subCommand': 'File'\n },\n 'createtable': {\n 'id': 'CreateTable',\n 'icon': 'e-create-table',\n 'tooltip': 'Create Table',\n 'command': 'Table',\n 'subCommand': 'CreateTable'\n },\n 'removetable': {\n 'id': 'removeTable',\n 'icon': 'e-remove-table',\n 'tooltip': 'Remove Table',\n 'command': 'removeTable',\n 'subCommand': 'removeTable'\n },\n 'replace': {\n 'id': 'Replace',\n 'icon': 'e-replace',\n 'tooltip': 'Replace',\n 'command': 'Images',\n 'subCommand': 'Replace'\n },\n 'align': {\n 'id': 'Align',\n 'icon': 'e-align',\n 'tooltip': 'Align',\n 'command': 'Images',\n 'subCommand': 'Align'\n },\n 'caption': {\n 'id': 'Caption',\n 'icon': 'e-caption',\n 'tooltip': 'Image Caption',\n 'command': 'Images',\n 'subCommand': 'Caption'\n },\n 'remove': {\n 'id': 'Remove',\n 'icon': 'e-remove',\n 'tooltip': 'Remove',\n 'command': 'Images',\n 'subCommand': 'Remove'\n },\n 'openimagelink': {\n 'id': 'OpenImageLink',\n 'icon': 'e-open-link',\n 'tooltip': 'Open Link',\n 'command': 'Images',\n 'subCommand': 'OpenImageLink'\n },\n 'editimagelink': {\n 'id': 'EditImageLink',\n 'icon': 'e-edit-link',\n 'tooltip': 'Edit Link',\n 'command': 'Images',\n 'subCommand': 'EditImageLink'\n },\n 'removeimagelink': {\n 'id': 'RemoveImageLink',\n 'icon': 'e-remove-link',\n 'tooltip': 'Remove Link',\n 'command': 'Images',\n 'subCommand': 'RemoveImageLink'\n },\n 'insertlink': {\n 'id': 'InsertLink',\n 'icon': 'e-insert-link',\n 'tooltip': 'Insert Link',\n 'command': 'Images',\n 'subCommand': 'InsertLink'\n },\n 'display': {\n 'id': 'Display',\n 'icon': 'e-display',\n 'tooltip': 'Display',\n 'command': 'Images',\n 'subCommand': 'Display'\n },\n 'alttext': {\n 'id': 'AltText',\n 'icon': 'e-alt-text',\n 'tooltip': 'Alternative Text',\n 'command': 'Images',\n 'subCommand': 'AltText'\n },\n 'dimension': {\n 'id': 'Dimension',\n 'icon': 'e-img-dimension',\n 'tooltip': 'Change Size',\n 'command': 'Images',\n 'subCommand': 'Dimension'\n },\n 'fullscreen': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'View',\n 'subCommand': 'Maximize'\n },\n 'maximize': {\n 'id': 'Maximize',\n 'icon': 'e-maximize',\n 'tooltip': 'Maximize',\n 'command': 'FullScreen',\n 'subCommand': 'Maximize'\n },\n 'minimize': {\n 'id': 'Minimize',\n 'icon': 'e-minimize',\n 'tooltip': 'Minimize',\n 'command': 'FullScreen',\n 'subCommand': 'Minimize'\n },\n 'lowercase': {\n 'id': 'LowerCase',\n 'icon': 'e-lower-case',\n 'tooltip': 'Lower Case',\n 'command': 'Casing',\n 'subCommand': 'LowerCase'\n },\n 'uppercase': {\n 'id': 'UpperCase',\n 'icon': 'e-upper-case',\n 'tooltip': 'Upper Case',\n 'command': 'Casing',\n 'subCommand': 'UpperCase'\n },\n 'print': {\n 'id': 'Print',\n 'icon': 'e-print',\n 'tooltip': 'Print',\n 'command': 'Print',\n 'subCommand': 'Print'\n },\n 'formats': {\n 'id': 'Formats',\n 'icon': 'e-formats',\n 'tooltip': 'Formats',\n 'command': 'Formats',\n 'subCommand': 'Formats'\n },\n 'sourcecode': {\n 'id': 'SourceCode',\n 'icon': 'e-source-code',\n 'tooltip': 'Source Code',\n 'command': 'SourceCode',\n 'subCommand': 'SourceCode'\n },\n 'preview': {\n 'id': 'Preview',\n 'icon': 'e-preview',\n 'tooltip': 'Preview',\n 'command': 'Preview',\n 'subCommand': 'Preview'\n },\n 'viewside': {\n 'id': 'ViewSide',\n 'icon': 'e-view-side',\n 'tooltip': 'ViewSide',\n 'command': 'ViewSide',\n 'subCommand': 'ViewSide'\n },\n 'insertcode': {\n 'id': 'InsertCode',\n 'icon': 'e-insert-code',\n 'tooltip': 'Insert Code',\n 'command': 'Formats',\n 'subCommand': 'Pre'\n },\n 'tableheader': {\n 'id': 'TableHeader',\n 'icon': 'e-table-header',\n 'tooltip': 'Table Header',\n 'command': 'Table',\n 'subCommand': 'TableHeader'\n },\n 'tableremove': {\n 'id': 'TableRemove',\n 'icon': 'e-table-remove',\n 'tooltip': 'Table Remove',\n 'command': 'Table',\n 'subCommand': 'TableRemove'\n },\n 'tablerows': {\n 'id': 'TableRows',\n 'icon': 'e-table-rows',\n 'tooltip': 'Table Rows',\n 'command': 'Table',\n 'subCommand': 'TableRows'\n },\n 'tablecolumns': {\n 'id': 'TableColumns',\n 'icon': 'e-table-columns',\n 'tooltip': 'Table Columns',\n 'command': 'Table',\n 'subCommand': 'TableColumns'\n },\n 'tablecell': {\n 'id': 'TableCell',\n 'icon': 'e-table-cell',\n 'tooltip': 'Table Cell',\n 'command': 'Table',\n 'subCommand': 'TableCell'\n },\n 'tablecellbackground': {\n 'id': 'TableCellBackground',\n 'icon': 'e-table-cell-background',\n 'tooltip': 'Table Cell Background',\n 'command': 'Table',\n 'subCommand': 'TableCellBackground'\n },\n 'tablecellhorizontalalign': {\n 'id': 'TableCellHorizontalAlign',\n 'icon': 'e-table-cell-horizontalAlign',\n 'tooltip': 'Table Cell HorizontalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellHorizontalAlign'\n },\n 'tablecellverticalalign': {\n 'id': 'TableCellVerticalAlign',\n 'icon': 'e-table-cell-verticalAlign',\n 'tooltip': 'Table Cell VerticalAlign',\n 'command': 'Table',\n 'subCommand': 'TableCellVerticalAlign'\n },\n 'tableeditproperties': {\n 'id': 'TableEditProperties',\n 'icon': 'e-table-edit-properties',\n 'tooltip': 'Table Edit Properties',\n 'command': 'Table',\n 'subCommand': 'TableEditProperties'\n },\n 'styles': {\n 'id': 'Styles',\n 'icon': 'e-table-styles',\n 'tooltip': 'Styles',\n 'command': 'Table',\n 'subCommand': 'Styles'\n }\n};\nvar alignmentLocale = [\n { locale: 'alignmentsDropDownLeft', value: 'JustifyLeft' },\n { locale: 'alignmentsDropDownCenter', value: 'JustifyCenter' },\n { locale: 'alignmentsDropDownRight', value: 'JustifyRight' },\n { locale: 'alignmentsDropDownJustify', value: 'JustifyFull' }\n];\nexport var alignmentItems = [\n { iconCss: 'e-icons e-justify-left', text: 'Align Left', command: 'Alignments', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', text: 'Align Center', command: 'Alignments', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', text: 'Align Right', command: 'Alignments', subCommand: 'JustifyRight' },\n { iconCss: 'e-icons e-justify-full', text: 'Align Justify', command: 'Alignments', subCommand: 'JustifyFull' }\n];\nexport var imageAlignItems = [\n { iconCss: 'e-icons e-justify-left', command: 'Images', subCommand: 'JustifyLeft' },\n { iconCss: 'e-icons e-justify-center', command: 'Images', subCommand: 'JustifyCenter' },\n { iconCss: 'e-icons e-justify-right', command: 'Images', subCommand: 'JustifyRight' },\n];\nvar displayLocale = [\n { locale: 'imageDisplayDropDownInline', value: 'Inline' },\n { locale: 'imageDisplayDropDownBreak', value: 'Break' }\n];\nexport var imageDisplayItems = [\n { text: 'Inline', cssClass: 'e-inline', command: 'Images', subCommand: 'Inline' },\n { text: 'Break', cssClass: 'e-break', command: 'Images', subCommand: 'Break' },\n];\nexport var tableCellItems = [\n { iconCss: 'e-icons e-cell-merge', text: 'Merge cells', command: 'Table', subCommand: 'Merge' },\n { iconCss: 'e-icons e-cell-horizontal-split', text: 'Horizontal split', command: 'Table', subCommand: 'HorizontalSplit' },\n { iconCss: 'e-icons e-cell-vertical-split', text: 'Vertical split', command: 'Table', subCommand: 'VerticalSplit' },\n];\nvar tableRowLocale = [\n { locale: 'tableInsertRowDropDownBefore', value: 'InsertRowBefore' },\n { locale: 'tableInsertRowDropDownAfter', value: 'InsertRowAfter' },\n { locale: 'tableInsertRowDropDownDelete', value: 'DeleteRow' }\n];\nexport var tableRowsItems = [\n { iconCss: 'e-icons e-insert-row-before', text: 'Insert row before', command: 'Table', subCommand: 'InsertRowBefore' },\n { iconCss: 'e-icons e-insert-row-after', text: 'Insert row after', command: 'Table', subCommand: 'InsertRowAfter' },\n { iconCss: 'e-icons e-delete-row', text: 'Delete row', command: 'Table', subCommand: 'DeleteRow' },\n];\nvar tableColumnLocale = [\n { locale: 'tableInsertColumnDropDownLeft', value: 'InsertColumnLeft' },\n { locale: 'tableInsertColumnDropDownRight', value: 'InsertColumnRight' },\n { locale: 'tableInsertColumnDropDownDelete', value: 'DeleteColumn' }\n];\nexport var tableColumnsItems = [\n { iconCss: 'e-icons e-insert-column-left', text: 'Insert column left', command: 'Table', subCommand: 'InsertColumnLeft' },\n { iconCss: 'e-icons e-insert-column-right', text: 'Insert column right', command: 'Table', subCommand: 'InsertColumnRight' },\n { iconCss: 'e-icons e-delete-column', text: 'Delete column', command: 'Table', subCommand: 'DeleteColumn' },\n];\nvar tableVerticalLocale = [\n { locale: 'tableVerticalAlignDropDownTop', value: 'AlignTop' },\n { locale: 'tableVerticalAlignDropDownMiddle', value: 'AlignMiddle' },\n { locale: 'tableVerticalAlignDropDownBottom', value: 'AlignBottom' }\n];\nexport var TableCellVerticalAlignItems = [\n { iconCss: 'e-icons e-align-top', text: 'Align Top', command: 'Table', subCommand: 'AlignTop' },\n { iconCss: 'e-icons e-align-middle', text: 'Align Middle', command: 'Table', subCommand: 'AlignMiddle' },\n { iconCss: 'e-icons e-align-bottom', text: 'Align Bottom', command: 'Table', subCommand: 'AlignBottom' },\n];\nvar tableStyleLocale = [\n { locale: 'tableStylesDropDownDashedBorder', value: 'Dashed' },\n { locale: 'tableStylesDropDownAlternateRows', value: 'Alternate' }\n];\nexport var TableStyleItems = [\n { text: 'Dashed Borders', cssClass: 'e-dashed-borders', command: 'Table', subCommand: 'Dashed' },\n { text: 'Alternate Rows', cssClass: 'e-alternate-rows', command: 'Table', subCommand: 'Alternate' }\n];\nexport var predefinedItems = ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments',\n 'OrderedList', 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo'];\nexport var fontFamily = [\n { cssClass: 'e-segoe-ui', text: 'Segoe UI', command: 'Font', subCommand: 'FontName', value: 'Segoe UI' },\n { cssClass: 'e-arial', text: 'Arial', command: 'Font', subCommand: 'FontName', value: 'Arial,Helvetica,sans-serif' },\n { cssClass: 'e-georgia', text: 'Georgia', command: 'Font', subCommand: 'FontName', value: 'Georgia,serif' },\n { cssClass: 'e-impact', text: 'Impact', command: 'Font', subCommand: 'FontName', value: 'Impact,Charcoal,sans-serif' },\n { cssClass: 'e-tahoma', text: 'Tahoma', command: 'Font', subCommand: 'FontName', value: 'Tahoma,Geneva,sans-serif' },\n { cssClass: 'e-times-new-roman', text: 'Times New Roman', command: 'Font', subCommand: 'FontName', value: 'Times New Roman,Times,serif' },\n { cssClass: 'e-verdana', text: 'Verdana', command: 'Font', subCommand: 'FontName', value: 'Verdana,Geneva,sans-serif' }\n];\nexport var fontSize = [\n { text: '8 pt', value: '8pt' },\n { text: '10 pt', value: '10pt' },\n { text: '12 pt', value: '12pt' },\n { text: '14 pt', value: '14pt' },\n { text: '18 pt', value: '18pt' },\n { text: '24 pt', value: '24pt' },\n { text: '36 pt', value: '36pt' }\n];\nexport var formatItems = [\n { cssClass: 'e-paragraph', text: 'Paragraph', command: 'Formats', subCommand: 'P', value: 'P' },\n { cssClass: 'e-code', text: 'Code', command: 'Formats', subCommand: 'Pre', value: 'Pre' },\n { cssClass: 'e-quote', text: 'Quotation', command: 'Formats', subCommand: 'BlockQuote', value: 'BlockQuote' },\n { cssClass: 'e-h1', text: 'Heading 1', command: 'Formats', subCommand: 'H1', value: 'H1' },\n { cssClass: 'e-h2', text: 'Heading 2', command: 'Formats', subCommand: 'H2', value: 'H2' },\n { cssClass: 'e-h3', text: 'Heading 3', command: 'Formats', subCommand: 'H3', value: 'H3' },\n { cssClass: 'e-h4', text: 'Heading 4', command: 'Formats', subCommand: 'H4', value: 'H4' }\n];\nexport var fontColor = {\n 'Custom': [\n '', '#000000', '#e7e6e6', '#44546a', '#4472c4', '#ed7d31', '#a5a5a5', '#ffc000', '#70ad47', '#ff0000',\n '#f2f2f2', '#808080', '#cfcdcd', '#d5dce4', '#d9e2f3', '#fbe4d5', '#ededed', '#fff2cc', '#e2efd9', '#ffcccc',\n '#d9d9d9', '#595959', '#aeaaaa', '#acb9ca', '#b4c6e7', '#f7caac', '#dbdbdb', '#ffe599', '#c5e0b3', '#ff8080',\n '#bfbfbf', '#404040', '#747070', '#8496b0', '#8eaadb', '#f4b083', '#c9c9c9', '#ffd966', '#a8d08d', '#ff3333',\n '#a6a6a6', '#262626', '#3b3838', '#323e4f', '#2f5496', '#c45911', '#7b7b7b', '#bf8f00', '#538135', '#b30000',\n '#7f7f7f', '#0d0d0d', '#161616', '#212934', '#1f3763', '#823b0b', '#525252', '#7f5f00', '#375623', '#660000'\n ]\n};\nexport var backgroundColor = {\n 'Custom': [\n '', '#000000', '#ffff00', '#00ff00', '#00ffff', '#0000ff', '#ff0000', '#000080', '#800080', '#996633',\n '#f2f2f2', '#808080', '#ffffcc', '#b3ffb3', '#ccffff', '#ccccff', '#ffcccc', '#ccccff', '#ff80ff', '#f2e6d9',\n '#d9d9d9', '#595959', '#ffff80', '#80ff80', '#b3ffff', '#8080ff', '#ff8080', '#8080ff', '#ff00ff', '#dfbf9f',\n '#bfbfbf', '#404040', '#ffff33', '#33ff33', '#33ffff', '#3333ff', '#ff3333', '#0000b3', '#b300b3', '#c68c53',\n '#a6a6a6', '#262626', '#e6e600', '#00b300', '#009999', '#000099', '#b30000', '#000066', '#660066', '#86592d',\n '#7f7f7f', '#0d0d0d', '#999900', '#006600', '#006666', '#000066', '#660000', '#00004d', '#4d004d', '#734d26'\n ]\n};\nexport var numberFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'NumberFormatList', value: 'none' },\n { text: 'Number', command: 'Lists', subCommand: 'NumberFormatList', value: 'decimal' },\n { text: 'Lower Greek', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerGreek' },\n { text: 'Lower Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerRoman' },\n { text: 'Upper Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperAlpha' },\n { text: 'Lower Alpha', command: 'Lists', subCommand: 'NumberFormatList', value: 'lowerAlpha' },\n { text: 'Upper Roman', command: 'Lists', subCommand: 'NumberFormatList', value: 'upperRoman' },\n];\nexport var bulletFormatList = [\n { text: 'None', command: 'Lists', subCommand: 'BulletFormatList', value: 'none' },\n { text: 'Disc', command: 'Lists', subCommand: 'BulletFormatList', value: 'disc' },\n { text: 'Circle', command: 'Lists', subCommand: 'BulletFormatList', value: 'circle' },\n { text: 'Square', command: 'Lists', subCommand: 'BulletFormatList', value: 'square' },\n];\nfunction getLocale(self, localeItems, item) {\n for (var i = 0; localeItems.length > i; i++) {\n if (localeItems[i].value === item.subCommand) {\n return self.localeObj.getConstant(localeItems[i].locale);\n }\n }\n return item.text;\n}\nexport function updateDropDownLocale(self) {\n alignmentItems.forEach(function (item, i) {\n alignmentItems[i].text = getLocale(self, alignmentLocale, alignmentItems[i]);\n });\n imageDisplayItems.forEach(function (item, i) {\n imageDisplayItems[i].text = getLocale(self, displayLocale, imageDisplayItems[i]);\n });\n tableRowsItems.forEach(function (item, i) {\n tableRowsItems[i].text = getLocale(self, tableRowLocale, tableRowsItems[i]);\n });\n tableColumnsItems.forEach(function (item, i) {\n tableColumnsItems[i].text = getLocale(self, tableColumnLocale, tableColumnsItems[i]);\n });\n TableCellVerticalAlignItems.forEach(function (item, i) {\n TableCellVerticalAlignItems[i].text = getLocale(self, tableVerticalLocale, TableCellVerticalAlignItems[i]);\n });\n TableStyleItems.forEach(function (item, i) {\n TableStyleItems[i].text = getLocale(self, tableStyleLocale, TableStyleItems[i]);\n });\n}\n","import { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { CLS_COUNT, CLS_WARNING, CLS_ERROR } from '../base/classes';\n/**\n * `Count` module is used to handle Count actions.\n */\nvar Count = /** @class */ (function () {\n function Count(parent, serviceLocator) {\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.addEventListener();\n }\n Count.prototype.initializeInstance = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.editPanel = this.contentRenderer.getEditPanel();\n this.addEventListener();\n };\n /**\n * renderCount method\n *\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.renderCount = function () {\n this.initializeInstance();\n this.element = this.parent.createElement('span', { className: CLS_COUNT });\n this.contentRenderer.getPanel().parentElement.appendChild(this.element);\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n };\n Count.prototype.appendCount = function () {\n var htmlText = this.parent.editorMode === 'Markdown' ? this.editPanel.value.trim() :\n this.editPanel.textContent.trim();\n if (this.parent.editorMode !== 'Markdown' && htmlText.indexOf('\\u200B') !== -1) {\n this.htmlLength = htmlText.replace(/\\u200B/g, '').length;\n }\n else {\n this.htmlLength = htmlText.length;\n }\n var string = this.parent.maxLength === -1 ? this.htmlLength : this.htmlLength + ' / ' + this.parent.maxLength;\n this.element.innerHTML = string;\n };\n Count.prototype.charCountBackground = function (htmlLength) {\n var percentage = (htmlLength / this.parent.maxLength) * 100;\n if (percentage < 85) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.remove(CLS_ERROR);\n }\n else if (percentage > 85 && percentage <= 90) {\n this.element.classList.remove(CLS_ERROR);\n this.element.classList.add(CLS_WARNING);\n }\n else if (percentage > 90) {\n this.element.classList.remove(CLS_WARNING);\n this.element.classList.add(CLS_ERROR);\n }\n };\n /**\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.refresh = function () {\n if (!isNullOrUndefined(this.editPanel)) {\n this.appendCount();\n if (this.parent.maxLength !== -1) {\n this.charCountBackground(this.htmlLength);\n }\n }\n };\n /**\n * Destroys the Count.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n Count.prototype.destroy = function () {\n if (this.element && !isNullOrUndefined(this.parent.element.querySelector('.' + CLS_COUNT))) {\n detach(this.element);\n }\n this.removeEventListener();\n };\n Count.prototype.toggle = function (e) {\n this.element.style.display = (e.member === 'viewSource') ? 'none' : 'block';\n };\n Count.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.renderCount, this);\n this.parent.on(events.keyUp, this.refresh, this);\n this.parent.on(events.count, this.refresh, this);\n this.parent.on(events.refreshBegin, this.refresh, this);\n this.parent.on(events.mouseDown, this.refresh, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.sourceCode, this.toggle, this);\n this.parent.on(events.updateSource, this.toggle, this);\n };\n Count.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.renderCount);\n this.parent.off(events.keyUp, this.refresh);\n this.parent.off(events.refreshBegin, this.refresh);\n this.parent.off(events.count, this.refresh);\n this.parent.off(events.mouseDown, this.refresh);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.sourceCode, this.toggle);\n this.parent.off(events.updateSource, this.toggle);\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the string value\n */\n Count.prototype.getModuleName = function () {\n return 'count';\n };\n return Count;\n}());\nexport { Count };\n","/**\n * @hidden\n\n */\nexport var created = 'create';\n/**\n * @hidden\n\n */\nexport var destroyed = 'destroy';\n/**\n * @hidden\n\n */\nexport var load = 'load';\n/**\n * Specifies Rich Text Editor internal events\n */\n/**\n * @hidden\n\n */\nexport var initialLoad = 'initial-load';\n/**\n * @hidden\n\n */\nexport var contentChanged = 'content-changed';\n/**\n * @hidden\n\n */\nexport var initialEnd = 'initial-end';\n/**\n * @hidden\n\n */\nexport var iframeMouseDown = 'iframe-click';\n/**\n * @hidden\n\n */\nexport var destroy = 'destroy';\n/**\n * @hidden\n\n */\nexport var toolbarClick = 'toolbarClick';\n/**\n * @hidden\n\n */\nexport var toolbarRefresh = 'toolbar-refresh';\n/**\n * @hidden\n\n */\nexport var refreshBegin = 'refresh-begin';\n/**\n * @hidden\n\n */\nexport var toolbarUpdated = 'toolbar-updated';\n/**\n * @hidden\n\n */\nexport var bindOnEnd = 'bind-on-end';\n/**\n * @hidden\n\n */\nexport var renderColorPicker = 'render-color-picker';\n/**\n * @hidden\n\n */\nexport var htmlToolbarClick = 'html-toolbar-click';\n/**\n * @hidden\n\n */\nexport var markdownToolbarClick = 'markdown-toolbar-click';\n/**\n * @hidden\n\n */\nexport var destroyColorPicker = 'destroy-color-picker';\n/**\n * @hidden\n\n */\nexport var modelChanged = 'model-changed';\n/**\n * @hidden\n\n */\nexport var keyUp = 'keyUp';\n/**\n * @hidden\n\n */\nexport var keyDown = 'keyDown';\n/**\n * @hidden\n\n */\nexport var mouseUp = 'mouseUp';\n/**\n * @hidden\n\n */\nexport var toolbarCreated = 'toolbarCreated';\n/**\n * @hidden\n\n */\nexport var toolbarRenderComplete = 'toolbarRenderComplete';\n/**\n * @hidden\n\n */\nexport var enableFullScreen = 'enableFullScreen';\n/**\n * @hidden\n\n */\nexport var disableFullScreen = 'disableFullScreen';\n/**\n * @hidden\n\n */\nexport var dropDownSelect = 'dropDownSelect';\n/**\n * @hidden\n\n */\nexport var beforeDropDownItemRender = 'beforeDropDownItemRender';\n/**\n * @hidden\n\n */\nexport var execCommandCallBack = 'execCommandCallBack';\n/**\n * @hidden\n\n */\nexport var imageToolbarAction = 'image-toolbar-action';\n/**\n * @hidden\n\n */\nexport var linkToolbarAction = 'link-toolbar-action';\n/**\n * @hidden\n\n */\nexport var windowResize = 'resize';\n/**\n * @hidden\n\n */\nexport var resizeStart = 'resizeStart';\n/**\n * @hidden\n\n */\nexport var onResize = 'resizing';\n/**\n * @hidden\n\n */\nexport var resizeStop = 'resizeStop';\n/**\n * @hidden\n\n */\nexport var undo = 'undo';\n/**\n * @hidden\n\n */\nexport var redo = 'redo';\n/**\n * @hidden\n\n */\nexport var insertLink = 'insertLink';\n/**\n * @hidden\n\n */\nexport var unLink = 'unLink';\n/**\n * @hidden\n\n */\nexport var editLink = 'editLink';\n/**\n * @hidden\n\n */\nexport var openLink = 'openLink';\n/**\n * @hidden\n\n */\nexport var actionBegin = 'actionBegin';\n/**\n * @hidden\n\n */\nexport var actionComplete = 'actionComplete';\n/**\n * @hidden\n\n */\nexport var updatedToolbarStatus = 'updatedToolbarStatus';\n/**\n * @hidden\n\n */\nexport var actionSuccess = 'actionSuccess';\n/**\n * @hidden\n\n */\nexport var updateToolbarItem = 'updateToolbarItem';\n/**\n * @hidden\n\n */\nexport var insertImage = 'insertImage';\n/**\n * @hidden\n\n */\nexport var insertCompleted = 'insertCompleted';\n/**\n * @hidden\n\n */\nexport var imageLeft = 'justifyLeft';\n/**\n * @hidden\n\n */\nexport var imageRight = 'justifyRight';\n/**\n * @hidden\n\n */\nexport var imageCenter = 'justifyCenter';\n/**\n * @hidden\n\n */\nexport var imageBreak = 'break';\n/**\n * @hidden\n\n */\nexport var imageInline = 'inline';\n/**\n * @hidden\n\n */\nexport var imageLink = 'insertImgLink';\n/**\n * @hidden\n\n */\nexport var imageAlt = 'imgAltText';\n/**\n * @hidden\n\n */\nexport var imageDelete = 'delete';\n/**\n * @hidden\n\n */\nexport var imageCaption = 'caption';\n/**\n * @hidden\n\n */\nexport var imageSize = 'imageSize';\n/**\n * @hidden\n\n */\nexport var sourceCode = 'sourceCode';\n/**\n * @hidden\n\n */\nexport var updateSource = 'updateSource';\n/**\n * @hidden\n\n */\nexport var toolbarOpen = 'toolbarOpen';\n/**\n * @hidden\n\n */\nexport var beforeDropDownOpen = 'beforeDropDownOpen';\n/**\n * @hidden\n\n */\nexport var selectionSave = 'selection-save';\n/**\n * @hidden\n\n */\nexport var selectionRestore = 'selection-restore';\n/**\n * @hidden\n\n */\nexport var expandPopupClick = 'expandPopupClick';\n/**\n * @hidden\n\n */\nexport var count = 'count';\n/**\n * @hidden\n\n */\nexport var contentFocus = 'contentFocus';\n/**\n * @hidden\n\n */\nexport var contentBlur = 'contentBlur';\n/**\n * @hidden\n\n */\nexport var mouseDown = 'mouseDown';\n/**\n * @hidden\n\n */\nexport var sourceCodeMouseDown = 'sourceCodeMouseDown';\n/**\n * @hidden\n\n */\nexport var editAreaClick = 'editAreaClick';\n/**\n * @hidden\n\n */\nexport var scroll = 'scroll';\n/**\n * @hidden\n\n */\nexport var contentscroll = 'contentscroll';\n/**\n * @hidden\n\n */\nexport var colorPickerChanged = 'colorPickerChanged';\n/**\n * @hidden\n\n */\nexport var tableColorPickerChanged = 'tableColorPickerChanged';\n/**\n * @hidden\n\n */\nexport var focusChange = 'focusChange';\n/**\n * @hidden\n\n */\nexport var selectAll = 'selectAll';\n/**\n * @hidden\n\n */\nexport var selectRange = 'selectRange';\n/**\n * @hidden\n\n */\nexport var getSelectedHtml = 'getSelectedHtml';\n/**\n * @hidden\n\n */\nexport var renderInlineToolbar = 'renderInlineToolbar';\n/**\n * @hidden\n\n */\nexport var paste = 'paste-content';\n/**\n * @hidden\n\n */\nexport var imgModule = 'imageModule';\n/**\n * @hidden\n\n */\nexport var rtlMode = 'rtl-mode';\n/**\n * @hidden\n\n */\nexport var createTable = 'createTable';\n/**\n * @hidden\n\n */\nexport var docClick = 'docClick';\n/**\n * @hidden\n\n */\nexport var tableToolbarAction = 'table-toolbar-action';\n/**\n * @hidden\n\n */\nexport var checkUndo = 'checkUndoStack';\n/**\n * @hidden\n\n */\nexport var readOnlyMode = 'readOnlyMode';\n/**\n * @hidden\n\n */\nexport var pasteClean = 'pasteClean';\n/**\n * @hidden\n\n */\nexport var enterHandler = 'enterHandler';\n/**\n * @hidden\n\n */\nexport var beforeDialogOpen = 'beforeDialogOpen';\n/**\n * @hidden\n\n */\nexport var clearDialogObj = 'clearDialogObj';\n/**\n * @hidden\n\n */\nexport var dialogOpen = 'dialogOpen';\n/**\n * @hidden\n\n */\nexport var beforeDialogClose = 'beforeDialogClose';\n/**\n * @hidden\n\n */\nexport var dialogClose = 'dialogClose';\n/**\n * @hidden\n\n */\nexport var beforeQuickToolbarOpen = 'beforeQuickToolbarOpen';\n/**\n * @hidden\n\n */\nexport var quickToolbarOpen = 'quickToolbarOpen';\n/**\n * @hidden\n\n */\nexport var quickToolbarClose = 'quickToolbarClose';\n/**\n * @hidden\n\n */\nexport var popupHide = 'popupHide';\n/**\n * @hidden\n\n */\nexport var imageSelected = 'imageSelected';\n/**\n * @hidden\n\n */\nexport var imageUploading = 'imageUploading';\n/**\n * @hidden\n\n */\nexport var imageUploadSuccess = 'imageUploadSuccess';\n/**\n * @hidden\n\n */\nexport var imageUploadFailed = 'imageUploadFailed';\n/**\n * @hidden\n\n */\nexport var imageRemoving = 'imageRemoving';\n/**\n * @hidden\n\n */\nexport var afterImageDelete = 'afterImageDelete';\n/**\n * @hidden\n\n */\nexport var drop = 'drop';\n/**\n * @hidden\n\n */\nexport var xhtmlValidation = 'xhtmlValidation';\n/**\n * @hidden\n\n */\nexport var beforeImageUpload = 'beforeImageUpload';\n/**\n * @hidden\n\n */\nexport var resizeInitialized = 'resizeInitialized';\n/**\n * @hidden\n\n */\nexport var renderFileManager = 'renderFileManager';\n/**\n * @hidden\n\n */\nexport var beforeImageDrop = 'beforeImageDrop';\n/**\n * @hidden\n\n */\nexport var dynamicModule = 'dynamicModule';\n/**\n * @hidden\n\n */\nexport var beforePasteCleanup = 'beforePasteCleanup';\n/**\n * @hidden\n\n */\nexport var afterPasteCleanup = 'afterPasteCleanup';\n/**\n * @hidden\n\n */\nexport var updateTbItemsStatus = 'updateTbItemsStatus';\n/**\n * @hidden\n\n */\nexport var showLinkDialog = 'showLinkDialog';\n/**\n * @hidden\n\n */\nexport var closeLinkDialog = 'closeLinkDialog';\n/**\n * @hidden\n\n */\nexport var showImageDialog = 'showImageDialog';\n/**\n * @hidden\n\n */\nexport var closeImageDialog = 'closeImageDialog';\n/**\n * @hidden\n\n */\nexport var showTableDialog = 'showTableDialog';\n/**\n * @hidden\n\n */\nexport var closeTableDialog = 'closeTableDialog';\n","import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isCollide } from '@syncfusion/ej2-popups';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { RenderType } from '../base/enum';\nimport { setToolbarStatus, updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { BaseToolbar } from './base-toolbar';\nimport { DropDownButtons } from './dropdown-buttons';\nimport { ColorPickerInput } from './color-picker';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar BaseQuickToolbar = /** @class */ (function () {\n function BaseQuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.isDOMElement = false;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n this.popupRenderer = this.renderFactory.getRenderer(RenderType.Popup);\n this.dropDownButtons = new DropDownButtons(this.parent, this.locator);\n this.colorPickerObj = new ColorPickerInput(this.parent, this.locator);\n }\n BaseQuickToolbar.prototype.appendPopupContent = function () {\n this.toolbarElement = this.parent.createElement('div', { className: classes.CLS_QUICK_TB });\n this.element.appendChild(this.toolbarElement);\n };\n /**\n * render method\n *\n * @param {IQuickToolbarOptions} args - specifies the arguments\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.render = function (args) {\n var className;\n if (args.popupType === 'Image') {\n className = classes.CLS_IMAGE_POP;\n }\n else if (args.popupType === 'Inline') {\n className = classes.CLS_INLINE_POP;\n }\n else {\n className = '';\n }\n var popupId = getUniqueID(args.popupType + '_Quick_Popup');\n this.stringItems = args.toolbarItems;\n this.element = this.parent.createElement('div', { id: popupId, className: className + ' ' + classes.CLS_RTE_ELEMENTS });\n this.element.setAttribute('aria-owns', this.parent.getID());\n this.appendPopupContent();\n this.createToolbar(args.toolbarItems, args.mode);\n this.popupRenderer.renderPopup(this);\n this.addEventListener();\n };\n BaseQuickToolbar.prototype.createToolbar = function (items, mode) {\n this.quickTBarObj = new BaseToolbar(this.parent, this.locator);\n this.quickTBarObj.render({\n container: 'quick',\n target: this.toolbarElement,\n items: items,\n mode: mode\n });\n this.quickTBarObj.toolbarObj.refresh();\n };\n BaseQuickToolbar.prototype.setPosition = function (e) {\n var x;\n var y;\n var imgWrapper = closest(e.target, '.e-img-caption');\n var target = !isNOU(imgWrapper) ? imgWrapper : e.target;\n addClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n var targetOffsetTop = target.offsetTop;\n var parentOffsetTop = window.pageYOffset + e.parentData.top;\n if ((targetOffsetTop - e.editTop) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) - e.popHeight - 5;\n }\n else if (((e.editTop + e.editHeight) - (targetOffsetTop + target.offsetHeight)) > e.popHeight) {\n y = parentOffsetTop + e.tBarElementHeight + (targetOffsetTop - e.editTop) + target.offsetHeight + 5;\n }\n else {\n y = e.y;\n }\n if (target.offsetWidth > e.popWidth) {\n x = (target.offsetWidth / 2) - (e.popWidth / 2) + e.parentData.left + target.offsetLeft;\n }\n else {\n x = e.parentData.left + target.offsetLeft;\n }\n this.popupObj.position.X = ((x + e.popWidth) > e.parentData.right) ? e.parentData.right - e.popWidth : x;\n this.popupObj.position.Y = (y >= 0) ? y : e.y + 5;\n this.popupObj.dataBind();\n removeClass([this.toolbarElement], [classes.CLS_RM_WHITE_SPACE]);\n };\n BaseQuickToolbar.prototype.checkCollision = function (e, viewPort, type) {\n var x;\n var y;\n var parentTop = e.parentData.top;\n var contentTop = e.windowY + parentTop + e.tBarElementHeight;\n var collision = [];\n if (viewPort === 'document') {\n collision = isCollide(e.popup);\n }\n else {\n collision = isCollide(e.popup, e.parentElement);\n }\n for (var i = 0; i < collision.length; i++) {\n switch (collision[i]) {\n case 'top':\n if (viewPort === 'document') {\n y = e.windowY;\n }\n else {\n y = (window.pageYOffset + parentTop) + e.tBarElementHeight;\n }\n break;\n case 'bottom': {\n var posY = void 0;\n if (viewPort === 'document') {\n if (type === 'inline') {\n posY = (e.y - e.popHeight - 10);\n }\n else {\n if ((e.windowHeight - (parentTop + e.tBarElementHeight)) > e.popHeight) {\n if ((contentTop - e.windowHeight) > e.popHeight) {\n posY = (contentTop + (e.windowHeight - parentTop)) - e.popHeight;\n }\n else {\n posY = contentTop;\n }\n }\n else {\n posY = e.windowY + (parentTop + e.tBarElementHeight);\n }\n }\n }\n else {\n if (e.target.tagName !== 'IMG') {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 10;\n }\n else {\n posY = (e.parentData.bottom + window.pageYOffset) - e.popHeight - 5;\n }\n }\n y = posY;\n break;\n }\n case 'right':\n if (type === 'inline') {\n x = window.pageXOffset + (e.windowWidth - (e.popWidth + e.bodyRightSpace + 10));\n }\n else {\n x = e.x - e.popWidth;\n }\n break;\n case 'left':\n if (type === 'inline') {\n x = 0;\n }\n else {\n x = e.parentData.left;\n }\n break;\n }\n }\n this.popupObj.position.X = (x) ? x : this.popupObj.position.X;\n this.popupObj.position.Y = (y) ? y : this.popupObj.position.Y;\n this.popupObj.dataBind();\n };\n /**\n * showPopup method\n *\n * @param {number} x - specifies the x value\n * @param {number} y - specifies the y value\n * @param {Element} target - specifies the element\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.showPopup = function (x, y, target) {\n var _this = this;\n var eventArgs = { popup: this.popupObj, cancel: false, targetElement: target };\n this.parent.trigger(events.beforeQuickToolbarOpen, eventArgs, function (beforeQuickToolbarArgs) {\n if (!beforeQuickToolbarArgs.cancel) {\n var editPanelTop = void 0;\n var editPanelHeight = void 0;\n var bodyStyle = window.getComputedStyle(document.body);\n var bodyRight = parseFloat(bodyStyle.marginRight.split('px')[0]) + parseFloat(bodyStyle.paddingRight.split('px')[0]);\n var windowHeight = window.innerHeight;\n var windowWidth = window.innerWidth;\n var parent_1 = _this.parent.element;\n var toolbarAvail = !isNullOrUndefined(_this.parent.getToolbar());\n var tbHeight = toolbarAvail && _this.parent.toolbarModule.getToolbarHeight();\n var expTBHeight = toolbarAvail && _this.parent.toolbarModule.getExpandTBarPopHeight();\n var tBarHeight = (toolbarAvail) ? (tbHeight + expTBHeight) : 0;\n addClass([_this.element], [classes.CLS_HIDE]);\n if (Browser.isDevice && !isIDevice()) {\n addClass([_this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (_this.parent.iframeSettings.enable) {\n var cntEle = _this.contentRenderer.getPanel().contentWindow;\n editPanelTop = cntEle.pageYOffset;\n editPanelHeight = cntEle.innerHeight;\n }\n else {\n var cntEle = closest(target, '.' + classes.CLS_RTE_CONTENT);\n editPanelTop = (cntEle) ? cntEle.scrollTop : 0;\n editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;\n }\n if (!_this.parent.inlineMode.enable && !closest(target, 'table')) {\n _this.parent.disableToolbarItem(_this.parent.toolbarSettings.items);\n _this.parent.enableToolbarItem(['Undo', 'Redo']);\n }\n append([_this.element], document.body);\n _this.popupObj.position.X = x + 20;\n _this.popupObj.position.Y = y + 20;\n _this.popupObj.dataBind();\n _this.popupObj.element.classList.add('e-popup-open');\n _this.dropDownButtons.renderDropDowns({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n _this.colorPickerObj.renderColorPickerInput({\n container: _this.toolbarElement,\n containerType: 'quick',\n items: _this.stringItems\n });\n var showPopupData = {\n x: x, y: y,\n target: target,\n editTop: editPanelTop,\n editHeight: editPanelHeight,\n popup: _this.popupObj.element,\n popHeight: _this.popupObj.element.offsetHeight,\n popWidth: _this.popupObj.element.offsetWidth,\n parentElement: parent_1,\n bodyRightSpace: bodyRight,\n windowY: window.pageYOffset,\n windowHeight: windowHeight,\n windowWidth: windowWidth,\n parentData: parent_1.getBoundingClientRect(),\n tBarElementHeight: tBarHeight\n };\n if (target.tagName === 'IMG') {\n _this.setPosition(showPopupData);\n }\n if (!_this.parent.inlineMode.enable) {\n _this.checkCollision(showPopupData, 'parent', '');\n }\n _this.checkCollision(showPopupData, 'document', ((_this.parent.inlineMode.enable) ? 'inline' : ''));\n _this.popupObj.element.classList.remove('e-popup-open');\n removeClass([_this.element], [classes.CLS_HIDE]);\n _this.popupObj.show({ name: 'ZoomIn', duration: (Browser.isIE ? 250 : 400) });\n setStyleAttribute(_this.element, {\n maxWidth: window.outerWidth + 'px'\n });\n addClass([_this.element], [classes.CLS_POP]);\n _this.isDOMElement = true;\n }\n });\n };\n /**\n * hidePopup method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.hidePopup = function () {\n var viewSourcePanel = this.parent.sourceCodeModule.getViewPanel();\n if (Browser.isDevice && !isIDevice()) {\n removeClass([this.parent.getToolbar()], [classes.CLS_HIDE]);\n }\n if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {\n if (isNullOrUndefined(viewSourcePanel) || viewSourcePanel.style.display === 'none') {\n this.parent.enableToolbarItem(this.parent.toolbarSettings.items);\n }\n }\n this.removeEleFromDOM();\n this.isDOMElement = false;\n };\n /**\n * @param {string} item - specifies the string value\n * @param {number} index - specifies the index value\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.addQTBarItem = function (item, index) {\n this.quickTBarObj.toolbarObj.addItems(this.quickTBarObj.getItems(item, 'toolbar'), index);\n };\n /**\n * @param {number} index - specifies the index value\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.removeQTBarItem = function (index) {\n this.quickTBarObj.toolbarObj.removeItems(index);\n };\n BaseQuickToolbar.prototype.removeEleFromDOM = function () {\n var element = this.popupObj.element;\n if (this.isDOMElement) {\n this.dropDownButtons.destroyDropDowns();\n this.colorPickerObj.destroyColorPicker();\n removeClass([this.element], [classes.CLS_POP]);\n detach(element);\n var args = this.popupObj;\n this.parent.trigger(events.quickToolbarClose, args);\n }\n };\n BaseQuickToolbar.prototype.updateStatus = function (args) {\n var options = {\n args: args,\n dropDownModule: this.dropDownButtons,\n parent: this.parent,\n tbElements: selectAll('.' + classes.CLS_TB_ITEM, this.element),\n tbItems: this.quickTBarObj.toolbarObj.items\n };\n setToolbarStatus(options, true, this.parent);\n if (!select('.e-rte-srctextarea', this.parent.element)) {\n updateUndoRedoStatus(this.parent.getBaseToolbarObject(), this.parent.formatter.editorManager.undoRedoManager.getUndoStatus());\n }\n };\n /**\n * Destroys the Quick toolbar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.destroy = function () {\n if (this.popupObj && !this.popupObj.isDestroyed) {\n this.popupObj.destroy();\n this.removeEleFromDOM();\n }\n this.removeEventListener();\n };\n /**\n * addEventListener method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the model element\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.inlineMode)) {\n for (var _i = 0, _a = Object.keys(e.newProp.inlineMode); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enable':\n if (e.newProp.inlineMode.enable) {\n this.parent.on(events.toolbarUpdated, this.updateStatus, this);\n }\n else {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n break;\n }\n }\n }\n };\n /**\n * removeEventListener method\n *\n * @returns {void}\n * @hidden\n\n */\n BaseQuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.inlineMode.enable) {\n this.parent.off(events.toolbarUpdated, this.updateStatus);\n }\n };\n return BaseQuickToolbar;\n}());\nexport { BaseQuickToolbar };\n","import { Popup } from '@syncfusion/ej2-popups';\nimport { CLS_QUICK_POP } from '../base/classes';\nimport * as events from '../base/constant';\n/**\n * `Popup renderer` module is used to render popup in RichTextEditor.\n *\n * @hidden\n\n */\nvar PopupRenderer = /** @class */ (function () {\n /**\n * Constructor for popup renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent.\n */\n function PopupRenderer(parent) {\n this.parent = parent;\n }\n PopupRenderer.prototype.quickToolbarOpen = function () {\n var args = this.popupObj;\n this.parent.trigger(events.quickToolbarOpen, args);\n };\n /**\n * renderPopup method\n *\n * @param {BaseQuickToolbar} args - specifies the arguments.\n * @returns {void}\n * @hidden\n\n */\n PopupRenderer.prototype.renderPopup = function (args) {\n this.setPanel(args.element);\n this.renderPanel();\n args.popupObj = new Popup(args.element, {\n targetType: 'relative',\n relateTo: this.parent.element,\n open: this.quickToolbarOpen.bind(this)\n });\n this.popupObj = args.popupObj;\n args.popupObj.hide();\n };\n /**\n * The function is used to add popup class in Quick Toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n PopupRenderer.prototype.renderPanel = function () {\n this.getPanel().classList.add(CLS_QUICK_POP);\n };\n /**\n * Get the popup element of RichTextEditor\n *\n * @returns {Element} - specifies the element\n * @hidden\n\n */\n PopupRenderer.prototype.getPanel = function () {\n return this.popupPanel;\n };\n /**\n * Set the popup element of RichTextEditor\n *\n * @returns {void}\n * @param {Element} panel - specifies the element\n * @hidden\n\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, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\nimport * as events from '../base/constant';\nimport { pageYOffset, hasClass, isIDevice } from '../base/util';\nimport { BaseQuickToolbar } from './base-quick-toolbar';\nimport { PopupRenderer } from '../renderer/popup-renderer';\nimport { CLS_INLINE_POP, CLS_INLINE } from '../base/classes';\n/**\n * `Quick toolbar` module is used to handle Quick toolbar actions.\n */\nvar QuickToolbar = /** @class */ (function () {\n function QuickToolbar(parent, locator) {\n this.parent = parent;\n this.locator = locator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.renderFactory.addRenderer(RenderType.Popup, new PopupRenderer(this.parent));\n this.addEventListener();\n }\n QuickToolbar.prototype.formatItems = function (items) {\n var formattedItems = [];\n items.forEach(function (item) {\n if (typeof item === 'string') {\n switch (item.toLocaleLowerCase()) {\n case 'open':\n formattedItems.push('openLink');\n break;\n case 'edit':\n formattedItems.push('editLink');\n break;\n case 'unlink':\n formattedItems.push('removeLink');\n break;\n default:\n formattedItems.push(item);\n break;\n }\n }\n else {\n formattedItems.push(item);\n }\n });\n return formattedItems;\n };\n QuickToolbar.prototype.getQTBarOptions = function (popType, mode, items, type) {\n return {\n popupType: popType,\n toolbarItems: items,\n mode: mode,\n renderType: type\n };\n };\n /**\n * createQTBar method\n *\n * @param {string} popupType - specifies the string value\n * @param {string} mode - specifies the string value.\n * @param {string} items - specifies the string.\n * @param {RenderType} type - specifies the render type.\n * @returns {BaseQuickToolbar} - specifies the quick toolbar\n * @hidden\n\n */\n QuickToolbar.prototype.createQTBar = function (popupType, mode, items, type) {\n if (items.length < 1) {\n return null;\n }\n var qTBar = new BaseQuickToolbar(this.parent, this.locator);\n qTBar.render(this.getQTBarOptions(popupType, mode, this.formatItems(items), type));\n return qTBar;\n };\n QuickToolbar.prototype.initializeQuickToolbars = function () {\n this.parent.quickToolbarModule = this;\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n if (this.parent.inlineMode.enable && this.parent.inlineMode.onSelection && isIDevice()) {\n EventHandler.add(this.contentRenderer.getDocument(), 'selectionchange', this.selectionChangeHandler, this);\n }\n };\n // eslint-disable-next-line\n QuickToolbar.prototype.onMouseDown = function (e) {\n this.parent.isBlur = false;\n this.parent.isRTE = true;\n };\n QuickToolbar.prototype.keyUpQT = function (e) {\n if (e.which == 27) {\n this.hideQuickToolbars();\n }\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 EventHandler.add(this.linkQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.imageQTBar) {\n EventHandler.add(this.imageQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.imageQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.textQTBar) {\n EventHandler.add(this.textQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.textQTBar.element, 'keyup', this.keyUpQT, this);\n }\n if (this.tableQTBar) {\n EventHandler.add(this.tableQTBar.element, 'mousedown', this.onMouseDown, this);\n EventHandler.add(this.tableQTBar.element, 'keyup', this.keyUpQT, 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 EventHandler.add(this.inlineQTBar.element, 'keyup', this.keyUpQT, this);\n }\n };\n /**\n * Method for showing the inline quick toolbar\n *\n * @param {number} x -specifies the value of x.\n * @param {number} y - specifies the y valu.\n * @param {HTMLElement} target - specifies the target element.\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {\n if (this.parent.readonly || target.tagName.toLowerCase() === \"img\") {\n return;\n }\n this.inlineQTBar.showPopup(x, y, target);\n };\n /**\n * Method for hidding the inline quick toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.hideInlineQTBar = function () {\n if (this.inlineQTBar && !hasClass(this.inlineQTBar.element, 'e-popup-close')) {\n this.inlineQTBar.hidePopup();\n }\n };\n /**\n * Method for hidding the quick toolbar\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.hideQuickToolbars = function () {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close') && document.body.contains(this.linkQTBar.element)) {\n this.linkQTBar.hidePopup();\n }\n if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close') && document.body.contains(this.textQTBar.element)) {\n this.textQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close') && document.body.contains(this.imageQTBar.element)) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close') && document.body.contains(this.tableQTBar.element)) {\n this.tableQTBar.hidePopup();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.deBounce = function (x, y, target) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () {\n _this.showInlineQTBar(x, y, target);\n }, 1000);\n };\n QuickToolbar.prototype.mouseUpHandler = function (e) {\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n var args = e.args.touches ?\n e.args.changedTouches[0] : e.args;\n var range = this.parent.getRange();\n var target = e.args.target;\n if (isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n if (isIDevice() && e.touchData && e.touchData.prevClientX !== e.touchData.clientX\n && e.touchData.prevClientY !== e.touchData.clientY) {\n return;\n }\n this.hideInlineQTBar();\n var parentLeft = this.parent.element.getBoundingClientRect().left;\n this.offsetX = this.parent.iframeSettings.enable ? window.pageXOffset + parentLeft + args.clientX : args.pageX;\n this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);\n if (target.nodeName === 'TEXTAREA') {\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n else {\n var closestAnchor = closest(target, 'a');\n target = closestAnchor ? closestAnchor : target;\n var startNode = this.parent.getRange().startContainer.parentElement;\n var endNode = this.parent.getRange().endContainer.parentElement;\n if ((isNOU(closest(startNode, 'A')) || isNOU(closest(endNode, 'A'))) && (!closest(target, 'td,th') || !range.collapsed) &&\n (target.tagName !== 'IMG' || this.parent.getRange().startOffset !== this.parent.getRange().endOffset)) {\n if (this.parent.inlineMode.onSelection && range.collapsed) {\n return;\n }\n this.target = target;\n this.showInlineQTBar(this.offsetX, this.offsetY, target);\n }\n }\n }\n }\n };\n QuickToolbar.prototype.keyDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.inlineQTBarMouseDownHandler = function () {\n if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))\n && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {\n this.hideInlineQTBar();\n }\n };\n QuickToolbar.prototype.keyUpHandler = function (e) {\n if (this.parent.inlineMode.enable && !Browser.isDevice) {\n if (this.parent.inlineMode.onSelection) {\n return;\n }\n var args = e.args;\n this.deBounce(this.offsetX, this.offsetY, args.target);\n }\n };\n QuickToolbar.prototype.selectionChangeHandler = function (e) {\n var _this = this;\n clearTimeout(this.deBouncer);\n this.deBouncer = window.setTimeout(function () {\n _this.onSelectionChange(e);\n }, 1000);\n };\n QuickToolbar.prototype.onSelectionChange = function (e) {\n if (!isNullOrUndefined(select('.' + CLS_INLINE_POP, document.body))) {\n return;\n }\n var selection = this.contentRenderer.getDocument().getSelection();\n if (!selection.isCollapsed) {\n this.mouseUpHandler({ args: e });\n }\n };\n /**\n * getInlineBaseToolbar method\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.getInlineBaseToolbar = function () {\n return this.inlineQTBar && this.inlineQTBar.quickTBarObj;\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.destroy = function () {\n if (this.linkQTBar) {\n EventHandler.remove(this.linkQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.linkQTBar.element, 'keyup', this.keyUpQT);\n this.linkQTBar.destroy();\n }\n if (this.textQTBar) {\n EventHandler.remove(this.textQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.textQTBar.element, 'keyup', this.keyUpQT);\n this.textQTBar.destroy();\n }\n if (this.imageQTBar) {\n EventHandler.remove(this.imageQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.imageQTBar.element, 'keyup', this.keyUpQT);\n this.imageQTBar.destroy();\n }\n if (this.tableQTBar) {\n EventHandler.remove(this.tableQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.tableQTBar.element, 'keyup', this.keyUpQT);\n this.tableQTBar.destroy();\n }\n if (this.inlineQTBar) {\n EventHandler.remove(this.inlineQTBar.element, 'mousedown', this.onMouseDown);\n EventHandler.remove(this.inlineQTBar.element, 'keyup', this.keyUpQT);\n if (isIDevice()) {\n EventHandler.remove(document, 'selectionchange', this.selectionChangeHandler);\n }\n this.inlineQTBar.destroy();\n }\n this.removeEventListener();\n };\n QuickToolbar.prototype.wireInlineQTBarEvents = function () {\n this.parent.on(events.mouseUp, this.mouseUpHandler, this);\n this.parent.on(events.mouseDown, this.inlineQTBarMouseDownHandler, this);\n this.parent.on(events.keyDown, this.keyDownHandler, this);\n this.parent.on(events.keyUp, this.keyUpHandler, this);\n this.parent.on(events.sourceCodeMouseDown, this.mouseUpHandler, this);\n this.parent.on(events.renderInlineToolbar, this.renderInlineQuickToolbar, this);\n };\n QuickToolbar.prototype.unWireInlineQTBarEvents = function () {\n this.parent.off(events.mouseUp, this.mouseUpHandler);\n this.parent.off(events.mouseDown, this.inlineQTBarMouseDownHandler);\n this.parent.off(events.keyDown, this.keyDownHandler);\n this.parent.off(events.keyUp, this.keyUpHandler);\n this.parent.off(events.sourceCodeMouseDown, this.mouseUpHandler);\n this.parent.off(events.renderInlineToolbar, this.renderInlineQuickToolbar);\n };\n // eslint-disable-next-line\n QuickToolbar.prototype.toolbarUpdated = function (args) {\n if (this.linkQTBar && !hasClass(this.linkQTBar.element, 'e-popup-close')) {\n this.linkQTBar.hidePopup();\n }\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n if (this.tableQTBar && !hasClass(this.tableQTBar.element, 'e-popup-close')) {\n this.tableQTBar.hidePopup();\n }\n };\n /**\n * addEventListener\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.initialEnd, this.initializeQuickToolbars, this);\n this.parent.on(events.mouseDown, this.renderQuickToolbars, this);\n this.parent.on(events.toolbarUpdated, this.toolbarUpdated, this);\n this.parent.on(events.drop, this.renderQuickToolbars, this);\n this.wireInlineQTBarEvents();\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n this.parent.on(events.focusChange, this.hideQuickToolbars, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.rtlMode, this.setRtl, this);\n };\n QuickToolbar.prototype.onKeyDown = function (e) {\n var args = e.args;\n if (args.which === 8 || args.which === 46) {\n if (this.imageQTBar && !hasClass(this.imageQTBar.element, 'e-popup-close')) {\n this.imageQTBar.hidePopup();\n }\n }\n };\n QuickToolbar.prototype.onIframeMouseDown = function () {\n this.hideQuickToolbars();\n this.hideInlineQTBar();\n };\n QuickToolbar.prototype.setRtl = function (args) {\n if (this.inlineQTBar) {\n this.inlineQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.imageQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n if (this.linkQTBar) {\n this.imageQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });\n }\n };\n /**\n * removeEventListener\n *\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.initializeQuickToolbars);\n this.parent.off(events.mouseDown, this.renderQuickToolbars);\n this.parent.off(events.toolbarUpdated, this.toolbarUpdated);\n this.parent.off(events.drop, this.renderQuickToolbars);\n this.unWireInlineQTBarEvents();\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n if (this.parent.quickToolbarSettings.actionOnScroll === 'hide') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n this.parent.off(events.focusChange, this.hideQuickToolbars);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.rtlMode, this.setRtl);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the element.\n * @returns {void}\n * @hidden\n\n */\n QuickToolbar.prototype.onPropertyChanged = function (e) {\n if (!isNullOrUndefined(e.newProp.quickToolbarSettings)) {\n for (var _i = 0, _a = Object.keys(e.newProp.quickToolbarSettings); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'actionOnScroll':\n if (e.newProp.quickToolbarSettings.actionOnScroll === 'none') {\n this.parent.off(events.scroll, this.hideQuickToolbars);\n this.parent.off(events.contentscroll, this.hideQuickToolbars);\n }\n else {\n this.parent.on(events.scroll, this.hideQuickToolbars, this);\n this.parent.on(events.contentscroll, this.hideQuickToolbars, this);\n }\n break;\n }\n }\n }\n if (e.module !== this.getModuleName()) {\n return;\n }\n if (this.inlineQTBar) {\n removeClass([this.parent.element], [CLS_INLINE]);\n this.unWireInlineQTBarEvents();\n this.hideInlineQTBar();\n }\n if (this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n addClass([this.parent.element], [CLS_INLINE]);\n this.wireInlineQTBarEvents();\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n * @hidden\n */\n QuickToolbar.prototype.getModuleName = function () {\n return 'quickToolbar';\n };\n return QuickToolbar;\n}());\nexport { QuickToolbar };\n","import { extend, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport * as CONSTANT from '../base/constant';\nimport { updateUndoRedoStatus, isIDevice } from '../base/util';\nimport { KEY_DOWN, KEY_UP } from './../../common/constant';\n/**\n * Formatter\n *\n * @hidden\n\n */\nvar Formatter = /** @class */ (function () {\n function Formatter() {\n }\n /**\n * To execute the command\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {ActionBeginEventArgs} args - specifies the event arguments.\n * @param {MouseEvent|KeyboardEvent} event - specifies the keyboard event.\n * @param {IItemCollectionArgs} value - specifies the collection arguments\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.process = function (self, args, event, value) {\n var _this = this;\n var selection = self.contentModule.getDocument().getSelection();\n var range = (selection.rangeCount > 0) ? selection.getRangeAt(selection.rangeCount - 1) : null;\n var saveSelection;\n if (self.editorMode === 'HTML') {\n saveSelection = this.editorManager.nodeSelection.save(range, self.contentModule.getDocument());\n }\n if (!isNullOrUndefined(args)\n && args.item.command\n && args.item.command !== 'Table'\n && args.item.command !== 'Actions'\n && args.item.command !== 'Links'\n && args.item.command !== 'Images'\n && args.item.command !== 'Files'\n && range\n && !(self.contentModule.getEditPanel().contains(this.getAncestorNode(range.commonAncestorContainer))\n || self.contentModule.getEditPanel() === range.commonAncestorContainer\n || self.contentModule.getPanel() === range.commonAncestorContainer)) {\n return;\n }\n if (isNullOrUndefined(args)) {\n var action_1 = event.action;\n if (action_1 !== 'tab' && action_1 !== 'enter' && action_1 !== 'space' && action_1 !== 'escape') {\n args = {};\n if (self.editorMode === 'Markdown' && action_1 === 'insert-table') {\n value = {\n 'headingText': self.localeObj.getConstant('TableHeadingText'),\n 'colText': self.localeObj.getConstant('TableColText')\n };\n }\n var items = {\n originalEvent: event, cancel: false,\n requestType: action_1 || (event.key + 'Key'),\n itemCollection: value\n };\n extend(args, args, items, true);\n self.trigger(CONSTANT.actionBegin, args, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n if (action_1 === 'paste' || action_1 === 'cut' || action_1 === 'copy') {\n event.preventDefault();\n }\n }\n });\n }\n var isTableModule = isNullOrUndefined(self.tableModule) ? true : self.tableModule ?\n self.tableModule.ensureInsideTableList : false;\n if ((event.which === 9 && isTableModule) || event.which !== 9) {\n if (event.which === 13 && self.editorMode === 'HTML') {\n value = {\n 'enterAction': self.enterKey\n };\n }\n this.editorManager.observer.notify((event.type === 'keydown' ? KEY_DOWN : KEY_UP), {\n event: event,\n callBack: this.onSuccess.bind(this, self),\n value: value,\n enterAction: self.enterKey\n });\n }\n }\n else if (!isNullOrUndefined(args) && args.item.command && args.item.subCommand && ((args.item.command !== args.item.subCommand\n && args.item.command !== 'Font')\n || ((args.item.subCommand === 'FontName' || args.item.subCommand === 'FontSize') && args.name === 'dropDownSelect')\n || ((args.item.subCommand === 'BackgroundColor' || args.item.subCommand === 'FontColor')\n && args.name === 'colorPickerChanged'))) {\n extend(args, args, { requestType: args.item.subCommand, cancel: false, itemCollection: value, selectType: args.name }, 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' && actionBeginArgs.selectType === 'dropDownSelect' ?\n { name: actionBeginArgs.selectType } : value, ('#' + self.getID() + ' iframe'), self.enterKey);\n }\n }\n });\n }\n if (isNullOrUndefined(event) || event && event.action !== 'copy') {\n this.enableUndo(self);\n }\n };\n Formatter.prototype.getAncestorNode = function (node) {\n node = node.nodeType === 3 ? node.parentNode : node;\n return node;\n };\n /**\n * onKeyHandler method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.onKeyHandler = function (self, e) {\n var _this = this;\n this.editorManager.observer.notify(KEY_UP, {\n event: e, callBack: function () {\n self.notify(CONSTANT.contentChanged, {});\n _this.enableUndo(self);\n }\n });\n };\n /**\n * onSuccess method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @param {IMarkdownFormatterCallBack} events - specifies the event call back\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.onSuccess = function (self, events) {\n self.notify(CONSTANT.contentChanged, {});\n if (events && (isNullOrUndefined(events.event) || events.event.action !== 'copy')) {\n this.enableUndo(self);\n self.notify(CONSTANT.execCommandCallBack, events);\n }\n self.trigger(CONSTANT.actionComplete, events, function (callbackArgs) {\n self.setPlaceHolder();\n if (callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links' && self.editorMode === 'HTML') {\n var args = callbackArgs;\n if (callbackArgs.requestType === 'Links' && callbackArgs.event &&\n callbackArgs.event.type === 'keydown' &&\n callbackArgs.event.keyCode === 32) {\n return;\n }\n self.notify(CONSTANT.insertCompleted, {\n args: args.event, type: callbackArgs.requestType, isNotify: true,\n elements: args.elements\n });\n }\n self.autoResize();\n });\n };\n /**\n * Save the data for undo and redo action.\n *\n * @param {KeyboardEvent} e - specifies the keyboard event.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.saveData = function (e) {\n this.editorManager.undoRedoManager.saveData(e);\n };\n /**\n * getUndoStatus method\n *\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.getUndoStatus = function () {\n return this.editorManager.undoRedoManager.getUndoStatus();\n };\n /* eslint-disable */\n /**\n * getUndoRedoStack method\n *\n * @param {IHtmlUndoRedoData} - specifies the redo data.\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n Formatter.prototype.getUndoRedoStack = function () {\n return this.editorManager.undoRedoManager.undoRedoStack;\n };\n /**\n * enableUndo method\n *\n * @param {IRichTextEditor} self - specifies the self element.\n * @returns {void}\n * @hidden\n\n */\n Formatter.prototype.enableUndo = function (self) {\n var status = this.getUndoStatus();\n if (self.inlineMode.enable && (!Browser.isDevice || isIDevice())) {\n updateUndoRedoStatus(self.quickToolbarModule.inlineQTBar.quickTBarObj, status);\n }\n else {\n if (self.toolbarModule) {\n updateUndoRedoStatus(self.toolbarModule.baseToolbar, status);\n }\n }\n };\n return Formatter;\n}());\nexport { Formatter };\n","/**\n * Constant values for EditorManager\n */\n/**\n * Image plugin events\n *\n * @hidden\n */\nexport var IMAGE = 'INSERT-IMAGE';\nexport var TABLE = 'INSERT-TABLE';\nexport var LINK = 'INSERT-LINK';\nexport var INSERT_ROW = 'INSERT-ROW';\nexport var INSERT_COLUMN = 'INSERT-COLUMN';\nexport var DELETEROW = 'DELETE-ROW';\nexport var DELETECOLUMN = 'DELETE-COLUMN';\nexport var REMOVETABLE = 'REMOVE-TABLE';\nexport var TABLEHEADER = 'TABLE-HEADER';\nexport var TABLE_VERTICAL_ALIGN = 'TABLE_VERTICAL_ALIGN';\nexport var TABLE_MERGE = 'TABLE_MERGE';\nexport var TABLE_VERTICAL_SPLIT = 'TABLE_VERTICAL_SPLIT';\nexport var TABLE_HORIZONTAL_SPLIT = 'TABLE_HORIZONTAL_SPLIT';\nexport var TABLE_MOVE = 'TABLE_MOVE';\n/**\n * Alignments plugin events\n *\n * @hidden\n */\nexport var ALIGNMENT_TYPE = 'alignment-type';\n/**\n * Indents plugin events\n *\n * @hidden\n */\nexport var INDENT_TYPE = 'indent-type';\n/**\n * Constant tag names\n *\n * @hidden\n */\nexport var DEFAULT_TAG = 'p';\n/**\n * @hidden\n */\nexport var BLOCK_TAGS = ['address', 'article', 'aside', 'audio', 'blockquote',\n 'canvas', 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'li', 'main', 'nav',\n 'noscript', 'ol', 'output', 'p', 'pre', 'section', 'table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr', 'ul', 'video', 'body'];\n/**\n * @hidden\n */\nexport var IGNORE_BLOCK_TAGS = ['td', 'th'];\n/**\n * @hidden\n */\nexport var TABLE_BLOCK_TAGS = ['table', 'tbody', 'td', 'tfoot', 'th',\n 'thead', 'tr'];\n/**\n * Selection plugin events\n *\n * @hidden\n */\nexport var SELECTION_TYPE = 'selection-type';\n/**\n * Insert HTML plugin events\n *\n * @hidden\n */\nexport var INSERTHTML_TYPE = 'inserthtml-type';\n/**\n * Insert Text plugin events\n *\n * @hidden\n */\nexport var INSERT_TEXT_TYPE = 'insert-text-type';\n/**\n * Clear Format HTML plugin events\n *\n * @hidden\n */\nexport var CLEAR_TYPE = 'clear-type';\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Selection` module is used to handle RTE Selections.\n */\nvar NodeSelection = /** @class */ (function () {\n function NodeSelection() {\n this.startNodeName = [];\n this.endNodeName = [];\n }\n NodeSelection.prototype.saveInstance = function (range, body) {\n this.range = range.cloneRange();\n this.rootNode = this.documentFromRange(range);\n this.body = body;\n this.startContainer = this.getNodeArray(range.startContainer, true);\n this.endContainer = this.getNodeArray(range.endContainer, false);\n this.startOffset = range.startOffset;\n this.endOffset = range.endOffset;\n this.html = this.body.innerHTML;\n return this;\n };\n NodeSelection.prototype.documentFromRange = function (range) {\n return (9 === range.startContainer.nodeType) ? range.startContainer : range.startContainer.ownerDocument;\n };\n NodeSelection.prototype.getRange = function (docElement) {\n var select = this.get(docElement);\n var range = select && select.rangeCount > 0 ? select.getRangeAt(select.rangeCount - 1) : docElement.createRange();\n return (range.startContainer !== docElement || range.endContainer !== docElement\n || range.startOffset || range.endOffset || (range.setStart(docElement.body, 0),\n range.collapse(!0)),\n range);\n };\n /**\n * get method\n *\n * @param {Document} docElement - specifies the get function\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.get = function (docElement) {\n return docElement.defaultView.getSelection();\n };\n /**\n * save method\n *\n * @param {Range} range - range value.\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.save = function (range, docElement) {\n range = (range) ? range.cloneRange() : this.getRange(docElement);\n return this.saveInstance(range, docElement.body);\n };\n /**\n * getIndex method\n *\n * @param {Node} node - specifies the node value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getIndex = function (node) {\n var index;\n var num = 0;\n node = !node.previousSibling && node.tagName === 'BR' ? node : node.previousSibling;\n if (node) {\n for (var type = node.nodeType; node; null) {\n index = node.nodeType;\n num++;\n //eslint-disable-next-line\n type = index;\n node = node.previousSibling;\n }\n }\n return num;\n };\n NodeSelection.prototype.isChildNode = function (nodeCollection, parentNode) {\n for (var index = 0; index < parentNode.childNodes.length; index++) {\n if (nodeCollection.indexOf(parentNode.childNodes[index]) > -1) {\n return true;\n }\n }\n return false;\n };\n NodeSelection.prototype.getNode = function (startNode, endNode, nodeCollection) {\n if (endNode === startNode &&\n (startNode.nodeType === 3 || !startNode.firstChild || nodeCollection.indexOf(startNode.firstChild) !== -1\n || this.isChildNode(nodeCollection, startNode))) {\n return null;\n }\n if (nodeCollection.indexOf(startNode.firstChild) === -1 && startNode.firstChild && !this.isChildNode(nodeCollection, startNode)) {\n return startNode.firstChild;\n }\n if (startNode.nextSibling) {\n return startNode.nextSibling;\n }\n if (!startNode.parentNode) {\n return null;\n }\n else {\n return startNode.parentNode;\n }\n };\n /**\n * getNodeCollection method\n *\n * @param {Range} range -specifies the range.\n * @returns {void}\n * @hidden\n\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.nodeName === 'BR' && startNode === range.endContainer.childNodes[range.endOffset])) &&\n startNode.childNodes.length === 0) {\n return [startNode];\n }\n if (range.startOffset === range.endOffset && range.startOffset !== 0 && range.startContainer.nodeName === 'PRE') {\n return [startNode.nodeName === 'BR' || startNode.nodeName === '#text' ? startNode : startNode.childNodes[0]];\n }\n var nodeCollection = [];\n do {\n if (nodeCollection.indexOf(startNode) === -1) {\n nodeCollection.push(startNode);\n }\n startNode = this.getNode(startNode, endNode, nodeCollection);\n } while (startNode);\n return nodeCollection;\n };\n /**\n * getParentNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getParentNodeCollection = function (range) {\n return this.getParentNodes(this.getNodeCollection(range), range);\n };\n /**\n * getParentNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @param {Range} range - specifies the range values.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getParentNodes = function (nodeCollection, range) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection.indexOf(nodeCollection[index].parentNode) !== -1)\n || (nodeCollection[index].nodeType === 3 &&\n range.startContainer !== range.endContainer &&\n range.startContainer.parentNode !== range.endContainer.parentNode)) {\n nodeCollection.splice(index, 1);\n index--;\n }\n else if (nodeCollection[index].nodeType === 3) {\n nodeCollection[index] = nodeCollection[index].parentNode;\n }\n }\n return nodeCollection;\n };\n /**\n * getSelectionNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodeCollection = function (range) {\n return this.getSelectionNodes(this.getNodeCollection(range));\n };\n /**\n * getSelectionNodeCollection along with BR node method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodeCollectionBr = function (range) {\n return this.getSelectionNodesBr(this.getNodeCollection(range));\n };\n /**\n * getParentNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx)))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * Get selection text nodes with br method.\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectionNodesBr = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeName !== 'BR' &&\n (nodeCollection[index].nodeType !== 3 || (nodeCollection[index].textContent.trim() === '' ||\n (nodeCollection[index].textContent.length === 1 && nodeCollection[index].textContent.match(regEx))))) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getInsertNodeCollection method\n *\n * @param {Range} range - specifies the range value.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getInsertNodeCollection = function (range) {\n return this.getInsertNodes(this.getNodeCollection(range));\n };\n /**\n * getInsertNodes method\n *\n * @param {Node[]} nodeCollection - specifies the collection of nodes.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getInsertNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if ((nodeCollection[index].childNodes.length !== 0 &&\n nodeCollection[index].nodeType !== 3) ||\n (nodeCollection[index].nodeType === 3 &&\n nodeCollection[index].textContent === '')) {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n return nodeCollection.reverse();\n };\n /**\n * getNodeArray method\n *\n * @param {Node} node - specifies the node content.\n * @param {boolean} isStart - specifies the boolean value.\n * @param {Document} root - specifies the root document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getNodeArray = function (node, isStart, root) {\n var array = [];\n // eslint-disable-next-line\n ((isStart) ? (this.startNodeName = []) : (this.endNodeName = []));\n for (; node !== (root ? root : this.rootNode); null) {\n if (isNullOrUndefined(node)) {\n break;\n }\n // eslint-disable-next-line\n (isStart) ? this.startNodeName.push(node.nodeName.toLowerCase()) : this.endNodeName.push(node.nodeName.toLowerCase());\n array.push(this.getIndex(node));\n node = node.parentNode;\n }\n return array;\n };\n NodeSelection.prototype.setRangePoint = function (range, isvalid, num, size) {\n var node = this.rootNode;\n var index = num.length;\n var constant = size;\n for (; index--; null) {\n node = node && node.childNodes[num[index]];\n }\n if (node && constant >= 0 && node.nodeName !== 'html') {\n range[isvalid ? 'setStart' : 'setEnd'](node, constant);\n }\n return range;\n };\n /**\n * restore method\n *\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.restore = function () {\n var range = this.range.cloneRange();\n range = this.setRangePoint(range, true, this.startContainer, this.startOffset);\n range = this.setRangePoint(range, false, this.endContainer, this.endOffset);\n this.selectRange(this.rootNode, range);\n return range;\n };\n NodeSelection.prototype.selectRange = function (docElement, range) {\n this.setRange(docElement, range);\n this.save(range, docElement);\n };\n /**\n * setRange method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Range} range - specifies the range.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setRange = function (docElement, range) {\n var selection = this.get(docElement);\n selection.removeAllRanges();\n selection.addRange(range);\n };\n /**\n * setSelectionText method\n *\n * @param {Document} docElement - specifies the documrent\n * @param {Node} startNode - specifies the starting node.\n * @param {Node} endNode - specifies the the end node.\n * @param {number} startIndex - specifies the starting index.\n * @param {number} endIndex - specifies the end index.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionText = function (docElement, startNode, endNode, startIndex, endIndex) {\n var range = docElement.createRange();\n range.setStart(startNode, startIndex);\n range.setEnd(endNode, endIndex);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionContents method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionContents = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNode(element);\n this.setRange(docElement, range);\n };\n /**\n * setSelectionNode method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} element - specifies the node.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.setSelectionNode = function (docElement, element) {\n var range = docElement.createRange();\n range.selectNodeContents(element);\n this.setRange(docElement, range);\n };\n /**\n * getSelectedNodes method\n *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.getSelectedNodes = function (docElement) {\n return this.getNodeCollection(this.getRange(docElement));\n };\n /**\n * Clear method\n *\n * @param {Document} docElement - specifies the document.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.Clear = function (docElement) {\n this.get(docElement).removeAllRanges();\n };\n /**\n * insertParentNode method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Node} newNode - specicfies the new node.\n * @param {Range} range - specifies the range.\n * @returns {void}\n * @hidden\n\n */\n NodeSelection.prototype.insertParentNode = function (docElement, newNode, range) {\n range.surroundContents(newNode);\n this.selectRange(docElement, range);\n };\n /**\n * setCursorPoint method\n *\n * @param {Document} docElement - specifies the document.\n * @param {Element} element - specifies the element.\n * @param {number} point - specifies the point.\n * @returns {void}\n * @hidden\n\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","/**\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': '',\n 'SuperScript': '',\n 'UpperCase': 'A-Z',\n 'LowerCase': 'a-z'\n};\n/**\n * Default Markdown lists config for adapter\n */\nexport var markdownListsTags = {\n 'OL': '1. ',\n 'UL': '- '\n};\n/**\n * Default html key config for adapter\n */\nexport var htmlKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'underline': 'ctrl+u',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'indents': 'ctrl+]',\n 'outdents': 'ctrl+[',\n 'html-source': 'ctrl+shift+h',\n 'full-screen': 'ctrl+shift+f',\n 'decrease-fontsize': 'ctrl+shift+<',\n 'increase-fontsize': 'ctrl+shift+>',\n 'justify-center': 'ctrl+e',\n 'justify-full': 'ctrl+j',\n 'justify-left': 'ctrl+l',\n 'justify-right': 'ctrl+r',\n 'clear-format': 'ctrl+shift+r',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o',\n 'space': '32',\n 'enter': '13',\n 'tab': 'tab',\n 'delete': '46'\n};\n/**\n * Default markdown key config for adapter\n */\nexport var markdownKeyConfig = {\n 'toolbar-focus': 'alt+f10',\n 'escape': '27',\n 'insert-link': 'ctrl+k',\n 'insert-image': 'ctrl+shift+i',\n 'insert-table': 'ctrl+shift+e',\n 'undo': 'ctrl+z',\n 'redo': 'ctrl+y',\n 'copy': 'ctrl+c',\n 'cut': 'ctrl+x',\n 'paste': 'ctrl+v',\n 'bold': 'ctrl+b',\n 'italic': 'ctrl+i',\n 'strikethrough': 'ctrl+shift+s',\n 'uppercase': 'ctrl+shift+u',\n 'lowercase': 'ctrl+shift+l',\n 'superscript': 'ctrl+shift+=',\n 'subscript': 'ctrl+=',\n 'full-screen': 'ctrl+shift+f',\n 'ordered-list': 'ctrl+shift+o',\n 'unordered-list': 'ctrl+alt+o'\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var pasteCleanupGroupingTags = {\n 'b': ['strong'],\n 'strong': ['b'],\n 'i': ['emp', 'cite'],\n 'emp': ['i', 'cite'],\n 'cite': ['i', 'emp']\n};\n/**\n * PasteCleanup Grouping of similar functionality tags\n */\nexport var listConversionFilters = {\n 'first': 'MsoListParagraphCxSpFirst',\n 'middle': 'MsoListParagraphCxSpMiddle',\n 'last': 'MsoListParagraphCxSpLast'\n};\n/**\n * Dom-Node Grouping of self closing tags\n *\n * @hidden\n */\nexport var selfClosingTags = [\n 'BR',\n 'IMG'\n];\n","import * as CONSTANT from './../base/constant';\nimport { append, detach, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { selfClosingTags } from '../../common/config';\nimport { getLastTextNode } from '../../common/util';\nexport var markerClassName = {\n startSelection: 'e-editor-select-start',\n endSelection: 'e-editor-select-end'\n};\n/**\n * DOMNode internal plugin\n *\n * @hidden\n\n */\nvar DOMNode = /** @class */ (function () {\n /**\n * Constructor for creating the DOMNode plugin\n *\n * @param {Element} parent - specifies the parent element\n * @param {Document} currentDocument - specifies the current document.\n * @hidden\n\n */\n function DOMNode(parent, currentDocument) {\n this.parent = parent;\n this.nodeSelection = new NodeSelection();\n this.currentDocument = currentDocument;\n }\n /**\n * contents method\n *\n * @param {Element} element - specifies the element.\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.contents = function (element) {\n return (element && 'IFRAME' !== element.tagName ? Array.prototype.slice.call(element.childNodes || []) : []);\n };\n /**\n * isBlockNode method\n *\n * @param {Element} element - specifies the node element.\n * @returns {boolean} - sepcifies the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n /**\n * isLink method\n *\n * @param {Element} element - specifies the element\n * @returns {boolean} - specifies the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isLink = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && 'a' === element.tagName.toLowerCase()));\n };\n /**\n * blockParentNode method\n *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element value\n * @hidden\n\n */\n DOMNode.prototype.blockParentNode = function (element) {\n for (; element && element.parentNode !== this.parent && ((!element.parentNode ||\n !this.hasClass(element.parentNode, 'e-node-inner'))); null) {\n element = element.parentNode;\n if (this.isBlockNode(element)) {\n return element;\n }\n }\n return element;\n };\n /**\n * rawAttributes method\n *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\n * @hidden\n\n */\n DOMNode.prototype.rawAttributes = function (element) {\n var rawAttr = {};\n var attributes = element.attributes;\n if (attributes.length > 0) {\n for (var d = 0; d < attributes.length; d++) {\n var e = attributes[d];\n rawAttr[e.nodeName] = e.value;\n }\n }\n return rawAttr;\n };\n /**\n * attributes method\n *\n * @param {Element} element - sepcifies the element.\n * @returns {string} - returns the string value.\n * @hidden\n\n */\n DOMNode.prototype.attributes = function (element) {\n if (!element) {\n return '';\n }\n var attr = '';\n var rawAttr = this.rawAttributes(element);\n var orderRawAttr = Object.keys(rawAttr).sort();\n for (var e = 0; e < orderRawAttr.length; e++) {\n var attrKey = orderRawAttr[e];\n var attrValue = rawAttr[attrKey];\n /* eslint-disable */\n if (attrValue.indexOf(\"'\") < 0 && attrValue.indexOf('\"') >= 0) {\n attr += ' ' + attrKey + \"='\" + attrValue + \"'\";\n }\n else if (attrValue.indexOf('\"') >= 0 && attrValue.indexOf(\"'\") >= 0) {\n /* eslint-enable */\n attrValue = attrValue.replace(/\"/g, '"');\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n else {\n attr += ' ' + attrKey + '=\"' + attrValue + '\"';\n }\n }\n return attr;\n };\n /**\n * clearAttributes method\n *\n * @param {Element} element - specifies the element\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.clearAttributes = function (element) {\n for (var attr = element.attributes, c = attr.length - 1; c >= 0; c--) {\n var key = attr[c];\n element.removeAttribute(key.nodeName);\n }\n };\n /**\n * openTagString method\n *\n * @param {Element} element - specifies the element.\n * @returns {string} - returns the string\n * @hidden\n\n */\n DOMNode.prototype.openTagString = function (element) {\n return '<' + element.tagName.toLowerCase() + this.attributes(element) + '>';\n };\n /**\n * closeTagString method\n *\n * @param {Element} element - specifies the element\n * @returns {string} - returns the string value\n * @hidden\n\n */\n DOMNode.prototype.closeTagString = function (element) {\n return '';\n };\n /**\n * createTagString method\n *\n * @param {string} tagName - specifies the tag name\n * @param {Element} relativeElement - specifies the relative element\n * @param {string} innerHTML - specifies the string value\n * @returns {string} - returns the string value.\n * @hidden\n\n */\n DOMNode.prototype.createTagString = function (tagName, relativeElement, innerHTML) {\n return '<' + tagName.toLowerCase() + this.attributes(relativeElement) + '>' + innerHTML + '';\n };\n /**\n * isList method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isList = function (element) {\n return !!element && ['UL', 'OL'].indexOf(element.tagName) >= 0;\n };\n /**\n * isElement method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isElement = function (element) {\n return element === this.parent;\n };\n /**\n * isEditable method\n *\n * @param {Element} element - specifes the element.\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isEditable = function (element) {\n return ((!element.getAttribute || element.getAttribute('contenteditable') === 'true')\n && ['STYLE', 'SCRIPT'].indexOf(element.tagName) < 0);\n };\n /**\n * hasClass method\n *\n * @param {Element} element - specifes the element.\n * @param {string} className - specifies the class name value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.hasClass = function (element, className) {\n return element && element.classList && element.classList.contains(className);\n };\n /**\n * replaceWith method\n *\n * @param {Element} element - specifes the element.\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.replaceWith = function (element, value) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(this.parseHTMLFragment(value), element);\n detach(element);\n };\n /**\n * parseHTMLFragment method\n *\n * @param {string} value - specifies the string value\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.parseHTMLFragment = function (value) {\n /* eslint-disable */\n var temp = createElement('template');\n temp.innerHTML = value;\n if (temp.content instanceof DocumentFragment) {\n return temp.content;\n }\n else {\n return document.createRange().createContextualFragment(value);\n }\n /* eslint-enable */\n };\n /**\n * wrap method\n *\n * @param {Element} element - specifies the element\n * @param {Element} wrapper - specifies the element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.wrap = function (element, wrapper) {\n element.parentNode.insertBefore(wrapper, element);\n wrapper = element.previousSibling;\n wrapper.appendChild(element);\n return wrapper;\n };\n /**\n * insertAfter method\n *\n * @param {Element} newNode - specifies the new node element\n * @param {Element} referenceNode - specifies the referenece node\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n /**\n * wrapInner method\n *\n * @param {Element} parent - specifies the parent element.\n * @param {Element} wrapper - specifies the wrapper element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.wrapInner = function (parent, wrapper) {\n parent.appendChild(wrapper);\n wrapper = parent.querySelector('.e-rte-wrap-inner');\n wrapper.classList.remove('e-rte-wrap-inner');\n if (wrapper.classList.length === 0) {\n wrapper.removeAttribute('class');\n }\n while (parent.firstChild !== wrapper) {\n wrapper.appendChild(parent.firstChild);\n }\n return wrapper;\n };\n /**\n * unWrap method\n *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element.\n * @hidden\n\n */\n DOMNode.prototype.unWrap = function (element) {\n var parent = element.parentNode;\n var unWrapNode = [];\n while (element.firstChild) {\n unWrapNode.push(element.firstChild);\n parent.insertBefore(element.firstChild, element);\n }\n unWrapNode = unWrapNode.length > 0 ? unWrapNode : [element.parentNode];\n parent.removeChild(element);\n return unWrapNode;\n };\n /**\n * getSelectedNode method\n *\n * @param {Element} element - specifies the element\n * @param {number} index - specifies the index value.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.getSelectedNode = function (element, index) {\n if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 &&\n element.childNodes[index - 1] && element.childNodes[index - 1].nodeType === Node.ELEMENT_NODE &&\n (element.childNodes[index - 1].classList.contains(markerClassName.startSelection) ||\n element.childNodes[index - 1].classList.contains(markerClassName.endSelection))) {\n element = element.childNodes[index - 1];\n }\n else if (element.nodeType === Node.ELEMENT_NODE && element.childNodes.length > 0 && element.childNodes[index]) {\n element = element.childNodes[index];\n }\n if (element.nodeType === Node.TEXT_NODE) {\n element = element.parentNode;\n }\n return element;\n };\n /**\n * nodeFinds method\n *\n * @param {Element} element - specifies the element.\n * @param {Element[]} elements - specifies the array of elements\n * @returns {Element[]} - returnts the array elements\n * @hidden\n\n */\n DOMNode.prototype.nodeFinds = function (element, elements) {\n var existNodes = [];\n for (var i = 0; i < elements.length; i++) {\n if (element.contains(elements[i]) && element !== elements[i]) {\n existNodes.push(elements[i]);\n }\n }\n return existNodes;\n };\n /**\n * isEditorArea method\n *\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n DOMNode.prototype.isEditorArea = function () {\n var range = this.getRangePoint(0);\n var element;\n for (element = range.commonAncestorContainer; element && !this.isElement(element); null) {\n element = element.parentNode;\n }\n return !!this.isElement(element);\n };\n /**\n * getRangePoint method\n *\n * @param {number} point - specifies the number value.\n * @returns {Range} - returns the range.\n * @hidden\n\n */\n DOMNode.prototype.getRangePoint = function (point) {\n var selection = this.getSelection();\n var ranges = [];\n if (selection && selection.getRangeAt && selection.rangeCount) {\n ranges = [];\n for (var f = 0; f < selection.rangeCount; f++) {\n ranges.push(selection.getRangeAt(f));\n }\n }\n else {\n ranges = [this.currentDocument.createRange()];\n }\n return 'undefined' !== typeof point ? ranges[point] : ranges;\n };\n DOMNode.prototype.getSelection = function () {\n return this.nodeSelection.get(this.currentDocument);\n };\n /**\n * getPreviousNode method\n *\n * @param {Element} element - specifies the element\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.getPreviousNode = function (element) {\n element = element.previousElementSibling;\n for (; element && element.textContent === '\\n'; null) {\n element = element.previousElementSibling;\n }\n return element;\n };\n /**\n * encode method\n *\n * @param {string} value - specifies the string value\n * @returns {string} - specifies the string value\n * @hidden\n\n */\n DOMNode.prototype.encode = function (value) {\n var divNode = document.createElement('div');\n divNode.innerText = value;\n // eslint-disable-next-line\n return divNode.innerHTML.replace(//gi, '\\n');\n };\n /**\n * saveMarker method\n *\n * @param {NodeSelection} save - specifies the node selection,\n * @param {string} action - specifies the action value.\n * @returns {NodeSelection} - returns the value\n * @hidden\n\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 = '
';\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 '' + textContent + '';\n };\n /**\n * setMarker method\n *\n * @param {NodeSelection} save - specifies the node selection.\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.setMarker = function (save) {\n var range = save.range;\n var startChildNodes = range.startContainer.childNodes;\n var isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';\n var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :\n startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);\n var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]\n || range.endContainer);\n if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {\n var existNode = start.contains(end) ? start : end;\n var isElement = existNode.nodeType !== Node.TEXT_NODE;\n if (isElement) {\n var nodes = [];\n var textNodes = [];\n for (var node = existNode; existNode.contains(node); null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (textNodes.indexOf(node) < 0 && (node.nodeType === Node.TEXT_NODE ||\n (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0\n && (node.tagName === 'BR' || node.tagName === 'IMG')))) {\n textNodes.push(node);\n }\n }\n if (textNodes.length) {\n start = start.contains(end) ? textNodes[0] : start;\n end = textNodes[textNodes.length - 1];\n }\n }\n }\n if (start !== end) {\n if (start.nodeType !== Node.TEXT_NODE && ((start.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(start.parentNode.tagName.toLocaleLowerCase()) >= 0) ||\n start.tagName === 'IMG')) {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + markerClassName.startSelection);\n markerStart.appendChild(start);\n }\n else {\n this.replaceWith(start, this.marker(markerClassName.startSelection, this.encode(start.textContent)));\n }\n if (end.nodeType !== Node.TEXT_NODE && end.tagName === 'BR' &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(end.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n this.replaceWith(end, this.marker(markerClassName.endSelection, this.encode(end.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(end);\n }\n else {\n this.ensureSelfClosingTag(end, markerClassName.endSelection, range);\n }\n }\n else {\n this.ensureSelfClosingTag(start, markerClassName.startSelection, range);\n }\n };\n /**\n * ensureSelfClosingTag method\n *\n * @param {Element} start - specifies the element.\n * @param {string} className - specifes the class name string value\n * @param {Range} range - specifies the range value\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.ensureSelfClosingTag = function (start, className, range) {\n var isTable = false;\n if (start.nodeType === 3) {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.tagName === 'BR') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n var markerStart = range.startContainer.querySelector('.' + className);\n markerStart.appendChild(start);\n }\n else {\n if (start.tagName === 'IMG') {\n var parNode = document.createElement('p');\n start.parentElement.insertBefore(parNode, start);\n parNode.appendChild(start);\n start = parNode.children[0];\n }\n if (start.tagName === 'TABLE') {\n isTable = true;\n if (start.textContent === '') {\n var tdNode = start.querySelectorAll('td');\n start = tdNode[tdNode.length - 1];\n start = !isNullOrUndefined(start.childNodes[0]) ? start.childNodes[0] : start;\n }\n else {\n var lastNode = start.lastChild;\n while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&\n lastNode.nodeName !== 'BR') {\n lastNode = lastNode.lastChild;\n }\n start = lastNode;\n }\n }\n for (var i = 0; i < selfClosingTags.length; i++) {\n start = (start.tagName === selfClosingTags[i] && !isTable) ? start.parentNode : start;\n }\n if (start.nodeType === 3 && start.nodeName === '#text') {\n this.replaceWith(start, this.marker(className, this.encode(start.textContent)));\n }\n else if (start.nodeName === 'BR') {\n this.replaceWith(start, this.marker(markerClassName.endSelection, this.encode(start.textContent)));\n var markerEnd = range.endContainer.querySelector('.' + markerClassName.endSelection);\n markerEnd.appendChild(start);\n }\n else {\n var marker = this.marker(className, '');\n append([this.parseHTMLFragment(marker)], start);\n }\n }\n };\n /**\n * createTempNode method\n *\n * @param {Element} element - specifies the element.\n * @returns {Element} - returns the element\n * @hidden\n\n */\n DOMNode.prototype.createTempNode = function (element) {\n var textContent = element.textContent;\n if (element.tagName === 'BR') {\n var wrapper = '<' + 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 + '>';\n var target = element;\n element = this.wrap(element, this.parseHTMLFragment(wrapper));\n var ignoreBr = target.nodeType === Node.ELEMENT_NODE && target.firstChild && target.firstChild.nodeName === 'BR'\n && (target.classList.contains(markerClassName.startSelection) ||\n target.classList.contains(markerClassName.endSelection));\n if (!ignoreBr && element.nextElementSibling && element.nextElementSibling.tagName === 'BR') {\n element.appendChild(element.nextElementSibling);\n }\n }\n return element;\n };\n /**\n * getImageTagInSelection method\n *\n * @returns {void}\n * @hidden\n\n */\n DOMNode.prototype.getImageTagInSelection = function () {\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n return selection.focusNode.querySelectorAll('img');\n }\n return null;\n };\n /**\n * blockNodes method\n *\n * @returns {Node[]} - returns the node array values\n * @hidden\n\n */\n DOMNode.prototype.blockNodes = function () {\n var collectionNodes = [];\n var selection = this.getSelection();\n if (this.isEditorArea() && selection.rangeCount) {\n var ranges = this.getRangePoint();\n for (var j = 0; j < ranges.length; j++) {\n var parentNode = void 0;\n var range = ranges[j];\n var startNode = this.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.getSelectedNode(range.endContainer, range.endOffset);\n if (this.isBlockNode(startNode) && collectionNodes.indexOf(startNode) < 0) {\n collectionNodes.push(startNode);\n }\n parentNode = this.blockParentNode(startNode);\n if (parentNode && collectionNodes.indexOf(parentNode) < 0) {\n if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||\n startNode.nodeType === Node.TEXT_NODE ||\n startNode.classList.contains(markerClassName.startSelection) ||\n startNode.classList.contains(markerClassName.endSelection))) {\n var tempNode = startNode.previousSibling &&\n startNode.previousSibling.nodeType === Node.TEXT_NODE ?\n startNode.previousSibling : startNode;\n if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {\n collectionNodes.push(tempNode);\n }\n else {\n collectionNodes.push(this.createTempNode(tempNode));\n }\n }\n else {\n collectionNodes.push(parentNode);\n }\n }\n var nodes = [];\n for (var node = startNode; node !== endNode && node !== this.parent; null) {\n if (nodes.indexOf(node) < 0 && node.childNodes && node.childNodes.length) {\n nodes.push(node);\n node = node.childNodes[0];\n }\n else if (node && node.nodeType !== 8 && (node.tagName === 'BR' || (node.nodeType === Node.TEXT_NODE &&\n node.textContent.trim() !== '') || (node.nodeType !== Node.TEXT_NODE &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection)))) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node);\n }\n else if (node.nextSibling && node.nextSibling.nodeType !== 8 &&\n (node.nextSibling.tagName === 'BR' ||\n node.nextSibling.nodeType === Node.TEXT_NODE ||\n node.nextSibling.classList.contains(markerClassName.startSelection) ||\n node.nextSibling.classList.contains(markerClassName.endSelection)) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.nextSibling.parentNode.tagName.toLocaleLowerCase()) >= 0) {\n node = this.createTempNode(node.nextSibling);\n }\n else if (node.nextSibling) {\n node = node.nextSibling;\n }\n else if (node.parentNode) {\n node = node.parentNode;\n nodes.push(node);\n }\n if (collectionNodes.indexOf(node) < 0 && node.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(node.parentNode.tagName.toLocaleLowerCase()) >= 0 &&\n (node.classList.contains(markerClassName.startSelection) ||\n node.classList.contains(markerClassName.endSelection))) {\n collectionNodes.push(this.createTempNode(node));\n }\n if (this.isBlockNode(node) && this.ignoreTableTag(node) && nodes.indexOf(node) < 0 &&\n collectionNodes.indexOf(node) < 0 && (node !== endNode || range.endOffset > 0)) {\n collectionNodes.push(node);\n }\n if (node.nodeName === 'IMG' && node.parentElement.contentEditable === 'true') {\n collectionNodes.push(node);\n }\n }\n parentNode = this.blockParentNode(endNode);\n if (parentNode && this.ignoreTableTag(parentNode) && collectionNodes.indexOf(parentNode) < 0 &&\n (!isNullOrUndefined(parentNode.previousElementSibling) && parentNode.previousElementSibling.tagName !== 'IMG')) {\n collectionNodes.push(parentNode);\n }\n }\n }\n for (var i = collectionNodes.length - 1; i > 0; i--) {\n var nodes = this.nodeFinds(collectionNodes[i], collectionNodes);\n if (nodes.length) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (collectionNodes[i].tagName === 'LI' && listNodes.length > 0) {\n continue;\n }\n else {\n collectionNodes.splice(i, 1);\n }\n }\n }\n return collectionNodes;\n };\n DOMNode.prototype.ignoreTableTag = function (element) {\n return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);\n };\n return DOMNode;\n}());\nexport { DOMNode };\n","import * as CONSTANT from './../base/constant';\nimport { createElement, detach, prepend, append, attributes } from '@syncfusion/ej2-base';\nimport { markerClassName } from './dom-node';\nimport * as EVENTS from './../../common/constant';\nimport { setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Lists internal component\n *\n * @hidden\n\n */\nvar Lists = /** @class */ (function () {\n /**\n * Constructor for creating the Lists plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function Lists(parent) {\n this.parent = parent;\n this.domNode = this.parent.domNode;\n this.addEventListener();\n }\n Lists.prototype.addEventListener = function () {\n this.parent.observer.on(EVENTS.LIST_TYPE, this.applyListsHandler, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n this.parent.observer.on(EVENTS.SPACE_ACTION, this.spaceKeyAction, this);\n };\n Lists.prototype.testList = function (elem) {\n var olListRegex = [/^[\\d]+[.]+$/,\n /^(?=[MDCLXVI])M*(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})[.]$/gi,\n /^[a-zA-Z][.]+$/];\n var elementStart = !isNullOrUndefined(elem) ? elem.innerText.trim().split('.')[0] + '.' : null;\n if (!isNullOrUndefined(elementStart)) {\n for (var i = 0; i < olListRegex.length; i++) {\n if (olListRegex[i].test(elementStart)) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.testCurrentList = function (range) {\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(range.startContainer.textContent.slice(0, range.startOffset))) {\n var currentContent = range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim();\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(currentContent) && currentContent.length === 2) {\n return true;\n }\n }\n }\n return false;\n };\n Lists.prototype.spaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n // eslint-disable-next-line\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n var preElement = startNode.previousElementSibling;\n var nextElement = startNode.nextElementSibling;\n var preElemULStart = !isNullOrUndefined(preElement) ?\n preElement.innerText.trim().substring(0, 1) : null;\n var nextElemULStart = !isNullOrUndefined(nextElement) ?\n nextElement.innerText.trim().substring(0, 1) : null;\n var startElementOLTest = this.testCurrentList(range);\n var preElementOLTest = this.testList(preElement);\n var nextElementOLTest = this.testList(nextElement);\n if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {\n if (startElementOLTest) {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n }\n else if (range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||\n range.startContainer.textContent.replace(/\\u200B/g, '').slice(0, range.startOffset).trim() === '-') {\n range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n }\n }\n };\n Lists.prototype.enterList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = range.startContainer.nodeName === 'LI' ? range.startContainer :\n range.startContainer.parentElement.closest('LI');\n var endNode = range.endContainer.nodeName === 'LI' ? range.endContainer :\n range.endContainer.parentElement.closest('LI');\n if (!isNOU(startNode) && !isNOU(endNode) && startNode === endNode && startNode.tagName === 'LI' &&\n startNode.textContent.trim() === '' && startNode.querySelectorAll('IMG').length === 0) {\n if (startNode.textContent.charCodeAt(0) === 65279) {\n startNode.textContent = '';\n }\n var startNodeParent = startNode.parentElement;\n if (isNOU(startNodeParent.parentElement.closest('UL')) && isNOU(startNodeParent.parentElement.closest('OL'))) {\n if (!isNOU(startNode.nextElementSibling)) {\n var nearBlockNode = this.parent.domNode.blockParentNode(startNode);\n this.parent.nodeCutter.GetSpliceNode(range, nearBlockNode);\n }\n var insertTag = void 0;\n if (e.enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '
';\n }\n else if (e.enterAction === 'P') {\n insertTag = createElement('p');\n insertTag.innerHTML = '
';\n }\n else {\n insertTag = createElement('br');\n }\n this.parent.domNode.insertAfter(insertTag, startNodeParent);\n e.event.preventDefault();\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);\n if (startNodeParent.textContent === '') {\n detach(startNodeParent);\n }\n else {\n detach(startNode);\n }\n }\n }\n };\n // eslint-disable-next-line\n Lists.prototype.backspaceList = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;\n endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;\n if (startNode === endNode && !isNullOrUndefined(closest(startNode, 'li')) &&\n ((startNode.textContent.trim() === '' && startNode.textContent.charCodeAt(0) === 65279) ||\n (startNode.textContent.length === 1 && startNode.textContent.charCodeAt(0) === 8203))) {\n startNode.textContent = '';\n }\n if (startNode === endNode && startNode.textContent === '') {\n if (startNode.parentElement.tagName === 'LI' && endNode.parentElement.tagName === 'LI') {\n detach(startNode);\n }\n else if (startNode.closest('ul') || startNode.closest('ol')) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.firstElementChild === startNode && !isNOU(parentList.children[1]) &&\n (parentList.children[1].tagName === 'OL' || parentList.children[1].tagName === 'UL')) {\n if (parentList.tagName === parentList.children[1].tagName) {\n while (parentList.children[1].lastChild) {\n this.parent.domNode.insertAfter(parentList.children[1].lastChild, parentList.children[1]);\n }\n detach(parentList.children[1]);\n }\n else {\n parentList.parentElement.insertBefore(parentList.children[1], parentList);\n }\n }\n }\n }\n else if (!isNOU(startNode.firstChild) && startNode.firstChild.nodeName === 'BR' &&\n (!isNullOrUndefined(startNode.childNodes[1]) && (startNode.childNodes[1].nodeName === 'UL' ||\n startNode.childNodes[1].nodeName === 'OL'))) {\n var parentList = !isNOU(startNode.closest('ul')) ? startNode.closest('ul') : startNode.closest('ol');\n if (parentList.tagName === startNode.childNodes[1].nodeName) {\n while (startNode.childNodes[1].lastChild) {\n this.parent.domNode.insertAfter(startNode.children[1].lastChild, startNode);\n }\n detach(startNode.childNodes[1]);\n }\n else {\n parentList.parentElement.insertBefore(startNode.children[1], parentList);\n }\n }\n };\n Lists.prototype.keyDownHandler = function (e) {\n if (e.event.which === 13) {\n this.enterList(e);\n }\n if (e.event.which === 32) {\n this.spaceList(e);\n }\n if (e.event.which === 8) {\n this.backspaceList(e);\n }\n if (e.event.which === 46 && e.event.action === 'delete') {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var commonAncestor = range.commonAncestorContainer;\n var startEle = range.startContainer;\n var endEle = range.endContainer;\n var startNode = startEle.nodeType === 3 ? startEle.parentElement : startEle;\n var endNode = endEle.nodeType === 3 ? endEle.parentElement : endEle;\n if ((commonAncestor.nodeName === 'UL' || commonAncestor.nodeName === 'OL') && startNode !== endNode\n && (!isNullOrUndefined(closest(startNode, 'ul')) || !isNullOrUndefined(closest(startNode, 'ol')))\n && (!isNullOrUndefined(closest(endNode, 'ul')) || !isNullOrUndefined(closest(endNode, 'ol')))\n && (commonAncestor.lastElementChild === closest(endNode, 'li')) && !range.collapsed) {\n detach(commonAncestor);\n }\n }\n if (e.event.which === 9) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n }\n var blockNodes = void 0;\n var startOffset = range.startOffset;\n var endOffset = range.endOffset;\n var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);\n var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);\n if ((startNode === endNode && (startNode.nodeName === 'BR' || startNode.nodeName === '#text') &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(startNode.parentNode.tagName.toLocaleLowerCase()) >= 0)) {\n return;\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n this.domNode.setMarker(this.saveSelection);\n }\n blockNodes = this.domNode.blockNodes();\n }\n var nodes = [];\n var isNested = true;\n for (var i = 0; i < blockNodes.length; i++) {\n if (blockNodes[i].parentNode.tagName === 'LI') {\n nodes.push(blockNodes[i].parentNode);\n }\n else if (blockNodes[i].tagName === 'LI' && blockNodes[i].childNodes[0].tagName !== 'P' &&\n (blockNodes[i].childNodes[0].tagName !== 'OL' &&\n blockNodes[i].childNodes[0].tagName !== 'UL')) {\n nodes.push(blockNodes[i]);\n }\n }\n if (nodes.length > 1 || nodes.length && ((startOffset === 0 && endOffset === 0) || e.ignoreDefault)) {\n e.event.preventDefault();\n e.event.stopPropagation();\n this.currentAction = this.getAction(nodes[0]);\n if (e.event.shiftKey) {\n this.revertList(nodes);\n this.revertClean();\n }\n else {\n isNested = this.nestedList(nodes);\n }\n if (isNested) {\n this.cleanNode();\n this.parent.editableElement.focus();\n }\n if (!(e.event.action && e.event.action === 'indent')) {\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes(),\n event: e.event\n });\n }\n }\n }\n else {\n if (!(e.event.action && e.event.action === 'indent')) {\n if (e.event && e.event.shiftKey && e.event.key === 'Tab') {\n e.event.action = 'tab';\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection, e.event.action);\n this.saveSelection.restore();\n }\n }\n }\n else {\n switch (e.event.action) {\n case 'ordered-list':\n this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'unordered-list':\n this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n }\n };\n Lists.prototype.spaceKeyAction = function (e) {\n if (e.event.which === 32) {\n this.spaceList(e);\n }\n };\n Lists.prototype.getAction = function (element) {\n var parentNode = element.parentNode;\n return (parentNode.nodeName === 'OL' ? 'OL' : 'UL');\n };\n Lists.prototype.revertClean = function () {\n var collectionNodes = this.parent.editableElement.querySelectorAll('ul, ol');\n for (var i = 0; i < collectionNodes.length; i++) {\n var listNodes = collectionNodes[i].querySelectorAll('ul, ol');\n if (listNodes.length > 0) {\n for (var j = 0; j < listNodes.length; j++) {\n var prevSibling = listNodes[j].previousSibling;\n if (prevSibling && prevSibling.tagName === 'LI') {\n prevSibling.appendChild(listNodes[j]);\n }\n }\n }\n }\n };\n Lists.prototype.noPreviousElement = function (elements) {\n var firstNode;\n var firstNodeOL;\n var siblingListOL = elements.querySelectorAll('ol, ul');\n var siblingListLI = elements\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNode = siblingListLI[0];\n }\n else {\n firstNodeOL = siblingListOL[0];\n }\n if (firstNode) {\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNode);\n setStyleAttribute(elements, { 'list-style-type': 'none' });\n setStyleAttribute(firstNode, { 'list-style-type': '' });\n h = nextSibling;\n }\n }\n else if (firstNodeOL) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNodeOL);\n for (var h = this.domNode.contents(elements)[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n prepend([firstNodeOL], elements.parentNode);\n detach(elements);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], firstNodeOL.parentNode);\n append([firstNodeOL], nestedElementLI);\n }\n else {\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n prepend([nestedElementLI], elements.parentNode);\n var nestedElement = createElement(elements.parentNode.tagName);\n prepend([nestedElement], nestedElementLI);\n append([elements], nestedElement);\n }\n };\n Lists.prototype.nestedList = function (elements) {\n var isNested = false;\n for (var i = 0; i < elements.length; i++) {\n var prevSibling = this.domNode.getPreviousNode(elements[i]);\n if (prevSibling) {\n isNested = true;\n var firstNode = void 0;\n var firstNodeLI = void 0;\n var siblingListOL = elements[i].querySelectorAll('ol, ul');\n var siblingListLI = elements[i]\n .querySelectorAll('li');\n var siblingListLIFirst = this.domNode.contents(siblingListLI[0])[0];\n if (siblingListLI.length > 0 && (siblingListLIFirst.nodeName === 'OL' || siblingListLIFirst.nodeName === 'UL')) {\n firstNodeLI = siblingListLI[0];\n }\n else {\n firstNode = siblingListOL[0];\n }\n if (firstNode) {\n var nestedElement = createElement('li');\n prepend([nestedElement], firstNode);\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n nestedElement.appendChild(h);\n h = nextSibling;\n }\n append([firstNode], prevSibling);\n detach(elements[i]);\n }\n else if (firstNodeLI) {\n if (prevSibling.tagName === 'LI') {\n for (var h = this.domNode.contents(elements[i])[0]; h && !this.domNode.isList(h); null) {\n var nextSibling = h.nextSibling;\n prepend([h], firstNodeLI);\n setStyleAttribute(elements[i], { 'list-style-type': 'none' });\n setStyleAttribute(firstNodeLI, { 'list-style-type': '' });\n h = nextSibling;\n }\n append([firstNodeLI.parentNode], prevSibling);\n detach(elements[i]);\n }\n }\n else {\n if (prevSibling.tagName === 'LI') {\n var nestedElement = createElement(elements[i].parentNode.tagName);\n append([nestedElement], prevSibling);\n append([elements[i]], nestedElement);\n }\n }\n }\n else {\n var element = elements[i];\n isNested = true;\n this.noPreviousElement(element);\n }\n }\n return isNested;\n };\n Lists.prototype.applyListsHandler = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n if (range.startContainer === range.endContainer && range.startContainer === this.parent.editableElement &&\n range.startOffset === range.endOffset && range.startOffset === 0 &&\n this.parent.editableElement.textContent.length === 0 && (this.parent.editableElement.childNodes[0].nodeName != 'TABLE' &&\n this.parent.editableElement.childNodes[0].nodeName != 'IMG')) {\n var focusNode = range.startContainer.childNodes[0];\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, focusNode, focusNode, 0, 0);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n }\n this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.currentAction = e.subCommand;\n this.currentAction = e.subCommand = this.currentAction === 'NumberFormatList' ? 'OL' : this.currentAction === 'BulletFormatList' ? 'UL' : this.currentAction;\n this.domNode.setMarker(this.saveSelection);\n var listsNodes = this.domNode.blockNodes();\n if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(listsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('p');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n listsNodes = this.parent.domNode.blockNodes();\n }\n for (var i = 0; i < listsNodes.length; i++) {\n if (listsNodes[i].tagName === 'TABLE' && !range.collapsed) {\n listsNodes.splice(i, 1);\n }\n if (listsNodes.length > 0 && listsNodes[i].tagName !== 'LI'\n && 'LI' === listsNodes[i].parentNode.tagName) {\n listsNodes[i] = listsNodes[i].parentNode;\n }\n }\n this.applyLists(listsNodes, this.currentAction, e.selector, e.item);\n if (e.callBack) {\n e.callBack({\n requestType: this.currentAction,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Lists.prototype.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\n }\n };\n Lists.prototype.applyLists = function (elements, type, selector, item) {\n var isReverse = true;\n if (this.isRevert(elements, type) && isNOU(item)) {\n this.revertList(elements);\n this.removeEmptyListElements();\n }\n else {\n this.checkLists(elements, type, item);\n for (var i = 0; i < elements.length; i++) {\n if (!isNOU(item) && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(elements[i], { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(elements[i], { 'list-style-image': 'none' });\n setStyleAttribute(elements[i], { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if (elements[i].getAttribute('contenteditable') === 'true'\n && elements[i].childNodes.length === 1 && elements[i].childNodes[0].nodeName === 'TABLE') {\n var listEle = document.createElement(type);\n listEle.innerHTML = '

  • ';\n elements[i].appendChild(listEle);\n }\n else if ('LI' !== elements[i].tagName && isNOU(item)) {\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + '>';\n var closeTag = '';\n var newTag = 'li' + elemAtt;\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n else if (!isNOU(item) && 'LI' !== elements[i].tagName) {\n // eslint-disable-next-line\n isReverse = false;\n var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);\n var openTag = '<' + type + elemAtt + '>';\n var closeTag = '';\n var newTag = 'li';\n var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ? elements[i].innerHTML :\n elements[i].outerHTML);\n var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);\n var collectionString = openTag + innerHTML + closeTag;\n this.domNode.replaceWith(elements[i], collectionString);\n }\n }\n }\n this.cleanNode();\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, selector);\n }\n this.saveSelection = this.domNode.saveMarker(this.saveSelection);\n this.saveSelection.restore();\n };\n Lists.prototype.removeEmptyListElements = function () {\n var listElem = this.parent.editableElement.querySelectorAll('ol, ul');\n for (var i = 0; i < listElem.length; i++) {\n if (listElem[i].textContent.trim() === '') {\n detach(listElem[i]);\n }\n }\n };\n Lists.prototype.isRevert = function (nodes, tagName) {\n var isRevert = true;\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].tagName !== 'LI') {\n return false;\n }\n if (nodes[i].parentNode.tagName !== tagName) {\n isRevert = false;\n }\n }\n return isRevert;\n };\n Lists.prototype.checkLists = function (nodes, tagName, item) {\n var nodesTemp = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i].parentNode;\n if (!isNOU(item) && 'LI' === nodes[i].tagName && !isNOU(item.listStyle)) {\n if (item.listStyle === 'listImage') {\n setStyleAttribute(node, { 'list-style-image': item.listImage });\n }\n else {\n setStyleAttribute(node, { 'list-style-image': 'none' });\n setStyleAttribute(node, { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });\n }\n }\n if ((nodes[i].tagName === 'LI' && node.tagName !== tagName && nodesTemp.indexOf(node) < 0) ||\n (nodes[i].tagName === 'LI' && node.tagName === tagName && nodesTemp.indexOf(node) < 0 && item !== null)) {\n nodesTemp.push(node);\n }\n }\n for (var j = nodesTemp.length - 1; j >= 0; j--) {\n var h = nodesTemp[j];\n var replace = '<' + tagName.toLowerCase() + ' '\n + this.domNode.attributes(h) + '>' + h.innerHTML + '';\n this.domNode.replaceWith(nodesTemp[j], replace);\n }\n };\n Lists.prototype.cleanNode = function () {\n var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');\n for (var c = 0; c < liParents.length; c++) {\n var node = liParents[c];\n if (this.domNode.isList(node.previousElementSibling) &&\n this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {\n var contentNodes = this.domNode.contents(node);\n for (var f = 0; f < contentNodes.length; f++) {\n node.previousElementSibling.appendChild(contentNodes[f]);\n }\n node.parentNode.removeChild(node);\n }\n }\n };\n Lists.prototype.findUnSelected = function (temp, elements) {\n temp = temp.slice().reverse();\n if (temp.length > 0) {\n var rightIndent = [];\n var indentElements = [];\n var lastElement = elements[elements.length - 1];\n var lastElementChild = [];\n var childElements = [];\n lastElementChild = (lastElement.childNodes);\n for (var z = 0; z < lastElementChild.length; z++) {\n if (lastElementChild[z].tagName === 'OL' || lastElementChild[z].tagName === 'UL') {\n var childLI = lastElementChild[z]\n .querySelectorAll('li');\n if (childLI.length > 0) {\n for (var y = 0; y < childLI.length; y++) {\n childElements.push(childLI[y]);\n }\n }\n }\n }\n for (var i = 0; i < childElements.length; i++) {\n var count = 0;\n for (var j = 0; j < temp.length; j++) {\n if (!childElements[i].contains((temp[j]))) {\n count = count + 1;\n }\n }\n if (count === temp.length) {\n indentElements.push(childElements[i]);\n }\n }\n if (indentElements.length > 0) {\n for (var x = 0; x < indentElements.length; x++) {\n if (this.domNode.contents(indentElements[x])[0].nodeName !== 'OL' &&\n this.domNode.contents(indentElements[x])[0].nodeName !== 'UL') {\n rightIndent.push(indentElements[x]);\n }\n }\n }\n if (rightIndent.length > 0) {\n this.nestedList(rightIndent);\n }\n }\n };\n Lists.prototype.revertList = function (elements) {\n var temp = [];\n for (var i = elements.length - 1; i >= 0; i--) {\n for (var j = i - 1; j >= 0; j--) {\n if (elements[j].contains((elements[i])) || elements[j] === elements[i]) {\n temp.push(elements[i]);\n elements.splice(i, 1);\n break;\n }\n }\n }\n this.findUnSelected(temp, elements);\n var viewNode = [];\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {\n detach(this.domNode.contents(element)[0]);\n }\n var parentNode = elements[i].parentNode;\n var className = element.getAttribute('class');\n if (temp.length === 0) {\n var siblingList = elements[i].querySelectorAll('ul, ol');\n var firstNode = siblingList[0];\n if (firstNode) {\n var child = firstNode\n .querySelectorAll('li');\n if (child) {\n var nestedElement = createElement(firstNode.tagName);\n append([nestedElement], firstNode.parentNode);\n var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });\n append([nestedElementLI], nestedElement);\n append([firstNode], nestedElementLI);\n }\n }\n }\n if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),\n 'LI' === parentNode.parentNode.tagName) {\n element.parentNode.insertBefore(this.closeTag('LI'), element);\n }\n else {\n var classAttr = '';\n if (className) {\n // eslint-disable-next-line\n classAttr += ' class=\"' + className + '\"';\n }\n if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {\n var wrapperclass = isNullOrUndefined(className) ? ' class=\"e-rte-wrap-inner\"' :\n ' class=\"' + className + ' e-rte-wrap-inner\"';\n var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +\n this.domNode.attributes(parentNode) + '>';\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>/g;\n var openTag = /<\\/span>/g;\n nodeInnerHtml = nodeInnerHtml.replace(closeTag, '');\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('');\n };\n Lists.prototype.closeTag = function (type) {\n return this.domNode.parseHTMLFragment('');\n };\n return Lists;\n}());\nexport { Lists };\n","/**\n * Node appending methods.\n *\n * @hidden\n */\nvar InsertMethods = /** @class */ (function () {\n function InsertMethods() {\n }\n /**\n * WrapBefore method\n *\n * @param {Text} textNode - specifies the text node\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {Text} - returns the text value\n * @hidden\n\n */\n InsertMethods.WrapBefore = function (textNode, parentNode, isAfter) {\n parentNode.innerText = textNode.textContent;\n //eslint-disable-next-line\n (!isAfter) ? this.AppendBefore(parentNode, textNode) : this.AppendBefore(parentNode, textNode, true);\n if (textNode.parentNode) {\n textNode.parentNode.removeChild(textNode);\n }\n return parentNode.childNodes[0];\n };\n /**\n * Wrap method\n *\n * @param {HTMLElement} childNode - specifies the child node\n * @param {HTMLElement} parentNode - specifies the parent node.\n * @returns {HTMLElement} - returns the element\n * @hidden\n\n */\n InsertMethods.Wrap = function (childNode, parentNode) {\n this.AppendBefore(parentNode, childNode);\n parentNode.appendChild(childNode);\n return childNode;\n };\n /**\n * unwrap method\n *\n * @param {Node} node - specifies the node element.\n * @returns {Node[]} - returns the array of value\n * @hidden\n\n */\n InsertMethods.unwrap = function (node) {\n var parent = node.parentNode;\n var child = [];\n for (; node.firstChild; null) {\n child.push(parent.insertBefore(node.firstChild, node));\n }\n parent.removeChild(node);\n return child;\n };\n /**\n * AppendBefore method\n *\n * @param {HTMLElement} textNode - specifies the element\n * @param {HTMLElement} parentNode - specifies the parent node\n * @param {boolean} isAfter - specifies the boolean value\n * @returns {void}\n * @hidden\n\n */\n InsertMethods.AppendBefore = function (textNode, parentNode, isAfter) {\n return (parentNode.parentNode) ? ((!isAfter) ? parentNode.parentNode.insertBefore(textNode, parentNode)\n : parentNode.parentNode.insertBefore(textNode, parentNode.nextSibling)) :\n parentNode;\n };\n return InsertMethods;\n}());\nexport { InsertMethods };\n","import { NodeSelection } from './../../selection/index';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\n/**\n * Split the Node based on selection\n *\n * @hidden\n\n */\nvar NodeCutter = /** @class */ (function () {\n function NodeCutter() {\n this.enterAction = 'P';\n this.position = -1;\n this.nodeSelection = new NodeSelection();\n }\n // Split Selection Node\n /**\n * GetSpliceNode method\n *\n * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @returns {Node} - returns the node value\n * @hidden\n\n */\n NodeCutter.prototype.GetSpliceNode = function (range, node) {\n node = this.SplitNode(range, node, true);\n node = this.SplitNode(range, node, false);\n return node;\n };\n /**\n * @param {Range} range - specifies the range\n * @param {HTMLElement} node - specifies the node element.\n * @param {boolean} isCollapsed - specifies the boolean value\n * @returns {HTMLElement} - returns the element\n * @hidden\n\n */\n NodeCutter.prototype.SplitNode = function (range, node, isCollapsed) {\n if (node) {\n var clone = range.cloneRange();\n var parent_1 = node.parentNode;\n var index = this.nodeSelection.getIndex(node);\n clone.collapse(isCollapsed);\n // eslint-disable-next-line\n (isCollapsed) ? clone.setStartBefore(node) : clone.setEndAfter(node);\n var fragment = clone.extractContents();\n if (isCollapsed) {\n node = parent_1.childNodes[index];\n fragment = this.spliceEmptyNode(fragment, false);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n node = divNode.firstChild;\n parent_1.appendChild(node);\n }\n }\n }\n }\n else {\n node = parent_1.childNodes.length > 1 ? parent_1.childNodes[index] :\n parent_1.childNodes[0];\n fragment = this.spliceEmptyNode(fragment, true);\n if (fragment && fragment.childNodes.length > 0) {\n var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'\n && this.isImgElm(fragment) && fragment.textContent.trim() === '') ? true : false;\n if (!isEmpty) {\n if (node) {\n InsertMethods.AppendBefore(fragment, node, true);\n }\n else {\n parent_1.appendChild(fragment);\n var divNode = document.createElement('div');\n divNode.innerHTML = '';\n parent_1.insertBefore(divNode.firstChild, parent_1.firstChild);\n node = parent_1.firstChild;\n }\n }\n }\n }\n return node;\n }\n else {\n return null;\n }\n };\n NodeCutter.prototype.isImgElm = function (fragment) {\n var result = true;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG') {\n var firstChild = fragment.childNodes[0];\n for (var i = 0; !isNOU(firstChild.childNodes) && i < firstChild.childNodes.length; i++) {\n if (firstChild.childNodes[i].nodeName === 'IMG') {\n result = false;\n }\n }\n }\n else {\n result = true;\n }\n return result;\n };\n NodeCutter.prototype.spliceEmptyNode = function (fragment, isStart) {\n var len;\n if (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName === '#text' &&\n fragment.childNodes[0].textContent === '' || fragment.textContent === '') {\n len = -1;\n }\n else {\n len = fragment.childNodes.length - 1;\n }\n if (len > -1 && !isStart) {\n this.spliceEmptyNode(fragment.childNodes[len], isStart);\n }\n else if (len > -1) {\n this.spliceEmptyNode(fragment.childNodes[0], isStart);\n }\n else if (fragment.nodeType !== 3 && fragment.nodeType !== 11) {\n fragment.parentNode.removeChild(fragment);\n }\n return fragment;\n };\n // Cursor Position split\n NodeCutter.prototype.GetCursorStart = function (indexes, index, isStart) {\n indexes = (isStart) ? indexes : indexes.reverse();\n var position = indexes[0];\n for (var num = 0; num < indexes.length && ((isStart) ? (indexes[num] < index) : (indexes[num] >= index)); num++) {\n position = indexes[num];\n }\n return position;\n };\n /**\n * GetCursorRange method\n *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Range} - returns the range value\n * @hidden\n\n */\n NodeCutter.prototype.GetCursorRange = function (docElement, range, node) {\n var cursorRange = docElement.createRange();\n var indexes = [];\n indexes.push(0);\n var str = this.TrimLineBreak(node.data);\n var index = str.indexOf(' ', 0);\n while (index !== -1) {\n if (indexes.indexOf(index) < 0) {\n indexes.push(index);\n }\n if (new RegExp('\\\\s').test(str[index - 1]) && (indexes.indexOf(index - 1) < 0)) {\n indexes.push(index - 1);\n }\n if (new RegExp('\\\\s').test(str[index + 1])) {\n indexes.push(index + 1);\n }\n index = str.indexOf(' ', (index + 1));\n }\n indexes.push(str.length);\n if ((indexes.indexOf(range.startOffset) >= 0)\n || ((indexes.indexOf(range.startOffset - 1) >= 0) && (range.startOffset !== 1\n || (range.startOffset === 1 && new RegExp('\\\\s').test(str[0])))\n || ((indexes[indexes.length - 1] - 1) === range.startOffset))) {\n cursorRange = range;\n this.position = 1;\n }\n else {\n var startOffset = this.GetCursorStart(indexes, range.startOffset, true);\n this.position = range.startOffset - startOffset;\n cursorRange.setStart(range.startContainer, startOffset);\n cursorRange.setEnd(range.startContainer, this.GetCursorStart(indexes, range.startOffset, false));\n }\n return cursorRange;\n };\n /**\n * GetCursorNode method\n *\n * @param {Document} docElement - specifies the document\n * @param {Range} range - specifies the range\n * @param {Node} node - specifies the node.\n * @returns {Node} - returns the node value\n * @hidden\n\n */\n NodeCutter.prototype.GetCursorNode = function (docElement, range, node) {\n return this.GetSpliceNode(this.GetCursorRange(docElement, range, node), node);\n };\n /**\n * TrimLineBreak method\n *\n * @param {string} line - specifies the string value.\n * @returns {string} - returns the string\n * @hidden\n\n */\n NodeCutter.prototype.TrimLineBreak = function (line) {\n return line.replace(/(\\r\\n\\t|\\n|\\r\\t)/gm, ' ');\n };\n return NodeCutter;\n}());\nexport { NodeCutter };\n","import * as EVENTS from './../../common/constant';\nimport { isNullOrUndefined as isNOU, detach, createElement, closest } from '@syncfusion/ej2-base';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { markerClassName } from './dom-node';\nimport { NodeCutter } from './nodecutter';\n/**\n * Formats internal component\n *\n * @hidden\n\n */\nvar Formats = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @hidden\n\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 = '
    ';\n if (!isNOU(lastChild) && lastChild && lastChild.nodeName === 'BR' && (lastChild.previousSibling && lastChild.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, lastChild);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n else {\n var brNode = this.parent.nodeSelection.getSelectionNodeCollectionBr(range)[0];\n if (!isNOU(brNode) && brNode.nodeName === 'BR' && (brNode.previousSibling && brNode.previousSibling.nodeName === 'TABLE')) {\n endCon.replaceChild(pTag, brNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, pTag, 0);\n }\n }\n }\n };\n Formats.prototype.onKeyDown = function (e) {\n if (e.event.which === 13) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var startCon = (range.startContainer.textContent.length === 0 || range.startContainer.nodeName === 'PRE')\n ? range.startContainer : range.startContainer.parentElement;\n var endCon = (range.endContainer.textContent.length === 0 || range.endContainer.nodeName === 'PRE')\n ? range.endContainer : range.endContainer.parentElement;\n var preElem = closest(startCon, 'pre');\n var endPreElem = closest(endCon, 'pre');\n var liParent = !isNOU(preElem) && !isNOU(preElem.parentElement) && preElem.parentElement.tagName === 'LI';\n if (liParent) {\n return;\n }\n if (((isNOU(preElem) && !isNOU(endPreElem)) || (!isNOU(preElem) && isNOU(endPreElem)))) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, endCon, 0);\n }\n if (e.event.which === 13 && !isNOU(preElem) && !isNOU(endPreElem)) {\n e.event.preventDefault();\n this.deleteContent(range);\n this.removeCodeContent(range);\n range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var lastEmpty = range.startContainer.childNodes[range.endOffset];\n var lastBeforeBr = range.startContainer.childNodes[range.endOffset - 1];\n var startParent = range.startContainer;\n if (!isNOU(lastEmpty) && !isNOU(lastBeforeBr) && isNOU(lastEmpty.nextSibling) &&\n lastEmpty.nodeName === 'BR' && lastBeforeBr.nodeName === 'BR') {\n this.paraFocus(range.startContainer, e.enterAction);\n }\n else if ((startParent.textContent.charCodeAt(0) === 8203 &&\n startParent.textContent.length === 1) || startParent.textContent.length === 0) {\n //Double enter with any parent tag for the node\n while (startParent.parentElement.nodeName !== 'PRE' &&\n (startParent.textContent.length === 1 || startParent.textContent.length === 0)) {\n startParent = startParent.parentElement;\n }\n if (!isNOU(startParent.previousSibling) && startParent.previousSibling.nodeName === 'BR' &&\n isNOU(startParent.nextSibling)) {\n this.paraFocus(startParent.parentElement);\n }\n else {\n this.isNotEndCursor(preElem, range);\n }\n }\n else {\n //Cursor at start and middle\n this.isNotEndCursor(preElem, range);\n }\n }\n }\n };\n Formats.prototype.removeCodeContent = function (range) {\n var regEx = new RegExp(String.fromCharCode(65279), 'g');\n if (!isNOU(range.endContainer.textContent.match(regEx))) {\n var pointer = range.endContainer.textContent.charCodeAt(range.endOffset - 1) === 65279 ?\n range.endOffset - 2 : range.endOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n if (range.endContainer.textContent === '') {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer.parentElement, 0);\n }\n else {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, range.endContainer, pointer);\n }\n }\n };\n Formats.prototype.deleteContent = function (range) {\n if (range.startContainer !== range.endContainer || range.startOffset !== range.endOffset) {\n range.deleteContents();\n }\n };\n Formats.prototype.paraFocus = function (referNode, enterAction) {\n var insertTag;\n if (enterAction === 'DIV') {\n insertTag = createElement('div');\n insertTag.innerHTML = '
    ';\n }\n else if (enterAction === 'BR') {\n insertTag = createElement('br');\n }\n else {\n insertTag = createElement('p');\n insertTag.innerHTML = '
    ';\n }\n this.parent.domNode.insertAfter(insertTag, referNode);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);\n detach(referNode.lastChild);\n };\n Formats.prototype.isNotEndCursor = function (preElem, range) {\n var nodeCutter = new NodeCutter();\n var isEnd = range.startOffset === preElem.lastChild.textContent.length &&\n preElem.lastChild.textContent === range.startContainer.textContent;\n //Cursor at start point\n if (preElem.textContent.indexOf(range.startContainer.textContent) === 0 &&\n ((range.startOffset === 0 && range.endOffset === 0) || range.startContainer.nodeName === 'PRE')) {\n this.insertMarker(preElem, range);\n var brTag = createElement('br');\n preElem.childNodes[range.endOffset].parentElement.insertBefore(brTag, preElem.childNodes[range.endOffset]);\n }\n else {\n //Cursor at middle\n var cloneNode = nodeCutter.SplitNode(range, preElem, true);\n this.insertMarker(preElem, range);\n var previousSib = preElem.previousElementSibling;\n if (previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '
    ' + cloneNode.innerHTML);\n detach(preElem);\n }\n }\n //To place the cursor position\n this.setCursorPosition(isEnd, preElem);\n };\n Formats.prototype.setCursorPosition = function (isEnd, preElem) {\n var isEmpty = false;\n var markerElem = this.parent.editableElement.querySelector('.tempSpan');\n var mrkParentElem = markerElem.parentElement;\n // eslint-disable-next-line\n markerElem.parentNode.textContent === '' ? isEmpty = true :\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n if (isEnd) {\n if (isEmpty) {\n //Enter press when pre element is empty\n if (mrkParentElem === preElem) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n else {\n this.focusSelectionParent(markerElem, mrkParentElem);\n }\n }\n else {\n var brElm = createElement('br');\n this.parent.domNode.insertAfter(brElm, markerElem);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, markerElem, 0);\n detach(markerElem);\n }\n }\n else {\n // eslint-disable-next-line\n isEmpty ? this.focusSelectionParent(markerElem, mrkParentElem) : detach(markerElem);\n }\n };\n Formats.prototype.focusSelectionParent = function (markerElem, tempSpanPElem) {\n detach(markerElem);\n tempSpanPElem.innerHTML = '\\u200B';\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, tempSpanPElem, 0);\n };\n Formats.prototype.insertMarker = function (preElem, range) {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n if (range.startContainer.nodeName === 'PRE') {\n preElem.childNodes[range.endOffset].parentElement.insertBefore(tempSpan, preElem.childNodes[range.endOffset]);\n }\n else {\n range.startContainer.parentElement.insertBefore(tempSpan, range.startContainer);\n }\n };\n Formats.prototype.applyFormats = function (e) {\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var isSelectAll = false;\n if (this.parent.editableElement === range.endContainer &&\n !isNOU(this.parent.editableElement.children[range.endOffset - 1]) &&\n this.parent.editableElement.children[range.endOffset - 1].tagName === 'TABLE' && !range.collapsed) {\n isSelectAll = true;\n }\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var formatsNodes = this.parent.domNode.blockNodes();\n if (e.enterAction === 'BR') {\n this.setSelectionBRConfig();\n var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);\n var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);\n var currentFormatNodes = [];\n if (selectedNodes.length === 0) {\n selectedNodes.push(formatsNodes[0]);\n }\n for (var i = 0; i < selectedNodes.length; i++) {\n var currentNode = selectedNodes[i];\n var previousCurrentNode = void 0;\n while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {\n previousCurrentNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {\n currentFormatNodes.push(previousCurrentNode);\n }\n }\n for (var i = 0; i < currentFormatNodes.length; i++) {\n if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {\n var currentNode = currentFormatNodes[i];\n var previousNode = currentNode;\n while (currentNode === this.parent.editableElement) {\n previousNode = currentNode;\n currentNode = currentNode.parentElement;\n }\n var tempElem = void 0;\n if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&\n previousNode.parentElement === this.parent.editableElement) {\n tempElem = createElement('div');\n previousNode.parentElement.insertBefore(tempElem, previousNode);\n tempElem.appendChild(previousNode);\n }\n else {\n tempElem = previousNode;\n }\n var preNode = tempElem.previousSibling;\n while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(preNode)) {\n tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);\n preNode = tempElem.previousSibling;\n }\n if (!isNOU(preNode) && preNode.nodeName === 'BR') {\n detach(preNode);\n }\n var postNode = tempElem.nextSibling;\n while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&\n !this.parent.domNode.isBlockNode(postNode)) {\n tempElem.appendChild(postNode);\n postNode = tempElem.nextSibling;\n }\n if (!isNOU(postNode) && postNode.nodeName === 'BR') {\n detach(postNode);\n }\n }\n }\n this.setSelectionBRConfig();\n formatsNodes = this.parent.domNode.blockNodes();\n }\n for (var i = 0; i < formatsNodes.length; i++) {\n var parentNode = void 0;\n var replaceHTML = void 0;\n if (e.subCommand.toLowerCase() === 'blockquote') {\n parentNode = this.getParentNode(formatsNodes[i]);\n replaceHTML = this.parent.domNode.isList(parentNode) ||\n parentNode.tagName === 'TABLE' ? parentNode.outerHTML : parentNode.innerHTML;\n }\n else {\n parentNode = formatsNodes[i];\n replaceHTML = parentNode.innerHTML;\n }\n if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&\n (e.subCommand.toLowerCase() !== 'pre' ||\n (!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||\n isNOU(parentNode.parentNode) ||\n (parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {\n continue;\n }\n this.cleanFormats(parentNode, e.subCommand);\n var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?\n 'p' : e.subCommand;\n var replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\\s+<'));\n if (parentNode.tagName === 'LI') {\n parentNode.innerHTML = '';\n parentNode.insertAdjacentHTML('beforeend', replaceTag);\n }\n else {\n this.parent.domNode.replaceWith(parentNode, replaceTag);\n }\n }\n this.preFormatMerge();\n var startNode = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endNode = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (!isNOU(startNode) && !isNOU(endNode)) {\n startNode = startNode.lastChild;\n endNode = endNode.lastChild;\n }\n save = this.parent.domNode.saveMarker(save, null);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n if (isSelectAll) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startNode, endNode, 0, endNode.textContent.length);\n }\n else {\n save.restore();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n Formats.prototype.setSelectionBRConfig = function () {\n var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);\n var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);\n if (isNOU(endElem)) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);\n }\n else {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);\n }\n };\n Formats.prototype.preFormatMerge = function () {\n var preNodes = this.parent.editableElement.querySelectorAll('PRE');\n if (!isNOU(preNodes)) {\n for (var i = 0; i < preNodes.length; i++) {\n var previousSib = preNodes[i].previousElementSibling;\n if (!isNOU(previousSib) && previousSib.tagName === 'PRE') {\n previousSib.insertAdjacentHTML('beforeend', '
    ' + preNodes[i].innerHTML);\n detach(preNodes[i]);\n }\n }\n }\n };\n Formats.prototype.cleanFormats = function (element, tagName) {\n var ignoreAttr = ['display', 'font-size', 'margin-top', 'margin-bottom', 'margin-left', 'margin-right', 'font-weight'];\n tagName = tagName.toLowerCase();\n for (var i = 0; i < ignoreAttr.length && (tagName !== 'p' && tagName !== 'blockquote' && tagName !== 'pre'); i++) {\n element.style.removeProperty(ignoreAttr[i]);\n }\n };\n return Formats;\n}());\nexport { Formats };\n","import { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport * as CONSTANT from './../base/constant';\nimport { detach, Browser, isNullOrUndefined as isNOU, createElement, closest } from '@syncfusion/ej2-base';\nimport { InsertMethods } from './insert-methods';\nimport { updateTextNode } from './../../common/util';\n/**\n * Insert a HTML Node or Text\n *\n * @hidden\n\n */\nvar InsertHtml = /** @class */ (function () {\n function InsertHtml() {\n }\n InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal) {\n var node;\n if (typeof insertNode === 'string') {\n var divNode = document.createElement('div');\n divNode.innerHTML = insertNode;\n node = isExternal ? divNode : divNode.firstChild;\n }\n else {\n if (isExternal && !(!isNOU(insertNode) && !isNOU(insertNode.classList) &&\n insertNode.classList.contains('pasteContent'))) {\n var divNode = document.createElement('div');\n divNode.appendChild(insertNode);\n node = divNode;\n }\n else {\n node = insertNode;\n }\n }\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n if (range.startContainer === editNode && range.startContainer === range.endContainer && range.startOffset === 0 &&\n range.startOffset === range.endOffset && editNode.textContent.length === 0 && editNode.children[0].tagName === 'P') {\n nodeSelection.setSelectionText(docElement, range.startContainer.children[0], range.startContainer.children[0], 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var isCursor = range.startOffset === range.endOffset && range.startOffset === 0 &&\n range.startContainer === range.endContainer;\n var isCollapsed = range.collapsed;\n var nodes = this.getNodeCollection(range, nodeSelection, node);\n var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];\n if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&\n node.classList.contains('pasteContent'))) {\n this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode);\n return;\n }\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n var preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n var sibNode = preNode.previousSibling;\n var parentNode = preNode.parentNode;\n if (nodes.length === 1 || (node.nodeName.toLowerCase() === 'table' && preNode.childElementCount === 0)) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n range.extractContents();\n if (insertNode.tagName === 'TABLE') {\n this.removeEmptyElements(editNode);\n }\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].nodeType !== 3 && nodes[index].parentNode != null) {\n if (nodes[index].nodeName === 'IMG') {\n continue;\n }\n nodes[index].parentNode.removeChild(nodes[index]);\n }\n }\n if (sibNode) {\n InsertMethods.AppendBefore(node, sibNode, true);\n }\n else {\n var previousNode = null;\n while (parentNode !== editNode && parentNode.firstChild &&\n (parentNode.textContent.trim() === '')) {\n var parentNode1 = parentNode.parentNode;\n previousNode = parentNode;\n parentNode = parentNode1;\n }\n if (previousNode !== null) {\n parentNode = previousNode;\n }\n if (parentNode.firstChild && (parentNode !== editNode ||\n (node.nodeName === 'TABLE' && isCursor && parentNode === range.startContainer &&\n parentNode === range.endContainer))) {\n if (parentNode.textContent.trim() === '' && parentNode !== editNode) {\n InsertMethods.AppendBefore(node, parentNode, false);\n detach(parentNode);\n }\n else {\n InsertMethods.AppendBefore(node, parentNode.firstChild, false);\n }\n }\n else {\n parentNode.appendChild(node);\n }\n }\n if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.childNodes.length);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, 0, node.textContent.length);\n }\n }\n else {\n range.deleteContents();\n if (isCursor && range.startContainer.textContent === '' && range.startContainer.nodeName !== 'BR') {\n range.startContainer.innerHTML = '';\n }\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(node);\n range.insertNode(frag);\n }\n else if (range.startContainer.nodeType === 1 && range.startContainer.nodeName.toLowerCase() === 'hr'\n && range.endContainer.nodeName.toLowerCase() === 'hr') {\n var paraElem = range.startContainer.nextElementSibling;\n if (paraElem) {\n if (paraElem.querySelector('br')) {\n detach(paraElem.querySelector('br'));\n }\n paraElem.appendChild(node);\n }\n }\n else {\n if (range.startContainer.nodeName === 'BR') {\n range.startContainer.parentElement.insertBefore(node, range.startContainer);\n }\n else {\n range.insertNode(node);\n }\n }\n if (node.nodeType !== 3 && node.childNodes.length > 0) {\n nodeSelection.setSelectionText(docElement, node, node, 1, 1);\n }\n else if (node.nodeName === 'IMG') {\n this.imageFocus(node, nodeSelection, docElement);\n }\n else if (node.nodeType !== 3) {\n nodeSelection.setSelectionContents(docElement, node);\n }\n else {\n nodeSelection.setSelectionText(docElement, node, node, node.textContent.length, node.textContent.length);\n }\n }\n };\n InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode) {\n var isCursor = range.startOffset === range.endOffset &&\n range.startContainer === range.endContainer;\n if (isCursor && range.startContainer === editNode && editNode.textContent === '') {\n var currentBlockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n nodeSelection.setSelectionText(docElement, currentBlockNode, currentBlockNode, 0, 0);\n range = nodeSelection.getRange(docElement);\n }\n var lasNode;\n var sibNode;\n var isSingleNode;\n var preNode;\n if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))\n || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&\n CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {\n preNode = nodeCutter.GetSpliceNode(range, closestParentNode);\n sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n isSingleNode = true;\n }\n else {\n lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);\n lasNode = isNOU(lasNode) ? preNode : lasNode;\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n isSingleNode = false;\n }\n }\n var containsBlockNode = false;\n this.removingComments(node);\n var allChildNodes = node.childNodes;\n for (var i = 0; i < allChildNodes.length; i++) {\n if (CONSTANT.BLOCK_TAGS.indexOf(allChildNodes[i].nodeName.toLocaleLowerCase()) >= 0) {\n containsBlockNode = true;\n break;\n }\n }\n var lastSelectionNode;\n var fragment = document.createDocumentFragment();\n if (!containsBlockNode) {\n if (!isCursor) {\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n if (isSingleNode) {\n preNode.parentNode.replaceChild(fragment, preNode);\n }\n else {\n range.deleteContents();\n detach(lasNode);\n // eslint-disable-next-line\n !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);\n }\n }\n else {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n var nearestAnchor = closest(range.startContainer.parentElement, 'a');\n if (range.startContainer.nodeType === 3 && nearestAnchor) {\n var immediateBlockNode = this.getImmediateBlockNode(range.startContainer, editNode);\n if (immediateBlockNode.querySelectorAll('br').length > 0) {\n detach(immediateBlockNode.querySelector('br'));\n }\n var rangeElement = closest(nearestAnchor, 'span');\n rangeElement.appendChild(tempSpan);\n }\n else {\n range.insertNode(tempSpan);\n }\n while (node.firstChild) {\n lastSelectionNode = node.firstChild;\n fragment.appendChild(node.firstChild);\n }\n tempSpan.parentNode.replaceChild(fragment, tempSpan);\n }\n }\n else {\n this.insertTempNode(range, node, nodes, nodeCutter, editNode);\n var isFirstTextNode = true;\n var isPreviousInlineElem = void 0;\n var paraElm = void 0;\n var previousParent = void 0;\n range.deleteContents();\n while (node.firstChild) {\n if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {\n detach(node.firstChild);\n continue;\n }\n if (node.firstChild.nodeName === '#text' && isFirstTextNode ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {\n lastSelectionNode = node.firstChild;\n if (isNOU(node.previousElementSibling)) {\n var firstParaElm = createElement('p');\n node.parentElement.insertBefore(firstParaElm, node);\n }\n node.previousElementSibling.appendChild(node.firstChild);\n }\n else {\n lastSelectionNode = node.firstChild;\n if (node.firstChild.nodeName === '#text' ||\n (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {\n if (!isPreviousInlineElem) {\n paraElm = createElement('p');\n paraElm.appendChild(node.firstChild);\n fragment.appendChild(paraElm);\n }\n else {\n previousParent.appendChild(node.firstChild);\n fragment.appendChild(previousParent);\n }\n previousParent = paraElm;\n isPreviousInlineElem = true;\n }\n else {\n fragment.appendChild(node.firstChild);\n isPreviousInlineElem = false;\n }\n isFirstTextNode = false;\n }\n }\n node.parentNode.replaceChild(fragment, node);\n }\n if (lastSelectionNode.nodeName === '#text') {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n else {\n this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);\n }\n };\n InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? (isNOU(lastSelectionNode.previousSibling) ? lastSelectionNode.parentNode\n : lastSelectionNode.previousSibling) : lastSelectionNode;\n while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&\n lastSelectionNode.nodeName !== 'BR' && lastSelectionNode.nodeName !== 'HR') {\n lastSelectionNode = lastSelectionNode.lastChild;\n }\n lastSelectionNode = isNOU(lastSelectionNode) ? node : lastSelectionNode;\n if (lastSelectionNode.nodeName === 'IMG') {\n this.imageFocus(lastSelectionNode, nodeSelection, docElement);\n }\n else {\n nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, lastSelectionNode.textContent.length, lastSelectionNode.textContent.length);\n }\n this.removeEmptyElements(editNode);\n };\n InsertHtml.getNodeCollection = function (range, nodeSelection, node) {\n var nodes = [];\n if (range.startOffset === range.endOffset && range.startContainer === range.endContainer &&\n range.startContainer.nodeName != 'BR' &&\n (range.startContainer.nodeName === 'TD' || (range.startContainer.nodeType !== 3 &&\n node.classList && node.classList.contains('pasteContent')))) {\n nodes.push(range.startContainer.childNodes[range.endOffset]);\n }\n else {\n nodes = nodeSelection.getInsertNodeCollection(range);\n }\n return nodes;\n };\n InsertHtml.insertTempNode = function (range, node, nodes, nodeCutter, editNode) {\n if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset - 1]) &&\n range.startContainer.childNodes[range.endOffset - 1].nodeName === 'TABLE') {\n if (isNOU(range.startContainer.childNodes[range.endOffset - 1].nextSibling)) {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset - 1].nextSibling);\n }\n }\n else if (range.startContainer === editNode && !isNOU(range.startContainer.childNodes[range.endOffset]) &&\n range.startContainer.childNodes[range.endOffset].nodeName === 'TABLE') {\n range.startContainer.insertBefore(node, range.startContainer.childNodes[range.endOffset]);\n }\n else if (range.startContainer === range.endContainer && range.startContainer.nodeType !== 3\n && node.firstChild.nodeName === 'HR') {\n if (range.startContainer.classList.contains('e-content') || range.startContainer.nodeName === 'BODY') {\n range.startContainer.appendChild(node);\n }\n else {\n range.startContainer.parentNode.insertBefore(node, range.startContainer);\n }\n }\n else {\n var blockNode = this.getImmediateBlockNode(nodes[nodes.length - 1], editNode);\n if ((isNOU(blockNode) || isNOU(blockNode.parentElement)) && range.endContainer.nodeType !== 3) {\n blockNode = range.endContainer;\n range.setEnd(blockNode, range.endContainer.textContent.length);\n }\n if (blockNode.nodeName === 'BODY' && range.startContainer === range.endContainer && range.startContainer.nodeType === 1) {\n blockNode = range.startContainer;\n }\n if (blockNode.closest('LI') && node && node.firstElementChild &&\n ((node).firstElementChild.tagName === 'OL' || node.firstElementChild.tagName === 'UL')) {\n var liNode = void 0;\n while (node.firstElementChild.lastElementChild && node.firstElementChild.lastElementChild.tagName === 'LI') {\n liNode = node.firstElementChild.lastElementChild;\n liNode.style.removeProperty('margin-left');\n liNode.style.removeProperty('margin-top');\n liNode.style.removeProperty('margin-bottom');\n node.firstElementChild.insertAdjacentElement('afterend', liNode);\n }\n }\n if (blockNode.nodeName === 'TD' || blockNode.nodeName === 'TH') {\n var tempSpan = createElement('span', { className: 'tempSpan' });\n range.insertNode(tempSpan);\n tempSpan.parentNode.replaceChild(node, tempSpan);\n }\n else {\n var currentNode = nodes[nodes.length - 1];\n var splitedElm = void 0;\n if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR') && !isNOU(currentNode.parentElement) &&\n currentNode.parentElement.textContent.trim().length === 0) {\n splitedElm = currentNode;\n }\n else {\n splitedElm = nodeCutter.GetSpliceNode(range, blockNode);\n }\n splitedElm.parentNode.replaceChild(node, splitedElm);\n }\n }\n };\n InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {\n lastSelectionNode.classList.add('lastNode');\n editNode.innerHTML = updateTextNode(editNode.innerHTML);\n lastSelectionNode = editNode.querySelector('.lastNode');\n if (!isNOU(lastSelectionNode)) {\n this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);\n lastSelectionNode.classList.remove('lastNode');\n if (lastSelectionNode.classList.length === 0) {\n lastSelectionNode.removeAttribute('class');\n }\n }\n };\n InsertHtml.imageFocus = function (node, nodeSelection, docElement) {\n var focusNode = document.createTextNode(' ');\n node.parentNode.insertBefore(focusNode, node.nextSibling);\n nodeSelection.setSelectionText(docElement, node.nextSibling, node.nextSibling, 0, 0);\n };\n // eslint-disable-next-line\n InsertHtml.getImmediateBlockNode = function (node, editNode) {\n do {\n node = node.parentNode;\n } while (node && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n InsertHtml.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(//g, '');\n elm.innerHTML = innerElement;\n };\n InsertHtml.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' && element.parentElement.contentEditable !== 'true') {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n InsertHtml.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&\n emptyElements[i].tagName !== 'SOURCE' && emptyElements[i].tagName !== 'HR') {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n InsertHtml.closestEle = function (element, editNode) {\n var el = element;\n while (el && el.nodeType === 1) {\n if (el.parentNode === editNode ||\n (!isNOU(el.parentNode.tagName) &&\n CONSTANT.IGNORE_BLOCK_TAGS.indexOf(el.parentNode.tagName.toLocaleLowerCase()) !== -1)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n };\n /**\n * Insert method\n *\n * @hidden\n\n */\n InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',\n 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',\n 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',\n 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',\n 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];\n return InsertHtml;\n}());\nexport { InsertHtml };\n","import * as CONSTANT from './../base/constant';\nimport { NodeSelection } from '../../selection/selection';\nimport { NodeCutter } from './nodecutter';\nimport { InsertHtml } from './inserthtml';\nimport { createElement, isNullOrUndefined as isNOU, closest } from '@syncfusion/ej2-base';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar LinkCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the editor manager\n * @hidden\n\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 if (range.endContainer.nodeName === '#text' && range.startContainer.textContent.length === (range.endOffset + 1) &&\n range.endContainer.textContent.charAt(range.endOffset) === ' ' && range.endContainer.nextSibling.nodeName === 'A') {\n domSelection.setSelectionText(this.parent.currentDocument, range.startContainer, range.endContainer, range.startOffset, range.endOffset + 1);\n range = domSelection.getRange(this.parent.currentDocument);\n }\n var text = isNOU(e.item.text) ? true : e.item.text.replace(/ /g, '').localeCompare(range.toString()\n .replace(/\\n/g, ' ').replace(/ /g, '')) < 0;\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13) || e.item.action === 'Paste' || range.collapsed || text) {\n var anchor = this.createAchorNode(e);\n anchor.innerText = e.item.text === '' ? e.item.url : e.item.text;\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n if (e.event && e.event.type === 'keydown' && (e.event.keyCode === 32\n || e.event.keyCode === 13)) {\n var startContainer = e.item.selection.range.startContainer;\n startContainer.textContent = this.removeText(startContainer.textContent, e.item.text);\n }\n else {\n var startIndex = e.item.action === 'Paste' ? anchor.childNodes[0].textContent.length : 0;\n e.item.selection.setSelectionText(this.parent.currentDocument, anchor.childNodes[0], anchor.childNodes[0], startIndex, anchor.childNodes[0].textContent.length);\n }\n }\n else {\n this.createLinkNode(e);\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: 'Links',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n LinkCommand.prototype.createLinkNode = function (e) {\n var domSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = domSelection.getRange(this.parent.currentDocument);\n var nodes = this.getSelectionNodes(domSelection.getNodeCollection(range));\n var save = domSelection.save(range, this.parent.currentDocument);\n var txtArray = [];\n var inlineNodes = [];\n var currentNode;\n var removeNodes = [];\n var anchorNodes = [];\n var finalinlineNodes = [];\n var cloneNode;\n for (var index = 0; index < nodes.length; index++) {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n txtArray[index] = nodes[index];\n }\n for (var i = 0; i < txtArray.length; i++) {\n var check = true;\n currentNode = txtArray[i];\n while (check === true) {\n if (currentNode.parentNode.nodeName === 'A') {\n var anchorEle = currentNode.parentNode;\n currentNode.parentNode.parentNode.insertBefore(anchorEle.firstChild, anchorEle);\n currentNode.parentNode.removeChild(anchorEle);\n }\n if (this.isBlockNode(currentNode.parentNode) || txtArray.length === 0 || i === 0 || i === txtArray.length - 1\n || range.startContainer.nodeType === 3) {\n inlineNodes[i] = currentNode;\n check = false;\n }\n else {\n currentNode = currentNode.parentNode;\n }\n }\n }\n for (var i = 0, j_1 = 0; i < inlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[j_1] = inlineNodes[i];\n }\n if (inlineNodes.length > 1 && i < inlineNodes.length - 1) {\n if ((inlineNodes[i].parentElement === inlineNodes[i + 1].parentElement) && (inlineNodes[i] === inlineNodes[i + 1])) {\n continue;\n }\n else {\n finalinlineNodes[j_1 + 1] = inlineNodes[i + 1];\n j_1++;\n }\n }\n }\n var j = 0;\n anchorNodes[j] = this.createAchorNode(e);\n for (var i = 0; i < finalinlineNodes.length; i++) {\n if (i === 0) {\n cloneNode = finalinlineNodes[i].cloneNode(true);\n anchorNodes[i].appendChild(cloneNode);\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n var cln = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cln);\n }\n else {\n j = j + 1;\n anchorNodes[j] = this.createAchorNode(e);\n cloneNode = finalinlineNodes[i + 1].cloneNode(true);\n anchorNodes[j].appendChild(cloneNode);\n }\n }\n }\n this.parent.nodeSelection.setRange(document, save.range);\n for (var i = 0, j_2 = 0, k = 0; i <= finalinlineNodes.length; i++) {\n if (i === 0) {\n finalinlineNodes[i].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i].nextSibling);\n if (this.parent.domNode.blockNodes().length === 1) {\n this.parent.nodeSelection.setSelectionNode(this.parent.currentDocument, anchorNodes[j_2]);\n }\n removeNodes[k] = finalinlineNodes[i];\n k++;\n }\n if (i < finalinlineNodes.length - 1) {\n if (finalinlineNodes[i].parentNode === finalinlineNodes[i + 1].parentNode) {\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n else {\n j_2 = j_2 + 1;\n finalinlineNodes[i + 1].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i + 1]);\n removeNodes[k] = finalinlineNodes[i + 1];\n k++;\n }\n }\n }\n for (var i = 0; i < removeNodes.length; i++) {\n if (removeNodes[i].parentNode) {\n removeNodes[i].parentNode.removeChild(removeNodes[i]);\n }\n }\n };\n LinkCommand.prototype.createAchorNode = function (e) {\n var anchorEle = createElement('a', {\n className: 'e-rte-anchor',\n attrs: {\n href: e.item.url,\n title: isNOU(e.item.title) || e.item.title === '' ? e.item.url : e.item.title\n }\n });\n if (!isNOU(e.item.target)) {\n anchorEle.setAttribute('target', e.item.target);\n }\n return anchorEle;\n };\n LinkCommand.prototype.getSelectionNodes = function (nodeCollection) {\n nodeCollection = nodeCollection.reverse();\n for (var index = 0; index < nodeCollection.length; index++) {\n if (nodeCollection[index].nodeType !== 3 || nodeCollection[index].textContent.trim() === '') {\n if (nodeCollection[index].nodeName !== 'IMG') {\n nodeCollection.splice(index, 1);\n index--;\n }\n }\n }\n return nodeCollection.reverse();\n };\n LinkCommand.prototype.isBlockNode = function (element) {\n return (!!element && (element.nodeType === Node.ELEMENT_NODE && CONSTANT.BLOCK_TAGS.indexOf(element.tagName.toLowerCase()) >= 0));\n };\n LinkCommand.prototype.removeText = function (text, val) {\n var arr = text.split(' ');\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === val) {\n arr.splice(i, 1);\n i--;\n }\n }\n return arr.join(' ') + ' ';\n };\n LinkCommand.prototype.openLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n LinkCommand.prototype.removeLink = function (e) {\n var blockNodes = this.parent.domNode.blockNodes();\n if (blockNodes.length < 2) {\n this.parent.domNode.setMarker(e.item.selection);\n var closestAnchor = closest(e.item.selectParent[0], 'a');\n var selectParent = closestAnchor ? closestAnchor : e.item.selectParent[0];\n var parent_1 = selectParent.parentNode;\n var child = [];\n for (; selectParent.firstChild; null) {\n child.push(parent_1.insertBefore(selectParent.firstChild, selectParent));\n }\n parent_1.removeChild(selectParent);\n if (child && child.length === 1) {\n e.item.selection.startContainer = e.item.selection.getNodeArray(child[child.length - 1], true);\n e.item.selection.endContainer = e.item.selection.startContainer;\n }\n e.item.selection = this.parent.domNode.saveMarker(e.item.selection);\n }\n else {\n for (var i = 0; i < blockNodes.length; i++) {\n var linkNode = blockNodes[i].querySelectorAll('a');\n for (var j = 0; j < linkNode.length; j++) {\n if (document.getSelection().containsNode(linkNode[j], true)) {\n linkNode[j].outerHTML = linkNode[j].innerHTML;\n }\n }\n }\n }\n e.item.selection.restore();\n this.callBack(e);\n };\n LinkCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return LinkCommand;\n}());\nexport { LinkCommand };\n","import * as CONSTANT from './../base/constant';\nimport { setStyleAttribute, closest } from '@syncfusion/ej2-base';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Formats internal component\n *\n * @hidden\n\n */\nvar Alignments = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\n * @hidden\n\n */\n function Alignments(parent) {\n this.alignments = {\n 'JustifyLeft': 'left',\n 'JustifyCenter': 'center',\n 'JustifyRight': 'right',\n 'JustifyFull': 'justify'\n };\n this.parent = parent;\n this.addEventListener();\n }\n Alignments.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.ALIGNMENT_TYPE, this.applyAlignment, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Alignments.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'justify-center':\n this.applyAlignment({ subCommand: 'JustifyCenter', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-full':\n this.applyAlignment({ subCommand: 'JustifyFull', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-left':\n this.applyAlignment({ subCommand: 'JustifyLeft', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'justify-right':\n this.applyAlignment({ subCommand: 'JustifyRight', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Alignments.prototype.getTableNode = function (range) {\n var startNode = range.startContainer.nodeType === Node.ELEMENT_NODE\n ? range.startContainer : range.startContainer.parentNode;\n var cellNode = closest(startNode, 'td,th');\n return [cellNode];\n };\n Alignments.prototype.applyAlignment = function (e) {\n var isTableAlign = e.value === 'Table' ? true : false;\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n if (!isTableAlign) {\n this.parent.domNode.setMarker(save);\n var alignmentNodes = this.parent.domNode.blockNodes();\n for (var i = 0; i < alignmentNodes.length; i++) {\n var parentNode = alignmentNodes[i];\n setStyleAttribute(parentNode, { 'text-align': this.alignments[e.subCommand] });\n }\n var imageTags = this.parent.domNode.getImageTagInSelection();\n for (var i = 0; i < imageTags.length; i++) {\n var elementNode = [];\n elementNode.push(imageTags[i]);\n this.parent.imgObj.imageCommand({\n item: {\n selectNode: elementNode\n },\n subCommand: e.subCommand,\n value: e.subCommand,\n callBack: e.callBack,\n selector: e.selector\n });\n }\n this.parent.editableElement.focus();\n save = this.parent.domNode.saveMarker(save);\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n save.restore();\n }\n else {\n setStyleAttribute(this.getTableNode(range)[0], { 'text-align': this.alignments[e.subCommand] });\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: (isTableAlign ? this.getTableNode(range) : this.parent.domNode.blockNodes())\n });\n }\n };\n return Alignments;\n}());\nexport { Alignments };\n","import * as CONSTANT from './../base/constant';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * Indents internal component\n *\n * @hidden\n\n */\nvar Indents = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function Indents(parent) {\n this.indentValue = 20;\n this.parent = parent;\n this.addEventListener();\n }\n Indents.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INDENT_TYPE, this.applyIndents, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n Indents.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'indents':\n this.applyIndents({ subCommand: 'Indent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n case 'outdents':\n this.applyIndents({ subCommand: 'Outdent', callBack: e.callBack });\n e.event.preventDefault();\n break;\n }\n };\n Indents.prototype.applyIndents = function (e) {\n var editEle = this.parent.editableElement;\n var isRtl = editEle.classList.contains('e-rtl');\n var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);\n var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);\n this.parent.domNode.setMarker(save);\n var indentsNodes = this.parent.domNode.blockNodes();\n var parentNodes = indentsNodes.slice();\n var listsNodes = [];\n for (var i = 0; i < parentNodes.length; i++) {\n if (parentNodes[i].tagName !== 'LI' && 'LI' === parentNodes[i].parentNode.tagName) {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i].parentNode);\n }\n else if (parentNodes[i].tagName === 'LI') {\n indentsNodes.splice(indentsNodes.indexOf(parentNodes[i]), 1);\n listsNodes.push(parentNodes[i]);\n }\n }\n if (listsNodes.length > 0) {\n this.parent.observer.notify(EVENTS.KEY_DOWN_HANDLER, {\n event: {\n preventDefault: function () {\n return;\n },\n stopPropagation: function () {\n return;\n },\n shiftKey: (e.subCommand === 'Indent' ? false : true),\n which: 9,\n action: 'indent'\n },\n ignoreDefault: true\n });\n }\n for (var i = 0; i < indentsNodes.length; i++) {\n var parentNode = indentsNodes[i];\n var marginLeftOrRight = isRtl ? parentNode.style.marginRight : parentNode.style.marginLeft;\n var indentsValue = void 0;\n if (e.subCommand === 'Indent') {\n /* eslint-disable */\n indentsValue = marginLeftOrRight === '' ? this.indentValue + 'px' : parseInt(marginLeftOrRight, null) + this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n }\n else {\n indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';\n isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);\n /* eslint-enable */\n }\n }\n editEle.focus();\n if (isIDevice()) {\n setEditFrameFocus(editEle, e.selector);\n }\n save = this.parent.domNode.saveMarker(save);\n save.restore();\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.domNode.blockNodes()\n });\n }\n };\n return Indents;\n}());\nexport { Indents };\n","/**\n * Rich Text Editor classes defined here.\n */\n/**\n * @hidden\n\n */\nexport var CLASS_IMAGE_RIGHT = 'e-imgright';\nexport var CLASS_IMAGE_LEFT = 'e-imgleft';\nexport var CLASS_IMAGE_CENTER = 'e-imgcenter';\nexport var CLASS_IMAGE_BREAK = 'e-imgbreak';\nexport var CLASS_CAPTION = 'e-img-caption';\nexport var CLASS_RTE_CAPTION = 'e-rte-img-caption';\nexport var CLASS_CAPTION_INLINE = 'e-caption-inline';\nexport var CLASS_IMAGE_INLINE = 'e-imginline';\n","import { createElement, isNullOrUndefined as isNOU, detach, closest, addClass, removeClass, select, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport * as classes from './../base/classes';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar ImageCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function ImageCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ImageCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.IMAGE, this.imageCommand, this);\n };\n /**\n * imageCommand method\n *\n * @param {IHtmlItem} e - specifies the element\n * @returns {void}\n * @hidden\n\n */\n ImageCommand.prototype.imageCommand = function (e) {\n switch (e.value.toString().toLowerCase()) {\n case 'image':\n case 'replace':\n this.createImage(e);\n break;\n case 'insertlink':\n this.insertImageLink(e);\n break;\n case 'openimagelink':\n this.openImageLink(e);\n break;\n case 'editimagelink':\n this.editImageLink(e);\n break;\n case 'removeimagelink':\n this.removeImageLink(e);\n break;\n case 'remove':\n this.removeImage(e);\n break;\n case 'alttext':\n this.insertAltTextImage(e);\n break;\n case 'dimension':\n this.imageDimension(e);\n break;\n case 'caption':\n this.imageCaption(e);\n break;\n case 'justifyleft':\n this.imageJustifyLeft(e);\n break;\n case 'justifycenter':\n this.imageJustifyCenter(e);\n break;\n case 'justifyright':\n this.imageJustifyRight(e);\n break;\n case 'inline':\n this.imageInline(e);\n break;\n case 'break':\n this.imageBreak(e);\n break;\n }\n };\n ImageCommand.prototype.createImage = function (e) {\n var _this = this;\n var isReplaced = false;\n e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;\n if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {\n var imgEle = e.item.selectParent[0];\n this.setStyle(imgEle, e);\n isReplaced = true;\n }\n else {\n var imgElement = createElement('img');\n this.setStyle(imgElement, e);\n if (!isNOU(e.item.selection)) {\n e.item.selection.restore();\n }\n if (!isNOU(e.selector) && e.selector === 'pasteCleanupModule') {\n e.callBack({ requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [imgElement]\n });\n }\n else {\n InsertHtml.Insert(this.parent.currentDocument, imgElement, this.parent.editableElement);\n }\n }\n if (e.callBack && (isNOU(e.selector) || !isNOU(e.selector) && e.selector !== 'pasteCleanupModule')) {\n var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];\n var imgElm_1 = (e.value === 'Replace' || isReplaced) ? e.item.selectParent[0] :\n (Browser.isIE ? selectedNode.previousSibling : selectedNode.previousElementSibling);\n imgElm_1.addEventListener('load', function () {\n if (e.value !== 'Replace' || !isReplaced) {\n e.callBack({\n requestType: 'Images',\n editorMode: 'HTML',\n event: e.event,\n range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),\n elements: [imgElm_1]\n });\n }\n });\n }\n };\n ImageCommand.prototype.setStyle = function (imgElement, e) {\n if (!isNOU(e.item.url)) {\n imgElement.setAttribute('src', e.item.url);\n }\n imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass));\n if (!isNOU(e.item.altText)) {\n imgElement.setAttribute('alt', e.item.altText);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.width)) {\n imgElement.setAttribute('width', this.calculateStyleValue(e.item.width.width));\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.height)) {\n imgElement.setAttribute('height', this.calculateStyleValue(e.item.height.height));\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.minWidth)) {\n imgElement.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width) && !isNOU(e.item.width.maxWidth)) {\n imgElement.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.minHeight)) {\n imgElement.style.minHeight = this.calculateStyleValue(e.item.height.minHeight);\n }\n if (!isNOU(e.item.height) && !isNOU(e.item.height.maxHeight)) {\n imgElement.style.maxHeight = this.calculateStyleValue(e.item.height.maxHeight);\n }\n };\n ImageCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n ImageCommand.prototype.insertImageLink = function (e) {\n var anchor = createElement('a', {\n attrs: {\n href: e.item.url\n }\n });\n if (e.item.selectNode[0].parentElement.classList.contains('e-img-wrap')) {\n e.item.selection.restore();\n anchor.setAttribute('contenteditable', 'true');\n }\n anchor.appendChild(e.item.selectNode[0]);\n if (!isNOU(e.item.target)) {\n anchor.setAttribute('target', e.item.target);\n }\n InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.openImageLink = function (e) {\n document.defaultView.open(e.item.url, e.item.target);\n this.callBack(e);\n };\n ImageCommand.prototype.removeImageLink = function (e) {\n var selectParent = e.item.selectParent[0];\n if (selectParent.classList.contains('e-img-caption')) {\n var capImgWrap = select('.e-img-wrap', selectParent);\n var textEle = select('.e-img-inner', selectParent);\n var newTextEle = textEle.cloneNode(true);\n detach(select('a', selectParent));\n detach(textEle);\n capImgWrap.appendChild(e.item.insertElement);\n capImgWrap.appendChild(newTextEle);\n }\n else {\n detach(selectParent);\n if (Browser.isIE) {\n e.item.selection.restore();\n }\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.editImageLink = function (e) {\n e.item.selectNode[0].parentElement.href = e.item.url;\n if (isNOU(e.item.target)) {\n e.item.selectNode[0].parentElement.removeAttribute('target');\n }\n else {\n e.item.selectNode[0].parentElement.target = e.item.target;\n }\n this.callBack(e);\n };\n ImageCommand.prototype.removeImage = function (e) {\n if (closest(e.item.selectNode[0], 'a')) {\n if (e.item.selectNode[0].parentElement.nodeName === 'A' && !isNOU(e.item.selectNode[0].parentElement.innerText)) {\n 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 }\n else {\n detach(closest(e.item.selectNode[0], 'a'));\n }\n }\n else if (!isNOU(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION))) {\n detach(closest(e.item.selectNode[0], '.' + classes.CLASS_CAPTION));\n }\n else {\n detach(e.item.selectNode[0]);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.insertAltTextImage = function (e) {\n e.item.selectNode[0].setAttribute('alt', e.item.altText);\n this.callBack(e);\n };\n ImageCommand.prototype.imageDimension = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.style.height = '';\n selectNode.style.width = '';\n if (e.item.width !== 'auto') {\n selectNode.style.width = formatUnit(e.item.width);\n }\n else {\n selectNode.removeAttribute('width');\n }\n if (e.item.height !== 'auto') {\n selectNode.style.height = formatUnit(e.item.height);\n }\n else {\n selectNode.removeAttribute('height');\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageCaption = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.item.insertElement, this.parent.editableElement);\n this.callBack(e);\n };\n ImageCommand.prototype.imageJustifyLeft = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_LEFT);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageJustifyCenter = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_CENTER);\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_CENTER);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageJustifyRight = function (e) {\n var selectNode = e.item.selectNode[0];\n if (!isNOU(selectNode)) {\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n }\n if (selectNode.parentElement.nodeName === 'A') {\n removeClass([selectNode.parentElement], classes.CLASS_IMAGE_LEFT);\n addClass([selectNode.parentElement], classes.CLASS_IMAGE_RIGHT);\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n else {\n addClass([selectNode], classes.CLASS_IMAGE_RIGHT);\n }\n this.callBack(e);\n }\n };\n ImageCommand.prototype.imageInline = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], 'e-rte-image');\n addClass([selectNode], classes.CLASS_IMAGE_INLINE);\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.imageBreak = function (e) {\n var selectNode = e.item.selectNode[0];\n selectNode.removeAttribute('class');\n addClass([selectNode], classes.CLASS_IMAGE_BREAK);\n addClass([selectNode], 'e-rte-image');\n if (!isNOU(closest(selectNode, '.' + classes.CLASS_CAPTION))) {\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_CAPTION_INLINE);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_CENTER);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_LEFT);\n removeClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_RIGHT);\n addClass([closest(selectNode, '.' + classes.CLASS_CAPTION)], classes.CLASS_IMAGE_BREAK);\n }\n this.callBack(e);\n };\n ImageCommand.prototype.callBack = function (e) {\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return ImageCommand;\n}());\nexport { ImageCommand };\n","import { createElement, closest, detach, Browser, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Link internal component\n *\n * @hidden\n\n */\nvar TableCommand = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function TableCommand(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n TableCommand.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.TABLE, this.createTable, this);\n this.parent.observer.on(CONSTANT.INSERT_ROW, this.insertRow, this);\n this.parent.observer.on(CONSTANT.INSERT_COLUMN, this.insertColumn, this);\n this.parent.observer.on(CONSTANT.DELETEROW, this.deleteRow, this);\n this.parent.observer.on(CONSTANT.DELETECOLUMN, this.deleteColumn, this);\n this.parent.observer.on(CONSTANT.REMOVETABLE, this.removeTable, this);\n this.parent.observer.on(CONSTANT.TABLEHEADER, this.tableHeader, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_ALIGN, this.tableVerticalAlign, this);\n this.parent.observer.on(CONSTANT.TABLE_MERGE, this.cellMerge, this);\n this.parent.observer.on(CONSTANT.TABLE_HORIZONTAL_SPLIT, this.HorizontalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_VERTICAL_SPLIT, this.VerticalSplit, this);\n this.parent.observer.on(CONSTANT.TABLE_MOVE, this.tableMove, this);\n };\n TableCommand.prototype.createTable = function (e) {\n var table = createElement('table', { className: 'e-rte-table' });\n var tblBody = createElement('tbody');\n if (!isNOU(e.item.width.width)) {\n table.style.width = this.calculateStyleValue(e.item.width.width);\n }\n if (!isNOU(e.item.width.minWidth)) {\n table.style.minWidth = this.calculateStyleValue(e.item.width.minWidth);\n }\n if (!isNOU(e.item.width.maxWidth)) {\n table.style.maxWidth = this.calculateStyleValue(e.item.width.maxWidth);\n }\n var tdWid = parseInt(e.item.width.width, 10) > 100 ?\n 100 / e.item.columns : parseInt(e.item.width.width, 10) / e.item.columns;\n for (var i = 0; i < e.item.rows; i++) {\n var row = createElement('tr');\n for (var j = 0; j < e.item.columns; j++) {\n var cell = createElement('td');\n cell.appendChild(createElement('br'));\n cell.style.width = tdWid + '%';\n row.appendChild(cell);\n }\n tblBody.appendChild(row);\n }\n table.appendChild(tblBody);\n e.item.selection.restore();\n InsertHtml.Insert(this.parent.currentDocument, table, this.parent.editableElement);\n this.removeEmptyNode();\n e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);\n if (table.nextElementSibling === null) {\n var insertElem = void 0;\n if (e.enterAction === 'DIV') {\n insertElem = createElement('div');\n insertElem.appendChild(createElement('br'));\n }\n else if (e.enterAction === 'BR') {\n insertElem = createElement('br');\n }\n else {\n insertElem = createElement('p');\n insertElem.appendChild(createElement('br'));\n }\n this.insertAfter(insertElem, table);\n }\n table.querySelector('td').classList.add('e-cell-select');\n if (e.callBack) {\n e.callBack({\n requestType: 'Table',\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: [table]\n });\n }\n return table;\n };\n TableCommand.prototype.calculateStyleValue = function (value) {\n var styleValue;\n if (typeof (value) === 'string') {\n if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {\n styleValue = value;\n }\n else {\n styleValue = value + 'px';\n }\n }\n else {\n styleValue = value + 'px';\n }\n return styleValue;\n };\n TableCommand.prototype.removeEmptyNode = function () {\n var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');\n for (var i = 0; i < emptyUl.length; i++) {\n detach(emptyUl[i]);\n }\n var emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty');\n for (var i = 0; i < emptyLiChild.length; i++) {\n detach(emptyLiChild[i]);\n if (emptyLiChild.length === i + 1) {\n emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty');\n i = -1;\n }\n }\n var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');\n for (var i = 0; i < emptyLi.length; i++) {\n detach(emptyLi[i]);\n }\n };\n TableCommand.prototype.insertAfter = function (newNode, referenceNode) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n };\n TableCommand.prototype.getSelectedCellMinMaxIndex = function (e) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var a = 0;\n var minI = e.length;\n var maxI = 0;\n var minJ = e[0].length;\n var maxJ = 0;\n //eslint-disable-next-line\n for (var i = 0; a < selectedCells.length; a++) {\n var selectedCellIndex = this.getCorrespondingIndex(selectedCells[a], e);\n var minMaxIndex = this.FindIndex(selectedCellIndex[0], selectedCellIndex[1], e);\n //eslint-disable-next-line\n minI = Math.min(selectedCellIndex[0], minI),\n maxI = Math.max(minMaxIndex[0], maxI),\n minJ = Math.min(selectedCellIndex[1], minJ),\n maxJ = Math.max(minMaxIndex[1], maxJ);\n }\n return {\n startRow: minI,\n endRow: maxI,\n startColumn: minJ,\n endColumn: maxJ\n };\n };\n TableCommand.prototype.insertRow = function (e) {\n var isBelow = e.item.subCommand === 'InsertRowBefore' ? false : true;\n var selectedCell = e.item.selection.range.startContainer;\n if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n if (selectedCell.nodeName.toLowerCase() === 'th' && e.item.subCommand === 'InsertRowBefore') {\n return;\n }\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length === 0) {\n var lastRow = this.curTable.rows[this.curTable.rows.length - 1];\n var cloneRow = lastRow.cloneNode(true);\n cloneRow.removeAttribute('rowspan');\n this.insertAfter(cloneRow, lastRow);\n }\n else {\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minVal = isBelow ? minMaxIndex.endRow : minMaxIndex.startRow;\n var newRow = createElement('tr');\n var isHeaderSelect = this.curTable.querySelectorAll('th.e-cell-select').length > 0;\n for (var i = 0; i < allCells[minVal].length; i++) {\n if (isBelow && minVal < allCells.length - 1 && allCells[minVal][i] === allCells[minVal + 1][i] ||\n !isBelow && 0 < minVal && allCells[minVal][i] === allCells[minVal - 1][i]) {\n if (0 === i || 0 < i && allCells[minVal][i] !== allCells[minVal][i - 1]) {\n allCells[minVal][i].setAttribute('rowspan', (parseInt(allCells[minVal][i].getAttribute('rowspan'), 10) + 1).toString());\n }\n }\n else {\n var tdElement = createElement('td');\n tdElement.appendChild(createElement('br'));\n newRow.appendChild(tdElement);\n tdElement.setAttribute('style', allCells[(isHeaderSelect && isBelow) ? (minVal + 1) : minVal][i].getAttribute('style'));\n }\n }\n // eslint-disable-next-line\n var selectedRow = void 0;\n if (isHeaderSelect && isBelow) {\n selectedRow = this.curTable.querySelector('tbody').childNodes[0];\n }\n else {\n selectedRow = this.curTable.rows[minVal];\n }\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertRowBefore') ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n (isHeaderSelect ? selectedRow.parentElement.insertBefore(newRow, selectedRow) :\n this.insertAfter(newRow, selectedRow));\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.insertColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (!(selectedCell.nodeName === 'TH' || selectedCell.nodeName === 'TD')) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var curRow = closest(selectedCell, 'tr');\n var curCell;\n var allRows = closest((curRow), 'table').rows;\n var colIndex = Array.prototype.slice.call(curRow.querySelectorAll(':scope > td, :scope > th')).indexOf(selectedCell);\n var previousWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length);\n var currentWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length + 1);\n var currentTabElm = closest(curRow, 'table');\n var thTdElm = closest(curRow, 'table').querySelectorAll('th,td');\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].dataset.oldWidth = (thTdElm[i].offsetWidth / currentTabElm.offsetWidth * 100) + '%';\n }\n for (var i = 0; i < allRows.length; i++) {\n curCell = allRows[i].querySelectorAll(':scope > td, :scope > th')[colIndex];\n var colTemplate = curCell.cloneNode(true);\n colTemplate.innerHTML = '';\n colTemplate.appendChild(createElement('br'));\n colTemplate.removeAttribute('class');\n colTemplate.removeAttribute('colspan');\n colTemplate.removeAttribute('rowspan');\n // eslint-disable-next-line\n (e.item.subCommand === 'InsertColumnLeft') ? curCell.parentElement.insertBefore(colTemplate, curCell) :\n this.insertAfter(colTemplate, curCell);\n colTemplate.style.width = currentWidth.toFixed(4) + '%';\n delete colTemplate.dataset.oldWidth;\n }\n for (var i = 0; i < thTdElm.length; i++) {\n thTdElm[i].style.width = (Number(thTdElm[i].dataset.oldWidth.split('%')[0]) * currentWidth / previousWidth).toFixed(4) + '%';\n delete thTdElm[i].dataset.oldWidth;\n }\n e.item.selection.setSelectionText(this.parent.currentDocument, selectedCell, selectedCell, 0, 0);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteColumn = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var tBodyHeadEle = closest(selectedCell, selectedCell.tagName === 'TH' ? 'thead' : 'tbody');\n var rowIndex = tBodyHeadEle && Array.prototype.indexOf.call(tBodyHeadEle.childNodes, selectedCell.parentNode);\n this.curTable = closest(selectedCell, 'table');\n var curRow = closest(selectedCell, 'tr');\n if (curRow.querySelectorAll('th,td').length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n var deleteIndex = void 0;\n var allCells = this.getCorrespondingColumns();\n //eslint-disable-next-line\n var selectedMinMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var minCol = selectedMinMaxIndex.startColumn;\n var maxCol = selectedMinMaxIndex.endColumn;\n for (var i = 0; i < allCells.length; i++) {\n var currentRow = allCells[i];\n for (var j = 0; j < currentRow.length; j++) {\n var currentCell = currentRow[j];\n //eslint-disable-next-line\n var currentCellIndex = this.getCorrespondingIndex(currentCell, allCells);\n var colSpanVal = parseInt(currentCell.getAttribute('colspan'), 10) || 1;\n if (currentCellIndex[1] + (colSpanVal - 1) >= minCol && currentCellIndex[1] <= maxCol) {\n if (colSpanVal > 1) {\n currentCell.setAttribute('colspan', (colSpanVal - 1).toString());\n }\n else {\n detach(currentCell);\n deleteIndex = j;\n if (Browser.isIE) {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n }\n }\n if (deleteIndex > -1) {\n var rowHeadEle = tBodyHeadEle.children[rowIndex];\n var nextFocusCell = rowHeadEle &&\n rowHeadEle.children[(deleteIndex <= rowHeadEle.children.length - 1 ? deleteIndex : deleteIndex - 1)];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n var sContainer = this.parent.nodeSelection.getRange(this.parent.currentDocument).startContainer;\n if (sContainer.nodeName !== 'TD') {\n var startChildLength = this.parent.nodeSelection.getRange(this.parent.currentDocument).startOffset;\n var focusNode = sContainer.children[startChildLength];\n if (focusNode) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, focusNode, 0);\n }\n }\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.deleteRow = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n if (selectedCell.nodeType === 3) {\n selectedCell = closest(selectedCell.parentElement, 'td,th');\n }\n var colIndex = Array.prototype.indexOf.call(selectedCell.parentNode.childNodes, selectedCell);\n this.curTable = closest(selectedCell, 'table');\n var currentRow;\n var allCells = this.getCorrespondingColumns();\n var minMaxIndex = this.getSelectedCellMinMaxIndex(allCells);\n var maxI;\n var j;\n if (this.curTable.rows.length === 1) {\n e.item.selection.restore();\n detach(closest(selectedCell.parentElement, 'table'));\n }\n else {\n for (maxI = minMaxIndex.endRow; maxI >= minMaxIndex.startRow; maxI--) {\n currentRow = this.curTable.rows[maxI];\n for (j = 0; j < allCells[maxI].length; j++) {\n if (j === 0 || allCells[maxI][j] !== allCells[maxI][j - 1]) {\n if (1 < parseInt(allCells[maxI][j].getAttribute('rowspan'), 10)) {\n var rowSpanVal = parseInt(allCells[maxI][j].getAttribute('rowspan'), 10) - 1;\n //eslint-disable-next-line\n 1 === rowSpanVal ? allCells[maxI][j].removeAttribute('rowspan') : allCells[maxI][j].setAttribute('rowspan', rowSpanVal.toString());\n }\n }\n if (maxI < allCells.length - 1 && allCells[maxI][j] === allCells[maxI + 1][j] && (0 === maxI ||\n allCells[maxI][j] !== allCells[maxI - 1][j])) {\n var element = allCells[maxI][j];\n var index = void 0;\n for (index = j; 0 < index && allCells[maxI][index] === allCells[maxI][index - 1]; index--) {\n if (index === 0) {\n this.curTable.rows[maxI + 1].prepend(element);\n }\n else {\n allCells[maxI + 1][index - 1].insertAdjacentElement('afterend', element);\n }\n }\n }\n }\n var deleteIndex = currentRow.rowIndex;\n this.curTable.deleteRow(deleteIndex);\n var focusTrEle = !isNOU(this.curTable.rows[deleteIndex]) ? this.curTable.querySelectorAll('tbody tr')[deleteIndex]\n : this.curTable.querySelectorAll('tbody tr')[deleteIndex - 1];\n var nextFocusCell = focusTrEle && focusTrEle.querySelectorAll('td')[colIndex];\n if (nextFocusCell) {\n e.item.selection.setSelectionText(this.parent.currentDocument, nextFocusCell, nextFocusCell, 0, 0);\n nextFocusCell.classList.add('e-cell-select');\n }\n else {\n e.item.selection.setSelectionText(this.parent.currentDocument, this.curTable.querySelector('td'), this.curTable.querySelector('td'), 0, 0);\n this.curTable.querySelector('td, th').classList.add('e-cell-select');\n }\n }\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.removeTable = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var selectedTable = closest(selectedCell.parentElement, 'table');\n if (selectedTable) {\n e.item.selection.restore();\n detach(selectedTable);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableHeader = function (e) {\n var headerExit = false;\n var selectedCell = e.item.selection.range.startContainer;\n selectedCell = (selectedCell.nodeType === 3) ? selectedCell.parentNode : selectedCell;\n var table = closest(selectedCell.parentElement, 'table');\n [].slice.call(table.childNodes).forEach(function (el) {\n if (el.nodeName === 'THEAD') {\n headerExit = true;\n }\n });\n if (table && !headerExit) {\n var cellCount = table.querySelector('tr').childElementCount;\n var colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(table.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n var header = table.createTHead();\n var row = header.insertRow(0);\n for (var j = 0; j < colSpanCount; j++) {\n var th = createElement('th');\n th.appendChild(createElement('br'));\n row.appendChild(th);\n }\n }\n else {\n table.deleteTHead();\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.tableVerticalAlign = function (e) {\n if (e.item.subCommand === 'AlignTop') {\n e.item.tableCell.style.verticalAlign = 'top';\n }\n else if (e.item.subCommand === 'AlignMiddle') {\n e.item.tableCell.style.verticalAlign = 'middle';\n }\n else {\n e.item.tableCell.style.verticalAlign = 'bottom';\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.cellMerge = function (e) {\n if (isNOU(this.curTable)) {\n this.curTable = closest(this.parent.nodeSelection.range.startContainer.parentElement, 'table');\n }\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (selectedCells.length < 2) {\n return;\n }\n this.mergeCellContent();\n var minMaxIndexes = this.getSelectedMinMaxIndexes(this.getCorrespondingColumns());\n var firstCell = selectedCells[0];\n var rowSelectedCells = firstCell.parentElement.querySelectorAll('.e-cell-select');\n if (minMaxIndexes.startColumn < minMaxIndexes.endColumn) {\n firstCell.setAttribute('colspan', (minMaxIndexes.endColumn - minMaxIndexes.startColumn + 1).toString());\n }\n if (minMaxIndexes.startRow < minMaxIndexes.endRow) {\n firstCell.setAttribute('rowspan', (minMaxIndexes.endRow - minMaxIndexes.startRow + 1).toString());\n }\n var totalWidth = 0;\n for (var j = rowSelectedCells.length - 1; j >= 0; j--) {\n totalWidth = totalWidth + parseFloat(rowSelectedCells[j].style.width);\n }\n firstCell.style.width = totalWidth + '%';\n for (var i = 1; i <= selectedCells.length - 1; i++) {\n detach(selectedCells[i]);\n }\n for (var i = 0; i < this.curTable.rows.length; i++) {\n if (this.curTable.rows[i].innerHTML === '') {\n detach(this.curTable.rows[i]);\n }\n }\n this.updateRowSpanStyle(minMaxIndexes.startRow, minMaxIndexes.endRow, this.getCorrespondingColumns());\n this.updateColSpanStyle(minMaxIndexes.startColumn, minMaxIndexes.endColumn, this.getCorrespondingColumns());\n e.item.selection.setSelectionText(this.parent.currentDocument, e.item.selection.range.startContainer, e.item.selection.range.startContainer, 0, 0);\n if (this.parent.nodeSelection.range) {\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, \n // eslint-disable-next-line\n this.parent.nodeSelection.range.endContainer, 0);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.updateColSpanStyle = function (min, max, elements) {\n var colValue;\n var colIndex;\n var colMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = elements;\n //eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray[0].length - 1))) {\n for (colIndex === min; colIndex <= max; colIndex++) {\n // eslint-disable-next-line\n if (!(min < colIndex && eleArray[0][colIndex] === eleArray[0][colIndex - 1]) && 1 < (index =\n Math.min(parseInt(eleArray[0][colIndex].getAttribute('colspan'), 10) || 1, max - min + 1)) &&\n eleArray[0][colIndex] === eleArray[0][colIndex + 1]) {\n for (count = index - 1, colValue = 1; colValue < eleArray.length; colValue++) {\n if (eleArray[colValue][colIndex] !== eleArray[colValue - 1][colIndex]) {\n /* eslint-disable */\n for (colMin = colIndex; colMin < colIndex + index; colMin++) {\n if (1 < (attrValue = parseInt(eleArray[colValue][colMin].getAttribute('colspan'), 10) || 1) &&\n eleArray[colValue][colMin] === eleArray[colValue][colMin + 1]) {\n colMin += count = Math.min(count, attrValue - 1);\n }\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n /* eslint-enable */\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'colspan', 0, eleArray.length - 1, min, max);\n }\n }\n };\n TableCommand.prototype.updateRowSpanStyle = function (min, max, ele) {\n var rowValue;\n var colIndex;\n var rowMin;\n var index = 0;\n var attrValue;\n var count = 0;\n var eleArray = ele;\n // eslint-disable-next-line\n if (min < (max = Math.min(max, eleArray.length - 1))) {\n for (rowValue = min; rowValue <= max; rowValue++) {\n // eslint-disable-next-line\n if (!(min < rowValue && eleArray[rowValue][0] === eleArray[rowValue - 1][0]) && 1 < (index = Math.min(parseInt(eleArray[rowValue][0].getAttribute('rowspan'), 10) || 1, max - min + 1)) && eleArray[rowValue][0] === eleArray[rowValue + 1][0]) {\n for (count = index - 1, colIndex = 1; colIndex < eleArray[0].length; colIndex++) {\n if (eleArray[rowValue][colIndex] !== eleArray[rowValue][colIndex - 1]) {\n for (rowMin = rowValue; rowMin < rowValue + index; rowMin++) {\n // eslint-disable-next-line\n if (1 < (attrValue = parseInt(eleArray[rowMin][colIndex].getAttribute('rowspan'), 10) || 1) && eleArray[rowMin][colIndex] === eleArray[rowMin + 1][colIndex]) {\n rowMin += count = Math.min(count, attrValue - 1);\n }\n // eslint-disable-next-line\n else if (!(count = Math.max(0, count - 1))) {\n break;\n }\n }\n if (!count) {\n break;\n }\n }\n }\n }\n }\n if (count) {\n this.updateCellAttribute(eleArray, count, 'rowspan', min, max, 0, eleArray[0].length - 1);\n }\n }\n };\n TableCommand.prototype.updateCellAttribute = function (elements, index, attr, min, max, firstIndex, length) {\n var rowIndex;\n var colIndex;\n var spanCount;\n for (rowIndex = min; rowIndex <= max; rowIndex++) {\n for (colIndex = firstIndex; colIndex <= length; colIndex++) {\n // eslint-disable-next-line\n min < rowIndex && elements[rowIndex][colIndex] === elements[rowIndex - 1][colIndex] ||\n firstIndex < colIndex && elements[rowIndex][colIndex] === elements[rowIndex][colIndex - 1] ||\n 1 < (spanCount = parseInt(elements[rowIndex][colIndex].getAttribute(attr), 10) || 1) &&\n (1 < spanCount - index ? elements[rowIndex][colIndex].setAttribute(attr, (spanCount - index).toString()) :\n elements[rowIndex][colIndex].removeAttribute(attr));\n }\n }\n };\n TableCommand.prototype.mergeCellContent = function () {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n var innerHtml = selectedCells[0].innerHTML;\n for (var i = 1; i < selectedCells.length - 1; i++) {\n if ('
    ' !== selectedCells[i].innerHTML) {\n innerHtml = innerHtml + selectedCells[i].innerHTML;\n }\n }\n selectedCells[0].innerHTML = innerHtml;\n };\n TableCommand.prototype.getSelectedMinMaxIndexes = function (correspondingCells) {\n var selectedCells = this.curTable.querySelectorAll('.e-cell-select');\n if (0 < selectedCells.length) {\n var minRow = correspondingCells.length;\n var maxRow = 0;\n var minCol = correspondingCells[0].length;\n var maxCol = 0;\n for (var i = 0; i < selectedCells.length; i++) {\n var currentRowCol = this.getCorrespondingIndex(selectedCells[i], correspondingCells);\n var targetRowCol = this.FindIndex(currentRowCol[0], currentRowCol[1], correspondingCells);\n minRow = Math.min(currentRowCol[0], minRow);\n maxRow = Math.max(targetRowCol[0], maxRow);\n minCol = Math.min(currentRowCol[1], minCol);\n maxCol = Math.max(targetRowCol[1], maxCol);\n }\n return {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n };\n }\n return null;\n };\n TableCommand.prototype.HorizontalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '
    ';\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingCells = this.getCorrespondingColumns();\n var activeCellRowSpan = this.activeCell.getAttribute('rowspan') ? parseInt(this.activeCell.getAttribute('rowspan'), 10) : 1;\n if (activeCellRowSpan > 1) {\n var avgCount = Math.ceil(activeCellRowSpan / 2);\n // eslint-disable-next-line\n 1 < avgCount ? this.activeCell.setAttribute('rowspan', avgCount.toString()) :\n this.activeCell.removeAttribute('rowspan');\n // eslint-disable-next-line\n 1 < (activeCellRowSpan - avgCount) ? newCell.setAttribute('rowspan', (activeCellRowSpan - avgCount).toString()) : newCell.removeAttribute('rowspan');\n var avgRowIndex = void 0;\n var colIndex = void 0;\n for (avgRowIndex = activeCellIndex[0] + Math.ceil(activeCellRowSpan / 2),\n colIndex = 0 === activeCellIndex[1] ? activeCellIndex[1]\n : activeCellIndex[1] - 1; 0 <= colIndex && (correspondingCells[avgRowIndex][colIndex] ===\n correspondingCells[avgRowIndex][colIndex - 1] || 0 < avgRowIndex && correspondingCells[avgRowIndex][colIndex]\n === correspondingCells[avgRowIndex - 1][colIndex]);) {\n colIndex--;\n }\n if (colIndex === -1) {\n // eslint-disable-next-line\n this.curTable.rows[avgRowIndex].firstChild ? this.curTable.rows[avgRowIndex].prepend(newCell) : this.curTable.appendChild(newCell);\n }\n else {\n correspondingCells[avgRowIndex][colIndex].insertAdjacentElement('afterend', newCell);\n }\n }\n else {\n var newTrEle = createElement('tr');\n newTrEle.appendChild(newCell);\n var selectedRow = correspondingCells[activeCellIndex[0]];\n for (var j = 0; j <= selectedRow.length - 1; j++) {\n if (selectedRow[j] !== selectedRow[j - 1] && selectedRow[j] !== this.activeCell) {\n selectedRow[j].setAttribute('rowspan', ((parseInt(selectedRow[j].getAttribute('rowspan'), 10) ?\n parseInt(selectedRow[j].getAttribute('rowspan'), 10) : 1) + 1).toString());\n }\n }\n this.activeCell.parentNode.insertAdjacentElement('afterend', newTrEle);\n }\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.VerticalSplit = function (e) {\n var selectedCell = e.item.selection.range.startContainer;\n this.curTable = closest(selectedCell.parentElement, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n return;\n }\n this.activeCell = this.curTable.querySelector('.e-cell-select');\n var allRows = this.curTable.rows;\n var newCell = this.activeCell.cloneNode(true);\n newCell.removeAttribute('class');\n newCell.innerHTML = '
    ';\n var avgWidth = parseFloat(this.activeCell.style.width) / 2;\n if (this.activeCell.tagName === 'TH' && isNaN(avgWidth)) {\n var cellCount = this.curTable.querySelector('tr').childElementCount;\n var colSpanCount = 0;\n for (var i = 0; i < cellCount; i++) {\n colSpanCount = colSpanCount + (parseInt(this.curTable.querySelector('tr').children[i].getAttribute('colspan'), 10) || 1);\n }\n avgWidth = parseFloat((((this.activeCell.offsetWidth / 2) / this.curTable.offsetWidth) * 100).toFixed(1));\n }\n var activeCellIndex = this.getCorrespondingIndex(this.activeCell, this.getCorrespondingColumns());\n var correspondingColumns = this.getCorrespondingColumns();\n var activeCellcolSpan = parseInt(this.activeCell.getAttribute('colspan'), 10);\n if (activeCellcolSpan > 1) {\n // eslint-disable-next-line\n 1 < Math.ceil(activeCellcolSpan / 2) ? this.activeCell.setAttribute('colspan', (activeCellcolSpan / 2).toString())\n : this.activeCell.removeAttribute('colspan');\n // eslint-disable-next-line\n 1 < (activeCellcolSpan - activeCellcolSpan / 2) ? newCell.setAttribute('colspan', \n // eslint-disable-next-line\n (activeCellcolSpan - activeCellcolSpan / 2).toString()) : newCell.removeAttribute('colspan');\n }\n else {\n for (var i = 0; i <= allRows.length - 1; i++) {\n if (0 === i || correspondingColumns[i][activeCellIndex[1]] !== correspondingColumns[i - 1][activeCellIndex[1]]) {\n var currentCell = correspondingColumns[i][activeCellIndex[1]];\n if (currentCell !== this.activeCell) {\n currentCell.setAttribute('colspan', ((parseInt(currentCell.getAttribute('colspan'), 10) ?\n parseInt(currentCell.getAttribute('colspan'), 10) : 1) + 1).toString());\n }\n }\n }\n }\n this.activeCell.style.width = avgWidth + '%';\n newCell.style.width = avgWidth + '%';\n this.activeCell.parentNode.insertBefore(newCell, this.activeCell.nextSibling);\n if (e.callBack) {\n e.callBack({\n requestType: e.item.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n TableCommand.prototype.getCorrespondingColumns = function () {\n var elementArray = [];\n // eslint-disable-next-line\n var _this = this;\n var colspan = 0;\n var allRows = _this.curTable.rows;\n for (var i = 0; i <= allRows.length - 1; i++) {\n var ele = allRows[i];\n var index = 0;\n for (var j = 0; j <= ele.children.length - 1; j++) {\n /* eslint-disable */\n var colEle = ele.children[j];\n for (var ele_1 = colEle, colspan_1 = parseInt(ele_1.getAttribute('colspan'), 10) || 1, rowSpan = parseInt(ele_1.getAttribute('rowspan'), 10) || 1, rowIndex = i; rowIndex < i + rowSpan; rowIndex++) {\n for (var colIndex = index; colIndex < index + colspan_1; colIndex++) {\n elementArray[rowIndex] || (elementArray[rowIndex] = []);\n elementArray[rowIndex][colIndex] ? index++ : elementArray[rowIndex][colIndex] = colEle;\n }\n }\n index += colspan;\n }\n /* eslint-enable */\n }\n return elementArray;\n };\n // eslint-disable-next-line\n TableCommand.prototype.FindIndex = function (rowIndex, columnIndex, cells) {\n var nextIndex;\n var nextCol;\n for (nextIndex = rowIndex + 1, nextCol = columnIndex + 1; nextIndex < cells.length;) {\n if (cells[nextIndex][columnIndex] !== cells[rowIndex][columnIndex]) {\n nextIndex--;\n break;\n }\n nextIndex++;\n }\n for (nextIndex === cells.length && nextIndex--; nextCol < cells[rowIndex].length;) {\n if (cells[rowIndex][nextCol] !== cells[rowIndex][columnIndex]) {\n nextCol--;\n break;\n }\n nextCol++;\n }\n return nextCol === cells[rowIndex].length && nextCol--,\n [\n nextIndex,\n nextCol\n ];\n };\n TableCommand.prototype.getCorrespondingIndex = function (cell, allCells) {\n //let value: RowCol = new RowCol();\n for (var i = 0; i < allCells.length; i++) {\n for (var j = 0; j < allCells[i].length; j++) {\n if (allCells[i][j] === cell) {\n return [i, j];\n }\n }\n }\n return [];\n };\n TableCommand.prototype.highlightCells = function (minRow, maxRow, minCol, maxCol, eleArray) {\n var j;\n var k;\n var startCell;\n var endCell;\n var minRowIndex = minRow;\n var maxRowIndex = maxRow;\n var minColIndex = minCol;\n var maxColIndex = maxCol;\n var minMaxValues = new MinMax();\n for (j = minRowIndex; j <= maxRowIndex; j++) {\n /* eslint-disable */\n if ((1 < (parseInt(eleArray[j][minColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][minColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][minColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[j][maxColIndex].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[j][maxColIndex].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[j][maxColIndex], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n for (k = minColIndex; k <= maxColIndex; k++) {\n if ((1 < (parseInt(eleArray[minRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[minRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[minRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n else if ((1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('rowspan'), 10) || 1) ||\n 1 < (parseInt(eleArray[maxRowIndex][k].getAttribute('colspan'), 10) || 1)) &&\n (endCell = this.FindIndex((startCell = this.getCorrespondingIndex(eleArray[maxRowIndex][k], eleArray))[0], startCell[1], eleArray))) {\n minRowIndex = Math.min(startCell[0], minRowIndex);\n maxRowIndex = Math.max(endCell[0], maxRowIndex);\n minColIndex = Math.min(startCell[1], minColIndex);\n maxColIndex = Math.max(endCell[1], maxColIndex);\n }\n }\n minMaxValues = minRowIndex === minRow && maxRowIndex === maxRow && minColIndex === minCol && maxColIndex === maxCol ? {\n startRow: minRow,\n endRow: maxRow,\n startColumn: minCol,\n endColumn: maxCol\n } : this.highlightCells(minRowIndex, maxRowIndex, minColIndex, maxColIndex, eleArray);\n }\n return minMaxValues;\n /* eslint-enable */\n };\n TableCommand.prototype.tableMove = function (e) {\n this.activeCell = e.selectNode[0];\n var target = e.event.target;\n var activeCellTag = this.activeCell.tagName;\n var targetCellTag = target.tagName;\n this.curTable = closest(target, 'table');\n if (this.curTable.querySelectorAll('.e-cell-select').length > 1) {\n this.parent.nodeSelection.Clear(this.parent.currentDocument);\n }\n if ((target.tagName !== 'TD' && target.tagName !== 'TH') && activeCellTag !== targetCellTag) {\n return;\n }\n var activeRowIndex = Array.prototype.slice.call((this.activeCell).parentElement.parentElement.children)\n .indexOf((this.activeCell).parentElement);\n var activeColumnIndex = Array.prototype.slice.call((this.activeCell).parentElement.children).indexOf(this.activeCell);\n var targetRowIndex = Array.prototype.slice.call(target.parentElement.parentElement.children)\n .indexOf(target.parentElement);\n var targetColumnIndex = Array.prototype.slice.call(target.parentElement.children).indexOf(target);\n var activeCellList = this.curTable.querySelectorAll('.e-cell-select');\n for (var i = activeCellList.length - 1; i >= 0; i--) {\n if (this.activeCell !== activeCellList[i]) {\n activeCellList[i].classList.remove('e-cell-select');\n }\n }\n if (activeRowIndex === targetRowIndex && activeColumnIndex === targetColumnIndex) {\n return;\n }\n var correspondingCells = this.getCorrespondingColumns();\n var activeIndexes = this.getCorrespondingIndex(this.activeCell, correspondingCells);\n var targetIndexes = this.getCorrespondingIndex(target, correspondingCells);\n var minMaxIndexes = this.highlightCells(Math.min(activeIndexes[0], targetIndexes[0]), Math.max(activeIndexes[0], \n /* eslint-disable */\n targetIndexes[0]), Math.min(activeIndexes[1], targetIndexes[1]), Math.max(activeIndexes[1], targetIndexes[1]), correspondingCells);\n for (var rowIndex = minMaxIndexes.startRow; rowIndex <= minMaxIndexes.endRow; rowIndex++) {\n for (var colIndex = minMaxIndexes.startColumn; colIndex <= minMaxIndexes.endColumn; colIndex++) {\n correspondingCells[rowIndex][colIndex].classList.add('e-cell-select');\n }\n }\n if (this.parent.nodeSelection.range) {\n this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, this.parent.nodeSelection.range.endContainer, 0, 0);\n this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, this.parent.nodeSelection.range.endContainer, 0);\n }\n };\n ;\n return TableCommand;\n}());\nexport { TableCommand };\nvar MinMax = /** @class */ (function () {\n function MinMax() {\n }\n return MinMax;\n}());\n","/**\n * Is formatted or not.\n *\n * @hidden\n\n */\nvar IsFormatted = /** @class */ (function () {\n function IsFormatted() {\n }\n /**\n * getFormattedNode method\n *\n * @param {Node} node - specifies the node.\n * @param {string} format - specifies the string value.\n * @param {Node} endNode - specifies the end node\n * @returns {Node} - returns the node\n * @hidden\n\n */\n IsFormatted.prototype.getFormattedNode = function (node, format, endNode) {\n var parentNode = this.getFormatParent(node, format, endNode);\n if (parentNode !== null && parentNode !== endNode) {\n return parentNode;\n }\n return null;\n };\n IsFormatted.prototype.getFormatParent = function (node, format, endNode) {\n do {\n node = node.parentNode;\n } while (node && (node !== endNode) && !this.isFormattedNode(node, format));\n return node;\n };\n IsFormatted.prototype.isFormattedNode = function (node, format) {\n switch (format) {\n case 'bold':\n return IsFormatted.isBold(node);\n case 'italic':\n return IsFormatted.isItalic(node);\n case 'underline':\n return IsFormatted.isUnderline(node);\n case 'strikethrough':\n return IsFormatted.isStrikethrough(node);\n case 'superscript':\n return IsFormatted.isSuperscript(node);\n case 'subscript':\n return IsFormatted.isSubscript(node);\n case 'fontcolor':\n return this.isFontColor(node);\n case 'fontname':\n return this.isFontName(node);\n case 'fontsize':\n return this.isFontSize(node);\n case 'backgroundcolor':\n return this.isBackgroundColor(node);\n default:\n return false;\n }\n };\n /**\n * isBold method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isBold = function (node) {\n var validTags = ['strong', 'b'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontWeight === 'bold') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isItalic method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isItalic = function (node) {\n var validTags = ['em', 'i'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.fontStyle === 'italic') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isUnderline method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isUnderline = function (node) {\n var validTags = ['u'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'underline') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isStrikethrough method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isStrikethrough = function (node) {\n var validTags = ['del', 'strike'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else if (this.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n node.style && node.style.textDecoration === 'line-through') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSuperscript method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isSuperscript = function (node) {\n var validTags = ['sup'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * isSubscript method\n *\n * @param {Node} node - specifies the node value\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n IsFormatted.isSubscript = function (node) {\n var validTags = ['sub'];\n if (validTags.indexOf(node.nodeName.toLowerCase()) !== -1) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontColor = function (node) {\n var color = node.style && node.style.color;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n color !== null && color !== '' && color !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n backColor !== null && backColor !== '' && backColor !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontSize = function (node) {\n var size = node.style && node.style.fontSize;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n size !== null && size !== '' && size !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n IsFormatted.prototype.isFontName = function (node) {\n var name = node.style && node.style.fontFamily;\n if (IsFormatted.inlineTags.indexOf(node.nodeName.toLowerCase()) !== -1 &&\n name !== null && name !== '' && name !== undefined) {\n return true;\n }\n else {\n return false;\n }\n };\n // Get Formatted Node\n IsFormatted.inlineTags = [\n 'a',\n 'abbr',\n 'acronym',\n 'b',\n 'bdo',\n 'big',\n 'cite',\n 'code',\n 'dfn',\n 'em',\n 'i',\n 'kbd',\n 'label',\n 'q',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'tt',\n 'u',\n 'var',\n 'del'\n ];\n return IsFormatted;\n}());\nexport { IsFormatted };\n","/**\n * `Selection` module is used to handle RTE Selections.\n */\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nimport { isNullOrUndefined as isNOU, Browser, closest, detach } from '@syncfusion/ej2-base';\nimport { DOMNode } from './dom-node';\nvar SelectionCommands = /** @class */ (function () {\n function SelectionCommands() {\n }\n /**\n * applyFormat method\n *\n * @param {Document} docElement - specifies the document\n * @param {string} format - specifies the string value\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} value - specifies the string value\n * @param {string} selector - specifies the string\n * @returns {void}\n * @hidden\n\n */\n SelectionCommands.applyFormat = function (docElement, format, endNode, enterAction, value, selector) {\n this.enterAction = enterAction;\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];\n if (validFormats.indexOf(format) > -1) {\n if (format === 'backgroundcolor' && value === '') {\n value = 'transparent';\n }\n var domSelection = new NodeSelection();\n var domNode = new DOMNode(endNode, docElement);\n var nodeCutter = new NodeCutter();\n var isFormatted = new IsFormatted();\n var range = domSelection.getRange(docElement);\n var save = domSelection.save(range, docElement);\n var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :\n domSelection.getSelectionNodeCollectionBr(range);\n var isCollapsed = false;\n var isFormat = false;\n var isCursor = false;\n var preventRestore = false;\n var isFontStyle = (['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1);\n if (range.collapsed) {\n if (nodes.length > 0) {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, nodes[0]);\n }\n else if (range.startContainer.nodeType === 3 && range.startContainer.parentElement.childElementCount > 0 &&\n range.startOffset > 0 && range.startContainer.parentElement.firstElementChild.tagName.toLowerCase() !== 'br') {\n isCollapsed = true;\n range = nodeCutter.GetCursorRange(docElement, range, range.startContainer);\n nodes.push(range.startContainer);\n }\n else {\n var cursorNode = this.insertCursorNode(docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode);\n domSelection.endContainer = domSelection.startContainer = domSelection.getNodeArray(cursorNode, true);\n var childNodes = cursorNode.nodeName === 'BR' && cursorNode.parentNode.childNodes;\n if (!isNOU(childNodes) && childNodes.length === 1 && childNodes[0].nodeName === 'BR' && nodes.length === 0) {\n domSelection.setSelectionText(docElement, range.startContainer, range.endContainer, 0, 0);\n preventRestore = true;\n }\n else {\n domSelection.endOffset = domSelection.startOffset = 1;\n }\n if (cursorNode.nodeName === 'BR' && cursorNode.parentNode.textContent.length === 0) {\n preventRestore = true;\n }\n }\n }\n isCursor = range.collapsed;\n var isSubSup = false;\n for (var index = 0; index < nodes.length; index++) {\n var formatNode = isFormatted.getFormattedNode(nodes[index], format, endNode);\n if (formatNode === null) {\n if (format === 'subscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'superscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n else if (format === 'superscript') {\n formatNode = isFormatted.getFormattedNode(nodes[index], 'subscript', endNode);\n isSubSup = formatNode === null ? false : true;\n }\n }\n if (index === 0 && formatNode === null) {\n isFormat = true;\n }\n if (formatNode !== null && (!isFormat || isFontStyle)) {\n nodes[index] = this.removeFormat(nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection, endNode, domNode);\n }\n else {\n nodes[index] = this.insertFormat(docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value);\n }\n domSelection = this.applySelection(nodes, domSelection, nodeCutter, index, isCollapsed);\n }\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n if (!preventRestore) {\n save.restore();\n }\n if (isSubSup) {\n this.applyFormat(docElement, format, endNode, enterAction);\n }\n }\n };\n SelectionCommands.insertCursorNode = function (docElement, domSelection, range, isFormatted, nodeCutter, format, value, endNode) {\n var cursorNodes = domSelection.getNodeCollection(range);\n var domNode = new DOMNode(endNode, docElement);\n var cursorFormat = (cursorNodes.length > 0) ?\n (cursorNodes.length > 1 && range.startContainer === range.endContainer) ?\n this.getCursorFormat(isFormatted, cursorNodes, format, endNode) :\n isFormatted.getFormattedNode(cursorNodes[0], format, endNode) : null;\n var cursorNode = null;\n if (cursorFormat) {\n cursorNode = cursorNodes[0];\n if (cursorFormat.firstChild.textContent.charCodeAt(0) === 8203 && cursorFormat.firstChild.nodeType === 3) {\n var isCursorEqual = false;\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var emptySpaceNode = void 0;\n if (cursorFormat.firstChild === cursorNode) {\n cursorNode.textContent = (cursorFormat.parentElement && (domNode.isBlockNode(cursorFormat.parentElement) &&\n cursorFormat.parentElement.textContent.length <= 1 ? cursorFormat.parentElement.childElementCount > 1 :\n cursorFormat.childElementCount === 0) &&\n (cursorFormat.parentElement.textContent.length > 1 ||\n cursorFormat.parentElement.firstChild && cursorFormat.parentElement.firstChild.nodeType === 1) ?\n cursorNode.textContent : cursorNode.textContent.replace(regEx, ''));\n emptySpaceNode = cursorNode;\n isCursorEqual = true;\n }\n else {\n cursorFormat.firstChild.textContent = cursorFormat.firstChild.textContent.replace(regEx, '');\n emptySpaceNode = cursorFormat.firstChild;\n }\n var pointer = void 0;\n if (emptySpaceNode.textContent.length === 0) {\n if (!isNOU(emptySpaceNode.previousSibling)) {\n cursorNode = emptySpaceNode.previousSibling;\n pointer = emptySpaceNode.textContent.length - 1;\n domSelection.setCursorPoint(docElement, emptySpaceNode, pointer);\n }\n else if (!isNOU(emptySpaceNode.parentElement) && emptySpaceNode.parentElement.textContent.length === 0) {\n var brElem = document.createElement('BR');\n emptySpaceNode.parentElement.appendChild(brElem);\n detach(emptySpaceNode);\n cursorNode = brElem;\n domSelection.setCursorPoint(docElement, cursorNode.parentElement, 0);\n }\n }\n }\n if ((['fontcolor', 'fontname', 'fontsize', 'backgroundcolor'].indexOf(format) > -1)) {\n if (format === 'fontcolor') {\n cursorFormat.style.color = value;\n }\n else if (format === 'fontname') {\n cursorFormat.style.fontFamily = value;\n }\n else if (format === 'fontsize') {\n cursorFormat.style.fontSize = value;\n }\n else {\n cursorFormat.style.backgroundColor = value;\n }\n cursorNode = cursorFormat;\n }\n else {\n InsertMethods.unwrap(cursorFormat);\n }\n }\n else {\n if (cursorNodes.length > 1 && range.startOffset > 0 && (cursorNodes[0].firstElementChild &&\n cursorNodes[0].firstElementChild.tagName.toLowerCase() === 'br')) {\n cursorNodes[0].innerHTML = '';\n }\n if (cursorNodes.length === 1 && range.startOffset === 0 && (cursorNodes[0].nodeName === 'BR' ||\n cursorNodes[0].nextSibling.nodeName === 'BR')) {\n detach(cursorNodes[0].nodeName === '#text' ? cursorNodes[0].nextSibling : cursorNodes[0]);\n }\n cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;\n }\n return cursorNode;\n };\n SelectionCommands.getCursorFormat = function (isFormatted, cursorNodes, format, endNode) {\n var currentNode;\n for (var index = 0; index < cursorNodes.length; index++) {\n currentNode = cursorNodes[index].lastElementChild ?\n cursorNodes[index].lastElementChild : cursorNodes[index];\n }\n return isFormatted.getFormattedNode(currentNode, format, endNode);\n };\n SelectionCommands.removeFormat = function (nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value, domSelection, endNode, domNode) {\n var splitNode = null;\n var startText = range.startContainer.nodeName === '#text' ?\n range.startContainer.textContent.substring(range.startOffset, range.startContainer.textContent.length) :\n range.startContainer.textContent;\n if (!(range.startContainer === range.endContainer && range.startOffset === 0\n && range.endOffset === range.startContainer.length)) {\n var nodeIndex = [];\n var cloneNode = nodes[index];\n do {\n nodeIndex.push(domSelection.getIndex(cloneNode));\n cloneNode = cloneNode.parentNode;\n } while (cloneNode && (cloneNode !== formatNode));\n if (nodes[index].nodeName !== 'BR') {\n cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?\n nodeCutter.SplitNode(range, formatNode, true)\n : nodeCutter.GetSpliceNode(range, formatNode);\n }\n if (!isCursor) {\n while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)\n && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {\n cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];\n nodeIndex.pop();\n }\n if (nodes[index].nodeName !== 'BR') {\n if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {\n nodes[index] = cloneNode;\n }\n else {\n var divNode = document.createElement('div');\n divNode.innerHTML = '​';\n if (cloneNode.nodeType !== 3) {\n cloneNode.insertBefore(divNode.firstChild, cloneNode.firstChild);\n nodes[index] = cloneNode.firstChild;\n }\n else {\n cloneNode.parentNode.insertBefore(divNode.firstChild, cloneNode);\n nodes[index] = cloneNode.previousSibling;\n cloneNode.parentNode.removeChild(cloneNode);\n }\n }\n }\n }\n else {\n var lastNode = splitNode;\n for (; lastNode.firstChild !== null && lastNode.firstChild.nodeType !== 3; null) {\n lastNode = lastNode.firstChild;\n }\n lastNode.innerHTML = '​';\n nodes[index] = lastNode.firstChild;\n }\n }\n var fontStyle;\n if (format === 'backgroundcolor') {\n fontStyle = formatNode.style.fontSize;\n }\n var bgStyle;\n if (format === 'fontsize') {\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n bgStyle = bg.style.backgroundColor;\n }\n }\n var formatNodeStyles = formatNode.getAttribute('style');\n var formatNodeTagName = formatNode.tagName;\n var child = InsertMethods.unwrap(formatNode);\n if (child[0] && !isFontStyle) {\n var nodeTraverse = child[index] ? child[index] : child[0];\n var textNode = nodeTraverse;\n for (; nodeTraverse && nodeTraverse.parentElement && nodeTraverse.parentElement !== endNode; \n // eslint-disable-next-line\n nodeTraverse = nodeTraverse) {\n if (nodeTraverse.parentElement && nodeTraverse.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase() &&\n (nodeTraverse.parentElement.childElementCount > 1 || range.startOffset > 1)) {\n if (textNode.parentElement && textNode.parentElement.tagName.toLocaleLowerCase()\n === formatNode.tagName.toLocaleLowerCase()) {\n if ((range.startOffset === range.endOffset) && textNode.nodeType !== 1 &&\n !isNOU(textNode.textContent) && textNode.parentElement.childElementCount > 1) {\n range.setStart(textNode, 0);\n range.setEnd(textNode, textNode.textContent.length);\n nodeCutter.SplitNode(range, textNode.parentElement, false);\n }\n }\n if (nodeTraverse.parentElement.tagName.toLocaleLowerCase() === 'span') {\n if (formatNode.style.textDecoration === 'underline' &&\n nodeTraverse.parentElement.style.textDecoration !== 'underline') {\n nodeTraverse = nodeTraverse.parentElement;\n continue;\n }\n }\n InsertMethods.unwrap(nodeTraverse.parentElement);\n nodeTraverse = !isNOU(nodeTraverse.parentElement) && !domNode.isBlockNode(nodeTraverse.parentElement) ? textNode :\n nodeTraverse.parentElement;\n }\n else {\n nodeTraverse = nodeTraverse.parentElement;\n }\n }\n }\n if (child.length > 0 && isFontStyle) {\n for (var num = 0; num < child.length; num++) {\n if (child[num].nodeType !== 3 || (child[num].textContent && child[num].textContent.trim().length > 0)) {\n child[num] = InsertMethods.Wrap(child[num], this.GetFormatNode(format, value, formatNodeTagName, formatNodeStyles));\n if (child[num].textContent === startText) {\n if (num === 0) {\n range.setStartBefore(child[num]);\n }\n else if (num === child.length - 1) {\n range.setEndAfter(child[num]);\n }\n }\n }\n }\n var currentNodeElem = nodes[index].parentElement;\n if (!isNOU(fontStyle) && fontStyle !== '') {\n currentNodeElem.style.fontSize = fontStyle;\n }\n if (!isNOU(bgStyle) && bgStyle !== '') {\n currentNodeElem.style.backgroundColor = bgStyle;\n }\n if ((format === 'backgroundcolor' && !isNOU(fontStyle) && fontStyle !== '') &&\n currentNodeElem.parentElement.innerHTML === currentNodeElem.outerHTML) {\n var curParentElem = currentNodeElem.parentElement;\n curParentElem.parentElement.insertBefore(currentNodeElem, curParentElem);\n detach(curParentElem);\n }\n if (format === 'fontsize' || format === 'fontcolor') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n }\n }\n return nodes[index];\n };\n SelectionCommands.insertFormat = function (docElement, nodes, index, formatNode, isCursor, isFormat, isFontStyle, range, nodeCutter, format, value) {\n if (!isCursor) {\n if ((formatNode === null && isFormat) || isFontStyle) {\n if (nodes[index].nodeName !== 'BR') {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n nodes[index].textContent = nodeCutter.TrimLineBreak(nodes[index].textContent);\n }\n if (format === 'uppercase' || format === 'lowercase') {\n nodes[index].textContent = (format === 'uppercase') ? nodes[index].textContent.toLocaleUpperCase()\n : nodes[index].textContent.toLocaleLowerCase();\n }\n else if (!(isFontStyle === true && value === '')) {\n var element = this.GetFormatNode(format, value);\n if (format === 'fontsize' || format === 'fontcolor') {\n var liElement = nodes[index].parentElement;\n var parentElement = nodes[index].parentElement;\n while (!isNOU(parentElement) && parentElement.tagName.toLowerCase() !== 'li') {\n parentElement = parentElement.parentElement;\n liElement = parentElement;\n }\n if (!isNOU(liElement) && liElement.tagName.toLowerCase() === 'li' &&\n liElement.textContent.trim() === nodes[index].textContent.trim()) {\n if (format === 'fontsize') {\n liElement.style.fontSize = value;\n }\n else {\n liElement.style.color = value;\n liElement.style.textDecoration = 'inherit';\n }\n }\n nodes[index] = this.applyStyles(nodes, index, element);\n if (format === 'fontsize') {\n var bg = closest(nodes[index].parentElement, 'span[style*=' + 'background-color' + ']');\n if (!isNOU(bg)) {\n nodes[index].parentElement.style.backgroundColor = bg.style.backgroundColor;\n }\n }\n }\n else {\n nodes[index] = this.applyStyles(nodes, index, element);\n }\n }\n }\n else {\n nodes[index] = nodeCutter.GetSpliceNode(range, nodes[index]);\n }\n }\n else {\n if (format !== 'uppercase' && format !== 'lowercase') {\n var element = this.getInsertNode(docElement, range, format, value);\n nodes[index] = element.firstChild;\n nodeCutter.position = 1;\n }\n else {\n nodeCutter.position = range.startOffset;\n }\n }\n return nodes[index];\n };\n SelectionCommands.applyStyles = function (nodes, index, element) {\n if (!(nodes[index].nodeName === 'BR' && this.enterAction === 'BR')) {\n nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?\n InsertMethods.Wrap(nodes[index], element)\n : InsertMethods.WrapBefore(nodes[index], element, true);\n nodes[index] = this.getChildNode(nodes[index], element);\n }\n return nodes[index];\n };\n SelectionCommands.getInsertNode = function (docElement, range, format, value) {\n var element = this.GetFormatNode(format, value);\n element.innerHTML = '​';\n if (Browser.isIE) {\n var frag = docElement.createDocumentFragment();\n frag.appendChild(element);\n range.insertNode(frag);\n }\n else {\n range.insertNode(element);\n }\n return element;\n };\n SelectionCommands.getChildNode = function (node, element) {\n if (node === undefined || node === null) {\n element.innerHTML = '​';\n node = element.firstChild;\n }\n return node;\n };\n SelectionCommands.applySelection = function (nodes, domSelection, nodeCutter, index, isCollapsed) {\n if (nodes.length === 1 && !isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = 0;\n domSelection.endOffset = nodes[index].textContent.length;\n }\n else if (nodes.length === 1 && isCollapsed) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.endContainer = domSelection.startContainer;\n domSelection.startOffset = nodeCutter.position;\n domSelection.endOffset = nodeCutter.position;\n }\n else if (index === 0) {\n domSelection.startContainer = domSelection.getNodeArray(nodes[index], true);\n domSelection.startOffset = 0;\n }\n else if (index === nodes.length - 1) {\n domSelection.endContainer = domSelection.getNodeArray(nodes[index], false);\n domSelection.endOffset = nodes[index].textContent.length;\n }\n return domSelection;\n };\n SelectionCommands.GetFormatNode = function (format, value, tagName, styles) {\n var node;\n switch (format) {\n case 'bold':\n return document.createElement('strong');\n case 'italic':\n return document.createElement('em');\n case 'underline':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.textDecoration = 'underline';\n return node;\n case 'strikethrough':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.textDecoration = 'line-through';\n return node;\n case 'superscript':\n return document.createElement('sup');\n case 'subscript':\n return document.createElement('sub');\n case 'fontcolor':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.color = value;\n node.style.textDecoration = 'inherit';\n return node;\n case 'fontname':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontFamily = value;\n return node;\n case 'fontsize':\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.fontSize = value;\n return node;\n default:\n node = document.createElement('span');\n this.updateStyles(node, tagName, styles);\n node.style.backgroundColor = value;\n return node;\n }\n };\n SelectionCommands.updateStyles = function (ele, tag, styles) {\n if (styles !== null && tag === 'SPAN') {\n ele.setAttribute('style', styles);\n }\n };\n SelectionCommands.enterAction = 'P';\n return SelectionCommands;\n}());\nexport { SelectionCommands };\n","import * as CONSTANT from './../base/constant';\nimport { SelectionCommands } from './selection-commands';\nimport * as EVENTS from './../../common/constant';\n/**\n * Selection EXEC internal component\n *\n * @hidden\n\n */\nvar SelectionBasedExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function SelectionBasedExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n SelectionBasedExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.SELECTION_TYPE, this.applySelection, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDownHandler, this);\n };\n SelectionBasedExec.prototype.keyDownHandler = function (e) {\n var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',\n 'subscript', 'uppercase', 'lowercase'];\n if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {\n e.event.preventDefault();\n SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement, e.enterAction);\n this.callBack(e, e.event.action);\n }\n };\n SelectionBasedExec.prototype.applySelection = function (e) {\n SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.enterAction, e.value, e.selector);\n this.callBack(e, e.subCommand);\n };\n SelectionBasedExec.prototype.callBack = function (event, action) {\n if (event.callBack) {\n event.callBack({\n requestType: action,\n event: event.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return SelectionBasedExec;\n}());\nexport { SelectionBasedExec };\n","import * as CONSTANT from './../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Selection EXEC internal component\n *\n * @hidden\n\n */\nvar InsertHtmlExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - sepcifies the parent element\n * @hidden\n\n */\n function InsertHtmlExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertHtmlExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);\n };\n InsertHtmlExec.prototype.applyHtml = function (e) {\n InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true);\n if (e.subCommand === 'pasteCleanup') {\n var pastedElements = this.parent.editableElement.querySelectorAll('.pasteContent_RTE');\n var allPastedElements = [].slice.call(pastedElements);\n var imgElements = this.parent.editableElement.querySelectorAll('.pasteContent_Img');\n var allImgElm = [].slice.call(imgElements);\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n elements: allPastedElements,\n imgElem: allImgElm\n });\n }\n else {\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return InsertHtmlExec;\n}());\nexport { InsertHtmlExec };\n","/**\n * `Clear Format` module is used to handle Clear Format.\n */\nimport { closest } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/index';\nimport { NodeCutter } from './nodecutter';\nimport { DOMNode } from './dom-node';\nimport { InsertMethods } from './insert-methods';\nimport { IsFormatted } from './isformatted';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\nvar ClearFormat = /** @class */ (function () {\n function ClearFormat() {\n }\n /**\n * clear method\n *\n * @param {Document} docElement - specifies the document element.\n * @param {Node} endNode - specifies the end node\n * @param {string} enterAction - specifies the enter key action\n * @param {string} selector - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n ClearFormat.clear = function (docElement, endNode, enterAction, selector) {\n this.domNode = new DOMNode(endNode, docElement);\n this.defaultTag = enterAction === 'P' ? this.defaultTag : 'div';\n var nodeSelection = new NodeSelection();\n var nodeCutter = new NodeCutter();\n var range = nodeSelection.getRange(docElement);\n var isCollapsed = range.collapsed;\n var nodes = nodeSelection.getInsertNodeCollection(range);\n var save = nodeSelection.save(range, docElement);\n if (!isCollapsed) {\n var preNode = void 0;\n if (nodes[0].nodeName === 'BR' && closest(nodes[0], 'table')) {\n preNode = nodeCutter.GetSpliceNode(range, closest(nodes[0], 'table'));\n }\n else {\n preNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length > 1 && nodes[0].nodeName === 'IMG' ? 1 : 0]);\n }\n if (nodes.length === 1) {\n nodeSelection.setSelectionContents(docElement, preNode);\n range = nodeSelection.getRange(docElement);\n }\n else {\n var i = 1;\n var lastText = nodes[nodes.length - i];\n while (nodes.length <= i && nodes[nodes.length - i].nodeName === 'BR') {\n i++;\n lastText = nodes[nodes.length - i];\n }\n var lasNode = nodeCutter.GetSpliceNode(range, lastText);\n nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?\n lasNode.textContent.length : lasNode.childNodes.length);\n range = nodeSelection.getRange(docElement);\n }\n var exactNodes = nodeSelection.getNodeCollection(range);\n var cloneSelectNodes = exactNodes.slice();\n this.clearInlines(nodeSelection.getSelectionNodes(cloneSelectNodes), cloneSelectNodes, nodeSelection.getRange(docElement), nodeCutter, endNode);\n this.reSelection(docElement, save, exactNodes);\n range = nodeSelection.getRange(docElement);\n exactNodes = nodeSelection.getNodeCollection(range);\n var cloneParentNodes = exactNodes.slice();\n this.clearBlocks(docElement, cloneParentNodes, endNode, nodeCutter, nodeSelection);\n if (isIDevice()) {\n setEditFrameFocus(endNode, selector);\n }\n this.reSelection(docElement, save, exactNodes);\n }\n };\n ClearFormat.reSelection = function (docElement, save, exactNodes) {\n var selectionNodes = save.getInsertNodes(exactNodes);\n save.startContainer = save.getNodeArray(selectionNodes[0], true, docElement);\n save.startOffset = 0;\n save.endContainer = save.getNodeArray(selectionNodes[selectionNodes.length - 1], false, docElement);\n var endIndexNode = selectionNodes[selectionNodes.length - 1];\n save.endOffset = (endIndexNode.nodeType === 3) ? endIndexNode.textContent.length\n : endIndexNode.childNodes.length;\n save.restore();\n };\n ClearFormat.clearBlocks = function (docElement, nodes, endNode, nodeCutter, nodeSelection) {\n var parentNodes = [];\n for (var index = 0; index < nodes.length; index++) {\n if (this.BLOCK_TAGS.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1\n && parentNodes.indexOf(nodes[index]) === -1) {\n parentNodes.push(nodes[index]);\n }\n else if ((this.BLOCK_TAGS.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1)\n && parentNodes.indexOf(nodes[index].parentNode) === -1\n && endNode !== nodes[index].parentNode) {\n parentNodes.push(nodes[index].parentNode);\n }\n }\n parentNodes = this.spliceParent(parentNodes, nodes)[0];\n parentNodes = this.removeParent(parentNodes);\n this.unWrap(docElement, parentNodes, nodeCutter, nodeSelection);\n };\n ClearFormat.spliceParent = function (parentNodes, nodes) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n var len = parentNodes[index1].childNodes.length;\n for (var index2 = 0; index2 < len; index2++) {\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) > 0)\n && (parentNodes[index1].childNodes[index2].childNodes.length > 0)) {\n nodes = this.spliceParent([parentNodes[index1].childNodes[index2]], nodes)[1];\n }\n if ((nodes.indexOf(parentNodes[index1].childNodes[index2]) <= -1) &&\n (parentNodes[index1].childNodes[index2].textContent.trim() !== '')) {\n for (var index3 = 0; index3 < len; index3++) {\n if (nodes.indexOf(parentNodes[index1].childNodes[index3]) > -1) {\n nodes.splice(nodes.indexOf(parentNodes[index1].childNodes[index3]), 1);\n }\n }\n index2 = parentNodes[index1].childNodes.length;\n var parentIndex = parentNodes.indexOf(parentNodes[index1].parentNode);\n var nodeIndex = nodes.indexOf(parentNodes[index1].parentNode);\n if (parentIndex > -1) {\n parentNodes.splice(parentIndex, 1);\n }\n if (nodeIndex > -1) {\n nodes.splice(nodeIndex, 1);\n }\n var elementIndex = nodes.indexOf(parentNodes[index1]);\n if (elementIndex > -1) {\n nodes.splice(elementIndex, 1);\n }\n parentNodes.splice(index1, 1);\n index1--;\n }\n }\n }\n return [parentNodes, nodes];\n };\n ClearFormat.removeChild = function (parentNodes, parentNode) {\n var count = parentNode.childNodes.length;\n if (count > 0) {\n for (var index = 0; index < count; index++) {\n if (parentNodes.indexOf(parentNode.childNodes[index]) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNode.childNodes[index]);\n parentNodes.splice(parentNodes.indexOf(parentNode.childNodes[index]), 1);\n }\n }\n }\n return parentNodes;\n };\n ClearFormat.removeParent = function (parentNodes) {\n for (var index = 0; index < parentNodes.length; index++) {\n if (parentNodes.indexOf(parentNodes[index].parentNode) > -1) {\n parentNodes = this.removeChild(parentNodes, parentNodes[index]);\n parentNodes.splice(index, 1);\n index--;\n }\n }\n return parentNodes;\n };\n ClearFormat.unWrap = function (docElement, parentNodes, nodeCutter, nodeSelection) {\n for (var index1 = 0; index1 < parentNodes.length; index1++) {\n if (this.NONVALID_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) > -1\n && parentNodes[index1].parentNode\n && this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].parentNode.nodeName.toLowerCase()) > -1) {\n nodeSelection.setSelectionText(docElement, parentNodes[index1], parentNodes[index1], 0, parentNodes[index1].childNodes.length);\n InsertMethods.unwrap(nodeCutter.GetSpliceNode(nodeSelection.getRange(docElement), parentNodes[index1].parentNode));\n }\n if (parentNodes[index1].nodeName.toLocaleLowerCase() !== 'p') {\n if (this.NONVALID_PARENT_TAGS.indexOf(parentNodes[index1].nodeName.toLowerCase()) < 0\n && parentNodes[index1].parentNode.nodeName.toLocaleLowerCase() !== 'p'\n && !((parentNodes[index1].nodeName.toLocaleLowerCase() === 'blockquote'\n || parentNodes[index1].nodeName.toLocaleLowerCase() === 'li')\n && this.IGNORE_PARENT_TAGS.indexOf(parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase()) > -1)\n && !(parentNodes[index1].childNodes.length === 1\n && parentNodes[index1].childNodes[0].nodeName.toLocaleLowerCase() === 'p')) {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n }\n var childNodes = InsertMethods.unwrap(parentNodes[index1]);\n if (childNodes.length === 1\n && childNodes[0].parentNode.nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n for (var index2 = 0; index2 < childNodes.length; index2++) {\n if (this.NONVALID_TAGS.indexOf(childNodes[index2].nodeName.toLowerCase()) > -1) {\n this.unWrap(docElement, [childNodes[index2]], nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() !== 'p') {\n var blockNodes = this.removeParent([childNodes[index2]]);\n this.unWrap(docElement, blockNodes, nodeCutter, nodeSelection);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].parentNode.nodeName.toLocaleLowerCase() === childNodes[index2].nodeName.toLocaleLowerCase()) {\n InsertMethods.unwrap(childNodes[index2]);\n }\n else if (this.BLOCK_TAGS.indexOf(childNodes[index2].nodeName.toLocaleLowerCase()) > -1 &&\n childNodes[index2].nodeName.toLocaleLowerCase() === 'p') {\n InsertMethods.Wrap(childNodes[index2], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(childNodes[index2]);\n }\n }\n }\n else {\n InsertMethods.Wrap(parentNodes[index1], docElement.createElement(this.defaultTag));\n InsertMethods.unwrap(parentNodes[index1]);\n }\n }\n };\n ClearFormat.clearInlines = function (textNodes, nodes, range, nodeCutter, \n // eslint-disable-next-line\n endNode) {\n for (var index = 0; index < textNodes.length; index++) {\n var currentInlineNode = textNodes[index];\n var currentNode = void 0;\n while (!this.domNode.isBlockNode(currentInlineNode)) {\n currentNode = currentInlineNode;\n currentInlineNode = currentInlineNode.parentElement;\n }\n if (currentNode &&\n IsFormatted.inlineTags.indexOf(currentNode.nodeName.toLocaleLowerCase()) > -1) {\n nodeCutter.GetSpliceNode(range, currentNode);\n this.removeInlineParent(currentNode);\n }\n }\n };\n ClearFormat.removeInlineParent = function (textNodes) {\n var nodes = InsertMethods.unwrap(textNodes);\n for (var index = 0; index < nodes.length; index++) {\n if (nodes[index].parentNode.childNodes.length === 1\n && IsFormatted.inlineTags.indexOf(nodes[index].parentNode.nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index].parentNode);\n }\n else if (IsFormatted.inlineTags.indexOf(nodes[index].nodeName.toLocaleLowerCase()) > -1) {\n this.removeInlineParent(nodes[index]);\n }\n }\n };\n ClearFormat.BLOCK_TAGS = ['address', 'article', 'aside', 'blockquote',\n 'details', 'dd', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer',\n 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'li', 'main', 'nav',\n 'noscript', 'ol', 'p', 'pre', 'section', 'ul'];\n ClearFormat.NONVALID_PARENT_TAGS = ['thead', 'tbody', 'ul', 'ol', 'table', 'tfoot', 'tr'];\n ClearFormat.IGNORE_PARENT_TAGS = ['ul', 'ol', 'table'];\n ClearFormat.NONVALID_TAGS = ['thead', 'tbody', 'figcaption', 'td', 'tr', 'th', 'tfoot', 'figcaption', 'li'];\n ClearFormat.defaultTag = 'p';\n return ClearFormat;\n}());\nexport { ClearFormat };\n","import * as CONSTANT from './../base/constant';\nimport { ClearFormat } from './clearformat';\nimport * as EVENTS from './../../common/constant';\n/**\n * Clear Format EXEC internal component\n *\n * @hidden\n\n */\nvar ClearFormatExec = /** @class */ (function () {\n /**\n * Constructor for creating the Formats plugin\n *\n * @param {EditorManager} parent - specifies the parent element.\n * @returns {void}\n * @hidden\n\n */\n function ClearFormatExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n ClearFormatExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.CLEAR_TYPE, this.applyClear, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.onKeyDown, this);\n };\n ClearFormatExec.prototype.onKeyDown = function (e) {\n switch (e.event.action) {\n case 'clear-format':\n this.applyClear({ subCommand: 'ClearFormat', callBack: e.callBack, enterAction: e.enterAction });\n e.event.preventDefault();\n break;\n }\n };\n ClearFormatExec.prototype.applyClear = function (e) {\n if (e.subCommand === 'ClearFormat') {\n ClearFormat.clear(this.parent.currentDocument, this.parent.editableElement, e.enterAction, e.selector);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n event: e.event,\n editorMode: 'HTML',\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n }\n };\n return ClearFormatExec;\n}());\nexport { ClearFormatExec };\n","import { debounce, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { NodeSelection } from './../../selection/selection';\nimport * as EVENTS from './../../common/constant';\nimport { isIDevice, setEditFrameFocus } from '../../common/util';\n/**\n * `Undo` module is used to handle undo actions.\n */\nvar UndoRedoManager = /** @class */ (function () {\n function UndoRedoManager(parent, options) {\n this.undoRedoStack = [];\n this.parent = parent;\n this.undoRedoSteps = !isNullOrUndefined(options) ? options.undoRedoSteps : 30;\n this.undoRedoTimer = !isNullOrUndefined(options) ? options.undoRedoTimer : 300;\n this.addEventListener();\n }\n UndoRedoManager.prototype.addEventListener = function () {\n var debounceListener = debounce(this.keyUp, this.undoRedoTimer);\n this.parent.observer.on(EVENTS.KEY_UP_HANDLER, debounceListener, this);\n this.parent.observer.on(EVENTS.KEY_DOWN_HANDLER, this.keyDown, this);\n this.parent.observer.on(EVENTS.ACTION, this.onAction, this);\n this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);\n };\n UndoRedoManager.prototype.onPropertyChanged = function (props) {\n for (var _i = 0, _a = Object.keys(props.newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'undoRedoSteps':\n this.undoRedoSteps = props.newProp.undoRedoSteps;\n break;\n case 'undoRedoTimer':\n this.undoRedoTimer = props.newProp.undoRedoTimer;\n break;\n }\n }\n };\n UndoRedoManager.prototype.removeEventListener = function () {\n this.parent.observer.off(EVENTS.KEY_UP_HANDLER, this.keyUp);\n this.parent.observer.off(EVENTS.KEY_DOWN_HANDLER, this.keyDown);\n this.parent.observer.off(EVENTS.ACTION, this.onAction);\n };\n /**\n * onAction method\n *\n * @param {IHtmlSubCommands} e - specifies the sub command\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.onAction = function (e) {\n if (e.subCommand === 'Undo') {\n this.undo(e);\n }\n else {\n this.redo(e);\n }\n };\n /**\n * Destroys the ToolBar.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.destroy = function () {\n this.removeEventListener();\n };\n UndoRedoManager.prototype.keyDown = function (e) {\n var event = e.event;\n // eslint-disable-next-line\n var proxy = this;\n switch (event.action) {\n case 'undo':\n event.preventDefault();\n proxy.undo(e);\n break;\n case 'redo':\n event.preventDefault();\n proxy.redo(e);\n break;\n }\n };\n UndoRedoManager.prototype.keyUp = function (e) {\n if (e.event.keyCode !== 17 && !e.event.ctrlKey) {\n this.saveData(e);\n }\n };\n /**\n * RTE collection stored html format.\n *\n * @function saveData\n * @param {KeyboardEvent} e - specifies the keyboard event\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.saveData = function (e) {\n var range = new NodeSelection().getRange(this.parent.currentDocument);\n var currentContainer = range.startContainer;\n for (var i = currentContainer.childNodes.length - 1; i >= 0; i--) {\n if (!isNullOrUndefined(currentContainer.childNodes[i]) && currentContainer.childNodes[i].nodeName === '#text' &&\n currentContainer.childNodes[i].textContent.length === 0 && currentContainer.childNodes[i].nodeName !== 'IMG' &&\n currentContainer.childNodes[i].nodeName !== 'BR' && currentContainer.childNodes[i].nodeName && 'HR') {\n detach(currentContainer.childNodes[i]);\n }\n }\n range = new NodeSelection().getRange(this.parent.currentDocument);\n var save = new NodeSelection().save(range, this.parent.currentDocument);\n var htmlText = this.parent.editableElement.innerHTML;\n var changEle = { text: htmlText, range: save };\n if (this.undoRedoStack.length >= this.steps) {\n this.undoRedoStack = this.undoRedoStack.slice(0, this.steps + 1);\n }\n if (this.undoRedoStack.length > 1 && (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.collapsed === range.collapsed)\n && (this.undoRedoStack[this.undoRedoStack.length - 1].range.startOffset === save.range.startOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&\n (this.undoRedoStack[this.undoRedoStack.length - 1].text.trim() === changEle.text.trim())) {\n return;\n }\n this.undoRedoStack.push(changEle);\n this.steps = this.undoRedoStack.length - 1;\n if (this.steps > this.undoRedoSteps) {\n this.undoRedoStack.shift();\n this.steps--;\n }\n if (e && e.callBack) {\n e.callBack();\n }\n };\n /**\n * Undo the editable text.\n *\n * @function undo\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.undo = function (e) {\n if (this.steps > 0) {\n var range = this.undoRedoStack[this.steps - 1].range;\n var removedContent = this.undoRedoStack[this.steps - 1].text;\n this.parent.editableElement.innerHTML = removedContent;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps--;\n if (e.callBack) {\n e.callBack({\n requestType: 'Undo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * Redo the editable text.\n *\n * @param {IHtmlSubCommands} e - specifies the sub commands\n * @function redo\n * @returns {void}\n * @hidden\n\n */\n UndoRedoManager.prototype.redo = function (e) {\n if (this.undoRedoStack[this.steps + 1] != null) {\n var range = this.undoRedoStack[this.steps + 1].range;\n this.parent.editableElement.innerHTML = this.undoRedoStack[this.steps + 1].text;\n this.parent.editableElement.focus();\n if (isIDevice()) {\n setEditFrameFocus(this.parent.editableElement, e.selector);\n }\n range.restore();\n this.steps++;\n if (e.callBack) {\n e.callBack({\n requestType: 'Redo',\n editorMode: 'HTML',\n range: range,\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument),\n event: e.event\n });\n }\n }\n };\n /**\n * getUndoStatus method\n *\n * @returns {boolean} - returns the boolean value\n * @hidden\n\n */\n UndoRedoManager.prototype.getUndoStatus = function () {\n var status = { undo: false, redo: false };\n if (this.steps > 0) {\n status.undo = true;\n }\n if (this.undoRedoStack[this.steps + 1] != null) {\n status.redo = true;\n }\n return status;\n };\n return UndoRedoManager;\n}());\nexport { UndoRedoManager };\n","import * as EVENTS from '../../common/constant';\nimport { createElement, isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';\n/**\n * PasteCleanup for MsWord content\n *\n * @hidden\n\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 = !isNOU(e.allowedStylePropertiesArray) ? 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(/]+>/i, '');\n this.addListClass(elm);\n listNodes = this.cleanUp(elm, listNodes);\n if (!isNOU(listNodes[0]) && listNodes[0].parentElement.tagName !== 'UL' &&\n listNodes[0].parentElement.tagName !== 'OL') {\n this.listConverter(listNodes);\n }\n this.styleCorrection(elm, wordPasteStyleConfig);\n this.removingComments(elm);\n this.removeUnwantedElements(elm);\n this.removeEmptyElements(elm);\n this.breakLineAddition(elm);\n this.removeClassName(elm);\n if (pattern4.test(tempHTMLContent)) {\n this.addTableBorderClass(elm);\n }\n e.callBack(elm.innerHTML);\n }\n else {\n e.callBack(elm.innerHTML);\n }\n };\n MsWordPaste.prototype.addListClass = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (!isNOU(allNodes[index].getAttribute('style')) && allNodes[index].getAttribute('style').replace(/ /g, '').replace('\\n', '').indexOf('mso-list:l') >= 0 &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') === -1 && allNodes[index].tagName.charAt(0) !== 'H') {\n allNodes[index].classList.add('msolistparagraph');\n }\n }\n };\n MsWordPaste.prototype.addTableBorderClass = function (elm) {\n var allTableElm = elm.querySelectorAll('table');\n var hasTableBorder = false;\n for (var i = 0; i < allTableElm.length; i++) {\n for (var j = 0; j < this.borderStyle.length; j++) {\n if (allTableElm[i].innerHTML.indexOf(this.borderStyle[j]) >= 0) {\n hasTableBorder = true;\n break;\n }\n }\n if (hasTableBorder) {\n allTableElm[i].classList.add('e-rte-table-border');\n hasTableBorder = false;\n }\n }\n };\n MsWordPaste.prototype.imageConversion = function (elm, rtfData) {\n this.checkVShape(elm);\n var imgElem = elm.querySelectorAll('img');\n var imgSrc = [];\n var base64Src = [];\n var imgName = [];\n // eslint-disable-next-line\n var linkRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (imgElem.length > 0) {\n for (var i = 0; i < imgElem.length; i++) {\n imgSrc.push(imgElem[i].getAttribute('src'));\n imgName.push(imgElem[i].getAttribute('src').split('/')[imgElem[i].getAttribute('src').split('/').length - 1].split('.')[0]);\n }\n var hexValue = this.hexConversion(rtfData);\n for (var i = 0; i < hexValue.length; i++) {\n base64Src.push(this.convertToBase64(hexValue[i]));\n }\n for (var i = 0; i < imgElem.length; i++) {\n if (imgSrc[i].match(linkRegex)) {\n imgElem[i].setAttribute('src', imgSrc[i]);\n }\n else {\n imgElem[i].setAttribute('src', base64Src[i]);\n }\n imgElem[i].setAttribute('id', 'msWordImg-' + imgName[i]);\n }\n }\n };\n MsWordPaste.prototype.checkVShape = function (elm) {\n var allNodes = elm.querySelectorAll('*');\n for (var i = 0; i < allNodes.length; i++) {\n switch (allNodes[i].nodeName) {\n case 'V:SHAPETYPE':\n detach(allNodes[i]);\n break;\n case 'V:SHAPE':\n if (allNodes[i].firstElementChild.nodeName === 'V:IMAGEDATA') {\n var src = allNodes[i].firstElementChild.getAttribute('src');\n var imgElement = createElement('img');\n imgElement.setAttribute('src', src);\n allNodes[i].parentElement.insertBefore(imgElement, allNodes[i]);\n detach(allNodes[i]);\n }\n break;\n }\n }\n };\n MsWordPaste.prototype.convertToBase64 = function (hexValue) {\n var byteArr = this.conHexStringToBytes(hexValue.hex);\n var base64String = this.conBytesToBase64(byteArr);\n var base64 = hexValue.type ? 'data:' + hexValue.type + ';base64,' + base64String : null;\n return base64;\n };\n MsWordPaste.prototype.conBytesToBase64 = function (byteArr) {\n var base64Str = '';\n var base64Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n var byteArrLen = byteArr.length;\n for (var i = 0; i < byteArrLen; i += 3) {\n var array3 = byteArr.slice(i, i + 3);\n var array3length = array3.length;\n var array4 = [];\n if (array3length < 3) {\n for (var j = array3length; j < 3; j++) {\n array3[j] = 0;\n }\n }\n array4[0] = (array3[0] & 0xFC) >> 2;\n array4[1] = ((array3[0] & 0x03) << 4) | (array3[1] >> 4);\n array4[2] = ((array3[1] & 0x0F) << 2) | ((array3[2] & 0xC0) >> 6);\n array4[3] = array3[2] & 0x3F;\n for (var j = 0; j < 4; j++) {\n if (j <= array3length) {\n base64Str += base64Char.charAt(array4[j]);\n }\n else {\n base64Str += '=';\n }\n }\n }\n return base64Str;\n };\n MsWordPaste.prototype.conHexStringToBytes = function (hex) {\n var byteArr = [];\n var byteArrLen = hex.length / 2;\n for (var i = 0; i < byteArrLen; i++) {\n byteArr.push(parseInt(hex.substr(i * 2, 2), 16));\n }\n return byteArr;\n };\n MsWordPaste.prototype.hexConversion = function (rtfData) {\n // eslint-disable-next-line\n var picHead = /\\{\\\\pict[\\s\\S]+?\\\\bliptag\\-?\\d+(\\\\blipupi\\-?\\d+)?(\\{\\\\\\*\\\\blipuid\\s?[\\da-fA-F]+)?[\\s\\}]*?/;\n var pic = new RegExp('(?:(' + picHead.source + '))([\\\\da-fA-F\\\\s]+)\\\\}', 'g');\n var fullImg = rtfData.match(pic);\n var imgType;\n var result = [];\n if (!isNOU(fullImg)) {\n for (var i = 0; i < fullImg.length; i++) {\n if (picHead.test(fullImg[i])) {\n if (fullImg[i].indexOf('\\\\pngblip') !== -1) {\n imgType = 'image/png';\n }\n else if (fullImg[i].indexOf('\\\\jpegblip') !== -1) {\n imgType = 'image/jpeg';\n }\n else {\n continue;\n }\n result.push({\n hex: imgType ? fullImg[i].replace(picHead, '').replace(/[^\\da-fA-F]/g, '') : null,\n type: imgType\n });\n }\n }\n }\n return result;\n };\n MsWordPaste.prototype.removeClassName = function (elm) {\n var elmWithClass = elm.querySelectorAll('*[class]');\n for (var i = 0; i < elmWithClass.length; i++) {\n elmWithClass[i].removeAttribute('class');\n }\n };\n MsWordPaste.prototype.breakLineAddition = function (elm) {\n var allElements = elm.querySelectorAll('*');\n for (var i = 0; i < allElements.length; i++) {\n if (allElements[i].children.length === 0 && allElements[i].innerHTML === ' ' &&\n (allElements[i].innerHTML === ' ' && !allElements[i].closest('li')) &&\n !allElements[i].closest('td')) {\n var detachableElement = this.findDetachElem(allElements[i]);\n var brElement = createElement('br');\n if (!isNOU(detachableElement.parentElement)) {\n detachableElement.parentElement.insertBefore(brElement, detachableElement);\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.findDetachElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement) &&\n element.parentElement.textContent.trim() === '' && element.parentElement.tagName !== 'TD' &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n return removableElement;\n };\n MsWordPaste.prototype.removeUnwantedElements = function (elm) {\n var innerElement = elm.innerHTML;\n for (var i = 0; i < this.removableElements.length; i++) {\n var regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');\n var regExpEndElem = new RegExp('', 'g');\n innerElement = innerElement.replace(regExpStartElem, '');\n innerElement = innerElement.replace(regExpEndElem, '');\n }\n elm.innerHTML = innerElement;\n elm.querySelectorAll(':empty');\n };\n MsWordPaste.prototype.findDetachEmptyElem = function (element) {\n var removableElement;\n if (!isNOU(element.parentElement)) {\n if (element.parentElement.textContent.trim() === '' &&\n element.parentElement.getAttribute('id') !== 'MSWord-Content' &&\n isNOU(element.parentElement.querySelector('img'))) {\n removableElement = this.findDetachEmptyElem(element.parentElement);\n }\n else {\n removableElement = element;\n }\n }\n else {\n removableElement = null;\n }\n return removableElement;\n };\n MsWordPaste.prototype.removeEmptyElements = function (element) {\n var emptyElements = element.querySelectorAll(':empty');\n for (var i = 0; i < emptyElements.length; i++) {\n if (!isNOU(emptyElements[i].closest('td')) &&\n !isNOU(emptyElements[i].closest('td').querySelector('.MsoNormal'))) {\n emptyElements[i].innerHTML = '-';\n }\n if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&\n emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&\n emptyElements[i].tagName !== 'HR') {\n var detachableElement = this.findDetachEmptyElem(emptyElements[i]);\n if (!isNOU(detachableElement)) {\n detach(detachableElement);\n }\n }\n }\n };\n MsWordPaste.prototype.styleCorrection = function (elm, wordPasteStyleConfig) {\n var styleElement = elm.querySelectorAll('style');\n if (styleElement.length > 0) {\n var styles = styleElement[0].innerHTML.match(/[\\S ]+\\s+{[\\s\\S]+?}/gi);\n var styleClassObject_1 = !isNOU(styles) ? this.findStyleObject(styles) : null;\n var keys = Object.keys(styleClassObject_1);\n var values = keys.map(function (key) {\n return styleClassObject_1[key];\n });\n values = this.removeUnwantedStyle(values, wordPasteStyleConfig);\n this.filterStyles(elm, wordPasteStyleConfig);\n var resultElem = void 0;\n var fromClass = false;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i].split('.')[0] === '') {\n resultElem = elm.getElementsByClassName(keys[i].split('.')[1]);\n fromClass = true;\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') >= 0) {\n continue;\n }\n else if (keys[i].split('.').length === 1 && keys[i].split('.')[0].indexOf('@') < 0) {\n resultElem = elm.getElementsByTagName(keys[i]);\n }\n else {\n resultElem = elm.querySelectorAll(keys[i]);\n }\n for (var j = 0; j < resultElem.length; j++) {\n var styleProperty = resultElem[j].getAttribute('style');\n if (!isNOU(styleProperty) && styleProperty.trim() !== '') {\n var valueSplit = values[i].split(';');\n if (!fromClass) {\n for (var k = 0; k < valueSplit.length; k++) {\n if (styleProperty.indexOf(valueSplit[k].split(':')[0]) >= 0) {\n valueSplit.splice(k, 1);\n k--;\n }\n }\n }\n values[i] = valueSplit.join(';') + ';';\n var changedValue = styleProperty + values[i];\n resultElem[j].setAttribute('style', changedValue);\n }\n else {\n values[i] = values[i].replace(/text-indent:-(.*?)(?=;|$)/gm, '');\n resultElem[j].setAttribute('style', values[i]);\n }\n }\n fromClass = false;\n }\n }\n };\n MsWordPaste.prototype.filterStyles = function (elm, wordPasteStyleConfig) {\n var elmWithStyles = elm.querySelectorAll('*[style]');\n for (var i = 0; i < elmWithStyles.length; i++) {\n var elemStyleProperty = elmWithStyles[i].getAttribute('style').split(';');\n var styleValue = '';\n for (var j = 0; j < elemStyleProperty.length; j++) {\n if (wordPasteStyleConfig.indexOf(elemStyleProperty[j].split(':')[0].trim()) >= 0) {\n styleValue += elemStyleProperty[j] + ';';\n }\n }\n elmWithStyles[i].setAttribute('style', styleValue);\n }\n };\n MsWordPaste.prototype.removeUnwantedStyle = function (values, wordPasteStyleConfig) {\n for (var i = 0; i < values.length; i++) {\n var styleValues = values[i].split(';');\n values[i] = '';\n for (var j = 0; j < styleValues.length; j++) {\n if (wordPasteStyleConfig.indexOf(styleValues[j].split(':')[0]) >= 0) {\n values[i] += styleValues[j] + ';';\n }\n }\n }\n return values;\n };\n MsWordPaste.prototype.findStyleObject = function (styles) {\n var styleClassObject = {};\n for (var i = 0; i < styles.length; i++) {\n var tempStyle = styles[i];\n var classNameCollection = tempStyle.replace(/([\\S ]+\\s+){[\\s\\S]+?}/gi, '$1');\n var stylesCollection = tempStyle.replace(/[\\S ]+\\s+{([\\s\\S]+?)}/gi, '$1');\n classNameCollection = classNameCollection.replace(/^[\\s]|[\\s]$/gm, '');\n stylesCollection = stylesCollection.replace(/^[\\s]|[\\s]$/gm, '');\n classNameCollection = classNameCollection.replace(/\\n|\\r|\\n\\r/g, '');\n stylesCollection = stylesCollection.replace(/\\n|\\r|\\n\\r/g, '');\n for (var classNames = classNameCollection.split(', '), j = 0; j < classNames.length; j++) {\n styleClassObject[classNames[j]] = stylesCollection;\n }\n }\n return styleClassObject;\n };\n MsWordPaste.prototype.removingComments = function (elm) {\n var innerElement = elm.innerHTML;\n innerElement = innerElement.replace(//g, '');\n elm.innerHTML = innerElement;\n };\n MsWordPaste.prototype.cleanUp = function (node, listNodes) {\n // eslint-disable-next-line\n var temp = '';\n var tempCleaner = [];\n var prevflagState;\n var allNodes = node.querySelectorAll('*');\n for (var index = 0; index < allNodes.length; index++) {\n if (this.ignorableNodes.indexOf(allNodes[index].nodeName) === -1 ||\n (allNodes[index].nodeType === 3 && allNodes[index].textContent.trim() === '')) {\n tempCleaner.push(allNodes[index]);\n continue;\n }\n else if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 &&\n allNodes[index].childElementCount !== 1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\n if (allNodes[index].className.indexOf('MsoListParagraphCxSpFirst') >= 0 && listNodes.length > 0 &&\n listNodes[listNodes.length - 1] !== null) {\n listNodes.push(null);\n }\n listNodes.push(allNodes[index]);\n }\n if (prevflagState && (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) &&\n !(allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0)) {\n listNodes.push(null);\n }\n if (this.blockNode.indexOf(allNodes[index].nodeName.toLowerCase()) !== -1) {\n if (allNodes[index].className &&\n allNodes[index].className.toLowerCase().indexOf('msolistparagraph') !== -1 && !isNOU(allNodes[index].getAttribute('style')) &&\n allNodes[index].getAttribute('style').indexOf('mso-list:') >= 0) {\n prevflagState = true;\n }\n else {\n prevflagState = false;\n }\n }\n }\n if (listNodes.length && (listNodes[listNodes.length - 1] !== null)) {\n listNodes.push(null);\n }\n return listNodes;\n };\n MsWordPaste.prototype.listConverter = function (listNodes) {\n var level;\n var data = [];\n var collection = [];\n var content = '';\n var stNode;\n var currentListStyle = '';\n for (var i = 0; i < listNodes.length; i++) {\n if (listNodes[i] === null) {\n data.push({ content: this.makeConversion(collection), node: listNodes[i - 1] });\n collection = [];\n continue;\n }\n if (listNodes[i].getAttribute('style') && listNodes[i].getAttribute('style').indexOf('mso-outline-level') !== -1) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('mso-outline-level', 'mso-outline'));\n }\n content = listNodes[i].getAttribute('style');\n if (content && content.indexOf('level') !== -1) {\n // eslint-disable-next-line\n level = parseInt(content.charAt(content.indexOf('level') + 5), null);\n }\n else {\n level = 1;\n }\n this.listContents = [];\n this.getListContent(listNodes[i]);\n var type = void 0;\n var listStyleType = void 0;\n if (!isNOU(this.listContents[0])) {\n type = this.listContents[0].trim().length > 1 ? 'ol' : 'ul';\n listStyleType = this.getlistStyleType(this.listContents[0], type);\n var tempNode = [];\n for (var j = 1; j < this.listContents.length; j++) {\n tempNode.push(this.listContents[j]);\n }\n var currentClassName = void 0;\n if (!isNOU(listNodes[i].className)) {\n currentClassName = listNodes[i].className;\n }\n if (!isNOU(listNodes[i].getAttribute('style'))) {\n listNodes[i].setAttribute('style', listNodes[i].getAttribute('style').replace('text-align:start;', ''));\n if (listNodes[i].style.textAlign !== '') {\n listNodes[i].setAttribute('style', 'text-align:' + listNodes[i].style.textAlign);\n currentListStyle = listNodes[i].getAttribute('style');\n }\n }\n collection.push({ listType: type, content: tempNode, nestedLevel: level, class: currentClassName,\n listStyle: currentListStyle, listStyleTypeName: listStyleType });\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.getlistStyleType = function (listContent, type) {\n var currentListClass;\n if (type === 'ol') {\n switch (listContent.split('.')[0]) {\n case \"A\":\n currentListClass = \"upper-alpha\";\n break;\n case \"a\":\n currentListClass = \"lower-alpha\";\n break;\n case \"I\":\n currentListClass = \"upper-roman\";\n break;\n case \"i\":\n currentListClass = \"lower-roman\";\n break;\n case \"α\":\n currentListClass = \"lower-greek\";\n break;\n default:\n currentListClass = \"decimal\";\n break;\n }\n }\n else {\n switch (listContent.split('.')[0]) {\n case \"o\":\n currentListClass = \"circle\";\n break;\n case \"§\":\n currentListClass = \"square\";\n break;\n default:\n currentListClass = \"disc\";\n break;\n }\n }\n return currentListClass;\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.listStyleType = collection[index].listStyleTypeName;\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 temp.style.listStyleType = collection[index].listStyleTypeName;\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');\n if (j != collection[index].nestedLevel - pLevel - 1 && collection[index].nestedLevel - pLevel > 1) {\n prevList.style.listStyleType = \"none\";\n }\n temp.appendChild(prevList);\n }\n prevList.appendChild(pElement);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\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.listStyleType = collection[index].listStyleTypeName;\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 temp.style.listStyleType = collection[index].listStyleTypeName;\n }\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n }\n else {\n elem = prevList;\n while (elem.parentElement) {\n elem = elem.parentElement;\n if (elem.attributes.getNamedItem('level')) {\n // eslint-disable-next-line\n if (parseInt(elem.attributes.getNamedItem('level').textContent, null) === collection[index].nestedLevel) {\n prevList = createElement('li');\n prevList.appendChild(pElement);\n elem.appendChild(prevList);\n break;\n // eslint-disable-next-line\n }\n else if (collection[index].nestedLevel > parseInt(elem.attributes.getNamedItem('level').textContent, null)) {\n elem.appendChild(temp = createElement(collection[index].listType));\n prevList = createElement('li');\n prevList.appendChild(pElement);\n temp.appendChild(prevList);\n temp.setAttribute('level', collection[index].nestedLevel.toString());\n temp.style.listStyleType = collection[index].listStyleTypeName;\n break;\n }\n }\n continue;\n }\n }\n prevList.setAttribute('class', collection[index].class);\n var currentStyle = prevList.getAttribute('style');\n prevList.setAttribute('style', (!isNOU(currentStyle) ? currentStyle : ''));\n pLevel = collection[index].nestedLevel;\n listCount++;\n }\n return root;\n };\n MsWordPaste.prototype.getListContent = function (elem) {\n var pushContent = '';\n var firstChild = elem.firstElementChild;\n if (firstChild.textContent.trim() === '' && !isNOU(firstChild.firstElementChild) &&\n firstChild.firstElementChild.nodeName === 'IMG') {\n pushContent = elem.innerHTML.trim();\n this.listContents.push('');\n this.listContents.push(pushContent);\n }\n else {\n var styleNodes = ['b', 'em'];\n if (firstChild.childNodes.length > 0 && (firstChild.querySelectorAll('b').length > 0\n || firstChild.querySelectorAll('em').length > 0)) {\n for (var i = 0; i < firstChild.childNodes.length; i++) {\n var nodeName = firstChild.childNodes[i].nodeName.toLowerCase();\n if (firstChild.childNodes[i].textContent.trim().length > 1 && styleNodes.indexOf(nodeName) !== -1) {\n pushContent = '<' + nodeName + '>' + firstChild.childNodes[i].textContent + '';\n this.listContents.push(pushContent);\n }\n else if (firstChild.childNodes[i].textContent.trim().length === 1) {\n this.listContents.push(firstChild.childNodes[i].textContent.trim());\n }\n }\n }\n else {\n pushContent = firstChild.textContent.trim();\n this.listContents.push(pushContent);\n }\n }\n detach(firstChild);\n this.listContents.push(elem.innerHTML);\n };\n return MsWordPaste;\n}());\nexport { MsWordPaste };\n","import * as CONSTANT from '../base/constant';\nimport { InsertHtml } from './inserthtml';\n/**\n * Insert a Text Node or Text\n *\n * @hidden\n\n */\nvar InsertTextExec = /** @class */ (function () {\n /**\n * Constructor for creating the InsertText plugin\n *\n * @param {EditorManager} parent - specifies the parent element\n * @hidden\n\n */\n function InsertTextExec(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n InsertTextExec.prototype.addEventListener = function () {\n this.parent.observer.on(CONSTANT.INSERT_TEXT_TYPE, this.insertText, this);\n };\n InsertTextExec.prototype.insertText = function (e) {\n var node = document.createTextNode(e.value);\n InsertHtml.Insert(this.parent.currentDocument, node);\n if (e.callBack) {\n e.callBack({\n requestType: e.subCommand,\n editorMode: 'HTML',\n event: e.event,\n range: this.parent.nodeSelection.getRange(this.parent.currentDocument),\n elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)\n });\n }\n };\n return InsertTextExec;\n}());\nexport { InsertTextExec };\n","import { Observer } from '@syncfusion/ej2-base';\nimport * as CONSTANT from './constant';\nimport { Lists } from './../plugin/lists';\nimport { NodeSelection } from './../../selection/index';\nimport { DOMNode } from './../plugin/dom-node';\nimport { Formats } from './../plugin/formats';\nimport { LinkCommand } from './../plugin/link';\nimport { Alignments } from './../plugin/alignments';\nimport { Indents } from './../plugin/indents';\nimport { ImageCommand } from './../plugin/image';\nimport { TableCommand } from './../plugin/table';\nimport { SelectionBasedExec } from './../plugin/selection-exec';\nimport { InsertHtmlExec } from './../plugin/inserthtml-exec';\nimport { ClearFormatExec } from './../plugin/clearformat-exec';\nimport { UndoRedoManager } from './../plugin/undo';\nimport { MsWordPaste } from '../plugin/ms-word-clean-up';\nimport * as EVENTS from './../../common/constant';\nimport { InsertTextExec } from '../plugin/insert-text';\nimport { NodeCutter } from '../plugin/nodecutter';\n/**\n * EditorManager internal component\n *\n * @hidden\n\n */\nvar EditorManager = /** @class */ (function () {\n /**\n * Constructor for creating the component\n *\n * @hidden\n\n * @param {ICommandModel} options - specifies the command Model\n */\n function EditorManager(options) {\n this.currentDocument = options.document;\n this.editableElement = options.editableElement;\n this.nodeSelection = new NodeSelection();\n this.nodeCutter = new NodeCutter();\n this.domNode = new DOMNode(this.editableElement, this.currentDocument);\n this.observer = new Observer(this);\n this.listObj = new Lists(this);\n this.formatObj = new Formats(this);\n this.alignmentObj = new Alignments(this);\n this.indentsObj = new Indents(this);\n this.linkObj = new LinkCommand(this);\n this.imgObj = new ImageCommand(this);\n this.selectionObj = new SelectionBasedExec(this);\n this.inserthtmlObj = new InsertHtmlExec(this);\n this.insertTextObj = new InsertTextExec(this);\n this.clearObj = new ClearFormatExec(this);\n this.tableObj = new TableCommand(this);\n this.undoRedoManager = new UndoRedoManager(this, options.options);\n this.msWordPaste = new MsWordPaste(this);\n this.wireEvents();\n }\n EditorManager.prototype.wireEvents = function () {\n this.observer.on(EVENTS.KEY_DOWN, this.editorKeyDown, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.KEY_UP, this.editorKeyUp, this);\n this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);\n this.observer.on(EVENTS.MS_WORD_CLEANUP, this.onWordPaste, this);\n this.observer.on(EVENTS.ON_BEGIN, this.onBegin, this);\n };\n EditorManager.prototype.onWordPaste = function (e) {\n this.observer.notify(EVENTS.MS_WORD_CLEANUP_PLUGIN, e);\n };\n EditorManager.prototype.onPropertyChanged = function (props) {\n this.observer.notify(EVENTS.MODEL_CHANGED_PLUGIN, props);\n };\n EditorManager.prototype.editorKeyDown = function (e) {\n this.observer.notify(EVENTS.KEY_DOWN_HANDLER, e);\n };\n EditorManager.prototype.editorKeyUp = function (e) {\n this.observer.notify(EVENTS.KEY_UP_HANDLER, e);\n };\n EditorManager.prototype.onBegin = function (e) {\n this.observer.notify(EVENTS.SPACE_ACTION, e);\n };\n /* eslint-disable */\n /**\n * execCommand\n *\n * @param {ExecCommand} command - specifies the execution command\n * @param {T} value - specifes the value.\n * @param {Event} event - specifies the call back event\n * @param {Function} callBack - specifies the function\n * @param {string} text - specifies the string value\n * @param {T} exeValue - specifies the values to be executed\n * @param {string} selector - specifies the selector values\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n EditorManager.prototype.execCommand = function (command, value, event, callBack, text, exeValue, selector, enterAction) {\n switch (command.toLowerCase()) {\n case 'lists':\n this.observer.notify(EVENTS.LIST_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, item: exeValue, enterAction: enterAction });\n break;\n case 'formats':\n this.observer.notify(EVENTS.FORMAT_TYPE, { subCommand: value, event: event, callBack: callBack,\n selector: selector, exeValue: exeValue, enterAction: enterAction\n });\n break;\n case 'alignments':\n this.observer.notify(CONSTANT.ALIGNMENT_TYPE, {\n subCommand: value, event: event, callBack: callBack,\n selector: selector,\n value: exeValue\n });\n break;\n case 'indents':\n this.observer.notify(CONSTANT.INDENT_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n case 'links':\n this.observer.notify(CONSTANT.LINK, { command: command, value: value, item: exeValue, event: event, callBack: callBack });\n break;\n case 'files':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: 'Image', item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'images':\n this.observer.notify(CONSTANT.IMAGE, {\n command: command, value: value, item: exeValue, event: event, callBack: callBack, selector: selector\n });\n break;\n case 'table':\n switch (value.toString().toLocaleLowerCase()) {\n case 'createtable':\n this.observer.notify(CONSTANT.TABLE, { item: exeValue, event: event, callBack: callBack, enterAction: enterAction });\n break;\n case 'insertrowbefore':\n case 'insertrowafter':\n this.observer.notify(CONSTANT.INSERT_ROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'insertcolumnleft':\n case 'insertcolumnright':\n this.observer.notify(CONSTANT.INSERT_COLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deleterow':\n this.observer.notify(CONSTANT.DELETEROW, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'deletecolumn':\n this.observer.notify(CONSTANT.DELETECOLUMN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableremove':\n this.observer.notify(CONSTANT.REMOVETABLE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'tableheader':\n this.observer.notify(CONSTANT.TABLEHEADER, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'aligntop':\n case 'alignmiddle':\n case 'alignbottom':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_ALIGN, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'merge':\n this.observer.notify(CONSTANT.TABLE_MERGE, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'horizontalsplit':\n this.observer.notify(CONSTANT.TABLE_HORIZONTAL_SPLIT, { item: exeValue, event: event, callBack: callBack });\n break;\n case 'verticalsplit':\n this.observer.notify(CONSTANT.TABLE_VERTICAL_SPLIT, { item: exeValue, event: event, callBack: callBack });\n break;\n }\n break;\n case 'font':\n case 'style':\n case 'effects':\n case 'casing':\n this.observer.notify(CONSTANT.SELECTION_TYPE, { subCommand: value, event: event, callBack: callBack, value: text, selector: selector, enterAction: enterAction });\n break;\n case 'inserthtml':\n this.observer.notify(CONSTANT.INSERTHTML_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'inserttext':\n this.observer.notify(CONSTANT.INSERT_TEXT_TYPE, { subCommand: value, callBack: callBack, value: text });\n break;\n case 'clear':\n this.observer.notify(CONSTANT.CLEAR_TYPE, { subCommand: value, event: event, callBack: callBack, selector: selector, enterAction: enterAction });\n break;\n case 'actions':\n this.observer.notify(EVENTS.ACTION, { subCommand: value, event: event, callBack: callBack, selector: selector });\n break;\n }\n };\n return EditorManager;\n}());\nexport { EditorManager };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Formatter } from './formatter';\nimport { EditorManager } from './../../editor-manager/base/editor-manager';\nimport { extend } from '@syncfusion/ej2-base';\nimport { htmlKeyConfig } from './../../common/config';\n/**\n * HTML adapter\n *\n * @hidden\n\n */\nvar HTMLFormatter = /** @class */ (function (_super) {\n __extends(HTMLFormatter, _super);\n function HTMLFormatter(options) {\n var _this = _super.call(this) || this;\n _this.initialize();\n extend(_this, _this, options, true);\n if (_this.currentDocument && _this.element) {\n _this.updateFormatter(_this.element, _this.currentDocument, options.options);\n }\n return _this;\n }\n HTMLFormatter.prototype.initialize = function () {\n this.keyConfig = htmlKeyConfig;\n };\n /**\n * Update the formatter of RichTextEditor\n *\n * @param {Element} editElement - specifies the edit element.\n * @param {Document} doc - specifies the doucment\n * @param {number} options - specifies the options\n * @returns {void}\n * @hidden\n\n */\n HTMLFormatter.prototype.updateFormatter = function (editElement, doc, options) {\n if (editElement && doc) {\n this.editorManager = new EditorManager({\n document: doc,\n editableElement: editElement,\n options: options\n });\n }\n };\n return HTMLFormatter;\n}(Formatter));\nexport { HTMLFormatter };\n","import { IsFormatted } from './isformatted';\nimport * as CONSTANT from './../base/constant';\nimport { NodeSelection } from './../../selection/index';\nimport { getDefaultHtmlTbStatus } from './../../common/util';\n/**\n * Update Toolbar Status\n *\n * @hidden\n\n */\nexport var statusCollection = getDefaultHtmlTbStatus();\nvar ToolbarStatus = /** @class */ (function () {\n function ToolbarStatus() {\n }\n /**\n * get method\n *\n * @param {Document} docElement - specifies the document element\n * @param {Node} targetNode - specifies the target node\n * @param {string[]} formatNode - specifies the format node\n * @param {string[]} fontSize - specifies the font size\n * @param {string[]} fontName - specifies the font name.\n * @param {Node} documentNode - specifies the document node.\n * @returns {IToolbarStatus} - returns the toolbar status\n * @hidden\n\n */\n ToolbarStatus.get = function (docElement, targetNode, formatNode, fontSize, fontName, documentNode) {\n var formatCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeCollection = JSON.parse(JSON.stringify(statusCollection));\n var nodeSelection = new NodeSelection();\n var nodes = documentNode ? [documentNode] : nodeSelection.getNodeCollection(nodeSelection.getRange(docElement));\n var nodesLength = nodes.length;\n var isNodeChanged = false;\n var range = nodeSelection.getRange(docElement);\n for (var index = 0; index < nodes.length; index++) {\n while (nodes[index].nodeType === 3 && range.startContainer.nodeType === 3 && nodes[index].parentNode &&\n nodes[index].parentNode.lastElementChild && nodes[index].parentNode.lastElementChild.nodeName !== 'BR' &&\n (this.getImmediateBlockNode(nodes[index].parentNode)).textContent.replace(/\\u200B/g, '').length === 0 &&\n range.startContainer.textContent.replace(/\\u200B/g, '').length === 0 &&\n nodeSelection.get(docElement).toString().replace(/\\u200B/g, '').length === 0) {\n nodes[index] = nodes[index].parentNode.lastElementChild.firstChild;\n isNodeChanged = true;\n }\n if (isNodeChanged && nodes[index]) {\n nodeSelection.setCursorPoint(docElement, nodes[index], nodes[index].textContent.length);\n isNodeChanged = false;\n }\n if ((nodes[index].nodeName !== 'BR' && nodes[index].nodeType !== 3) ||\n (nodesLength > 1 && nodes[index].nodeType === 3 && nodes[index].textContent.trim() === '')) {\n nodes.splice(index, 1);\n index--;\n }\n }\n for (var index = 0; index < nodes.length; index++) {\n formatCollection = this.getFormatParent(docElement, formatCollection, nodes[index], targetNode, formatNode, fontSize, fontName);\n if ((index === 0 && formatCollection.bold) || !formatCollection.bold) {\n nodeCollection.bold = formatCollection.bold;\n }\n if ((index === 0 && formatCollection.insertcode) || !formatCollection.insertcode) {\n nodeCollection.insertcode = formatCollection.insertcode;\n }\n if ((index === 0 && formatCollection.italic) || !formatCollection.italic) {\n nodeCollection.italic = formatCollection.italic;\n }\n if ((index === 0 && formatCollection.underline) || !formatCollection.underline) {\n nodeCollection.underline = formatCollection.underline;\n }\n if ((index === 0 && formatCollection.strikethrough) || !formatCollection.strikethrough) {\n nodeCollection.strikethrough = formatCollection.strikethrough;\n }\n if ((index === 0 && formatCollection.superscript) || !formatCollection.superscript) {\n nodeCollection.superscript = formatCollection.superscript;\n }\n if ((index === 0 && formatCollection.subscript) || !formatCollection.subscript) {\n nodeCollection.subscript = formatCollection.subscript;\n }\n if ((index === 0 && formatCollection.fontcolor) || !formatCollection.fontcolor) {\n nodeCollection.fontcolor = formatCollection.fontcolor;\n }\n if ((index === 0 && formatCollection.fontname) || !formatCollection.fontname) {\n nodeCollection.fontname = formatCollection.fontname;\n }\n if ((index === 0 && formatCollection.fontsize) || !formatCollection.fontsize) {\n nodeCollection.fontsize = formatCollection.fontsize;\n }\n if ((index === 0 && formatCollection.backgroundcolor) || !formatCollection.backgroundcolor) {\n nodeCollection.backgroundcolor = formatCollection.backgroundcolor;\n }\n if ((index === 0 && formatCollection.orderedlist) || !formatCollection.orderedlist) {\n nodeCollection.orderedlist = formatCollection.orderedlist;\n }\n if ((index === 0 && formatCollection.unorderedlist) || !formatCollection.unorderedlist) {\n nodeCollection.unorderedlist = formatCollection.unorderedlist;\n }\n if ((index === 0 && formatCollection.alignments) || !formatCollection.alignments) {\n nodeCollection.alignments = formatCollection.alignments;\n }\n if ((index === 0 && formatCollection.formats) || !formatCollection.formats) {\n nodeCollection.formats = formatCollection.formats;\n }\n if ((index === 0 && formatCollection.createlink) || !formatCollection.createlink) {\n nodeCollection.createlink = formatCollection.createlink;\n }\n if ((index === 0 && formatCollection.numberFormatList) || !formatCollection.numberFormatList) {\n nodeCollection.numberFormatList = formatCollection.numberFormatList;\n }\n if ((index === 0 && formatCollection.bulletFormatList) || !formatCollection.bulletFormatList) {\n nodeCollection.bulletFormatList = formatCollection.bulletFormatList;\n }\n formatCollection = JSON.parse(JSON.stringify(statusCollection));\n }\n return nodeCollection;\n };\n ToolbarStatus.getImmediateBlockNode = function (node) {\n do {\n node = node.parentNode;\n } while (node && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) < 0);\n return node;\n };\n ToolbarStatus.getFormatParent = function (docElement, formatCollection, node, targetNode, formatNode, fontSize, fontName) {\n if (targetNode.contains(node) ||\n (node.nodeType === 3 && targetNode.nodeType !== 3 && targetNode.contains(node.parentNode))) {\n do {\n formatCollection = this.isFormattedNode(docElement, formatCollection, node, formatNode, fontSize, fontName);\n node = node.parentNode;\n } while (node && (node !== targetNode));\n }\n return formatCollection;\n };\n ToolbarStatus.isFormattedNode = function (docElement, formatCollection, node, formatNode, fontSize, fontName) {\n if (!formatCollection.bold) {\n formatCollection.bold = IsFormatted.isBold(node);\n }\n if (!formatCollection.italic) {\n formatCollection.italic = IsFormatted.isItalic(node);\n }\n if (!formatCollection.underline) {\n formatCollection.underline = IsFormatted.isUnderline(node);\n }\n if (!formatCollection.strikethrough) {\n formatCollection.strikethrough = IsFormatted.isStrikethrough(node);\n }\n if (!formatCollection.superscript) {\n formatCollection.superscript = IsFormatted.isSuperscript(node);\n }\n if (!formatCollection.subscript) {\n formatCollection.subscript = IsFormatted.isSubscript(node);\n }\n if (!formatCollection.fontcolor) {\n formatCollection.fontcolor = this.isFontColor(docElement, node);\n }\n if (!formatCollection.fontname) {\n formatCollection.fontname = this.isFontName(docElement, node, fontName);\n }\n if (!formatCollection.fontsize) {\n formatCollection.fontsize = this.isFontSize(node, fontSize);\n }\n if (!formatCollection.backgroundcolor) {\n formatCollection.backgroundcolor = this.isBackgroundColor(node);\n }\n if (!formatCollection.orderedlist) {\n formatCollection.orderedlist = this.isOrderedList(node);\n }\n if (!formatCollection.unorderedlist) {\n formatCollection.unorderedlist = this.isUnorderedList(node);\n }\n if (!formatCollection.alignments) {\n formatCollection.alignments = this.isAlignment(node);\n }\n if (!formatCollection.formats) {\n formatCollection.formats = this.isFormats(node, formatNode);\n if (formatCollection.formats === 'pre') {\n formatCollection.insertcode = true;\n }\n }\n if (!formatCollection.createlink) {\n formatCollection.createlink = this.isLink(node);\n }\n if (!formatCollection.numberFormatList) {\n formatCollection.numberFormatList = this.isNumberFormatList(node);\n }\n if (!formatCollection.bulletFormatList) {\n formatCollection.bulletFormatList = this.isBulletFormatList(node);\n }\n return formatCollection;\n };\n ToolbarStatus.isFontColor = function (docElement, node) {\n var color = node.style && node.style.color;\n if ((color === null || color === undefined || color === '') && node.nodeType !== 3) {\n color = this.getComputedStyle(docElement, node, 'color');\n }\n if (color !== null && color !== '' && color !== undefined) {\n return color;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isLink = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'a') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isBackgroundColor = function (node) {\n var backColor = node.style && node.style.backgroundColor;\n if (backColor !== null && backColor !== '' && backColor !== undefined) {\n return backColor;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontSize = function (node, fontSize) {\n var size = node.style && node.style.fontSize;\n if ((size !== null && size !== '' && size !== undefined)\n && (fontSize === null || fontSize === undefined || (fontSize.indexOf(size) > -1))) {\n return size;\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFontName = function (docElement, node, fontName) {\n var name = node.style && node.style.fontFamily;\n if ((name === null || name === undefined || name === '') && node.nodeType !== 3) {\n name = this.getComputedStyle(docElement, node, 'font-family');\n }\n var index = null;\n if ((name !== null && name !== '' && name !== undefined)\n && (fontName === null || fontName === undefined || (fontName.filter(function (value, pos) {\n var pattern = new RegExp(name, 'i');\n if ((value.replace(/\"/g, '').replace(/ /g, '') === name.replace(/\"/g, '').replace(/ /g, '')) ||\n (value.search(pattern) > -1)) {\n index = pos;\n }\n }) && (index !== null)))) {\n return (index !== null) ? fontName[index] : name.replace(/\"/g, '');\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isOrderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ol') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isUnorderedList = function (node) {\n if (node.nodeName.toLocaleLowerCase() === 'ul') {\n return true;\n }\n else {\n return false;\n }\n };\n ToolbarStatus.isAlignment = function (node) {\n var align = node.style && node.style.textAlign;\n if (align === 'left') {\n return 'justifyleft';\n }\n else if (align === 'center') {\n return 'justifycenter';\n }\n else if (align === 'right') {\n return 'justifyright';\n }\n else if (align === 'justify') {\n return 'justifyfull';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isFormats = function (node, formatNode) {\n if (((formatNode === undefined || formatNode === null)\n && CONSTANT.BLOCK_TAGS.indexOf(node.nodeName.toLocaleLowerCase()) > -1)\n || (formatNode !== null && formatNode !== undefined\n && formatNode.indexOf(node.nodeName.toLocaleLowerCase()) > -1)) {\n return node.nodeName.toLocaleLowerCase();\n }\n else {\n return null;\n }\n };\n ToolbarStatus.getComputedStyle = function (docElement, node, prop) {\n return docElement.defaultView.getComputedStyle(node, null).getPropertyValue(prop);\n };\n ToolbarStatus.isNumberFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'lower-alpha') {\n return 'Lower Alpha';\n }\n else if (list === 'number') {\n return 'Number';\n }\n else if (list === 'upper-alpha') {\n return 'Upper Alpha';\n }\n else if (list === 'lower-roman') {\n return 'Lower Roman';\n }\n else if (list === 'upper-roman') {\n return 'Upper Roman';\n }\n else if (list === 'lower-greek') {\n return 'Lower Greek';\n }\n else if (list === 'none') {\n return 'None';\n }\n else {\n return null;\n }\n };\n ToolbarStatus.isBulletFormatList = function (node) {\n var list = node.style && node.style.listStyleType;\n if (list === 'circle') {\n return 'Circle';\n }\n else if (list === 'square') {\n return 'Square';\n }\n else if (list === 'none') {\n return 'None';\n }\n else if (list === 'disc') {\n return 'Disc';\n }\n else {\n return null;\n }\n };\n return ToolbarStatus;\n}());\nexport { ToolbarStatus };\n","import * as events from '../base/constant';\nimport { ToolbarStatus } from '../../editor-manager/plugin/toolbar-status';\nimport { getDefaultHtmlTbStatus } from '../../common/util';\n/**\n * HtmlToolbarStatus module for refresh the toolbar status\n */\nvar HtmlToolbarStatus = /** @class */ (function () {\n function HtmlToolbarStatus(parent) {\n this.parent = parent;\n this.toolbarStatus = this.prevToolbarStatus = getDefaultHtmlTbStatus();\n this.addEventListener();\n }\n HtmlToolbarStatus.prototype.addEventListener = function () {\n this.parent.on(events.toolbarRefresh, this.onRefreshHandler, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n HtmlToolbarStatus.prototype.removeEventListener = function () {\n this.parent.off(events.toolbarRefresh, this.onRefreshHandler);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n HtmlToolbarStatus.prototype.onRefreshHandler = function (args) {\n if (this.parent.readonly) {\n return;\n }\n var fontsize = [];\n var fontName = [];\n var formats = [];\n this.parent.fontSize.items.forEach(function (item) {\n fontsize.push(item.value);\n });\n this.parent.fontFamily.items.forEach(function (item) {\n fontName.push(item.value);\n });\n this.parent.format.types.forEach(function (item) {\n formats.push(item.value.toLocaleLowerCase());\n });\n this.toolbarStatus = ToolbarStatus.get(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel(), formats, fontsize, fontName, args.documentNode);\n var tbStatusString = JSON.stringify(this.toolbarStatus);\n this.parent.notify(events.toolbarUpdated, this.toolbarStatus);\n if (JSON.stringify(this.prevToolbarStatus) !== tbStatusString) {\n this.parent.notify(events.updateTbItemsStatus, { html: JSON.parse(tbStatusString), markdown: null });\n this.prevToolbarStatus = JSON.parse(tbStatusString);\n }\n };\n return HtmlToolbarStatus;\n}());\nexport { HtmlToolbarStatus };\n","import { getEditValue } from '../base/util';\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar ContentRender = /** @class */ (function () {\n /**\n * Constructor for content renderer module\n *\n * @param {IRichTextEditor} parent - specifies the parent element.\n * @param {ServiceLocator} serviceLocator - specifies the service.\n * @returns {void}\n */\n function ContentRender(parent, serviceLocator) {\n this.parent = parent;\n this.serviceLocator = serviceLocator;\n }\n /**\n * The function is used to render Rich Text Editor content div\n *\n * @returns {void}\n * @hidden\n\n */\n ContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var div = this.parent.createElement('div', { className: 'e-rte-content', id: this.parent.getID() + 'rte-view' });\n var rteContent = getEditValue(rteObj.value, rteObj);\n this.editableElement = this.parent.createElement('div', {\n className: 'e-content',\n id: this.parent.getID() + '_rte-edit-view',\n attrs: {\n 'contenteditable': 'true'\n },\n innerHTML: rteContent\n });\n div.appendChild(this.editableElement);\n this.setPanel(div);\n rteObj.element.appendChild(div);\n };\n /**\n * Get the content div element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n ContentRender.prototype.getPanel = function () {\n return this.contentPanel;\n };\n /**\n * Get the editable element of RichTextEditor\n *\n * @returns {Element} - specifies the return element.\n * @hidden\n\n */\n ContentRender.prototype.getEditPanel = function () {\n return this.editableElement;\n };\n /**\n * Returns the text content as string.\n *\n * @returns {string} - specifies the string element.\n */\n ContentRender.prototype.getText = function () {\n return this.getEditPanel().innerText;\n };\n /**\n * Set the content div element of RichTextEditor\n *\n * @param {Element} panel - specifies the panel element.\n * @returns {void}\n * @hidden\n\n */\n ContentRender.prototype.setPanel = function (panel) {\n this.contentPanel = panel;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {Document} - specifies the document.\n * @hidden\n\n */\n ContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return ContentRender;\n}());\nexport { ContentRender };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ContentRender } from '../renderer/content-renderer';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getEditValue } from '../base/util';\nvar IFRAMEHEADER = \"\\n \\n \\n \\n \\n \\n \";\n/**\n * Content module is used to render Rich Text Editor content\n *\n * @hidden\n\n */\nvar IframeContentRender = /** @class */ (function (_super) {\n __extends(IframeContentRender, _super);\n function IframeContentRender() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * The function is used to render Rich Text Editor iframe\n *\n * @hidden\n\n */\n IframeContentRender.prototype.renderPanel = function () {\n var rteObj = this.parent;\n var rteContent = getEditValue(rteObj.value, rteObj);\n var iFrameBodyContent = '' +\n rteContent + '';\n var iFrameContent = IFRAMEHEADER + iFrameBodyContent;\n var iframe = this.parent.createElement('iframe', {\n id: this.parent.getID() + '_rte-view',\n className: 'e-rte-content',\n styles: 'display:block;',\n attrs: { 'srcdoc': iFrameContent }\n });\n this.setPanel(iframe);\n rteObj.element.appendChild(iframe);\n iframe.contentDocument.body.id = this.parent.getID() + '_rte-edit-view';\n iframe.contentDocument.body.setAttribute('aria-owns', this.parent.getID());\n iframe.contentDocument.open();\n iFrameContent = this.setThemeColor(iFrameContent, { color: '#333' });\n iframe.contentDocument.write(iFrameContent);\n iframe.contentDocument.close();\n if (rteObj.enableRtl) {\n this.contentPanel.contentDocument.body.setAttribute('class', 'e-rtl');\n }\n };\n IframeContentRender.prototype.setThemeColor = function (content, styles) {\n var fontColor = getComputedStyle(this.parent.element, '.e-richtexteditor').getPropertyValue('color');\n return content.replace(styles.color, fontColor);\n };\n /**\n * Get the editable element of RichTextEditor\n *\n * @returns {Element} - specifies the element.\n * @hidden\n\n */\n IframeContentRender.prototype.getEditPanel = function () {\n var editNode;\n if (!isNullOrUndefined(this.contentPanel.contentDocument)) {\n editNode = this.contentPanel.contentDocument.body;\n }\n else {\n editNode = this.parent.inputElement;\n }\n return editNode;\n };\n /**\n * Get the document of RichTextEditor\n *\n * @returns {void}\n * @hidden\n\n */\n IframeContentRender.prototype.getDocument = function () {\n return this.getEditPanel().ownerDocument;\n };\n return IframeContentRender;\n}(ContentRender));\nexport { IframeContentRender };\n","import * as events from '../base/constant';\nimport { detach, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * XhtmlValidation module called when set enableXhtml as true\n */\nvar XhtmlValidation = /** @class */ (function () {\n function XhtmlValidation(parent) {\n this.parent = parent;\n this.addEventListener();\n }\n XhtmlValidation.prototype.addEventListener = function () {\n this.parent.on(events.xhtmlValidation, this.enableXhtmlValidation, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n XhtmlValidation.prototype.removeEventListener = function () {\n this.parent.off(events.xhtmlValidation, this.enableXhtmlValidation);\n this.parent.off(events.destroy, this.removeEventListener);\n };\n XhtmlValidation.prototype.enableXhtmlValidation = function () {\n if (this.parent.enableXhtml) {\n if (isNullOrUndefined(this.parent.inputElement)) {\n this.currentElement = this.parent.element;\n }\n else {\n this.currentElement = this.parent.inputElement;\n }\n this.clean(this.currentElement);\n this.AddRootElement();\n this.ImageTags();\n this.removeTags();\n this.RemoveUnsupported();\n this.currentElement.innerHTML = this.selfEncloseValidation(this.currentElement.innerHTML, this.currentElement.innerText === \"\\n\" ?\n this.currentElement.innerText.length : this.currentElement.innerText.trim().length);\n this.parent.setProperties({ value: this.currentElement.innerHTML }, true);\n }\n };\n /**\n * @param {string} currentValue - specifies the string value.\n * @param {number} valueLength - specifies the length of the current value.\n * @returns {void}\n\n */\n XhtmlValidation.prototype.selfEncloseValidation = function (currentValue, valueLength) {\n if (valueLength === 0 && currentValue.indexOf('table') < 0 && currentValue.indexOf('img') < 0) {\n var arrayValue = currentValue.split(' ');\n arrayValue[arrayValue.length - 1] = '​' + arrayValue[arrayValue.length - 1];\n currentValue = arrayValue.join('');\n }\n currentValue = currentValue.replace(/
    /g, '
    ').replace(/
    /g, '
    ').replace(/ /g, ' ');\n var valueTemp;\n var valueDupe = [];\n var valueOriginal = [];\n var imgRegexp = [//gi, //gi, //gi, //gi, //gi,\n //gi, //gi, //gi, //gi, //gi,\n //gi, //gi];\n for (var j = 0; j < imgRegexp.length; j++) {\n valueTemp = imgRegexp[j].exec(currentValue);\n while ((valueTemp) !== null) {\n valueDupe.push(valueTemp[0].toString());\n valueTemp = imgRegexp[j].exec(currentValue);\n }\n valueOriginal = valueDupe.slice(0);\n for (var i = 0; i < valueDupe.length; i++) {\n if (valueDupe[i].indexOf('/') === -1 || valueDupe[i].lastIndexOf('/') !== valueDupe[i].length - 2) {\n valueDupe[i] = valueDupe[i].substr(0, valueDupe[i].length - 1) + ' /' +\n valueDupe[i].substr(valueDupe[i].length - 1, valueDupe[i].length);\n }\n }\n for (var g = 0; g <= valueDupe.length - 1; g++) {\n currentValue = currentValue.replace(valueOriginal[g], valueDupe[g]);\n }\n }\n return currentValue;\n };\n XhtmlValidation.prototype.AddRootElement = function () {\n if ((this.currentElement.childNodes.length === 1 && this.currentElement.firstChild.nodeName !== 'DIV') ||\n this.currentElement.childNodes.length > 1) {\n var parentEle = this.parent.createElement('div');\n while (this.currentElement.childNodes.length > 0) {\n parentEle.appendChild(this.currentElement.childNodes[0]);\n }\n this.currentElement.appendChild(parentEle);\n }\n };\n XhtmlValidation.prototype.clean = function (node) {\n for (var n = 0; n < node.childNodes.length; n++) {\n var child = node.childNodes[n];\n if (child.nodeType === 8 || child.nodeName === 'V:IMAGE') {\n node.removeChild(child);\n n--;\n }\n else if (child.nodeType === 1) {\n this.clean(child);\n }\n }\n return this.currentElement.innerHTML;\n };\n XhtmlValidation.prototype.ImageTags = function () {\n var imgNodes = this.currentElement.querySelectorAll('IMG');\n for (var i = imgNodes.length - 1; i >= 0; i--) {\n if (!imgNodes[i].hasAttribute('alt')) {\n var img = imgNodes[i];\n img.setAttribute('alt', '');\n }\n }\n };\n XhtmlValidation.prototype.removeTags = function () {\n var removeAttribute = [['br', 'ul'], ['br', 'ol'], ['table', 'span'], ['div', 'span'], ['p', 'span']];\n for (var i = 0; i < removeAttribute.length; i++) {\n this.RemoveElementNode(removeAttribute[i][0], removeAttribute[i][1]);\n }\n };\n XhtmlValidation.prototype.RemoveElementNode = function (rmvNode, parentNode) {\n var parentArray = this.currentElement.querySelectorAll(parentNode);\n for (var i = 0; i < parentArray.length; i++) {\n var rmvArray = parentArray[i].querySelectorAll(rmvNode);\n for (var j = rmvArray.length; j > 0; j--) {\n detach(rmvArray[j - 1]);\n }\n }\n };\n XhtmlValidation.prototype.RemoveUnsupported = function () {\n var underlineEle = this.currentElement.querySelectorAll('u');\n for (var i = underlineEle.length - 1; i >= 0; i--) {\n var spanEle = this.parent.createElement('span');\n spanEle.style.textDecoration = 'underline';\n spanEle.innerHTML = underlineEle[i].innerHTML;\n underlineEle[i].parentNode.insertBefore(spanEle, underlineEle[i]);\n detach(underlineEle[i]);\n }\n var strongEle = this.currentElement.querySelectorAll('strong');\n for (var i = strongEle.length - 1; i >= 0; i--) {\n var boldEle = this.parent.createElement('b');\n boldEle.innerHTML = strongEle[i].innerHTML;\n strongEle[i].parentNode.insertBefore(boldEle, strongEle[i]);\n detach(strongEle[i]);\n }\n var attrArray = ['language', 'role', 'target', 'contenteditable', 'cellspacing',\n 'cellpadding', 'border', 'valign', 'colspan'];\n for (var i = 0; i <= attrArray.length; i++) {\n this.RemoveAttributeByName(attrArray[i]);\n }\n };\n XhtmlValidation.prototype.RemoveAttributeByName = function (attrName) {\n if (this.currentElement.firstChild !== null) {\n if (this.currentElement.firstChild.nodeType !== 3) {\n for (var i = 0; i < this.currentElement.childNodes.length; i++) {\n var ele = this.currentElement.childNodes[i];\n if (ele.nodeType !== 3 && ele.nodeName !== 'TABLE' && ele.nodeName !== 'TBODY' && ele.nodeName !== 'THEAD' &&\n ele.nodeName !== 'TH' && ele.nodeName !== 'TR' && ele.nodeName !== 'TD') {\n if (ele.hasAttribute(attrName)) {\n ele.removeAttribute(attrName);\n }\n if (ele.hasChildNodes()) {\n for (var j = 0; j < ele.childNodes.length; j++) {\n var childEle = ele.childNodes[j];\n if (childEle.nodeType !== 3 && childEle.nodeName !== 'TABLE' && childEle.nodeName !== 'TBODY' &&\n childEle.nodeName !== 'THEAD' && childEle.nodeName !== 'TH' && childEle.nodeName !== 'TR' &&\n childEle.nodeName !== 'TD' && childEle.hasAttribute(attrName)) {\n childEle.removeAttribute(attrName);\n }\n if (childEle.hasChildNodes()) {\n for (var k = 0; k < childEle.childNodes.length; k++) {\n if (childEle.childNodes[k].nodeType !== 3 && childEle.childNodes[k].nodeName !== 'TABLE' &&\n childEle.childNodes[k].nodeName !== 'TBODY' && childEle.childNodes[k].nodeName !== 'THEAD' &&\n childEle.childNodes[k].nodeName !== 'TH' && childEle.childNodes[k].nodeName !== 'TR'\n && childEle.childNodes[k].nodeName !== 'TD'\n && childEle.childNodes[k].hasAttribute(attrName)) {\n childEle.childNodes[k].removeAttribute(attrName);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n return XhtmlValidation;\n}());\nexport { XhtmlValidation };\n","import * as events from '../base/constant';\nimport { isNullOrUndefined, closest, attributes, removeClass, addClass, Browser, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport { HTMLFormatter } from '../formatter/html-formatter';\nimport { RenderType } from '../base/enum';\nimport * as classes from '../base/classes';\nimport { HtmlToolbarStatus } from './html-toolbar-status';\nimport { IframeContentRender } from '../renderer/iframe-content-renderer';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { ColorPickerInput } from './color-picker';\nimport { NodeSelection } from '../../selection/selection';\nimport { InsertHtml } from '../../editor-manager/plugin/inserthtml';\nimport { getTextNodesUnder, sanitizeHelper, getDefaultValue } from '../base/util';\nimport { isIDevice } from '../../common/util';\nimport { XhtmlValidation } from './xhtml-validation';\nimport { ON_BEGIN } from './../../common/constant';\n/**\n * `HtmlEditor` module is used to HTML editor\n */\nvar HtmlEditor = /** @class */ (function () {\n function HtmlEditor(parent, serviceLocator) {\n this.rangeCollection = [];\n this.isImageDelete = false;\n this.parent = parent;\n this.locator = serviceLocator;\n this.renderFactory = this.locator.getService('rendererFactory');\n this.xhtmlValidation = new XhtmlValidation(parent);\n this.addEventListener();\n }\n /**\n * Destroys the Markdown.\n *\n * @function destroy\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.destroy = function () {\n this.removeEventListener();\n };\n /**\n * @param {string} value - specifies the string value\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.sanitizeHelper = function (value) {\n value = sanitizeHelper(value, this.parent);\n return value;\n };\n HtmlEditor.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.nodeSelectionObj = new NodeSelection();\n this.colorPickerModule = new ColorPickerInput(this.parent, this.locator);\n this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n this.parent.on(events.htmlToolbarClick, this.onToolbarClick, this);\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.keyUp, this.onKeyUp, this);\n this.parent.on(events.renderColorPicker, this.renderColorPicker, this);\n this.parent.on(events.initialEnd, this.render, this);\n this.parent.on(events.modelChanged, this.onPropertyChanged, this);\n this.parent.on(events.destroy, this.destroy, this);\n this.parent.on(events.selectAll, this.selectAll, this);\n this.parent.on(events.selectRange, this.selectRange, this);\n this.parent.on(events.getSelectedHtml, this.getSelectedHtml, this);\n this.parent.on(events.selectionSave, this.onSelectionSave, this);\n this.parent.on(events.selectionRestore, this.onSelectionRestore, this);\n this.parent.on(events.readOnlyMode, this.updateReadOnly, this);\n this.parent.on(events.paste, this.onPaste, this);\n };\n HtmlEditor.prototype.updateReadOnly = function () {\n if (this.parent.readonly) {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'false' });\n addClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n else {\n attributes(this.parent.contentModule.getEditPanel(), { contenteditable: 'true' });\n removeClass([this.parent.element], classes.CLS_RTE_READONLY);\n }\n };\n HtmlEditor.prototype.onSelectionSave = function () {\n var currentDocument = this.contentRenderer.getDocument();\n var range = this.nodeSelectionObj.getRange(currentDocument);\n this.saveSelection = this.nodeSelectionObj.save(range, currentDocument);\n };\n HtmlEditor.prototype.onSelectionRestore = function (e) {\n this.parent.isBlur = false;\n this.contentRenderer.getEditPanel().focus();\n if (isNullOrUndefined(e.items) || e.items) {\n this.saveSelection.restore();\n }\n };\n HtmlEditor.prototype.onKeyUp = function (e) {\n var args = e.args;\n var restrictKeys = [8, 9, 13, 16, 17, 18, 20, 27, 37, 38, 39, 40, 44, 45, 46, 91,\n 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123];\n var range = this.parent.getRange();\n var regEx = new RegExp(String.fromCharCode(8203), 'g');\n var pointer;\n if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey) {\n if (range.startContainer.textContent.charCodeAt(0) === 8203) {\n pointer = range.startOffset - 1;\n range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n if (!isNOU(range.startContainer.previousSibling) && !isNOU(range.startContainer.previousSibling.parentElement) &&\n range.startContainer.parentElement === range.startContainer.previousSibling.parentElement &&\n range.startContainer.previousSibling.textContent.charCodeAt(0) === 8203 &&\n range.startContainer.previousSibling.textContent.length <= 1) {\n range.startContainer.previousSibling.textContent = range.startContainer.previousSibling.textContent.replace(regEx, '');\n }\n if (range.endContainer.textContent.charCodeAt(range.endOffset) === 8203) {\n pointer = range.startOffset;\n range.endContainer.textContent = range.endContainer.textContent.replace(regEx, '');\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);\n }\n }\n };\n HtmlEditor.prototype.onKeyDown = function (e) {\n var _this = this;\n var currentRange;\n var args = e.args;\n if (Browser.info.name === 'chrome') {\n currentRange = this.parent.getRange();\n this.backSpaceCleanup(e, currentRange);\n this.deleteCleanup(e, currentRange);\n }\n if (args.keyCode === 9 && this.parent.enableTabKey) {\n if (!isNOU(args.target) && isNullOrUndefined(closest(args.target, '.e-rte-toolbar'))) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var parentNode = this.nodeSelectionObj.getParentNodeCollection(range);\n if (!((parentNode[0].nodeName === 'LI' || closest(parentNode[0], 'li') ||\n closest(parentNode[0], 'table')) && range.startOffset === 0)) {\n args.preventDefault();\n if (!args.shiftKey) {\n InsertHtml.Insert(this.contentRenderer.getDocument(), '    ');\n this.rangeCollection.push(this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()));\n }\n else if (this.rangeCollection.length > 0 &&\n this.rangeCollection[this.rangeCollection.length - 1].startContainer.textContent.length === 4) {\n var textCont = this.rangeCollection[this.rangeCollection.length - 1].startContainer;\n this.nodeSelectionObj.setSelectionText(this.contentRenderer.getDocument(), textCont, textCont, 0, textCont.textContent.length);\n InsertHtml.Insert(this.contentRenderer.getDocument(), document.createTextNode(''));\n this.rangeCollection.pop();\n }\n }\n }\n }\n if (e.args.action === 'space' ||\n e.args.action === 'enter' ||\n e.args.keyCode === 13) {\n this.spaceLink(e.args);\n if (this.parent.editorMode === 'HTML' && !this.parent.readonly) {\n this.parent.notify(events.enterHandler, { args: e.args });\n }\n }\n if (e.args.action === 'space') {\n var currentRange_1 = this.parent.getRange();\n var editorValue = currentRange_1.startContainer.textContent.slice(0, currentRange_1.startOffset);\n var orderedList_1 = this.isOrderedList(editorValue);\n var unOrderedList = this.isUnOrderedList(editorValue);\n if (orderedList_1 && !unOrderedList || unOrderedList && !orderedList_1) {\n var eventArgs_1 = {\n callBack: null,\n event: e.args,\n name: 'keydown-handler'\n };\n var actionBeginArgs = {\n cancel: false,\n item: { command: 'Lists', subCommand: orderedList_1 ? 'OL' : 'UL' },\n name: 'actionBegin',\n originalEvent: e.args,\n requestType: orderedList_1 ? 'OL' : 'UL'\n };\n this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {\n if (!actionBeginArgs.cancel) {\n _this.parent.formatter.editorManager.observer.notify(ON_BEGIN, eventArgs_1);\n _this.parent.trigger(events.actionComplete, {\n editorMode: _this.parent.editorMode,\n elements: _this.parent.formatter.editorManager.domNode.blockNodes(),\n event: e.args,\n name: events.actionComplete,\n range: _this.parent.getRange(),\n requestType: orderedList_1 ? 'OL' : 'UL'\n });\n }\n });\n }\n }\n if (Browser.info.name === 'chrome' && (!isNullOrUndefined(this.rangeElement) && !isNullOrUndefined(this.oldRangeElement) ||\n !isNullOrUndefined(this.deleteRangeElement) && !isNullOrUndefined(this.deleteOldRangeElement)) &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.rangeElement = null;\n this.oldRangeElement = null;\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n if (!this.isImageDelete) {\n args.preventDefault();\n }\n }\n };\n HtmlEditor.prototype.isOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < olListStartRegex.length; i++) {\n if (olListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.isUnOrderedList = function (editorValue) {\n editorValue = editorValue.replace(/\\u200B/g, '');\n var ulListStartRegex = [/^[*]$/, /^[-]$/];\n if (!isNullOrUndefined(editorValue)) {\n for (var i = 0; i < ulListStartRegex.length; i++) {\n if (ulListStartRegex[i].test(editorValue)) {\n return true;\n }\n }\n }\n return false;\n };\n HtmlEditor.prototype.backSpaceCleanup = function (e, currentRange) {\n var isLiElement = false;\n if (e.args.code === 'Backspace' && e.args.keyCode === 8 && currentRange.startOffset === 0 &&\n currentRange.endOffset === 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.textContent.length > 0 &&\n currentRange.startContainer.parentElement.tagName !== 'TD' && currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.rangeElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.rangeElement.tagName === 'OL' || this.rangeElement.tagName === 'UL') {\n var liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {\n this.oldRangeElement = liElement.previousElementSibling.lastElementChild.nodeName === 'BR' ?\n liElement.previousElementSibling : liElement.previousElementSibling.lastElementChild;\n if (!isNullOrUndefined(liElement.lastElementChild) && liElement.lastElementChild.nodeName !== 'BR') {\n this.rangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.rangeElement = liElement;\n }\n }\n }\n else if (this.rangeElement.tagName === 'TABLE' || (!isNullOrUndefined(this.rangeElement.previousElementSibling) &&\n this.rangeElement.previousElementSibling.tagName === 'TABLE')) {\n return;\n }\n else {\n this.oldRangeElement = this.rangeElement.previousElementSibling;\n }\n if (isNullOrUndefined(this.oldRangeElement)) {\n return;\n }\n else {\n if (this.oldRangeElement.tagName === 'OL' || this.oldRangeElement.tagName === 'UL') {\n this.oldRangeElement = this.oldRangeElement.lastElementChild.lastElementChild\n ? this.oldRangeElement.lastElementChild.lastElementChild :\n this.oldRangeElement.lastElementChild;\n }\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), \n // eslint-disable-next-line\n this.oldRangeElement, this.oldRangeElement.childNodes.length);\n if (this.oldRangeElement.querySelector('BR')) {\n detach(this.oldRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {\n while (this.rangeElement.firstChild) {\n this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);\n }\n // eslint-disable-next-line\n !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);\n this.oldRangeElement.normalize();\n }\n }\n }\n };\n HtmlEditor.prototype.deleteCleanup = function (e, currentRange) {\n var isLiElement = false;\n var liElement;\n var rootElement;\n if (e.args.code === 'Delete' && e.args.keyCode === 46 &&\n this.parent.contentModule.getText().trim().length !== 0 && this.parent.getSelection().length === 0 && currentRange.startContainer.parentElement.tagName !== 'TD' &&\n currentRange.startContainer.parentElement.tagName !== 'TH') {\n this.deleteRangeElement = rootElement = this.getRootBlockNode(currentRange.startContainer);\n if (this.deleteRangeElement.tagName === 'OL' || this.deleteRangeElement.tagName === 'UL') {\n liElement = this.getRangeLiNode(currentRange.startContainer);\n if (liElement.nextElementSibling && liElement.nextElementSibling.childElementCount > 0\n && !liElement.nextElementSibling.querySelector('BR')) {\n if (!isNullOrUndefined(liElement.lastElementChild)) {\n this.deleteRangeElement = liElement.lastElementChild;\n isLiElement = true;\n }\n else {\n this.deleteRangeElement = liElement;\n }\n }\n else {\n this.deleteRangeElement = this.getRangeElement(liElement);\n }\n }\n else if (this.deleteRangeElement.nodeType === 3 || (this.deleteRangeElement.tagName === 'TABLE' ||\n (!isNullOrUndefined(this.deleteRangeElement.nextElementSibling) && this.deleteRangeElement.nextElementSibling.tagName === 'TABLE'))) {\n return;\n }\n if (this.getCaretIndex(currentRange, this.deleteRangeElement) === this.deleteRangeElement.textContent.length) {\n if (!isNullOrUndefined(liElement)) {\n if (isLiElement || !isNullOrUndefined(liElement.nextElementSibling)) {\n this.deleteOldRangeElement = this.getRangeElement(liElement.nextElementSibling);\n }\n else {\n this.deleteOldRangeElement = rootElement.nextElementSibling;\n }\n }\n else {\n this.deleteOldRangeElement = this.deleteRangeElement.nextElementSibling;\n }\n if (isNullOrUndefined(this.deleteOldRangeElement)) {\n return;\n }\n else {\n if (currentRange.startOffset === 0 && currentRange.endOffset === 1 &&\n this.deleteRangeElement.childNodes[0].nodeName === 'IMG') {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), this.deleteRangeElement, this.deleteRangeElement, 0, 1);\n this.isImageDelete = true;\n }\n else {\n this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), this.deleteRangeElement, this.deleteRangeElement.childNodes.length);\n this.isImageDelete = false;\n }\n if (this.deleteRangeElement.querySelector('BR')) {\n detach(this.deleteRangeElement.querySelector('BR'));\n }\n if (!isNullOrUndefined(this.deleteRangeElement) && (this.deleteOldRangeElement.tagName !== 'OL' && this.deleteOldRangeElement.tagName !== 'UL')\n && this.deleteOldRangeElement !== this.deleteRangeElement) {\n while (this.deleteOldRangeElement.firstChild) {\n this.deleteRangeElement.appendChild(this.deleteOldRangeElement.childNodes[0]);\n }\n if (!isLiElement) {\n detach(this.deleteOldRangeElement);\n }\n else {\n detach(this.deleteOldRangeElement.parentElement);\n }\n this.deleteRangeElement.normalize();\n }\n else {\n this.deleteRangeElement = null;\n this.deleteOldRangeElement = null;\n }\n }\n }\n else {\n this.deleteRangeElement = null;\n }\n }\n };\n HtmlEditor.prototype.getCaretIndex = function (currentRange, element) {\n var position = 0;\n if (this.parent.contentModule.getDocument().getSelection().rangeCount !== 0) {\n var preCaretRange = currentRange.cloneRange();\n preCaretRange.selectNodeContents(element);\n preCaretRange.setEnd(currentRange.endContainer, currentRange.endOffset);\n position = preCaretRange.toString().length;\n }\n return position;\n };\n HtmlEditor.prototype.getRangeElement = function (element) {\n var rangeElement = element.lastElementChild ? element.lastElementChild.tagName === 'BR' ?\n element.lastElementChild.previousElementSibling ? element.lastElementChild.previousElementSibling\n : element : element.lastElementChild : element;\n return rangeElement;\n };\n HtmlEditor.prototype.getRootBlockNode = function (rangeBlockNode) {\n // eslint-disable-next-line\n for (; rangeBlockNode && this.parent && this.parent.inputElement !== rangeBlockNode; rangeBlockNode = rangeBlockNode) {\n if (rangeBlockNode.parentElement === this.parent.inputElement) {\n break;\n }\n else {\n rangeBlockNode = rangeBlockNode.parentElement;\n }\n }\n return rangeBlockNode;\n };\n HtmlEditor.prototype.getRangeLiNode = function (rangeLiNode) {\n var node = rangeLiNode.parentElement;\n while (node !== this.parent.inputElement) {\n if (node.nodeType === 1 && node.tagName === 'LI') {\n break;\n }\n node = node.parentElement;\n }\n return node;\n };\n HtmlEditor.prototype.onPaste = function (e) {\n // eslint-disable-next-line\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (e.text.match(regex)) {\n if (e.isWordPaste) {\n return;\n }\n e.args.preventDefault();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n // eslint-disable-next-line\n var saveSelection = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n // eslint-disable-next-line\n var httpRegex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)))/gi);\n var wwwRegex = new RegExp(/([^\\S]|^)(((www\\.))(\\S+))/gi);\n var enterSplitText = e.text.split('\\n');\n var contentInnerElem = '';\n for (var i = 0; i < enterSplitText.length; i++) {\n if (enterSplitText[i].trim() === '') {\n contentInnerElem += getDefaultValue(this.parent);\n }\n else {\n var contentWithSpace = '';\n var spaceBetweenContent = true;\n var spaceSplit = enterSplitText[i].split(' ');\n for (var j = 0; j < spaceSplit.length; j++) {\n if (spaceSplit[j].trim() === '') {\n contentWithSpace += spaceBetweenContent ? ' ' : ' ';\n }\n else {\n spaceBetweenContent = false;\n contentWithSpace += spaceSplit[j] + ' ';\n }\n }\n if (i === 0) {\n contentInnerElem += '' + contentWithSpace.trim() + '';\n }\n else {\n contentInnerElem += '

    ' + contentWithSpace.trim() + '

    ';\n }\n }\n }\n var divElement = this.parent.createElement('div');\n divElement.setAttribute('class', 'pasteContent');\n divElement.style.display = 'inline';\n divElement.innerHTML = contentInnerElem.replace('¶', '&para');\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 += '' + splitTextContent[j] + ' ';\n }\n else {\n resultSplitContent += splitTextContent[j] + ' ';\n }\n }\n paraElem[i].innerHTML = resultSplitContent.trim();\n }\n if (!isNullOrUndefined(this.parent.pasteCleanupModule)) {\n e.callBack(divElement.innerHTML);\n }\n else {\n this.parent.formatter.editorManager.execCommand('insertHTML', null, null, null, divElement);\n }\n }\n };\n HtmlEditor.prototype.spaceLink = function (e) {\n var range = this.nodeSelectionObj.getRange(this.contentRenderer.getDocument());\n var selectNodeEle = this.nodeSelectionObj.getParentNodeCollection(range);\n var text = range.startContainer.textContent.substr(0, range.endOffset);\n var splitText = text.split(' ');\n var urlText = splitText[splitText.length - 1];\n var urlTextRange = range.startOffset - (text.length - splitText[splitText.length - 1].length);\n urlText = urlText.slice(0, urlTextRange);\n // eslint-disable-next-line\n var regex = new RegExp(/([^\\S]|^)(((https?\\:\\/\\/)|(www\\.))(\\S+))/gi);\n if (selectNodeEle[0].nodeName !== 'A' && urlText.match(regex)) {\n var selection = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n var url = urlText.indexOf('http') > -1 ? urlText : 'http://' + urlText;\n var selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n var value = {\n url: url,\n selection: selection, selectParent: selectParent,\n text: urlText,\n title: '',\n target: '_blank'\n };\n this.parent.formatter.process(this.parent, {\n item: {\n 'command': 'Links',\n 'subCommand': 'CreateLink'\n }\n }, e, value);\n }\n };\n HtmlEditor.prototype.onToolbarClick = function (args) {\n var save;\n var selectNodeEle;\n var selectParentEle;\n var item = args.item;\n var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');\n if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n if (isIDevice() && item.command === 'Images') {\n this.nodeSelectionObj.restore();\n }\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n if (item.command === 'Images') {\n this.parent.notify(events.imageToolbarAction, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Links') {\n this.parent.notify(events.linkToolbarAction, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n if (item.command === 'Table') {\n this.parent.notify(events.tableToolbarAction, {\n member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n }\n }\n else {\n var linkDialog = document.getElementById(this.parent.getID() + '_rtelink');\n var imageDialog = document.getElementById(this.parent.getID() + '_image');\n if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||\n item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {\n var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());\n if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {\n save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());\n }\n selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);\n selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);\n }\n switch (item.subCommand) {\n case 'Maximize':\n this.parent.notify(events.enableFullScreen, { args: args });\n break;\n case 'Minimize':\n this.parent.notify(events.disableFullScreen, { args: args });\n break;\n case 'CreateLink':\n this.parent.notify(events.insertLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'RemoveLink':\n this.parent.notify(events.unLink, {\n member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'Print':\n this.parent.print();\n break;\n case 'Image':\n this.parent.notify(events.insertImage, {\n member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n case 'CreateTable':\n this.parent.notify(events.createTable, {\n member: 'table', args: args, selection: save\n });\n break;\n case 'SourceCode':\n this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });\n break;\n case 'Preview':\n this.parent.notify(events.updateSource, { member: 'updateSource', args: args });\n break;\n case 'FontColor':\n case 'BackgroundColor':\n break;\n case 'File':\n this.parent.notify(events.renderFileManager, {\n member: 'fileManager', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle\n });\n break;\n default:\n this.parent.formatter.process(this.parent, args, args.originalEvent, null);\n break;\n }\n }\n };\n HtmlEditor.prototype.renderColorPicker = function (args) {\n this.colorPickerModule.renderColorPickerInput(args);\n };\n HtmlEditor.prototype.instantiateRenderer = function () {\n if (this.parent.iframeSettings.enable) {\n this.renderFactory.addRenderer(RenderType.Content, new IframeContentRender(this.parent, this.locator));\n }\n else {\n this.renderFactory.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n }\n };\n HtmlEditor.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.initialEnd, this.render);\n this.parent.off(events.modelChanged, this.onPropertyChanged);\n this.parent.off(events.htmlToolbarClick, this.onToolbarClick);\n this.parent.off(events.renderColorPicker, this.renderColorPicker);\n this.parent.off(events.destroy, this.destroy);\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.initialLoad, this.instantiateRenderer);\n this.parent.off(events.selectAll, this.selectAll);\n this.parent.off(events.selectRange, this.selectRange);\n this.parent.off(events.getSelectedHtml, this.getSelectedHtml);\n this.parent.off(events.selectionSave, this.onSelectionSave);\n this.parent.off(events.selectionRestore, this.onSelectionRestore);\n this.parent.off(events.readOnlyMode, this.updateReadOnly);\n this.parent.off(events.paste, this.onPaste);\n };\n HtmlEditor.prototype.render = function () {\n this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps, undoRedoTimer: this.parent.undoRedoTimer };\n if (isNullOrUndefined(this.parent.formatter)) {\n var formatterClass = new HTMLFormatter({\n currentDocument: this.contentRenderer.getDocument(),\n element: editElement,\n options: option\n });\n this.parent.setProperties({ formatter: formatterClass }, true);\n }\n else {\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n if (this.parent.enableXhtml) {\n this.parent.notify(events.xhtmlValidation, {});\n }\n if (this.parent.toolbarSettings.enable) {\n this.toolbarUpdate = new HtmlToolbarStatus(this.parent);\n }\n if (this.parent.inlineMode.enable) {\n if (!isNullOrUndefined(this.parent.fontFamily.default)) {\n editElement.style.fontFamily = this.parent.fontFamily.default;\n }\n if (!isNullOrUndefined(this.parent.fontSize.default)) {\n editElement.style.fontSize = this.parent.fontSize.default;\n }\n }\n this.parent.notify(events.bindOnEnd, {});\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RichTextEditorModel} e - specifies the editor model\n * @returns {void}\n * @hidden\n\n */\n HtmlEditor.prototype.onPropertyChanged = function (e) {\n // On property code change here\n if (!isNullOrUndefined(e.newProp.formatter)) {\n var editElement = this.contentRenderer.getEditPanel();\n var option = { undoRedoSteps: this.parent.undoRedoSteps,\n undoRedoTimer: this.parent.undoRedoTimer };\n this.parent.formatter.updateFormatter(editElement, this.contentRenderer.getDocument(), option);\n }\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {string} - returns the string value\n * @hidden\n */\n HtmlEditor.prototype.getModuleName = function () {\n return 'htmlEditor';\n };\n /**\n * For selecting all content in RTE\n *\n * @returns {void}\n * @private\n * @hidden\n */\n HtmlEditor.prototype.selectAll = function () {\n var nodes = getTextNodesUnder(this.parent.contentModule.getDocument(), this.parent.contentModule.getEditPanel());\n if (nodes.length > 0) {\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.parent.contentModule.getDocument(), nodes[0], nodes[nodes.length - 1], 0, nodes[nodes.length - 1].textContent.length);\n }\n };\n /**\n * For selecting all content in RTE\n *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @private\n * @hidden\n */\n HtmlEditor.prototype.selectRange = function (e) {\n this.parent.formatter.editorManager.nodeSelection.setRange(this.parent.contentModule.getDocument(), e.range);\n };\n /**\n * For get a selected text in RTE\n *\n * @param {NotifyArgs} e - specifies the notified arguments\n * @returns {void}\n * @hidden\n */\n HtmlEditor.prototype.getSelectedHtml = function (e) {\n e.callBack(this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument()).toString());\n };\n return HtmlEditor;\n}());\nexport { HtmlEditor };\n","import { addClass, detach, EventHandler, isNullOrUndefined, select, Ajax, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser, closest, removeClass, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as classes from '../base/classes';\nimport { Uploader, TextBox } from '@syncfusion/ej2-inputs';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { RenderType } from '../base/enum';\nimport { dispatchEvent, parseHtml, hasClass, convertToBlob } from '../base/util';\nimport { isIDevice } from '../../common/util';\n/**\n * `Image` module is used to handle image actions.\n */\nvar Image = /** @class */ (function () {\n function Image(parent, serviceLocator) {\n this.isImgUploaded = false;\n this.isAllowedTypes = true;\n this.pageX = null;\n this.pageY = null;\n this.deletedImg = [];\n this.parent = parent;\n this.rteID = parent.element.id;\n this.i10n = serviceLocator.getService('rteLocale');\n this.rendererFactory = serviceLocator.getService('rendererFactory');\n this.dialogRenderObj = serviceLocator.getService('dialogRenderObject');\n this.addEventListener();\n }\n Image.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on(events.keyDown, this.onKeyDown, this);\n this.parent.on(events.keyUp, this.onKeyUp, this);\n this.parent.on(events.insertImage, this.insertImage, this);\n this.parent.on(events.showImageDialog, this.showDialog, this);\n this.parent.on(events.closeImageDialog, this.closeDialog, this);\n this.parent.on(events.windowResize, this.onWindowResize, this);\n this.parent.on(events.insertCompleted, this.showImageQuickToolbar, this);\n this.parent.on(events.clearDialogObj, this.clearDialogObj, this);\n this.parent.on(events.imageToolbarAction, this.onToolbarAction, this);\n this.parent.on(events.imageCaption, this.caption, this);\n this.parent.on(events.imageDelete, this.deleteImg, this);\n this.parent.on(events.imageLink, this.insertImgLink, this);\n this.parent.on(events.imageAlt, this.insertAltText, this);\n this.parent.on(events.editAreaClick, this.editAreaClickHandler, this);\n this.parent.on(events.iframeMouseDown, this.onIframeMouseDown, this);\n this.parent.on(events.imageSize, this.imageSize, this);\n this.parent.on(events.dropDownSelect, this.alignmentSelect, this);\n this.parent.on(events.initialEnd, this.afterRender, this);\n this.parent.on(events.dynamicModule, this.afterRender, this);\n this.parent.on(events.paste, this.imagePaste, this);\n this.parent.on(events.destroy, this.removeEventListener, this);\n };\n Image.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off(events.keyDown, this.onKeyDown);\n this.parent.off(events.keyUp, this.onKeyUp);\n this.parent.off(events.windowResize, this.onWindowResize);\n this.parent.off(events.insertImage, this.insertImage);\n this.parent.off(events.showImageDialog, this.showDialog);\n this.parent.off(events.closeImageDialog, this.closeDialog);\n this.parent.off(events.insertCompleted, this.showImageQuickToolbar);\n this.parent.off(events.clearDialogObj, this.clearDialogObj);\n this.parent.off(events.imageCaption, this.caption);\n this.parent.off(events.imageToolbarAction, this.onToolbarAction);\n this.parent.off(events.imageDelete, this.deleteImg);\n this.parent.off(events.imageLink, this.insertImgLink);\n this.parent.off(events.imageAlt, this.insertAltText);\n this.parent.off(events.editAreaClick, this.editAreaClickHandler);\n this.parent.off(events.iframeMouseDown, this.onIframeMouseDown);\n this.parent.off(events.imageSize, this.imageSize);\n this.parent.off(events.dropDownSelect, this.alignmentSelect);\n this.parent.off(events.initialEnd, this.afterRender);\n this.parent.off(events.dynamicModule, this.afterRender);\n this.parent.off(events.paste, this.imagePaste);\n this.parent.off(events.destroy, this.removeEventListener);\n var dropElement = this.parent.iframeSettings.enable ? this.parent.inputElement.ownerDocument\n : this.parent.inputElement;\n dropElement.removeEventListener('drop', this.dragDrop.bind(this), true);\n dropElement.removeEventListener('dragstart', this.dragStart.bind(this), true);\n dropElement.removeEventListener('dragenter', this.dragEnter.bind(this), true);\n dropElement.removeEventListener('dragover', this.dragOver.bind(this), true);\n if (!isNullOrUndefined(this.contentModule)) {\n EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick);\n this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);\n EventHandler.remove(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick);\n EventHandler.remove(this.contentModule.getEditPanel(), 'cut', this.onCutHandler);\n }\n }\n };\n Image.prototype.onIframeMouseDown = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n Image.prototype.afterRender = function () {\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n EventHandler.add(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick, this);\n if (this.parent.insertImageSettings.resize) {\n EventHandler.add(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart, this);\n EventHandler.add(this.parent.element.ownerDocument, 'mousedown', this.onDocumentClick, this);\n EventHandler.add(this.contentModule.getEditPanel(), 'cut', this.onCutHandler, this);\n }\n var dropElement = this.parent.iframeSettings.enable ? this.parent.inputElement.ownerDocument :\n this.parent.inputElement;\n dropElement.addEventListener('drop', this.dragDrop.bind(this), true);\n dropElement.addEventListener('dragstart', this.dragStart.bind(this), true);\n dropElement.addEventListener('dragenter', this.dragOver.bind(this), true);\n dropElement.addEventListener('dragover', this.dragOver.bind(this), true);\n };\n Image.prototype.undoStack = function (args) {\n if (args.subCommand.toLowerCase() === 'undo' || args.subCommand.toLowerCase() === 'redo') {\n for (var i = 0; i < this.parent.formatter.getUndoRedoStack().length; i++) {\n var temp = this.parent.createElement('div');\n var contentElem = parseHtml(this.parent.formatter.getUndoRedoStack()[i].text);\n temp.appendChild(contentElem);\n var img = temp.querySelectorAll('img');\n if (temp.querySelector('.e-img-resize') && img.length > 0) {\n for (var j = 0; j < img.length; j++) {\n img[j].style.outline = '';\n }\n detach(temp.querySelector('.e-img-resize'));\n this.parent.formatter.getUndoRedoStack()[i].text = temp.innerHTML;\n }\n }\n }\n };\n Image.prototype.resizeEnd = function (e) {\n this.resizeBtnInit();\n this.imgEle.parentElement.style.cursor = 'auto';\n if (Browser.isDevice) {\n removeClass([e.target.parentElement], 'e-mob-span');\n }\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStop, args);\n /* eslint-disable */\n var pageX = this.getPointX(e);\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;\n /* eslint-enable */\n this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);\n this.parent.formatter.saveData();\n };\n Image.prototype.resizeStart = function (e, ele) {\n var _this = this;\n if (this.parent.readonly) {\n return;\n }\n var target = ele ? ele : e.target;\n this.prevSelectedImgEle = this.imgEle;\n if (target.tagName === 'IMG') {\n this.parent.preventDefaultResize(e);\n var img = target;\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n detach(this.imgResizeDiv);\n }\n this.imageResize(img);\n }\n if (target.classList.contains('e-rte-imageboxmark')) {\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.pageX = this.getPointX(e);\n this.pageY = this.getPointY(e);\n e.preventDefault();\n e.stopImmediatePropagation();\n this.resizeBtnInit();\n if (this.quickToolObj) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n if (target.classList.contains('e-rte-topLeft')) {\n this.resizeBtnStat.topLeft = true;\n }\n if (target.classList.contains('e-rte-topRight')) {\n this.resizeBtnStat.topRight = true;\n }\n if (target.classList.contains('e-rte-botLeft')) {\n this.resizeBtnStat.botLeft = true;\n }\n if (target.classList.contains('e-rte-botRight')) {\n this.resizeBtnStat.botRight = true;\n }\n if (Browser.isDevice && this.contentModule.getEditPanel().contains(this.imgResizeDiv) &&\n !this.imgResizeDiv.classList.contains('e-mob-span')) {\n addClass([this.imgResizeDiv], 'e-mob-span');\n }\n else {\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.resizeStart, args, function (resizeStartArgs) {\n if (resizeStartArgs.cancel) {\n _this.cancelResizeAction();\n }\n });\n }\n EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);\n }\n };\n Image.prototype.imageClick = function (e) {\n if (Browser.isDevice) {\n if ((e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') ||\n (e.target.tagName === 'IMG')) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'false');\n e.target.focus();\n }\n else {\n if (!this.parent.readonly) {\n this.contentModule.getEditPanel().setAttribute('contenteditable', 'true');\n }\n }\n }\n if (e.target.tagName === 'IMG' &&\n e.target.parentElement.tagName === 'A') {\n e.preventDefault();\n }\n };\n Image.prototype.onCutHandler = function () {\n if (this.imgResizeDiv && this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n };\n Image.prototype.imageResize = function (e) {\n this.resizeBtnInit();\n this.imgEle = e;\n addClass([this.imgEle], 'e-resize');\n this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'\n }));\n this.imgResizeDiv.appendChild(this.parent.createElement('span', {\n className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'\n }));\n if (Browser.isDevice) {\n addClass([this.imgResizeDiv], 'e-mob-rte');\n }\n e.style.outline = '2px solid #4a90e2';\n this.imgResizePos(e, this.imgResizeDiv);\n this.resizeImgDupPos(e);\n this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);\n EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);\n };\n Image.prototype.getPointX = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageX;\n }\n else {\n return e.pageX;\n }\n };\n Image.prototype.getPointY = function (e) {\n if (e.touches && e.touches.length) {\n return e.touches[0].pageY;\n }\n else {\n return e.pageY;\n }\n };\n Image.prototype.imgResizePos = function (e, imgResizeDiv) {\n var pos = this.calcPos(e);\n var top = pos.top;\n var left = pos.left;\n var imgWid = e.width;\n var imgHgt = e.height;\n var borWid = (Browser.isDevice) ? (4 * parseInt((e.style.outline.slice(-3)), 10)) + 2 :\n (2 * parseInt((e.style.outline.slice(-3)), 10)) + 2; //span border width + image outline width\n var devWid = ((Browser.isDevice) ? 0 : 2); // span border width\n imgResizeDiv.querySelector('.e-rte-botLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-botLeft').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-botRight').style.top = ((imgHgt - borWid) + top) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.left = ((imgWid - (borWid - devWid)) + left) + 'px';\n imgResizeDiv.querySelector('.e-rte-topRight').style.top = (top - (borWid)) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.left = (left - borWid) + 'px';\n imgResizeDiv.querySelector('.e-rte-topLeft').style.top = (top - borWid) + 'px';\n };\n Image.prototype.calcPos = function (elem) {\n var ignoreOffset = ['TD', 'TH', 'TABLE', 'A'];\n var parentOffset = { top: 0, left: 0 };\n var doc = elem.ownerDocument;\n var offsetParent = ((elem.offsetParent && (elem.offsetParent.classList.contains('e-img-caption') ||\n ignoreOffset.indexOf(elem.offsetParent.tagName) > -1)) ?\n closest(elem, '#' + this.parent.getID() + '_rte-edit-view') : elem.offsetParent) || doc.documentElement;\n while (offsetParent &&\n (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n offsetParent.style.position === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n // eslint-disable-next-line\n parentOffset = offsetParent.getBoundingClientRect();\n }\n return {\n top: elem.offsetTop,\n left: elem.offsetLeft\n };\n };\n Image.prototype.setAspectRatio = function (img, expectedX, expectedY, e) {\n if (isNullOrUndefined(img.width)) {\n return;\n }\n var width = img.style.width !== '' ? img.style.width.match(/^\\d+(\\.\\d*)?%$/g) ? parseFloat(img.style.width) :\n parseInt(img.style.width, 10) : img.width;\n var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;\n if (width > height) {\n img.style.minWidth = '20px';\n if (this.parent.insertImageSettings.resizeByPercent) {\n if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {\n var percentageValue = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement));\n img.style.width = Math.min(Math.round((percentageValue / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';\n }\n else {\n img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n }\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width === '' && img.style.height !== '') {\n img.style.height = expectedY + 'px';\n }\n else if (img.style.width !== '' && img.style.height === '') {\n var currentWidth = ((width / height * expectedY) + width / height) < (this.parent.inputElement.getBoundingClientRect().right - 32) ?\n ((width / height * expectedY) + width / height) : (this.parent.inputElement.getBoundingClientRect().right - 32);\n img.style.width = currentWidth.toString() + 'px';\n }\n else if (img.style.width !== '') {\n var currentWidth = (width / height * expectedY) < (this.parent.inputElement.getBoundingClientRect().right - 32) ?\n (width / height * expectedY) : (this.parent.inputElement.getBoundingClientRect().right - 32);\n img.style.width = currentWidth + 'px';\n img.style.height = expectedY + 'px';\n }\n else {\n img.setAttribute('width', ((width / height * expectedY) + width / height).toString());\n }\n }\n else if (height > width) {\n if (this.parent.insertImageSettings.resizeByPercent) {\n if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {\n img.style.width = Math.min(Math.round((width / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';\n }\n else {\n img.style.width = this.pixToPerc((expectedX / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';\n }\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = (height / width * expectedX) + 'px';\n }\n else {\n img.setAttribute('width', this.resizeBtnStat.botRight ? (this.getPointX(e.event) - img.getBoundingClientRect().left).toString() : expectedX.toString());\n }\n }\n else {\n if (this.parent.insertImageSettings.resizeByPercent) {\n img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';\n img.style.height = null;\n img.removeAttribute('height');\n }\n else if (img.style.width !== '') {\n img.style.width = expectedX + 'px';\n img.style.height = expectedX + 'px';\n }\n else {\n img.setAttribute('width', expectedX.toString());\n img.setAttribute('height', expectedX.toString());\n }\n }\n };\n Image.prototype.pixToPerc = function (expected, parentEle) {\n return expected / parseFloat(getComputedStyle(parentEle).width) * 100;\n };\n Image.prototype.imgDupMouseMove = function (width, height, e) {\n var _this = this;\n var args = { event: e, requestType: 'images' };\n this.parent.trigger(events.onResize, args, function (resizingArgs) {\n if (resizingArgs.cancel) {\n _this.cancelResizeAction();\n }\n else {\n if ((parseInt(_this.parent.insertImageSettings.minWidth, 10) >= parseInt(width, 10) ||\n (parseInt(_this.parent.getInsertImgMaxWidth(), 10) <= parseInt(width, 10) &&\n isNOU(_this.imgEle.style.width)))) {\n return;\n }\n if (!_this.parent.insertImageSettings.resizeByPercent &&\n (parseInt(_this.parent.insertImageSettings.minHeight, 10) >= parseInt(height, 10) ||\n parseInt(_this.parent.insertImageSettings.maxHeight, 10) <= parseInt(height, 10))) {\n return;\n }\n _this.imgEle.parentElement.style.cursor = 'pointer';\n _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10), args);\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.width !== '' && (this.parent.insertImageSettings &&\n !this.parent.insertImageSettings.resizeByPercent)) ? this.imgEle.style.width : e.width + 'px',\n height: (e.style.height !== '') ? this.imgEle.style.height : e.height + 'px'\n };\n };\n Image.prototype.resizeBtnInit = function () {\n return this.resizeBtnStat = { botLeft: false, botRight: false, topRight: false, topLeft: false };\n };\n Image.prototype.onToolbarAction = function (args) {\n if (isIDevice()) {\n this.parent.notify(events.selectionRestore, {});\n }\n var item = args.args.item;\n switch (item.subCommand) {\n case 'Replace':\n if (this.parent.fileManagerSettings.enable) {\n this.parent.notify(events.renderFileManager, args);\n }\n else {\n this.parent.notify(events.insertImage, args);\n }\n break;\n case 'Caption':\n this.parent.notify(events.imageCaption, args);\n break;\n case 'InsertLink':\n this.parent.notify(events.imageLink, args);\n break;\n case 'AltText':\n this.parent.notify(events.imageAlt, args);\n break;\n case 'Remove':\n this.parent.notify(events.imageDelete, args);\n break;\n case 'Dimension':\n this.parent.notify(events.imageSize, args);\n break;\n case 'OpenImageLink':\n this.openImgLink(args);\n break;\n case 'EditImageLink':\n this.editImgLink(args);\n break;\n case 'RemoveImageLink':\n this.removeImgLink(args);\n break;\n }\n };\n Image.prototype.openImgLink = function (e) {\n var target = e.selectParent[0].parentNode.target === '' ? '_self' : '_blank';\n this.parent.formatter.process(this.parent, e.args, e.args, {\n url: e.selectParent[0].parentNode.href, target: target, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n };\n Image.prototype.editImgLink = function (e) {\n var selectParentEle = e.selectParent[0].parentNode;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var inputDetails = {\n url: selectParentEle.href, target: selectParentEle.target,\n header: 'Edit Link', btnText: linkUpdate\n };\n this.insertImgLink(e, inputDetails);\n };\n Image.prototype.removeImgLink = function (e) {\n if (Browser.isIE) {\n this.contentModule.getEditPanel().focus();\n }\n e.selection.restore();\n var isCapLink = (this.contentModule.getEditPanel().contains(this.captionEle) && select('a', this.captionEle)) ?\n true : false;\n var selectParent = isCapLink ? [this.captionEle] : [e.selectNode[0].parentElement];\n this.parent.formatter.process(this.parent, e.args, e.args, {\n insertElement: e.selectNode[0], selectParent: selectParent, selection: e.selection,\n subCommand: e.args.item.subCommand\n });\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (isCapLink) {\n select('.e-img-inner', this.captionEle).focus();\n }\n };\n Image.prototype.onKeyDown = function (event) {\n var originalEvent = event.args;\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n this.deletedImg = [];\n var isCursor;\n var keyCodeValues = [27, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,\n 44, 45, 9, 16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 91, 92, 93, 144, 145, 182, 183];\n if (this.parent.editorMode === 'HTML') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n isCursor = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n }\n if (!isCursor && this.parent.editorMode === 'HTML' && keyCodeValues.indexOf(originalEvent.which) < 0) {\n var nodes = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeName === 'IMG') {\n this.deletedImg.push(nodes[i]);\n }\n }\n }\n if (this.parent.editorMode === 'HTML' && ((originalEvent.which === 8 && originalEvent.code === 'Backspace') ||\n (originalEvent.which === 46 && originalEvent.code === 'Delete'))) {\n var isCursor_1 = range.startContainer === range.endContainer && range.startOffset === range.endOffset;\n if ((originalEvent.which === 8 && originalEvent.code === 'Backspace' && isCursor_1)) {\n this.checkImageBack(range);\n }\n else if ((originalEvent.which === 46 && originalEvent.code === 'Delete' && isCursor_1)) {\n this.checkImageDel(range);\n }\n }\n if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) &&\n originalEvent.code !== 'KeyK') {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n if (!originalEvent.ctrlKey && originalEvent.key && (originalEvent.key.length === 1 || originalEvent.action === 'enter') &&\n (selectParentEle[0].tagName === 'IMG') && selectParentEle[0].parentElement) {\n var prev = selectParentEle[0].parentElement.childNodes[0];\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\n }\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), prev, prev, prev.textContent.length, prev.textContent.length);\n removeClass([selectParentEle[0]], 'e-img-focus');\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {\n this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });\n }\n if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {\n if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG' && selectNodeEle.length < 1) {\n originalEvent.preventDefault();\n var event_1 = {\n selectNode: selectNodeEle, selection: save, selectParent: selectParentEle,\n args: {\n item: { command: 'Images', subCommand: 'Remove' },\n originalEvent: originalEvent\n }\n };\n this.deleteImg(event_1, originalEvent.keyCode);\n }\n if (this.parent.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\n }\n }\n if (originalEvent.code === 'Backspace') {\n originalEvent.action = 'backspace';\n }\n switch (originalEvent.action) {\n case 'escape':\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.close();\n }\n break;\n case 'backspace':\n case 'delete':\n for (var i = 0; i < this.deletedImg.length; i++) {\n var src = this.deletedImg[i].src;\n this.imageRemovePost(src);\n }\n if (this.parent.editorMode !== 'Markdown') {\n if (range.startContainer.nodeType === 3) {\n if (originalEvent.code === 'Backspace') {\n if (range.startContainer.previousElementSibling && range.startOffset === 0 &&\n range.startContainer.previousElementSibling.classList.contains(classes.CLS_CAPTION) &&\n range.startContainer.previousElementSibling.classList.contains(classes.CLS_CAPINLINE)) {\n detach(range.startContainer.previousElementSibling);\n }\n }\n else {\n if (range.startContainer.nextElementSibling &&\n range.endContainer.textContent.length === range.endOffset &&\n range.startContainer.nextElementSibling.classList.contains(classes.CLS_CAPTION) &&\n range.startContainer.nextElementSibling.classList.contains(classes.CLS_CAPINLINE)) {\n detach(range.startContainer.nextElementSibling);\n }\n }\n }\n else if ((range.startContainer.nodeType === 1 &&\n range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE))) {\n detach(range.startContainer.querySelector('.' + classes.CLS_CAPTION + '.' + classes.CLS_CAPINLINE));\n }\n }\n break;\n case 'insert-image':\n this.openDialog(true, originalEvent, save, selectNodeEle, selectParentEle);\n originalEvent.preventDefault();\n break;\n }\n };\n Image.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {\n var range;\n var save;\n var selectNodeEle;\n var selectParentEle;\n if (!isInternal && !isNOU(this.parent.formatter.editorManager.nodeSelection)) {\n range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectParentEle = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = selection;\n selectNodeEle = ele;\n selectParentEle = parentEle;\n }\n if (this.parent.editorMode === 'HTML') {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: event\n },\n selectNode: selectNodeEle,\n selection: save,\n selectParent: selectParentEle\n });\n }\n else {\n this.insertImage({\n args: {\n item: { command: 'Images', subCommand: 'Image' },\n originalEvent: event\n },\n member: 'image',\n text: this.parent.formatter.editorManager.markdownSelection.getSelectedText(this.parent.contentModule.getEditPanel()),\n module: 'Markdown',\n name: 'insertImage'\n });\n }\n };\n Image.prototype.showDialog = function () {\n this.openDialog(false);\n };\n Image.prototype.closeDialog = function () {\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n }\n };\n // eslint-disable-next-line\n Image.prototype.onKeyUp = function (event) {\n if (!isNOU(this.deletedImg) && this.deletedImg.length > 0) {\n for (var i = 0; i < this.deletedImg.length; i++) {\n var args = {\n element: this.deletedImg[i],\n src: this.deletedImg[i].getAttribute('src')\n };\n this.parent.trigger(events.afterImageDelete, args);\n }\n }\n };\n Image.prototype.checkImageBack = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === 0 &&\n !isNOU(range.startContainer.previousSibling) && range.startContainer.previousSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.previousSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset - 1]) &&\n range.startContainer.childNodes[range.startOffset - 1].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset - 1]);\n }\n };\n Image.prototype.checkImageDel = function (range) {\n if (range.startContainer.nodeName === '#text' && range.startOffset === range.startContainer.textContent.length &&\n !isNOU(range.startContainer.nextSibling) && range.startContainer.nextSibling.nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.nextSibling);\n }\n else if (range.startContainer.nodeName !== '#text' && !isNOU(range.startContainer.childNodes[range.startOffset]) &&\n range.startContainer.childNodes[range.startOffset].nodeName === 'IMG') {\n this.deletedImg.push(range.startContainer.childNodes[range.startOffset]);\n }\n };\n Image.prototype.alignmentSelect = function (e) {\n var item = e.item;\n if (!document.body.contains(document.body.querySelector('.e-rte-quick-toolbar')) || item.command !== 'Images') {\n return;\n }\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);\n selectNodeEle = (selectNodeEle[0].nodeName === 'IMG') ? selectNodeEle : [this.imgEle];\n var args = { args: e, selectNode: selectNodeEle };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n switch (item.subCommand) {\n case 'JustifyLeft':\n this.alignImage(args, 'JustifyLeft');\n break;\n case 'JustifyCenter':\n this.alignImage(args, 'JustifyCenter');\n break;\n case 'JustifyRight':\n this.alignImage(args, 'JustifyRight');\n break;\n case 'Inline':\n this.inline(args);\n break;\n case 'Break':\n this.break(args);\n break;\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNodeEle[0]], 'e-img-focus');\n }\n this.cancelResizeAction();\n };\n Image.prototype.imageWithLinkQTBarItemUpdate = function () {\n var separator;\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n addClass([items[i]], 'e-link-groups');\n items[i].style.display = 'none';\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = '';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n // eslint-disable-next-line\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n };\n Image.prototype.showImageQuickToolbar = function (e) {\n var _this = this;\n if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)\n || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar) || isNullOrUndefined(e.args)) {\n return;\n }\n this.quickToolObj = this.parent.quickToolbarModule;\n var args = e.args;\n var target = e.elements;\n [].forEach.call(e.elements, function (element, index) {\n if (index === 0) {\n target = element;\n }\n });\n if (target && !closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n if (target.nodeName === 'IMG') {\n addClass([target], ['e-img-focus']);\n }\n var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +\n this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;\n if (this.parent.quickToolbarModule.imageQTBar) {\n if (e.isNotify) {\n setTimeout(function () {\n _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }, 400);\n }\n else {\n this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);\n }\n }\n };\n Image.prototype.hideImageQuickToolbar = function () {\n if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {\n removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');\n if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n }\n };\n Image.prototype.editAreaClickHandler = function (e) {\n if (this.parent.readonly) {\n this.hideImageQuickToolbar();\n return;\n }\n var args = e.args;\n var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;\n if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {\n if ((showOnRightClick && args.which === 1) && !isNullOrUndefined(args.target) &&\n args.target.tagName === 'IMG') {\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), args.target);\n }\n return;\n }\n if (this.parent.editorMode === 'HTML' && this.parent.quickToolbarModule && this.parent.quickToolbarModule.imageQTBar) {\n this.quickToolObj = this.parent.quickToolbarModule;\n var target = args.target;\n this.contentModule = this.rendererFactory.getRenderer(RenderType.Content);\n var isPopupOpen = this.quickToolObj.imageQTBar.element.classList.contains('e-rte-pop');\n if (target.nodeName === 'IMG' && this.parent.quickToolbarModule) {\n if (isPopupOpen) {\n return;\n }\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), target);\n if (isIDevice()) {\n this.parent.notify(events.selectionSave, e);\n }\n addClass([target], 'e-img-focus');\n var items = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item');\n var separator = void 0;\n if (closest(target, 'a')) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].getAttribute('title') === this.i10n.getConstant('openLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('editLink') ||\n items[i].getAttribute('title') === this.i10n.getConstant('removeLink')) {\n items[i].style.display = '';\n removeClass([items[i]], 'e-link-groups');\n }\n else if (items[i].getAttribute('title') === 'Insert Link') {\n items[i].style.display = 'none';\n }\n else if (items[i].classList.contains('e-rte-horizontal-separator')) {\n // eslint-disable-next-line\n separator = items[i];\n detach(items[i]);\n }\n }\n var newItems = this.quickToolObj.imageQTBar.toolbarElement.querySelectorAll('.e-toolbar-item:not(.e-link-groups)');\n this.quickToolObj.imageQTBar.addQTBarItem(['-'], Math.round(newItems.length / 2));\n }\n else if (!closest(target, 'a')) {\n this.imageWithLinkQTBarItemUpdate();\n }\n this.showImageQuickToolbar({ args: args, type: 'Images', elements: [args.target] });\n }\n else {\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.insertImgLink = function (e, inputDetails) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });\n var linkUrl = this.i10n.getConstant('linkurl');\n var content = '
    ' +\n '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = parseHtml(content);\n linkWrap.appendChild(contentElem);\n var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');\n var inputLink = linkWrap.querySelector('.e-img-link');\n var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');\n this.checkBoxObj = new CheckBox({\n label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, change: function (e) {\n if (e.checked) {\n target_1 = '_blank';\n }\n else {\n target_1 = null;\n }\n }\n });\n this.checkBoxObj.isStringTemplate = true;\n this.checkBoxObj.createElement = this.parent.createElement;\n this.checkBoxObj.appendTo(linkTarget);\n var target_1 = this.checkBoxObj.checked ? '_blank' : null;\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var linkargs_1 = {\n args: e.args,\n selfImage: this, selection: e.selection,\n selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1\n };\n this.dialogObj.setProperties({\n height: 'inherit',\n width: '290px',\n header: this.parent.localeObj.getConstant('imageInsertLinkHeader'),\n content: linkWrap,\n position: { X: 'center', Y: 'center' },\n buttons: [{\n // eslint-disable-next-line\n click: function (e) {\n _this.insertlink(linkargs_1);\n },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true\n }\n }]\n });\n if (!isNullOrUndefined(inputDetails)) {\n inputLink.value = inputDetails.url;\n // eslint-disable-next-line\n (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;\n this.dialogObj.header = inputDetails.header;\n }\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAltText = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n var altText = this.i10n.getConstant('altText');\n if (!isNullOrUndefined(this.dialogObj)) {\n var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });\n var altHeader = this.i10n.getConstant('alternateHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :\n e.selectNode[0].getAttribute('alt');\n var content = '
    ' +\n '' +\n '
    ';\n var contentElem = parseHtml(content);\n altWrap.appendChild(contentElem);\n var inputAlt = altWrap.querySelector('.e-img-alt');\n var altArgs_1 = {\n args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode,\n alt: inputAlt\n };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: altHeader, content: altWrap, position: { X: 'center', Y: 'center' },\n buttons: [{\n // eslint-disable-next-line\n click: function (e) {\n _this.insertAlt(altArgs_1);\n },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.insertAlt = function (e) {\n if (!isNullOrUndefined(e.alt)) {\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n var altText = e.alt.value;\n this.parent.formatter.process(this.parent, e.args, e.args, {\n altText: altText, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n this.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.insertlink = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var url = e.link.value;\n if (url === '') {\n addClass([e.link], 'e-error');\n e.link.setSelectionRange(0, url.length);\n e.link.focus();\n return;\n }\n if (!this.isUrl(url)) {\n url = 'http://' + url;\n }\n else {\n removeClass([e.link], 'e-error');\n }\n var proxy = e.selfImage;\n if (proxy.parent.editorMode === 'HTML') {\n e.selection.restore();\n }\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (e.selectNode[0].parentElement.nodeName === 'A') {\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n proxy.dialogObj.hide({ returnValue: true });\n return;\n }\n proxy.parent.formatter.process(proxy.parent, e.args, e.args, {\n url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand, selection: e.selection\n });\n var captionEle = closest(e.selectNode[0], '.e-img-caption');\n if (captionEle) {\n select('.e-img-inner', captionEle).focus();\n }\n if (captionEle) {\n select('.e-img-inner', captionEle).focus();\n }\n proxy.dialogObj.hide({ returnValue: false });\n };\n Image.prototype.isUrl = function (url) {\n // eslint-disable-next-line\n var regexp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/gi;\n return regexp.test(url);\n };\n Image.prototype.deleteImg = function (e, keyCode) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var args = {\n element: e.selectNode[0],\n src: e.selectNode[0].getAttribute('src')\n };\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n e.selection.restore();\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n this.removeResizeEle();\n }\n this.parent.formatter.process(this.parent, e.args, e.args, {\n selectNode: e.selectNode,\n captionClass: classes.CLS_CAPTION,\n subCommand: e.args.item.subCommand\n });\n this.imageRemovePost(args.src);\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n }\n this.cancelResizeAction();\n if (isNullOrUndefined(keyCode)) {\n this.parent.trigger(events.afterImageDelete, args);\n }\n };\n Image.prototype.imageRemovePost = function (src) {\n var proxy = this;\n var absoluteUrl = '';\n if (isNOU(this.parent.insertImageSettings.removeUrl) || this.parent.insertImageSettings.removeUrl === '') {\n return;\n }\n if (src.indexOf('http://') > -1 || src.indexOf('https://') > -1) {\n absoluteUrl = src;\n }\n else {\n absoluteUrl = new URL(src, document.baseURI).href;\n }\n this.removingImgName = absoluteUrl.replace(/^.*[\\\\\\/]/, '');\n var xhr = new XMLHttpRequest();\n xhr.addEventListener(\"readystatechange\", function () {\n if (this.readyState == 4 && this.status == 200) {\n proxy.triggerPost(this.response);\n }\n });\n xhr.open('GET', absoluteUrl);\n xhr.responseType = 'blob';\n xhr.send();\n };\n Image.prototype.triggerPost = function (response) {\n var removeUrl = this.parent.insertImageSettings.removeUrl;\n if (isNOU(removeUrl) || removeUrl === '') {\n return;\n }\n var file = new File([response], this.removingImgName);\n var ajax = new Ajax(removeUrl, 'POST', true, null);\n var formData = new FormData();\n formData.append('UploadFiles', file);\n ajax.send(formData);\n };\n Image.prototype.caption = function (e) {\n var selectNode = e.selectNode[0];\n if (selectNode.nodeName !== 'IMG') {\n return;\n }\n e.selection.restore();\n if (this.parent.formatter.getUndoRedoStack().length === 0) {\n this.parent.formatter.saveData();\n }\n this.cancelResizeAction();\n addClass([selectNode], 'e-rte-image');\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Caption';\n if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {\n detach(closest(selectNode, '.' + classes.CLS_CAPTION));\n if (Browser.isIE) {\n this.contentModule.getEditPanel().focus();\n e.selection.restore();\n }\n if (selectNode.parentElement.tagName === 'A') {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode.parentElement, selectNode: e.selectNode, subCommand: subCommand });\n }\n else {\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: selectNode, selectNode: e.selectNode, subCommand: subCommand });\n }\n }\n else {\n this.captionEle = this.parent.createElement('span', {\n className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION,\n attrs: { contenteditable: 'false', draggable: 'false', style: 'width:' + this.parent.insertImageSettings.width }\n });\n var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });\n var imgInner = this.parent.createElement('span', { className: 'e-img-inner',\n attrs: { contenteditable: 'true' } });\n var parent_1 = e.selectNode[0].parentElement;\n if (parent_1.tagName === 'A') {\n parent_1.setAttribute('contenteditable', 'true');\n }\n imgWrap.appendChild(parent_1.tagName === 'A' ? parent_1 : e.selectNode[0]);\n imgWrap.appendChild(imgInner);\n var imgCaption = this.i10n.getConstant('imageCaption');\n imgInner.innerHTML = imgCaption;\n this.captionEle.appendChild(imgWrap);\n if (selectNode.classList.contains(classes.CLS_IMGINLINE)) {\n addClass([this.captionEle], classes.CLS_CAPINLINE);\n }\n if (selectNode.classList.contains(classes.CLS_IMGBREAK)) {\n addClass([this.captionEle], classes.CLS_IMGBREAK);\n }\n if (selectNode.classList.contains(classes.CLS_IMGLEFT)) {\n addClass([this.captionEle], classes.CLS_IMGLEFT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGRIGHT)) {\n addClass([this.captionEle], classes.CLS_IMGRIGHT);\n }\n if (selectNode.classList.contains(classes.CLS_IMGCENTER)) {\n addClass([this.captionEle], classes.CLS_IMGCENTER);\n }\n this.parent.formatter.process(this.parent, e.args, e.args, { insertElement: this.captionEle, selectNode: e.selectNode, subCommand: subCommand });\n this.parent.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), imgInner.childNodes[0], imgInner.childNodes[0], 0, imgInner.childNodes[0].textContent.length);\n }\n if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n removeClass([selectNode], 'e-img-focus');\n }\n };\n Image.prototype.imageSize = function (e) {\n var _this = this;\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');\n var linkUpdate = this.i10n.getConstant('dialogUpdate');\n var dialogContent = this.imgsizeInput(e);\n var selectObj_1 = { args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode };\n this.dialogObj.setProperties({\n height: 'inherit', width: '290px', header: imgSizeHeader, content: dialogContent, position: { X: 'center', Y: 'center' },\n buttons: [{\n // eslint-disable-next-line\n click: function (e) {\n _this.insertSize(selectObj_1);\n },\n buttonModel: {\n content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true\n }\n }]\n });\n this.dialogObj.element.style.maxHeight = 'inherit';\n this.dialogObj.content.querySelector('input').focus();\n }\n };\n Image.prototype.break = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Break';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.inline = function (e) {\n if (e.selectNode[0].nodeName !== 'IMG') {\n return;\n }\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : 'Inline';\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.alignImage = function (e, type) {\n var subCommand = (e.args.item) ?\n e.args.item.subCommand : type;\n this.parent.formatter.process(this.parent, e.args, e.args, { selectNode: e.selectNode, subCommand: subCommand });\n };\n Image.prototype.clearDialogObj = function () {\n if (this.dialogObj) {\n this.dialogObj.destroy();\n detach(this.dialogObj.element);\n this.dialogObj = null;\n }\n };\n Image.prototype.imagDialog = function (e) {\n var _this = this;\n if (this.dialogObj) {\n this.dialogObj.hide({ returnValue: true });\n return;\n }\n var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });\n this.parent.element.appendChild(imgDialog);\n var imgInsert = this.i10n.getConstant('dialogInsert');\n var imglinkCancel = this.i10n.getConstant('dialogCancel');\n var imgHeader = this.i10n.getConstant('imageHeader');\n var selection = e.selection;\n var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };\n var dialogModel = {\n header: imgHeader,\n cssClass: classes.CLS_RTE_ELEMENTS,\n enableRtl: this.parent.enableRtl,\n locale: this.parent.locale,\n showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',\n position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },\n isModal: Browser.isDevice,\n buttons: [{\n click: this.insertImageUrl.bind(selectObj),\n buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true, disabled: true }\n },\n {\n click: function (e) {\n _this.cancelDialog(e);\n },\n buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }\n }],\n target: (Browser.isDevice) ? document.body : this.parent.element,\n animationSettings: { effect: 'None' },\n close: function (event) {\n if (_this.isImgUploaded) {\n _this.uploadObj.removing();\n }\n _this.parent.isBlur = false;\n if (event && event.event.returnValue) {\n if (_this.parent.editorMode === 'HTML') {\n selection.restore();\n }\n else {\n _this.parent.formatter.editorManager.markdownSelection.restore(_this.parent.contentModule.getEditPanel());\n }\n }\n _this.dialogObj.destroy();\n detach(_this.dialogObj.element);\n _this.dialogRenderObj.close(event);\n _this.dialogObj = null;\n }\n };\n var dialogContent = this.parent.createElement('div', { className: 'e-img-content' });\n if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML') {\n dialogContent.appendChild(this.imgUpload(e));\n }\n var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });\n var linkHeaderText = this.i10n.getConstant('imageLinkHeader');\n if (this.parent.editorMode === 'HTML') {\n linkHeader.innerHTML = linkHeaderText;\n }\n else {\n linkHeader.innerHTML = this.i10n.getConstant('mdimageLink');\n }\n dialogContent.appendChild(linkHeader);\n dialogContent.appendChild(this.imageUrlPopup(e));\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {\n dialogModel.header = this.parent.localeObj.getConstant('editImageHeader');\n dialogModel.content = dialogContent;\n }\n else {\n dialogModel.content = dialogContent;\n }\n this.dialogObj = this.dialogRenderObj.render(dialogModel);\n this.dialogObj.createElement = this.parent.createElement;\n this.dialogObj.appendTo(imgDialog);\n if (isNullOrUndefined(this.dialogObj)) {\n return;\n }\n if (e.selectNode && e.selectNode[0].nodeName === 'IMG' && (e.name === 'insertImage')) {\n this.dialogObj.element.querySelector('.e-insertImage').textContent = this.parent.localeObj.getConstant('dialogUpdate');\n }\n imgDialog.style.maxHeight = 'inherit';\n if (this.quickToolObj) {\n if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {\n this.quickToolObj.imageQTBar.hidePopup();\n if (!isNullOrUndefined(e.selectParent)) {\n removeClass([e.selectParent[0]], 'e-img-focus');\n }\n }\n if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {\n this.quickToolObj.inlineQTBar.hidePopup();\n }\n }\n };\n // eslint-disable-next-line\n Image.prototype.cancelDialog = function (e) {\n this.parent.isBlur = false;\n this.dialogObj.hide({ returnValue: true });\n if (this.isImgUploaded) {\n this.uploadObj.removing();\n }\n };\n Image.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (target.nodeName === 'IMG') {\n this.imgEle = target;\n }\n if (!isNullOrUndefined(this.dialogObj) && ((\n // eslint-disable-next-line\n !closest(target, '[id=' + \"'\" + this.dialogObj.element.id + \"'\" + ']') && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&\n !this.parent.getToolbarElement().contains(e.target)) ||\n (this.parent.getToolbarElement() && this.parent.getToolbarElement().contains(e.target) &&\n !closest(target, '#' + this.parent.getID() + '_toolbar_Image') &&\n !target.querySelector('#' + this.parent.getID() + '_toolbar_Image')))) {\n /* eslint-disable */\n if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {\n }\n else {\n this.dialogObj.hide({ returnValue: true });\n this.parent.isBlur = true;\n dispatchEvent(this.parent.element, 'focusout');\n }\n /* eslint-enable */\n }\n if (e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&\n this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&\n this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {\n this.cancelResizeAction();\n }\n if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n if (target.tagName !== 'IMG') {\n this.removeResizeEle();\n }\n if (target.tagName !== 'IMG' && !isNOU(this.imgEle)) {\n this.imgEle.style.outline = '';\n }\n else if (!isNOU(this.prevSelectedImgEle) && this.prevSelectedImgEle !== target) {\n this.prevSelectedImgEle.style.outline = '';\n }\n }\n };\n Image.prototype.removeResizeEle = function () {\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);\n EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);\n detach(this.contentModule.getEditPanel().querySelector('.e-img-resize'));\n };\n Image.prototype.onWindowResize = function () {\n if (!isNOU(this.contentModule) && !isNOU(this.contentModule.getEditPanel().querySelector('.e-img-resize'))) {\n this.cancelResizeAction();\n }\n };\n // eslint-disable-next-line\n Image.prototype.imageUrlPopup = function (e) {\n var _this = this;\n var imgUrl = this.parent.createElement('div', { className: 'imgUrl' });\n var placeUrl = this.i10n.getConstant('imageUrl');\n this.inputUrl = this.parent.createElement('input', {\n className: 'e-input e-img-url',\n attrs: { placeholder: placeUrl, spellcheck: 'false' }\n });\n this.inputUrl.addEventListener('input', function () {\n if (!isNOU(_this.inputUrl)) {\n if (_this.inputUrl.value.length === 0) {\n _this.dialogObj.getButtons(0).element.disabled = true;\n }\n else {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n }\n });\n imgUrl.appendChild(this.inputUrl);\n return imgUrl;\n };\n // eslint-disable-next-line\n Image.prototype.insertImageUrl = function (e) {\n var proxy = this.selfImage;\n proxy.isImgUploaded = false;\n var url = proxy.inputUrl.value;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {\n proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?\n classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);\n proxy.dialogObj.hide({ returnValue: false });\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, proxy.uploadUrl);\n proxy.uploadUrl.url = '';\n if (proxy.contentModule.getEditPanel().querySelector('.e-img-resize')) {\n proxy.imgEle.style.outline = '';\n proxy.removeResizeEle();\n }\n }\n else if (url !== '') {\n if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(\n // eslint-disable-next-line\n this.selection.range.startContainer.parentNode, '[id=' + \"'\" + proxy.contentModule.getPanel().id + \"'\" + ']'))) {\n proxy.contentModule.getEditPanel().focus();\n var range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.contentModule.getDocument());\n this.selection = proxy.parent.formatter.editorManager.nodeSelection.save(range, proxy.contentModule.getDocument());\n this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n var regex = /[\\w-]+.(jpg|png|jpeg|gif)/g;\n var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';\n var value = {\n cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: url, selection: this.selection, altText: matchUrl,\n selectParent: this.selectParent, width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.getInsertImgMaxWidth()\n },\n height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.parent.formatter.process(proxy.parent, this.args, this.args.originalEvent, value);\n proxy.dialogObj.hide({ returnValue: false });\n }\n };\n Image.prototype.imgsizeInput = function (e) {\n var _this = this;\n var selectNode = e.selectNode[0];\n var imgHeight = this.i10n.getConstant('imageHeight');\n var imgWidth = this.i10n.getConstant('imageWidth');\n var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });\n var widthVal = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||\n selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?\n this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();\n var heightVal = isNullOrUndefined(this.changedHeightValue) && (selectNode.style.height.toString() === 'auto' ||\n selectNode.style.height !== '') ? selectNode.style.height : !isNullOrUndefined(this.changedHeightValue) ?\n this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();\n this.changedWidthValue = null;\n this.changedHeightValue = null;\n var content = '
    ' +\n '
    ' + '
    ' +\n '
    ';\n var contentElem = parseHtml(content);\n imgSizeWrap.appendChild(contentElem);\n var widthNum = new TextBox({\n value: formatUnit(widthVal),\n enableRtl: this.parent.enableRtl,\n input: function (e) {\n _this.inputWidthValue = formatUnit(_this.inputValue(e.value));\n }\n });\n widthNum.createElement = this.parent.createElement;\n widthNum.appendTo(imgSizeWrap.querySelector('#imgwidth'));\n var heightNum = new TextBox({\n value: formatUnit(heightVal),\n enableRtl: this.parent.enableRtl,\n input: function (e) {\n _this.inputHeightValue = formatUnit(_this.inputValue(e.value));\n }\n });\n heightNum.createElement = this.parent.createElement;\n heightNum.appendTo(imgSizeWrap.querySelector('#imgheight'));\n return imgSizeWrap;\n };\n Image.prototype.inputValue = function (value) {\n if (value === 'auto' || value.indexOf('%') !== -1 || value.indexOf('px') !== -1\n || value.match(/(\\d+)/)) {\n return value;\n }\n else {\n return 'auto';\n }\n };\n Image.prototype.insertSize = function (e) {\n e.selection.restore();\n var proxy = e.selfImage;\n if (proxy.parent.formatter.getUndoRedoStack().length === 0) {\n proxy.parent.formatter.saveData();\n }\n var dialogEle = proxy.dialogObj.element;\n this.changedWidthValue = this.inputWidthValue;\n this.changedHeightValue = this.inputHeightValue;\n var width = dialogEle.querySelector('.e-img-width').value;\n var height = dialogEle.parentElement.querySelector('.e-img-height').value;\n proxy.parent.formatter.process(this.parent, e.args, e.args, {\n width: width, height: height, selectNode: e.selectNode,\n subCommand: e.args.item.subCommand\n });\n if (this.imgResizeDiv) {\n proxy.imgResizePos(e.selectNode[0], this.imgResizeDiv);\n }\n proxy.dialogObj.hide({ returnValue: true });\n };\n Image.prototype.insertImage = function (e) {\n this.imagDialog(e);\n if (!isNullOrUndefined(this.dialogObj)) {\n this.dialogObj.element.style.maxHeight = 'inherit';\n var dialogContent = this.dialogObj.element.querySelector('.e-img-content');\n if (((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')\n || this.parent.editorMode === 'HTML')) {\n document.getElementById(this.rteID + '_insertImage').focus();\n }\n else {\n dialogContent.querySelector('.e-img-url').focus();\n }\n }\n };\n Image.prototype.imgUpload = function (e) {\n var _this = this;\n var save;\n var selectParent;\n // eslint-disable-next-line\n var proxy = this;\n var iframe = proxy.parent.iframeSettings.enable;\n if (proxy.parent.editorMode === 'HTML' && (!iframe && isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '[id='\n // eslint-disable-next-line\n + \"'\" + this.parent.contentModule.getPanel().id + \"'\" + ']'))\n || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {\n this.contentModule.getEditPanel().focus();\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());\n selectParent = this.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);\n }\n else {\n save = e.selection;\n selectParent = e.selectParent;\n }\n var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });\n var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');\n var imgUpMsg = this.i10n.getConstant('imageUploadMessage');\n var span = this.parent.createElement('span', { className: 'e-droptext' });\n var spanMsg = this.parent.createElement('span', {\n className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)\n });\n span.appendChild(spanMsg);\n var btnEle = this.parent.createElement('button', {\n className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }\n });\n span.appendChild(btnEle);\n uploadParentEle.appendChild(span);\n var browserMsg = this.i10n.getConstant('browse');\n var button = new Button({ content: browserMsg, enableRtl: this.parent.enableRtl });\n button.isStringTemplate = true;\n button.createElement = this.parent.createElement;\n button.appendTo(btnEle);\n var btnClick = (Browser.isDevice) ? span : btnEle;\n EventHandler.add(btnClick, 'click', this.fileSelect, this);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n uploadParentEle.appendChild(uploadEle);\n var altText;\n var rawFile;\n var selectArgs;\n var filesData;\n var beforeUploadArgs;\n this.uploadObj = new Uploader({\n asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },\n dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n selected: function (e) {\n proxy.isImgUploaded = true;\n selectArgs = e;\n filesData = e.filesData;\n if (_this.parent.isServerRendered) {\n selectArgs = JSON.parse(JSON.stringify(e));\n e.cancel = true;\n rawFile = e.filesData;\n selectArgs.filesData = rawFile;\n }\n _this.parent.trigger(events.imageSelected, selectArgs, function (selectArgs) {\n if (!selectArgs.cancel) {\n _this.checkExtension(selectArgs.filesData[0]);\n altText = selectArgs.filesData[0].name;\n if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var reader_1 = new FileReader();\n // eslint-disable-next-line\n reader_1.addEventListener('load', function (e) {\n var url = _this.parent.insertImageSettings.saveFormat === 'Base64' ? reader_1.result :\n URL.createObjectURL(convertToBlob(reader_1.result));\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText,\n selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.getInsertImgMaxWidth()\n }, height: {\n height: proxy.parent.insertImageSettings.height,\n minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n if (isNullOrUndefined(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes\n && !isNullOrUndefined(_this.dialogObj)) {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n });\n reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);\n }\n if (_this.parent.isServerRendered) {\n /* eslint-disable */\n _this.uploadObj._internalRenderSelect(selectArgs, rawFile);\n /* eslint-enable */\n }\n }\n });\n },\n beforeUpload: function (args) {\n if (_this.parent.isServerRendered) {\n beforeUploadArgs = JSON.parse(JSON.stringify(args));\n beforeUploadArgs.filesData = filesData;\n args.cancel = true;\n _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {\n if (beforeUploadArgs.cancel) {\n return;\n }\n /* eslint-disable */\n _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?\n beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;\n _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?\n beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;\n _this.uploadObj.uploadFiles(rawFile, null);\n /* eslint-enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n }\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n _this.parent.trigger(events.imageUploading, e);\n }\n },\n success: function (e) {\n _this.parent.trigger(events.imageUploadSuccess, e, function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n // eslint-disable-next-line\n var value = { url: url, selection: save };\n proxy.uploadUrl = {\n url: url, selection: save, altText: altText, selectParent: selectParent,\n width: {\n width: proxy.parent.insertImageSettings.width, minWidth: proxy.parent.insertImageSettings.minWidth,\n maxWidth: proxy.parent.getInsertImgMaxWidth()\n }, height: {\n height: proxy.parent.insertImageSettings.height, minHeight: proxy.parent.insertImageSettings.minHeight,\n maxHeight: proxy.parent.insertImageSettings.maxHeight\n }\n };\n proxy.inputUrl.setAttribute('disabled', 'true');\n }\n if (e.operation === 'upload' && !isNullOrUndefined(_this.dialogObj)) {\n _this.dialogObj.getButtons(0).element.removeAttribute('disabled');\n }\n });\n },\n failure: function (e) {\n _this.parent.trigger(events.imageUploadFailed, e);\n },\n removing: function () {\n // eslint-disable-next-line\n _this.parent.trigger(events.imageRemoving, e, function (e) {\n proxy.isImgUploaded = false;\n _this.dialogObj.getButtons(0).element.disabled = true;\n proxy.inputUrl.removeAttribute('disabled');\n if (proxy.uploadUrl) {\n proxy.uploadUrl.url = '';\n }\n });\n }\n });\n this.uploadObj.isStringTemplate = true;\n this.uploadObj.createElement = this.parent.createElement;\n this.uploadObj.appendTo(uploadEle);\n return uploadParentEle;\n };\n Image.prototype.checkExtension = function (e) {\n if (this.uploadObj.allowedExtensions) {\n if (this.uploadObj.allowedExtensions.toLocaleLowerCase().indexOf(('.' + e.type).toLocaleLowerCase()) === -1) {\n this.dialogObj.getButtons(0).element.setAttribute('disabled', 'disabled');\n this.isAllowedTypes = false;\n }\n else {\n this.isAllowedTypes = true;\n }\n }\n };\n Image.prototype.fileSelect = function () {\n this.dialogObj.element.getElementsByClassName('e-file-select-wrap')[0].querySelector('button').click();\n return false;\n };\n Image.prototype.dragStart = function (e) {\n if (e.target.nodeName === 'IMG') {\n this.parent.trigger(events.actionBegin, e, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n e.preventDefault();\n }\n else {\n e.dataTransfer.effectAllowed = 'copyMove';\n e.target.classList.add(classes.CLS_RTE_DRAG_IMAGE);\n }\n });\n }\n else {\n return true;\n }\n };\n Image.prototype.dragEnter = function (e) {\n e.dataTransfer.dropEffect = 'copy';\n e.preventDefault();\n };\n Image.prototype.dragOver = function (e) {\n if ((Browser.info.name === 'edge' && e.dataTransfer.items[0].type.split('/')[0].indexOf('image') > -1) ||\n (Browser.isIE && e.dataTransfer.types[0] === 'Files')) {\n e.preventDefault();\n }\n else {\n return true;\n }\n };\n /**\n * Used to set range When drop an image\n *\n * @param {ImageDropEventArgs} args - specifies the image arguments.\n * @returns {void}\n */\n Image.prototype.dragDrop = function (args) {\n var _this = this;\n this.parent.trigger(events.beforeImageDrop, args, function (e) {\n var imgElement = _this.parent.inputElement.ownerDocument.querySelector('.' + classes.CLS_RTE_DRAG_IMAGE);\n var isImgOrFileDrop = (imgElement && imgElement.tagName === 'IMG') || e.dataTransfer.files.length > 0;\n if (!e.cancel && isImgOrFileDrop) {\n _this.parent.trigger(events.actionBegin, e, function (actionBeginArgs) {\n if (actionBeginArgs.cancel) {\n e.preventDefault();\n }\n else {\n if (closest(e.target, '#' + _this.parent.getID() + '_toolbar') ||\n _this.parent.inputElement.contentEditable === 'false') {\n e.preventDefault();\n return;\n }\n if (_this.parent.element.querySelector('.' + classes.CLS_IMG_RESIZE)) {\n detach(_this.imgResizeDiv);\n }\n e.preventDefault();\n var range = void 0;\n if (_this.contentModule.getDocument().caretRangeFromPoint) { //For chrome\n range = _this.contentModule.getDocument().caretRangeFromPoint(e.clientX, e.clientY);\n }\n else if ((e.rangeParent)) { //For mozilla firefox\n range = _this.contentModule.getDocument().createRange();\n range.setStart(e.rangeParent, e.rangeOffset);\n }\n else {\n range = _this.getDropRange(e.clientX, e.clientY); //For internet explorer\n }\n _this.parent.notify(events.selectRange, { range: range });\n var uploadArea = _this.parent.element.querySelector('.' + classes.CLS_DROPAREA);\n if (uploadArea) {\n return;\n }\n _this.insertDragImage(e);\n }\n });\n }\n else {\n if (isImgOrFileDrop) {\n e.preventDefault();\n }\n }\n });\n };\n /**\n * Used to calculate range on internet explorer\n *\n * @param {number} x - specifies the x range.\n * @param {number} y - specifies the y range.\n * @returns {void}\n */\n Image.prototype.getDropRange = function (x, y) {\n var startRange = this.contentModule.getDocument().createRange();\n this.parent.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), startRange);\n var elem = this.contentModule.getDocument().elementFromPoint(x, y);\n var startNode = (elem.childNodes.length > 0 ? elem.childNodes[0] : elem);\n var startCharIndexCharacter = 0;\n if (this.parent.inputElement.firstChild.innerHTML === '
    ') {\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 var imgElement = this.parent.inputElement.ownerDocument.querySelector('.' + classes.CLS_RTE_DRAG_IMAGE);\n if (e.dataTransfer.files.length > 0 && imgElement === null) { //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 if (imgElement && imgElement.tagName === 'IMG') {\n if (imgElement.nextElementSibling) {\n if (imgElement.nextElementSibling.classList.contains(classes.CLS_IMG_INNER)) {\n range.insertNode(imgElement.parentElement.parentElement);\n }\n else {\n range.insertNode(imgElement);\n }\n }\n else {\n range.insertNode(imgElement);\n }\n imgElement.classList.remove(classes.CLS_RTE_DRAG_IMAGE);\n var imgArgs_1 = { elements: [imgElement] };\n imgElement.addEventListener('load', function () {\n _this.parent.trigger(events.actionComplete, imgArgs_1);\n });\n this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());\n var args = e;\n this.resizeStart(args, imgElement);\n this.hideImageQuickToolbar();\n }\n }\n };\n Image.prototype.onSelect = function (args) {\n var _this = this;\n // eslint-disable-next-line\n var proxy = this;\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var parentElement = this.parent.createElement('ul', { className: classes.CLS_UPLOAD_FILES });\n this.parent.element.appendChild(parentElement);\n var validFiles = {\n name: '',\n size: 0,\n status: '',\n statusCode: '',\n type: '',\n rawFile: args.dataTransfer.files[0],\n validationMessages: {}\n };\n var imageTag = this.parent.createElement('IMG');\n imageTag.style.opacity = '0.5';\n imageTag.classList.add(classes.CLS_RTE_IMAGE);\n imageTag.classList.add(classes.CLS_IMGINLINE);\n imageTag.classList.add(classes.CLS_RESIZE);\n var file = validFiles.rawFile;\n var reader = new FileReader();\n reader.addEventListener('load', function () {\n var url = URL.createObjectURL(convertToBlob(reader.result));\n imageTag.src = proxy.parent.insertImageSettings.saveFormat === 'Blob' ? url : reader.result;\n });\n if (file) {\n reader.readAsDataURL(file);\n }\n range.insertNode(imageTag);\n this.uploadMethod(args, imageTag);\n var e = { elements: [imageTag] };\n imageTag.addEventListener('load', function () {\n _this.parent.trigger(events.actionComplete, e);\n });\n detach(parentElement);\n };\n /**\n * Rendering uploader and popup for drag and drop\n *\n * @param {DragEvent} dragEvent - specifies the event.\n * @param {HTMLImageElement} imageElement - specifies the element.\n * @returns {void}\n */\n Image.prototype.uploadMethod = function (dragEvent, imageElement) {\n var _this = this;\n var isUploading = false;\n // eslint-disable-next-line\n var proxy = this;\n var popupEle = this.parent.createElement('div');\n this.parent.element.appendChild(popupEle);\n var uploadEle = this.parent.createElement('input', {\n id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }\n });\n var offsetY = this.parent.iframeSettings.enable ? -50 : -90;\n this.popupObj = new Popup(popupEle, {\n relateTo: imageElement,\n height: '85px',\n width: '300px',\n offsetY: offsetY,\n content: uploadEle,\n viewPortElement: this.parent.element,\n position: { X: 'center', Y: 'top' },\n enableRtl: this.parent.enableRtl,\n zIndex: 10001,\n // eslint-disable-next-line\n close: function (event) {\n _this.parent.isBlur = false;\n _this.popupObj.destroy();\n detach(_this.popupObj.element);\n _this.popupObj = null;\n if (!_this.parent.inlineMode.enable) {\n _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(false);\n }\n }\n });\n this.popupObj.element.style.display = 'none';\n addClass([this.popupObj.element], classes.CLS_POPUP_OPEN);\n addClass([this.popupObj.element], classes.CLS_RTE_UPLOAD_POPUP);\n var range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());\n var timeOut = dragEvent.dataTransfer.files[0].size > 1000000 ? 300 : 100;\n setTimeout(function () {\n proxy.refreshPopup(imageElement);\n }, timeOut);\n var rawFile;\n var beforeUploadArgs;\n this.uploadObj = new Uploader({\n asyncSettings: {\n saveUrl: this.parent.insertImageSettings.saveUrl,\n removeUrl: this.parent.insertImageSettings.removeUrl\n },\n cssClass: classes.CLS_RTE_DIALOG_UPLOAD,\n dropArea: this.parent.element,\n allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),\n removing: function () {\n _this.parent.inputElement.contentEditable = 'true';\n isUploading = false;\n detach(imageElement);\n _this.popupObj.close();\n },\n canceling: function () {\n _this.parent.inputElement.contentEditable = 'true';\n isUploading = false;\n detach(imageElement);\n _this.popupObj.close();\n _this.quickToolObj.imageQTBar.hidePopup();\n setTimeout(function () {\n _this.uploadObj.destroy();\n }, 900);\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 if (!_this.parent.inlineMode.enable) {\n _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);\n }\n /* eslint-disable */\n _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?\n beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;\n _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?\n beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;\n _this.uploadObj.uploadFiles(rawFile, null);\n _this.parent.inputElement.contentEditable = 'false';\n /* eslint-enable */\n });\n }\n else {\n _this.parent.trigger(events.beforeImageUpload, args);\n if (!_this.parent.inlineMode.enable) {\n _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);\n }\n }\n },\n uploading: function (e) {\n if (!_this.parent.isServerRendered) {\n isUploading = true;\n _this.parent.trigger(events.imageUploading, e, function (imageUploadingArgs) {\n if (imageUploadingArgs.cancel) {\n if (!isNullOrUndefined(imageElement)) {\n detach(imageElement);\n }\n if (!isNullOrUndefined(_this.popupObj.element)) {\n detach(_this.popupObj.element);\n }\n }\n else {\n _this.parent.inputElement.contentEditable = 'false';\n }\n });\n }\n },\n selected: function (e) {\n if (isUploading) {\n e.cancel = true;\n }\n if (_this.parent.isServerRendered) {\n rawFile = e.filesData;\n }\n },\n failure: function (e) {\n isUploading = false;\n _this.parent.inputElement.contentEditable = 'true';\n var args = {\n args: dragEvent,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n setTimeout(function () {\n _this.uploadFailure(imageElement, args, e);\n }, 900);\n },\n success: function (e) {\n if (e.operation === \"cancel\") {\n return;\n }\n isUploading = false;\n _this.parent.inputElement.contentEditable = 'true';\n var args = {\n args: dragEvent,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n setTimeout(function () {\n _this.uploadSuccess(imageElement, dragEvent, args, e);\n }, 900);\n }\n });\n this.uploadObj.appendTo(this.popupObj.element.childNodes[0]);\n this.popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap').style.display = 'none';\n range.selectNodeContents(imageElement);\n this.parent.formatter.editorManager.nodeSelection.setRange(this.contentModule.getDocument(), range);\n };\n Image.prototype.refreshPopup = function (imageElement) {\n var imgPosition = this.parent.iframeSettings.enable ? this.parent.element.offsetTop +\n imageElement.offsetTop : imageElement.offsetTop;\n var rtePosition = this.parent.element.offsetTop + this.parent.element.offsetHeight;\n if (imgPosition > rtePosition) {\n this.popupObj.relateTo = this.parent.inputElement;\n this.popupObj.offsetY = this.parent.iframeSettings.enable ? -30 : -65;\n this.popupObj.element.style.display = 'block';\n }\n else {\n if (this.popupObj) {\n this.popupObj.refreshPosition(imageElement);\n this.popupObj.element.style.display = 'block';\n }\n }\n };\n /**\n * Called when drop image upload was failed\n *\n * @param {HTMLElement} imgEle - specifies the image element.\n * @param {IShowPopupArgs} args - specifies the arguments.\n * @param {Object} e - specfies the object.\n * @returns {void}\n */\n Image.prototype.uploadFailure = function (imgEle, args, e) {\n detach(imgEle);\n if (this.popupObj) {\n this.popupObj.close();\n }\n this.parent.trigger(events.imageUploadFailed, e);\n this.uploadObj.destroy();\n };\n /**\n * Called when drop image upload was successful\n *\n * @param {HTMLElement} imageElement - specifies the image element.\n * @param {DragEvent} dragEvent - specifies the drag event.\n * @param {IShowPopupArgs} args - specifies the arguments.\n * @param {ImageSuccessEventArgs} e - specifies the success event.\n * @returns {void}\n */\n Image.prototype.uploadSuccess = function (imageElement, dragEvent, args, e) {\n var _this = this;\n imageElement.style.opacity = '1';\n imageElement.classList.add(classes.CLS_IMG_FOCUS);\n e.element = imageElement;\n this.parent.trigger(events.imageUploadSuccess, e, function (e) {\n if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {\n var url = _this.parent.insertImageSettings.path + e.file.name;\n imageElement.src = url;\n imageElement.setAttribute('alt', e.file.name);\n }\n });\n if (this.popupObj) {\n this.popupObj.close();\n this.uploadObj.destroy();\n }\n this.showImageQuickToolbar(args);\n this.resizeStart(dragEvent, imageElement);\n };\n Image.prototype.imagePaste = function (args) {\n var _this = this;\n if (args.text.length === 0 && !isNullOrUndefined(args.file)) {\n // eslint-disable-next-line\n var proxy_1 = this;\n var reader_2 = new FileReader();\n args.args.preventDefault();\n // eslint-disable-next-line\n reader_2.addEventListener('load', function (e) {\n var url = {\n cssClass: (proxy_1.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),\n url: _this.parent.insertImageSettings.saveFormat === 'Base64' || !isNullOrUndefined(args.callBack) ?\n reader_2.result : URL.createObjectURL(convertToBlob(reader_2.result)),\n width: {\n width: proxy_1.parent.insertImageSettings.width, minWidth: proxy_1.parent.insertImageSettings.minWidth,\n maxWidth: proxy_1.parent.getInsertImgMaxWidth()\n },\n height: {\n height: proxy_1.parent.insertImageSettings.height, minHeight: proxy_1.parent.insertImageSettings.minHeight,\n maxHeight: proxy_1.parent.insertImageSettings.maxHeight\n }\n };\n if (!isNullOrUndefined(args.callBack)) {\n args.callBack(url);\n return;\n }\n else {\n proxy_1.parent.formatter.process(proxy_1.parent, { item: { command: 'Images', subCommand: 'Image' } }, args.args, url);\n _this.showPopupToolBar(args, url);\n }\n });\n reader_2.readAsDataURL(args.file);\n }\n };\n Image.prototype.showPopupToolBar = function (e, url) {\n var _this = this;\n var imageSrc = 'img[src=\"' + url.url + '\"]';\n var imageElement = this.parent.inputElement.querySelector(imageSrc);\n this.parent.quickToolbarModule.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);\n var args = {\n args: e.args,\n type: 'Images',\n isNotify: undefined,\n elements: imageElement\n };\n if (imageElement) {\n setTimeout(function () {\n _this.showImageQuickToolbar(args);\n _this.resizeStart(e.args, imageElement);\n }, 0);\n }\n };\n /* eslint-disable */\n /**\n * Destroys the ToolBar.\n *\n * @method destroy\n * @returns {void}\n * @hidden\n\n */\n /* eslint-enable */\n Image.prototype.destroy = function () {\n this.prevSelectedImgEle = undefined;\n this.removeEventListener();\n };\n /**\n * For internal use only - Get the module name.\n *\n * @returns {void}\n */\n Image.prototype.getModuleName = function () {\n return 'image';\n };\n return Image;\n}());\nexport { Image };\n","/* eslint-disable */\n/**\n * Export default locale\n */\nexport var defaultLocale = {\n 'alignments': 'Alignments',\n 'justifyLeft': 'Align Left',\n 'justifyCenter': 'Align Center',\n 'justifyRight': 'Align Right',\n 'justifyFull': 'Align Justify',\n 'fontName': 'Font Name',\n 'fontSize': 'Font Size',\n 'fontColor': 'Font Color',\n 'backgroundColor': 'Background Color',\n 'bold': 'Bold',\n 'italic': 'Italic',\n 'underline': 'Underline',\n 'strikethrough': 'Strikethrough',\n 'clearFormat': 'Clear Format',\n 'clearAll': 'Clear All',\n 'cut': 'Cut',\n 'copy': 'Copy',\n 'paste': 'Paste',\n 'unorderedList': 'Bulleted List',\n 'orderedList': 'Numbered List',\n 'indent': 'Increase Indent',\n 'outdent': 'Decrease Indent',\n 'undo': 'Undo',\n 'redo': 'Redo',\n 'superscript': 'Superscript',\n 'subscript': 'Subscript',\n 'createLink': 'Insert Link',\n 'openLink': 'Open Link',\n 'editLink': 'Edit Link',\n 'removeLink': 'Remove Link',\n 'image': 'Insert Image',\n 'replace': 'Replace',\n 'align': 'Align',\n 'caption': 'Image Caption',\n 'remove': 'Remove',\n 'insertLink': 'Insert Link',\n 'display': 'Display',\n 'altText': 'Alternative Text',\n 'dimension': 'Change Size',\n 'fullscreen': 'Maximize',\n 'maximize': 'Maximize',\n 'minimize': 'Minimize',\n 'lowerCase': 'Lower Case',\n 'upperCase': 'Upper Case',\n 'print': 'Print',\n 'formats': 'Formats',\n 'sourcecode': 'Code View',\n 'preview': 'Preview',\n 'viewside': 'ViewSide',\n 'insertCode': 'Insert Code',\n 'linkText': 'Display Text',\n 'linkTooltipLabel': 'Title',\n 'linkWebUrl': 'Web Address',\n 'linkTitle': 'Enter a title',\n 'linkurl': 'http://example.com',\n 'linkOpenInNewWindow': 'Open Link in New Window',\n 'linkHeader': 'Insert Link',\n 'dialogInsert': 'Insert',\n 'dialogCancel': 'Cancel',\n 'dialogUpdate': 'Update',\n 'imageHeader': 'Insert Image',\n 'imageLinkHeader': 'You can also provide a link from the web',\n 'mdimageLink': 'Please provide a URL for your image',\n 'imageUploadMessage': 'Drop image here or browse to upload',\n 'imageDeviceUploadMessage': 'Click here to upload',\n 'imageAlternateText': 'Alternate Text',\n 'alternateHeader': 'Alternative Text',\n 'browse': 'Browse',\n 'imageUrl': 'http://example.com/image.png',\n 'imageCaption': 'Caption',\n 'imageSizeHeader': 'Image Size',\n 'imageHeight': 'Height',\n 'imageWidth': 'Width',\n 'textPlaceholder': 'Enter Text',\n 'inserttablebtn': 'Insert Table',\n 'tabledialogHeader': 'Insert Table',\n 'tableWidth': 'Width',\n 'cellpadding': 'Cell Padding',\n 'cellspacing': 'Cell Spacing',\n 'columns': 'Number of columns',\n 'rows': 'Number of rows',\n 'tableRows': 'Table Rows',\n 'tableColumns': 'Table Columns',\n 'tableCellHorizontalAlign': 'Table Cell Horizontal Align',\n 'tableCellVerticalAlign': 'Table Cell Vertical Align',\n 'createTable': 'Create Table',\n 'removeTable': 'Remove Table',\n 'tableHeader': 'Table Header',\n 'tableRemove': 'Table Remove',\n 'tableCellBackground': 'Table Cell Background',\n 'tableEditProperties': 'Table Edit Properties',\n 'styles': 'Styles',\n 'insertColumnLeft': 'Insert Column Left',\n 'insertColumnRight': 'Insert Column Right',\n 'deleteColumn': 'Delete Column',\n 'insertRowBefore': 'Insert Row Before',\n 'insertRowAfter': 'Insert Row After',\n 'deleteRow': 'Delete Row',\n 'tableEditHeader': 'Edit Table',\n 'TableHeadingText': 'Heading',\n 'TableColText': 'Col',\n 'imageInsertLinkHeader': 'Insert Link',\n 'editImageHeader': 'Edit Image',\n \"alignmentsDropDownLeft\": 'Align Left',\n \"alignmentsDropDownCenter\": 'Align Center',\n \"alignmentsDropDownRight\": 'Align Right',\n \"alignmentsDropDownJustify\": 'Align Justify',\n \"imageDisplayDropDownInline\": 'Inline',\n \"imageDisplayDropDownBreak\": 'Break',\n \"tableInsertRowDropDownBefore\": 'Insert row before',\n \"tableInsertRowDropDownAfter\": 'Insert row after',\n \"tableInsertRowDropDownDelete\": 'Delete row',\n \"tableInsertColumnDropDownLeft\": 'Insert column left',\n \"tableInsertColumnDropDownRight\": 'Insert column right',\n \"tableInsertColumnDropDownDelete\": 'Delete column',\n \"tableVerticalAlignDropDownTop\": 'Align Top',\n \"tableVerticalAlignDropDownMiddle\": 'Align Middle',\n \"tableVerticalAlignDropDownBottom\": 'Align Bottom',\n \"tableStylesDropDownDashedBorder\": 'Dashed Borders',\n \"tableStylesDropDownAlternateRows\": 'Alternate Rows',\n 'pasteFormat': 'Paste Format',\n 'pasteFormatContent': 'Choose the formatting action',\n 'plainText': 'Plain Text',\n 'cleanFormat': 'Clean',\n 'keepFormat': 'Keep',\n 'pasteDialogOk': 'OK',\n 'pasteDialogCancel': 'Cancel',\n 'fileManager': 'File Manager',\n 'fileDialogHeader': 'File Browser',\n \"formatsDropDownParagraph\": 'Paragraph',\n 'formatsDropDownCode': 'Code',\n 'formatsDropDownQuotation': 'Quotation',\n 'formatsDropDownHeading1': 'Heading 1',\n 'formatsDropDownHeading2': 'Heading 2',\n 'formatsDropDownHeading3': 'Heading 3',\n 'formatsDropDownHeading4': 'Heading 4',\n 'fontNameSegoeUI': 'Segoe UI',\n 'fontNameArial': 'Arial',\n 'fontNameGeorgia': 'Georgia',\n 'fontNameImpact': 'Impact',\n 'fontNameTahoma': 'Tahoma',\n 'fontNameTimesNewRoman': 'Times New Roman',\n 'fontNameVerdana': 'Verdana',\n 'numberFormatListNumber': 'Number',\n 'numberFormatListLowerAlpha': 'LowerAlpha',\n 'numberFormatListUpperAlpha': 'UpperAlpha',\n 'numberFormatListLowerRoman': 'LowerRoman',\n 'numberFormatListUpperRoman': 'UpperRoman',\n 'numberFormatListLowerGreek': 'LowerGreek',\n 'bulletFormatListDisc': 'Disc',\n 'bulletFormatListCircle': 'Circle',\n 'bulletFormatListSquare': 'Square',\n 'numberFormatListNone': 'None',\n 'bulletFormatListNone': 'None'\n};\nexport var toolsLocale = {\n 'alignments': 'alignments',\n 'justifyleft': 'justifyLeft',\n 'justifycenter': 'justifyCenter',\n 'justifyright': 'justifyRight',\n 'justifyfull': 'justifyFull',\n 'fontname': 'fontName',\n 'fontsize': 'fontSize',\n 'fontcolor': 'fontColor',\n 'backgroundcolor': 'backgroundColor',\n 'bold': 'bold',\n 'italic': 'italic',\n 'underline': 'underline',\n 'strikethrough': 'strikethrough',\n 'clearformat': 'clearFormat',\n 'clearall': 'clearAll',\n 'cut': 'cut',\n 'copy': 'copy',\n 'paste': 'paste',\n 'unorderedlist': 'unorderedList',\n 'orderedlist': 'orderedList',\n 'indent': 'indent',\n 'outdent': 'outdent',\n 'undo': 'undo',\n 'redo': 'redo',\n 'superscript': 'superscript',\n 'subscript': 'subscript',\n 'createlink': 'createLink',\n 'openlink': 'openLink',\n 'editlink': 'editLink',\n 'removelink': 'removeLink',\n 'openimagelink': 'openLink',\n 'editimagelink': 'editLink',\n 'removeimagelink': 'removeLink',\n 'image': 'image',\n 'replace': 'replace',\n 'align': 'align',\n 'caption': 'caption',\n 'remove': 'remove',\n 'insertlink': 'insertLink',\n 'display': 'display',\n 'alttext': 'altText',\n 'dimension': 'dimension',\n 'fullscreen': 'fullscreen',\n 'maximize': 'maximize',\n 'minimize': 'minimize',\n 'lowercase': 'lowerCase',\n 'uppercase': 'upperCase',\n 'print': 'print',\n 'formats': 'formats',\n 'sourcecode': 'sourcecode',\n 'preview': 'preview',\n 'viewside': 'viewside',\n 'insertcode': 'insertCode',\n 'tablerows': 'tableRows',\n 'tablecolumns': 'tableColumns',\n 'tablecellhorizontalalign': 'tableCellHorizontalAlign',\n 'tablecellverticalalign': 'tableCellVerticalAlign',\n 'createtable': 'createTable',\n 'removetable': 'removeTable',\n 'tableheader': 'tableHeader',\n 'tableremove': 'tableRemove',\n 'tablecellbackground': 'tableCellBackground',\n 'tableeditproperties': 'tableEditProperties',\n 'styles': 'styles',\n 'insertcolumnleft': 'insertColumnLeft',\n 'insertcolumnright': 'insertColumnRight',\n 'deletecolumn': 'deleteColumn',\n 'aligntop': 'AlignTop',\n 'alignmiddle': 'AlignMiddle',\n 'alignbottom': 'AlignBottom',\n 'insertrowbefore': 'insertRowBefore',\n 'insertrowafter': 'insertRowAfter',\n 'deleterow': 'deleteRow'\n};\nexport var fontNameLocale = [\n { locale: 'fontNameSegoeUI', value: 'Segoe UI' },\n { locale: 'fontNameArial', value: 'Arial,Helvetica,sans-serif' },\n { locale: 'fontNameGeorgia', value: 'Georgia,serif' },\n { locale: 'fontNameImpact', value: 'Impact,Charcoal,sans-serif' },\n { locale: 'fontNameTahoma', value: 'Tahoma,Geneva,sans-serif' },\n { locale: 'fontNameTimesNewRoman', value: 'Times New Roman,Times,serif' },\n { locale: 'fontNameVerdana', value: 'Verdana,Geneva,sans-serif' }\n];\nexport var formatsLocale = [\n { locale: 'formatsDropDownParagraph', value: 'P' },\n { locale: 'formatsDropDownCode', value: 'Pre' },\n { locale: 'formatsDropDownQuotation', value: 'BlockQuote' },\n { locale: 'formatsDropDownHeading1', value: 'H1' },\n { locale: 'formatsDropDownHeading2', value: 'H2' },\n { locale: 'formatsDropDownHeading3', value: 'H3' },\n { locale: 'formatsDropDownHeading4', value: 'H4' }\n];\nexport var numberFormatListLocale = [\n { locale: 'numberFormatListNone', value: 'none' },\n { locale: 'numberFormatListNumber', value: 'decimal' },\n { locale: 'numberFormatListLowerAlpha', value: 'lower-alpha' },\n { locale: 'numberFormatListUpperAlpha', value: 'upper-alpha' },\n { locale: 'numberFormatListLowerRoman', value: 'lower-roman' },\n { locale: 'numberFormatListUpperRoman', value: 'upper-roman' },\n { locale: 'numberFormatListLowerGreek', value: 'lower-greek' }\n];\nexport var bulletFormatListLocale = [\n { locale: 'bulletFormatListNone', value: 'none' },\n { locale: 'bulletFormatListDisc', value: 'disc' },\n { locale: 'bulletFormatListCircle', value: 'circle' },\n { locale: 'bulletFormatListSquare', value: 'square' },\n];\n"],"sourceRoot":""}