{"version":3,"file":"kendo.editor.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendoeditor","js","this","$","editorNS","Command","GenericCommand","registerTool","Tool","RestorePoint","extend","InsertHtmlCommand","InsertHtmlTool","kendo","UndoRedoStack","Observable","init","options","fn","call","clear","events","push","command","stack","slice","currentCommandIndex","undo","canUndo","trigger","redo","canRedo","length","deepExtend","util","undefined$1","window","Class","Widget","ui","os","support","mobileOS","browser","keys","outerWidth","_outerWidth","outerHeight","_outerHeight","FORMATTING_MARKS_STYLE_ID","FORMATTING_MARKS_OVERLAY_ID","FORMATTING_MARKS_OVERLAY_WRAPPER_ID","SELECT","PLACEHOLDER_CLASS","PLACEHOLDER_TAG_ID","NATIVE_TOOLS","EditorUtils","editorWrapperTemplate","formatByName","name","format","i","inArray","tags","getToolCssClass","icon","cssClass","superscript","subscript","justifyLeft","justifyCenter","justifyRight","justifyFull","insertUnorderedList","insertOrderedList","insertUpperRomanList","insertLowerRomanList","import","indent","outdent","createLink","unlink","insertImage","insertFile","viewHtml","foreColor","backColor","createTable","addColumnLeft","addColumnRight","addRowAbove","addRowBelow","deleteRow","deleteColumn","mergeCellsHorizontally","mergeCellsVertically","splitCellHorizontally","splitCellVertically","tableProperties","tableCellProperties","tableWizardInsert","tableAlignLeft","tableAlignCenter","tableAlignRight","cleanFormatting","copyFormat","applyFormat","pdf","nameToKebab","replace","toLowerCase","toolName","tool","Editor","defaultTools","registerFormat","formatName","formats","cacheComments","content","comments","index","retrieveComments","supportedContentEditable","document","documentElement","toolGroups","basic","scripts","alignment","lines","symbols","links","lists","dent","tablesWizard","tablesInsert","tablesAddDelete","tablesMerge","tablesPosition","formatPainter","element","toolbarContainer","type","domElement","that","editor","dom","Dom","_registerHandler","closest","update","bind","_setupType","_initToolbar","_setupHeight","_resizable","_initializeContentElement","_setupKeyboard","clipboard","Clipboard","undoRedoStack","_populateValue","mousedown","_endTyping","mouseup","e","_mouseup","_handleSpaceAndNewLines","_initializeImmutables","_ariaLabel","wrapper","find","toolbar","resize","notify","_showWatermarkOverlay","messages","auto","bold","italic","underline","strikethrough","fitToCell","lineHeight","formattingMarks","insertHtml","fontName","fontNameInherit","fontSize","fontSizeInherit","formatBlock","formatting","style","emptyFolder","editAreaTitle","uploadFile","overflowAnchor","orderBy","orderBySize","orderByName","invalidFileType","deleteFile","overwriteFile","directoryNotFound","imageWebAddress","imageAltText","imageWidth","imageHeight","fileWebAddress","fileTitle","fileText","linkWebAddress","linkText","linkToolTip","linkOpenInNewWindow","dialogUpdate","dialogInsert","dialogOk","dialogCancel","createTableHint","tableWizard","tableTab","cellTab","accessibilityTab","caption","summary","width","height","units","cellSpacing","cellPadding","topPadding","leftPadding","bottomPadding","rightPadding","independentCellPaddings","cellMargin","captionAlignment","position","background","tableBackground","id","border","borderStyle","borderWidth","borderColor","collapseBorders","wrapText","associateCellsWithHeaders","alignLeft","alignCenter","alignRight","alignLeftTop","alignCenterTop","alignRightTop","alignLeftMiddle","alignCenterMiddle","alignRightMiddle","alignLeftBottom","alignCenterBottom","alignRightBottom","alignRemove","columns","rows","selectAllCells","applyToColumn","applyToRow","exportAs","print","headerRows","headerColumns","tableSummaryPlaceholder","associateNone","associateScope","associateIds","borderNone","placeholder","nonce","unsafeInline","encoded","formattingMarksRefreshDelay","domain","resizable","deserialization","custom","serialization","entities","semantic","optimizeTags","keepEOL","pasteCleanup","all","css","keepNewLines","msAllFormatting","msConvertLists","msTags","none","span","stylesheets","dialogOptions","modal","draggable","animation","imageBrowser","fileBrowser","navigateOnTab","text","value","tools","destroy","_deregisterHandlers","clearTimeout","_spellCorrectTimeout","_focusOutside","windowInstance","tablePopup","_destroyUploadWidget","resizeObserver","disconnect","_destroyResizings","_destroyFormattingMarksOverlay","setOptions","_setOptionsTools","_initializePlaceholder","createRange","RangeUtils","encodedValue","encode","exec","params","range","Error","body","getAttribute","keyboard","isTypingInProgress","_focusBody","selectRange","_range","getRange","Object","map","key","immutables","test","execCommand","async","change","_selectionChange","managesUndoRedo","focus","restoreSelection","selection","getSelection","rangeCount","getRangeAt","doc","startContainer","endContainer","startOffset","endOffset","setStart","collapse","SelectionUtils","selectionFromDocument","paste","html","refresh","textarea","val","remove","selectionRestorePoint","toRange","saveSelection","container","commonAncestorContainer","contains","selectedHtml","Serializer","domToXhtml","cloneContents","removeAllRanges","addRange","state","textNodes","finder","collapsed","getFormat","isFormatted","_togglePlaceholder","trim","_oldValue","currentHtml","htmlToDom","_refreshTools","_bindTools","unbind","filter","el","each","initialize","_blur","old","_containsRange","isAncestorOrSelf","_createContentElement","iframe","wnd","lang","specifiedDomain","domainScript","src","hide","title","frameBorder","addClass","attr","tabIndex","insertBefore","location","hostname","contentWindow","contentDocument","one","_decorateFormatting","getElementsByTagName","open","write","isRtl","ios","edge","chrome","href","join","close","_deleteSavedRange","component","dataSource","items","tag","className","formattingElement","getKendoDropDownList","data","list","getEffectiveBackground","inlineStyle","_appendFormattingMarksStyles","$head","head","append","_appendFormattingMarksOverlay","_formattingMarksOverlay","handlers","_handlers","h","off","handler","_uploadWidget","endTyping","scrollTop","activeElement","_activeElement","scrollHeight","clientHeight","msie","left","top","opacity","appendTo","_handleToolbarClick","target","_immutablesContext","Immutables","immutablesContext","editableTextNodes","blurTrigger","mousedownTrigger","createElement","setAttribute","appendChild","interval","setInterval","last","clearInterval","setTimeout","_mousedown","touch","keydown","_spellCorrect","parentElement","nodeName","_cachedHeight","restoreHeight","keyCode","BACKSPACE","DELETE","F10","first","preventPopupHide","preventDefault","LEFT","RIGHT","offset","next","nextChar","nodeType","nodeValue","toolFromShortcut","toolOptions","keyPressCommand","_runPostContentKeyCommands","keypress","_showElementResizeHandles","keyup","selectionCodes","TAB","PAGEUP","PAGEDOWN","END","HOME","UP","DOWN","INSERT","ctrlKey","altKey","shiftKey","_refreshInterval","click","selectNode","focusin","hasAttribute","_showWindow","focusout","active","popup","toolbarContainerElement","get","_toolbarFocused","hasClass","removeClass","_hideWindow","_initializeColumnResizing","_initializeRowResizing","_initializeElementResizing","defaults","toolbarOptions","_processToolbarItems","_setNativeTools","parentMessages","toggle","evaluateTemplates","ToolBar","on","is","_initToolbarWindow","toolbarEl","wrap","parent","prepend","kendoWindow","dragHandle","effects","minHeight","visible","autoFocus","actions","dragend","_moved","_selectionStarted","parents","stopPropagation","gecko","which","tagName","defaultValue","deserializedRoot","getAllComments","innerHTML","_resetGroups","current","result","optionsTools","j","t","guidGroupName","flatDefaultTools","processedObject","currentGroups","Array","isArray","guid","_processToolOptions","gr","includes","values","group","g","to","_processDefaultTool","isPlainObject","view","shortcuts","uiOptions","originalOptions","palette","template","showText","showIcon","tooltip","attributes","ColorTool","componentOptions","views","preview","input","buttons","_shortcutSequence","nodes","filterBy","htmlIndentSpace","_updateImmutablesState","eventNames","NS","hasOwnProperty","applyEventMap","split","toolsFromShortcut","o","changesContent","refreshDelay","applyFormattingMarks","clearFormattingMarksOverlay","_toggledFormattingMarks","children","_formattingMarksTimeout","empty","heightStyle","expectedHeight","parseInt","actualHeight","indexOf","isNaN","Keyboard","BackspaceHandler","TypingHandler","SystemHandler","SelectAllHandler","_wrapTextarea","res","ctrl","shift","alt","beforeCorrection","falseTrigger","contextmenu","mozilla","_finishUpdate","show","$body","toggleClass","overflowPopup","uiElement","trackImmutables","toolsToBeUpdated","w","editorWrap","editArea","isResizable","resizableMin","min","resizableMax","max","maxHeight","minWidth","maxWidth","ResizeObserver","_resizeTimeOut","observe","_destroyElementResizing","ElementResizingFactory","dispose","_destroyRowResizing","RowResizing","_destroyColumnResizing","ColumnResizing","create","_showElementResizeHandlesProxy","elementResizing","parentNode","showResizeHandles","columnResizing","rowResizing","_getWindowWidth","editorElement","_overlapsWindow","box","toolbarWrapper","toolbarWrapperOffset","toolbarWrapperLeft","toolbarWrapperTop","boxOffset","boxOffsetLeft","boxOffsetTop","editorOffset","Math","plugin","commandArguments","noop","UndoTool","enable","removeAttr","emptyElementContent","emptyTableCellContent","PDFMixin","prototype","_drawPDF","drawing","drawDOM","saveAsPDF","progress","Deferred","promise","args","then","root","exportPDF","done","dataURI","saveAs","fileName","proxyURL","proxyTarget","forceProxy","resolve","fail","err","reject","jQuery","STYLE","FLOAT","CSSFLOAT","STYLEFLOAT","CLASS","KMARKER","makeMap","len","obj","nonListBlockElements","blockElements","concat","block","selfClosing","inlineElements","inline","fillAttrs","nonEmptyNonTextContentElements","normalize","node","version","firstChild","prev","nextSibling","persistedScrollTop","whitespace","emptyspace","rgb","bom","whitespaceOrBom","cssAttributes","htmlRe","entityRe","entityTable","findNodeIndex","skipText","previousSibling","isDataNode","isAncestorOf","findClosestAncestor","rootElem","iterator","createNodeIterator","NodeFilter","SHOW_COMMENT","FILTER_ACCEPT","curNode","nextNode","getNodeLength","childNodes","splitDataNode","temp","newNode","cloneNode","denormalizedText","deleteData","insertAfter","attrEquals","cssFloat","blockParentOrBody","parentOfType","ownerDocument","blockParents","blocks","windowFromDocument","defaultView","parentWindow","nodeTypes","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","toHex","color","matches","x","toString","encodableChars","c","charCode","charCodeAt","entity","isBom","stripBom","stripBomNode","removeChild","insignificant","_moz_dirty","_moz_editor_bogus_node","tableCell","significantNodes","grep","child","emptyTextNode","emptyNode","significantChildNodes","isWhitespace","getTextNodes","lastTextNode","lastChild","isMarker","allowsTextContent","every","allWhitespaceContent","isEmptyspace","sibling","direction","isBlock","isPrevBlock","isNextBlock","isSelfClosing","isEmpty","isInline","isImg","isBr","scrollContainer","compatMode","scrollingElement","scrollTo","toStart","elementTop","elementHeight","marker","windowHeight","innerHeight","offsetHeight","ceil","persistScrollTop","offsetParent","offsetTop","offsetLeft","restoreScrollTop","undefined","insertAt","newElement","referenceElement","removeChildren","removeTextSiblings","closestBy","condition","rootCondition","ofType","changeTag","skipAttributes","attribute","specified","cssText","editableParent","contentEditable","unwrap","isChildOfBaseContainer","createEmptyNode","removeAttribute","mergeAttributes","origin","traverseCss","unstyle","backgroundStyle","innerText","classNames","classes","commonAncestor","ancestors","count","arguments","paths","minPathLength","Infinity","output","reverse","closestSplittableParent","apply","editableParents","editableAncestor","closestEditable","types","editable","closestEditableOfType","invert","match","ensureTrailingBreaks","elements","ensureTrailingBreak","removeTrailingBreak","br","reMapTableColumns","table","colAttr","_mapColIndices","clearTableMappings","registeredColumns","rowIndex","cells","colIndex","cellIndex","cell","rowSpan","_mapColspan","colSpan","ci","ri","associateWithIds","theadRows","numberOfTheadRows","tableRows","numberOfTableRows","theadMatrix","tbodyMatrix","tHead","_getNumberOfHeaderRows","_generateIdsForColumns","_generateIdsForRows","_assignIds","col","colspan","rowspan","k","l","timestamp","Date","getTime","row","headers","pushHeaderId","forEach","_onlyUnique","_getNumberOfColumns","currentIndex","numberOfCols","Number","_getNumberOfHeaderColumns","numberOfHeaderRows","number","fontSizeMappings","quoteRe","brRe","pixelRe","emptyPRe","cssDeclaration","sizzleAttr","scriptAttr","onerrorRe","bomSpan","div","supportsLeadingWhitespace","isFunction","toEditableHtml","_toEditableImmutables","immutable","prependTo","_fillEmptyElements","p","_removeSystemElements","_resetOrderedLists","ol","originalStart","ols","_preventScriptExecution","attributesToRemove","deserialize","semanticFilter","mapStart","tagMap","start","end","skipEncoding","canOptimize","semanticAttributes","specifiedAttributes","textDecoration","font","fontFamily","size","inlineStyles","ignoredStylePrefixes","prop","startsWith","strong","em","b","u","item","styleObj","splice","face","styleAttr","properties","property","lastIndex","cssProperties","$node","htmlEncode","skip","childNode","mapper","previous","jqNode","serialize","shouldOptimize","isEmptyBomNode","runCustom","script","childrenCount","textOnly","selectionFromWindow","W3CSelection","selectionFromRange","rangeDocument","documentFromRange","W3CRange","updateRangeProperties","fixIvalidRange","setEnd","setStartBefore","setStartAfter","setEndBefore","setEndAfter","selectNodeContents","deleteContents","cloneRange","deleteSubtree","hasPartialSubtree","getSubtreeIterator","RangeIterator","cloneSubtree","frag","createDocumentFragment","extractContents","extractSubtree","originalRange","insertNode","startNodeName","endNodeName","startAncestor","endAncestor","compareBoundaries","ex","isInvalidRange","fromNode","_current","_next","_end","hasNext","traverse","callback","delta","inStartContainer","inEndContainer","nodeIndex","getSubRange","subRange","textRange","createTextRange","adoptContainer","select","duplicate","right","textRangeContainer","adoptEndPoint","compareEndPoints","movedStart","movedEnd","cursorNode","textOffset","isData","anchorNode","anchorParent","cursor","moveToElementText","setEndPoint","comparison","appended","RangeEnumerator","enumerate","visit","ImmutablesRangeIterator","ImmutablesRangeEnumerator","rootNode","getEditable","nodeToPath","serializedImmutables","removeImmutables","restoreImmutables","lastType","restoreHtml","path","toRangePoint","denormalizedOffset","Marker","caret","addCaret","removeCaret","containerIndex","textNode","add","expand","isExpandable","rangeBoundary","_removeDeadMarkers","createTextNode","_normalizedIndex","pointer","shouldNormalizeStart","shouldNormalizeEnd","isBomSelected","charAt","collapsedToStart","startParent","endParent","startIndex","endIndex","boundary","immutableParent","image","stringify","partition","partitionRange","contents","mapAll","mapped","getAll","predicate","selector","getMarkers","isStartOf","isEndOf","wrapSelectedElements","startEditable","endEditable","isEnd","beforeCaret","afterCaret","search","substring","complexBlocks","IMMUTABALE","IMMUTABALE_MARKER_SELECTOR","randomId","chars","round","random","updateToolOptions","_initOptions","_toHtml","replaceWith","isDeleting","_cancelDeleting","_cancelTyping","typingInProgress","isTypingKey","backspace","del","cancelDeleting","nextImmutable","closestSelectionLi","closestImmutableLi","_removeImmutable","forwards","commonContainer","_nextNode","startRestorePoint","expandImmutablesIn","startImmutableParent","endImmutableParent","serialized","restorePoint","formatter","lockRange","releaseRange","point","createDialog","_actionButtonsTemplate","insertButtonIcon","cancelButtonIcon","renderButton","themeColor","endRestorePoint","ViewHtmlCommand","cmd","dialog","_footerTemplate","_footerMessages","center","FormatCommand","FormatTool","getKendoToolBar","getKendoToggleButton","MOUSEDOWN_NS","InlineFormatFinder","numberOfSiblings","referenceNode","textNodesCount","elementNodesCount","markerCount","findSuitable","sourceNode","findFormat","InlineFormatter","activate","formatNode","formatNodes","consolidate","outerMostInline","pop","GreedyInlineFormatFinder","greedyProperty","fontAttr","getInlineCssValue","attributeValue","pair","cssIndex","propertyAndValue","getFormatInner","parentsUntil","addBack","toArray","GreedyInlineFormatter","toCamelCase","action","InlineFormatTool","DelayedExecutionTool","FontTool","cssAttr","domAttr","widget","setDataSource","sender","newRange","ENTER","_widget","getKendoColorPicker","storedRange","_inputFocused","_popup","unselectable","_value","toCssRgba","fontWeight","togglable","fontStyle","overflow","toolIcon","commandOn","closeOnSelect","dataValueField","dataTextField","valuePrimitive","HTTP_PROTOCOL","protocolRegExp","endLinkCharsRegExp","LinkFormatFinder","LinkFormatter","markers","a","ref","UnlinkCommand","LinkCommand","url","_initialText","img","_close","_form","_createForm","_apply","_keydown","linkUrl","_dialog","formElement","form","kendoForm","renderButtons","field","label","editorOptions","after","ESC","textInput","anchor","AutoLinkCommand","detectedLink","detectLink","linkMarker","linkRange","_ensureWebProtocol","startNode","traverser","LeftDomTextTraverser","cancelAtNode","DomTextLinkDetection","_hasProtocolPrefix","_prefixWithWebProtocol","UnlinkTool","isLink","DomPos","_detectEnd","blank","clone","_detectStart","_isLinkDetected","puntuationOptions","extendOptions","RightDomTextTraverser","_skipStartPuntuation","lastIndexOfRegExp","ii","r","str","DomTextTraverser","cancel","_traverse","edgeNode","subText","splitIndex","SPACEBAR","BlockFormatFinder","candidate","suitable","f","_resolveListsItems","until","ImmutablesNS","BlockFormatter","ancestor","_handleImmutables","images","imageAttributes","nonImages","applyFormatting","immutableFormat","namedFormat","GreedyBlockFormatter","formatTag","ListFormatter","blockFormatter","BlockFormatTool","listElements","textAlign","float","display","marginLeft","marginRight","listStylePosition","ListFormatFinder","altAttr","matchesType","isList","unwrapTag","li","isImmutable","containsAny","_parentLists","merge","breakable","findSuitableNode","applyOnSection","section","pushAncestor","listStyleType","lastSection","lastNodes","sections","addLastSection","ul","fragment","ListCommand","ListTool","FormattingTool","toFormattingItem","dot","context","decorate","optionLabel","dataItem","toJSON","dataBound","getFormattingValue","n","selectBox","_ancestor","operator","CleanFormatCommand","tagsToClean","clean","listFormatter","unwrapListItem","highlightFirst","autoWidth","KEDITORIMAGEURL","KEDITORIMAGETITLE","KEDITORIMAGEWIDTH","KEDITORIMAGEHEIGHT","ImageCommand","removeIEAttributes","onload","onerror","applied","isIE","showBrowser","ImageBrowser","transport","read","_imageBrowser","ev","selected","dialogHeight","loadingOverlay","ImportCommand","_initializeUploadWidget","importOptions","upload","kendoUpload","success","_onUploadSuccess","_onUploadProgress","_onUploadSelect","error","_onUploadError","complete","_onUploadComplete","showFileList","multiple","saveUrl","autoUpload","saveField","validation","allowedExtensions","maxFileSize","getKendoUpload","_trigger","clearAllFiles","_removeLoadingOverlay","response","files","validationErrors","_initLoadingOverlay","eventType","uploadEvent","_iframeWrapper","_container","postProcess","genericCommand","initialValue","autoSize","ExportAsCommand","exportType","postToProxy","generateForm","submit","exportAsOptions","method","valueInput","exportTypeInput","fileNameInput","antiForgeryInput","csrf_param","ExportAsTool","changeHandler","_exec","itemTemplate","valueTemplate","iconClass","indentDirection","IndentFormatter","parentList","targets","mapImmutables","siblingList","nestedList","getListTypeAttr","targetIndex","styleType","targetNode","listParent","siblings","nextAll","IndentCommand","indentFormatter","OutdentCommand","OutdentTool","isOutdentable","listParentsCount","suitableNodes","ParagraphCommand","_insertMarker","_moveFocus","focusNode","shouldTrim","startInBlock","endInBlock","_blankAfter","paragraph","heading","tableNode","rng","emptyParagraphContent","parentChildrenLength","_insertParagraphAfter","NewLineCommand","filler","kbrParent","oldIE","KEDITORFILEURL","KEDITORFILETEXT","KEDITORFILETITLE","FileCommand","file","FileBrowser","_fileBrowser","ACTIVESTATE","SELECTEDSTATE","SCOPE","ROW","COL","ROWGROUP","COLGROUP","COLSPAN","ROWSPAN","TABLE","THEAD","TBODY","TR","TD","TH","getTouches","columnTemplate","tableFormatFinder","TableCommand","skipCleaners","_tableHtml","columnHtml","rowHeight","insertedTable","PopupTool","btn","popupTemplate","kendoPopup","copyAnchorStyles","_open","_activate","_toggle","_editor","TableWizardTool","TableWizardCommand","insertNewTable","kendoButton","_setTableSize","InsertTableTool","cols","cellWidth","cellHeight","firstCell","eq","lastCell","getOffset","tableFromLocation","floor","clientY","clientX","scrollLeft","offsetWidth","autoApplyNS","_valid","status","initiallyVisible","button","selectedRows","selectedColumns","changed","tableSize","stopImmediatePropagation","TableModificationCommand","_clearColIndexAttr","_findRowSpanCell","_resetElementResizing","_findNextTdInRow","td","lastTd","_adjustColgroups","colgroup","colElements","colgroupElements","numberOfCells","_associateHeaderIds","InsertRowCommand","cellCount","newRow","createdCell","_appendCell","newCell","InsertColumnCommand","columnIndex","_processForColSpan","_resizeCells","selectedCell","colSpanEffect","parsedWidth","unit","calculatedWidth","parseFloat","DeleteRowCommand","focusElement","rowParent","_focusElement","_handleRowSpanCells","adjacentCell","nextRow","firstRow","before","_reduceRowSpan","rowSpanValue","DeleteColumnCommand","columnCount","_handleColSpanCells","_reduceColSpan","colSpanValue","MergeCellsHorizontallyCommand","nextTd","_getColspan","MergeCellsVerticallyCommand","tr","targetRow","bottomTd","_getRowspan","SplitCellCommand","emptyTd","_splitCellHorizontally","_splitCellVertically","_getRowspanValue","_getColspanValue","tdToAdd","colSpanResult","rowSpanResult","TableModificationTool","commandsMap","insert","delete","column","TableFormatCommand","_showResizeHandles","TableFormatTool","isTable","align","nonSplittableTagsOnPaste","cleaners","ScriptCleaner","TabCleaner","MSWordFormatCleaner","WebkitFormatCleaner","HtmlTagsCleaner","HtmlAttrCleaner","HtmlContentCleaner","CustomCleaner","htmlToFragment","_startModification","_inProgress","_endModification","modificationInfo","_contentModification","_removeBomNodes","_onBeforeCopy","oncopy","oncut","_fileToDataURL","blob","deferred","reader","FileReader","File","getAsFile","readAsDataURL","_triggerPaste","_handleImagePaste","clipboardData","originalEvent","_insertImages","when","results","onpaste","clipboardNode","_decoreateClipboardNode","webkit","_moveToCaretPosition","clipboardRange","containers","ondragover","ondrop","dataTransfer","margin","padding","fontVariant","lineSpacing","nodeOffset","caretOffset","_caretOffset","translate","transform","rangeChanged","isStartTextNode","prevLength","bomNode","splittableParent","preventSplit","unwrapPasted","applicable","splitter","splittable","fragmentsHtml","elm","rangeEnd","focusedTable","siblingNodes","lastSiblingIndex","lastSibling","Cleaner","replacements","customReplacements","junkReplacements","convertFontMatch","$0","$1","closing","family","stripEmptyAnchors","listType","listData","startingSymbol","matchSymbol","symbol","isNumber","trimStartText","_guessUnorderedListStyle","_guessOrderedListStyle","_convertToLi","_checkForBullet","_getHtmlNoBullet","extractListLevels","level","_createList","rootMargin","rootIndex","lastRootLi","isLastRootLi","rootList","blockChildren","lastMargin","levels","acceptedNameTags","listIndex","levelType","removeAttributes","significantStyles","addSignificantStyles","isSignificantCss","removeAttributeNode","createColGroup","convertHeaders","boldedCells","removeParagraphs","paragraphs","removeTextNodes","trs","currentNode","tables","longestRow","titles","removeFormatting","filters","DomCleaner","cleanDom","collectTags","collectAttr","TextContainer","HtmlTextLines","separators","line","inlineBlockText","resetLine","appendText","textContainer","appendInlineBlockText","flashInlineBlockText","endLine","il","il1","jl","jl1","DomEnumerator","preventDown","hasText","enumerator","buildText","getDefaultSeparators","htmlLines","thead","tbody","cleaner","cellText","PREVIOUS_SIBLING","getSibling","tableCells","tableCellsWrappers","tableElements","inTable","RemoveTableContent","cellsTypes","startCell","endCell","_removeContent","getNext","evt","Event","isDefaultPrevented","deleteSelection","startTyping","_removeBomSpan","textContent","_addCaret","_restoreCaret","_handleDelete","caretPlaceholder","_merge","_cleanBomBefore","_handleBackspace","startAtLi","liIndex","startAtNonFirstLi","rangeStartNode","previousNode","_handleSelection","parentElementOrNode","_surroundFullyContent","_surroundFullySelectedAnchor","toLocaleLowerCase","_join","startImmutable","endImmutable","_moveMarker","_root","dest","_mergeWithTextNode","appendedNode","_isCaret","systemCommandIsInProgress","createUndoCommand","isModifierKey","isSystem","_toSelectableImmutables","_selectEditorBody","isCharacter","String","fromCharCode","modifier","_getShortcutModifier","navigator","platform","toUpperCase","metaKey","found","matchKey","toolKey","onEndTyping","stopTyping","force","timeout","what","ExportPdfCommand","PrintCommand","CopyFormatCommand","blockStyles","collectStyles","rangeNodes","populateStyles","destination","styleValue","styleKey","attributeKey","styles","nodeStyles","ApplyFormatCommand","removeEmptyElementsFromRange","cleanInlineParents","applyBlockStyles","applyInlineStyles","emptyElements","blockParent","outerWrapper","previousNodes","nextNodes","prevWrapper","nextWrapper","listItems","currentStyle","createdNode","topNode","CopyFormatTool","ApplyFormatTool","LineHeightCommand","LineHeightFormatTool","getKendoComboBox","prefixOptions","DOM","createMark","character","clonedRange","domRect","y","getBoundingClientRect","createElementNS","setAttributeNS","appendSvgMarks","overlay","FormattingMarksCommand","math","REGEX_NUMBER_IN_PERCENTAGES","REGEX_NUMBER_IN_PIXELS","STRING","inPercentages","ResizingUtils","constrain","lowerBound","upperBound","getScrollBarWidth","scrollbar","calculatePercentageRatio","total","inPixels","toPercentages","toPixels","KEY_DOWN","MOUSE_LEAVE","MOUSE_UP","TableElementResizing","_attachEventHandlers","eventNamespace","rootElement","_destroyResizeHandle","rtl","handle","dataAttribute","detectElementBorderHovering","resizingInProgress","resizing","handleOptions","tableElement","currentTarget","resizeHandle","elementBorderHovered","showResizeHandle","_initResizeHandle","setResizeHandlePosition","setResizeHandleDimensions","setResizeHandleDataAttributes","_attachResizeHandleEventHandlers","_initResizable","_hideResizeMarker","markerClass","_destroyResizable","Resizable","draggableElement","onResizeStart","onResize","resizeend","onResizeEnd","_disableKeyboard","setResizeHandleDragPosition","_enableKeyboard","_forceResizing","userEvents","ResizingFactory","resizingName","_destroyResizing","_initResizing","parentTable","resizingType","abs","RESIZE_HANDLE_CLASS","RESIZE_MARKER_CLASS","BODY","COLATTR","COMMA","WIDTH","handleWidth","borderOffset","mousePosition","tableInnerElement","tBodies","scrollTopOffset","scrollLeftOffset","columnWidthOffset","scrollBarWidth","columnOffsetLeft","innerElementOffsetTop","tableHead","tableBody","fullHeight","columnWidth","columnLeftOffset","adjacentColumnWidth","resizeHandleOffsetLeft","handleOffset","newWidth","initialAdjacentColumnWidth","initialColumnWidth","nextColumn","rtlModifier","initialDeltaX","initialDelta","_setTableComputedWidth","_setColumnsComputedWidth","_resizeColumn","_resizeTopAndBottomColumns","_resizeAdjacentColumns","innerElementWidth","currentColumnsWidths","topAndBottomColumns","innerTableElement","deltaWidth","adjacentColumns","_resizeAdjacentColumn","adjacentColumn","HEIGHT","handleHeight","rowOffsetLeft","rowOffsetTop","topInnerTableElement","$row","tableTopOffset","resizeHandleOffsetTop","currentRowHeight","initialTableHeight","tableHeadHeight","tableBodyHeight","initialStyleHeight","newRowHeight","_setRowsHeightInPixels","_setTableHeight","_setRowsHeightInPercentages","currentRowsHeights","newHeight","Draggable","DRAG_START","DRAG","DRAG_END","HALF_INSIDE","MOUSE_OVER","MOUSE_OUT","EAST","NORTH","NORTHEAST","NORTHWEST","SOUTH","SOUTHEAST","SOUTHWEST","WEST","ElementResizeHandle","_addStyles","_initDraggable","_initPositioningStrategy","_initDraggingStrategy","resizableElement","_destroyDraggable","_setPosition","_positioningStrategy","getPosition","_onMouseOver","_onMouseOut","HandlePositioningStrategy","_draggable","dragstart","_onDragStart","drag","_onDrag","_onDragEnd","_draggingStrategy","adjustDragDelta","deltaX","deltaY","initialDeltaY","HandleDraggingStrategy","StrategyFactory","_items","register","itemsLength","PositioningStrategyFactory","calculatePosition","handleOffsetPosition","applyHandleOffset","applyScrollOffset","rootLeft","EastPositioningStrategy","NorthPositioningStrategy","NortheastPositioningStrategy","NorthwestPositioningStrategy","SouthPositioningStrategy","SoutheastPositioningStrategy","SouthwestPositioningStrategy","WestPositioningStrategy","DraggingStrategyFactory","adjustment","deltas","xAxisAdjustment","yAxisAdjustment","HorizontalDraggingStrategy","EastDraggingStrategy","WestDraggingStrategy","VerticalDraggingStrategy","NorthDraggingStrategy","SouthDraggingStrategy","HorizontalAndVerticalDraggingStrategy","NorthEastDraggingStrategy","NorthWestDraggingStrategy","SouthEastDraggingStrategy","SouthWestDraggingStrategy","RESIZE_HANDLE_WRAPPER_CLASS","ELEMENT_RESIZING_CLASS","MOUSE_DOWN","ELEMENT_TYPES","isUndefined","ElementResizing","handles","_destroyResizeHandles","appendHandlesTo","_resizeWidth","_resizeHeight","_getMaxDimensionValue","dimension","dimensionLowercase","parentDimension","parentScrollOffset","_initResizeHandles","_bindToResizeHandlesEvents","_onResizeHandleDragStart","_initialElementHeight","_initialElementWidth","_onResizeHandleDrag","_onResizeHandleDragEnd","TableResizing","_hasRowsInPixels","ratioValue","ratioTotalValue","constrainedWidth","styleWidth","currentWidth","parentWidth","_setColumnsWidth","constrainedHeight","styleHeight","currentHeight","parentHeight","hasRowsInPixels","parentColumn","columnsLength","isWidthInPercentages","ImageResizing","_onResizeHandleDragVertical","_onResizeHandleDragHorizontal","_onResizeHandleDragLocked","_getDeltas","initialWidth","initialHeight","MAX_SAFE_INTEGER","hasImg","eventTarget","eventCurrentTarget","isResizeHandleOrChild","tableResizing","cellsFormatFinder","reUnit","COL_INDEX","isTableCellWizard","tableCellWizard","selectedTable","_sourceTable","_selectedTable","selectedCells","_selectedTableCells","_selectedCells","closeCallback","onDialogClose","parseTable","TableWizardDialog","insertTable","createNewTable","updateTable","_ensureFocusableAfterTable","lastSelectedRow","cellProp","tableProp","_lastInCollection","_deleteTableRows","_addRows","_updateColumns","_updateTableProperties","cellProperties","_updateCellProperties","_updateCaption","_updateHeadersWithThead","_updateHeadersNoThead","_updateHeaderAssociates","_isHeadingRow","_isHeadingCell","cellsWithHeadersAssociated","headingIds","checkHeader","header","headersArray","headersAttr","some","_insertCells","insertCell","createTHead","_createTableRows","createTBody","cellsWithHeaders","_addScopes","initialIndex","insertRow","cellsLength","newRowsCount","firstRowLastCell","numberOfColumns","lastCurrentCell","rowColumns","deleteCell","_getStylesData","topCellPadding","_getNumericValue","leftCellPadding","bottomCellPadding","rightCellPadding","tableData","paddingTop","paddingLeft","paddingBottom","paddingRight","captionContent","deleteCaption","createCaption","_getAlignmentData","verticalAlign","_swapToHeaderCells","deleteTHead","_removeScopes","_removeAssociates","headerCols","whiteSpace","widthUnit","heightUnit","backgroundColor","bgColor","borderCollapse","_getTablePositionData","tStyle","captionClone","tableAlignment","_getAlignment","tablePosition","_getTablePosition","numberOfHeaderColumns","tableJson","_getUnit","parseTableRows","rowData","cellData","parseCell","cStyle","horizontalOnly","hAlign","vAlign","collection","TableWizardEditTool","TableCellWizardEditTool","FORM_FIELD_CLASS","INVISIBLE_CLASS","DOT","numericTextBoxSettings","borderStyles","textWrapDropDownSettings","tablePositionDropDownSettings","tableAlignmentDropDownSettings","cellAlignmentDropDownSettings","accessibilityAlignmentDropDownSettings","tablePropertiesDialogTemplate","cellPropertiesDialogTemplate","_openTablePropertiesDialog","closeHandler","_dialogTemplate","collectTableDialogValues","components","_initTabStripComponent","_tablePropertiesForm","_createTablePropertiesForm","_accessibilityPropertiesForm","_createAccessibilityPropertiesForm","_openCellPropertiesDialog","collectCellDialogValues","_cellPropertiesForm","_createCellPropertiesForm","isCellProperties","tabStrip","kendoTabStrip","_collectTableViewValues","_collectAccessibilityViewValues","_collectCellViewValues","tableView","check","cellView","wrapTextValue","accessibilityView","_addUnit","_initNumericTextbox","storage","settings","kendoNumericTextBox","_initDropDownList","kendoDropDownList","_setComponentValue","_initBorderStyleDropDown","_initTablePositionDropDown","_initPositionDropDown","_initTableAlignmentDropDown","_initAlignmentDropDown","_initCellAlignmentDropDown","_initAccessibilityAlignmentDropDown","_initTextWrapDropDown","_initAssociationDropDown","_initColorPicker","kendoColorPicker","clearButton","_initInput","kendoTextBox","_initCheckbox","kendoCheckBox","_initTextArea","kendoTextArea","_destroyComponents","dialogTemplate","_onPaddingTopChange","viewType","topCellPaddingNumeric","topCellPaddingValue","leftCellPaddingNumeric","bottomCellPaddingNumeric","rightCellPaddingNumeric","_cachedPadding","_onPaddingCheckChange","checked","bottomCellPaddingValue","leftCellPaddingValue","rightCellPaddingValue","_onColumnsNumberChange","headerColumnsNumeric","currentNumberOfColumnsHeaders","_onRowsNumberChange","headerRowsNumeric","currentNumberOfRowHeaders","numberOfRows","layout","grid","gutter","layoutWrapper","hint","optional"],"sources":["kendo.editor.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.combobox.js'), require('kendo.dropdownlist.js'), require('kendo.resizable.js'), require('kendo.window.js'), require('kendo.colorpicker.js'), require('kendo.imagebrowser.js'), require('kendo.numerictextbox.js'), require('kendo.textarea.js'), require('kendo.core.js'), require('kendo.toolbar.js'), require('kendo.icons.js'), require('kendo.form.js'), require('kendo.filebrowser.js'), require('kendo.draganddrop.js'), require('kendo.html.button.js'), require('kendo.tabstrip.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.combobox', 'kendo.dropdownlist', 'kendo.resizable', 'kendo.window', 'kendo.colorpicker', 'kendo.imagebrowser', 'kendo.numerictextbox', 'kendo.textarea', 'kendo.core', 'kendo.toolbar', 'kendo.icons', 'kendo.form', 'kendo.filebrowser', 'kendo.draganddrop', 'kendo.html.button', 'kendo.tabstrip'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendoeditor = global.kendoeditor || {}, global.kendoeditor.js = factory()));\n})(this, (function () {\n (function(kendo) {\n var UndoRedoStack = kendo.Observable.extend({\n init: function(options) {\n kendo.Observable.fn.init.call(this, options);\n this.clear();\n },\n events: [ \"undo\", \"redo\" ],\n push: function (command) {\n this.stack = this.stack.slice(0, this.currentCommandIndex + 1);\n this.currentCommandIndex = this.stack.push(command) - 1;\n },\n undo: function () {\n if (this.canUndo()) {\n var command = this.stack[this.currentCommandIndex--];\n command.undo();\n this.trigger(\"undo\", { command: command });\n }\n },\n redo: function () {\n if (this.canRedo()) {\n var command = this.stack[++this.currentCommandIndex];\n command.redo();\n this.trigger(\"redo\", { command: command });\n }\n },\n clear: function() {\n this.stack = [];\n this.currentCommandIndex = -1;\n },\n canUndo: function () {\n return this.currentCommandIndex >= 0;\n },\n canRedo: function () {\n return this.currentCommandIndex != this.stack.length - 1;\n }\n });\n\n kendo.deepExtend(kendo, {\n util: {\n UndoRedoStack: UndoRedoStack\n }\n });\n })(kendo);\n\n (function($,undefined$1) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n Widget = kendo.ui.Widget,\n os = kendo.support.mobileOS,\n browser = kendo.support.browser,\n extend = $.extend,\n deepExtend = kendo.deepExtend,\n keys = kendo.keys,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n NS = \".kendoEditor\";\n\n const FORMATTING_MARKS_STYLE_ID = \"formatting-marks-style\",\n FORMATTING_MARKS_OVERLAY_ID = \"formatting-marks-overlay\",\n FORMATTING_MARKS_OVERLAY_WRAPPER_ID = \"formatting-marks-overlay-wrapper\";\n\n var SELECT = \"select\";\n var SELECT_OVERLAY_SELECTOR = \"select.k-select-overlay\";\n var PLACEHOLDER_CLASS = \"k-placeholder\";\n var PLACEHOLDER_TAG_ID = \"placeholder\";\n var REFRESH_INTERVAL = 200;\n var DEFAULT_LANGUAGE = \"en\";\n\n var NATIVE_TOOLS = [\n \"insertLineBreak\",\n \"insertParagraph\",\n \"redo\",\n \"undo\",\n \"autoLink\"\n ];\n\n var EditorUtils = {\n editorWrapperTemplate: () =>\n '
' +\n '
' +\n '
' +\n '
',\n\n formatByName: function(name, format) {\n for (var i = 0; i < format.length; i++) {\n if ($.inArray(name, format[i].tags) >= 0) {\n return format[i];\n }\n }\n },\n\n getToolCssClass: function(name, icon) {\n var toolCssClassNames = {\n superscript: \"supscript\",\n subscript: \"subscript\",\n justifyLeft: \"align-left\",\n justifyCenter: \"align-center\",\n justifyRight: \"align-right\",\n justifyFull: \"align-justify\",\n insertUnorderedList: \"list-unordered\",\n insertOrderedList: \"list-ordered\",\n insertUpperRomanList: \"list-roman-upper\",\n insertLowerRomanList: \"list-roman-lower\",\n \"import\": \"import\",\n indent: \"indent\",\n outdent: \"outdent\",\n createLink: \"link\",\n unlink: \"unlink\",\n insertImage: \"image\",\n insertFile: \"file-add\",\n viewHtml: \"code\",\n foreColor: \"foreground-color\",\n backColor: \"droplet\",\n createTable: \"table-add\",\n addColumnLeft: \"table-column-insert-left\",\n addColumnRight: \"table-column-insert-right\",\n addRowAbove: \"table-row-insert-above\",\n addRowBelow: \"table-row-insert-below\",\n deleteRow: \"table-row-delete\",\n deleteColumn: \"table-column-delete\",\n mergeCellsHorizontally: \"cells-merge-horizontally\",\n mergeCellsVertically: \"cells-merge-vertically\",\n splitCellHorizontally: \"cell-split-horizontally\",\n splitCellVertically: \"cell-split-vertically\",\n tableProperties: \"table-properties\",\n tableCellProperties: \"table-cell-properties\",\n tableWizardInsert: \"table-wizard\",\n tableAlignLeft: \"table-position-start\",\n tableAlignCenter: \"table-position-center\",\n tableAlignRight: \"table-position-end\",\n cleanFormatting: \"clear-css\",\n copyFormat: \"copy-format\",\n applyFormat: \"apply-format\",\n pdf: \"file-pdf\"\n };\n\n var cssClass = toolCssClassNames[name];\n\n if (cssClass) {\n return cssClass;\n }\n\n if (icon) {\n return icon;\n }\n\n return EditorUtils.nameToKebab(name);\n },\n\n nameToKebab: function(name) {\n return name.replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n },\n\n registerTool: function(toolName, tool) {\n if (!tool.name) {\n tool.options.name = toolName;\n tool.name = toolName.toLowerCase();\n }\n\n if (!tool.options.ui) {\n tool.options.ui = {};\n }\n\n tool.options.ui.command = toolName;\n\n Editor.defaultTools[toolName] = tool;\n },\n\n registerFormat: function(formatName, format) {\n Editor.fn.options.formats[formatName] = format;\n },\n\n cacheComments: function(content, comments) {\n for (var index in comments) {\n content = content.replace(comments[index], \"{\" + index + \"}\");\n }\n return content;\n },\n\n retrieveComments: function(content, comments) {\n for (var index in comments) {\n content = content.replace(\"{\" + index + \"}\", comments[index]);\n }\n return content;\n }\n };\n\n var messages = {\n auto: \"Auto\",\n bold: \"Bold\",\n italic: \"Italic\",\n underline: \"Underline\",\n strikethrough: \"Strikethrough\",\n superscript: \"Superscript\",\n subscript: \"Subscript\",\n fitToCell: \"Fit to cell\",\n justifyCenter: \"Center text\",\n justifyLeft: \"Align text left\",\n justifyRight: \"Align text right\",\n justifyFull: \"Justify\",\n insertUnorderedList: \"Insert unordered list\",\n insertOrderedList: \"Insert ordered list\",\n lineHeight: \"Set line height\",\n formattingMarks: \"Toggle formatting marks\",\n indent: \"Indent\",\n outdent: \"Outdent\",\n createLink: \"Insert hyperlink\",\n unlink: \"Remove hyperlink\",\n insertImage: \"Insert image\",\n insertFile: \"Insert file\",\n insertHtml: \"Insert HTML\",\n viewHtml: \"View HTML\",\n fontName: \"Select font family\",\n fontNameInherit: \"(inherited font)\",\n fontSize: \"Select font size\",\n fontSizeInherit: \"(inherited size)\",\n formatBlock: \"Format\",\n formatting: \"Format\",\n foreColor: \"Color\",\n backColor: \"Background color\",\n style: \"Styles\",\n emptyFolder: \"Empty Folder\",\n editAreaTitle: \"Editable area. Press F10 for toolbar.\",\n uploadFile: \"Upload\",\n overflowAnchor: \"More tools\",\n orderBy: \"Arrange by:\",\n orderBySize: \"Size\",\n orderByName: \"Name\",\n invalidFileType: \"The selected file \\\"{0}\\\" is not valid. Supported file types are {1}.\",\n deleteFile: 'Are you sure you want to delete \"{0}\"?',\n overwriteFile: 'A file with name \"{0}\" already exists in the current directory. Do you want to overwrite it?',\n directoryNotFound: \"A directory with this name was not found.\",\n imageWebAddress: \"Web address\",\n imageAltText: \"Alternate text\",\n imageWidth: \"Width (px)\",\n imageHeight: \"Height (px)\",\n fileWebAddress: \"Web address\",\n fileTitle: \"Title\",\n fileText: \"Text\",\n linkWebAddress: \"Web address\",\n linkText: \"Text\",\n linkToolTip: \"ToolTip\",\n linkOpenInNewWindow: \"Open link in new window\",\n dialogUpdate: \"Update\",\n dialogInsert: \"Insert\",\n dialogOk: \"Confirm\",\n dialogCancel: \"Cancel\",\n cleanFormatting: \"Clean formatting\",\n createTable: \"Create a table\",\n createTableHint: \"Create a {0} x {1} table\",\n addColumnLeft: \"Add column on the left\",\n addColumnRight: \"Add column on the right\",\n addRowAbove: \"Add row above\",\n addRowBelow: \"Add row below\",\n deleteRow: \"Delete row\",\n deleteColumn: \"Delete column\",\n mergeCellsHorizontally: \"Merge cells horizontally\",\n mergeCellsVertically: \"Merge cells vertically\",\n splitCellHorizontally: \"Split cells horizontally\",\n splitCellVertically: \"Split cells vertically\",\n tableAlignLeft: \"Table Align Left\",\n tableAlignCenter: \"Table Align Center\",\n tableAlignRight: \"Table Align Right\",\n tableWizard: \"Table Wizard\",\n tableProperties: \"Table Properties\",\n tableCellProperties: \"Cell Properties\",\n tableTab: \"General\",\n cellTab: \"Cell\",\n accessibilityTab: \"Advanced\",\n caption: \"Caption\",\n summary: \"Summary\",\n width: \"Width\",\n height: \"Height\",\n units: \"Units\",\n cellSpacing: \"Cell Spacing\",\n cellPadding: \"Cell Padding\",\n topPadding: \"Top\",\n leftPadding: \"Left\",\n bottomPadding: \"Bottom\",\n rightPadding: \"Right\",\n independentCellPaddings: \"Independent Cell Paddings\",\n cellMargin: \"Cell Margin\",\n alignment: \"Alignment\",\n captionAlignment: \"Caption alignment\",\n position: \"Position\",\n background: \"Background\",\n tableBackground: \"Table background\",\n cssClass: \"CSS Class\",\n id: \"ID\",\n border: \"Border\",\n borderStyle: \"Border Style\",\n borderWidth: \"Border Width\",\n borderColor: \"Border Color\",\n collapseBorders: \"Collapse borders\",\n wrapText: \"Wrap text\",\n associateCellsWithHeaders: \"Associate headers\",\n alignLeft: \"Align Left\",\n alignCenter: \"Align Center\",\n alignRight: \"Align Right\",\n alignLeftTop: \"Align Left Top\",\n alignCenterTop: \"Align Center Top\",\n alignRightTop: \"Align Right Top\",\n alignLeftMiddle: \"Align Left Middle\",\n alignCenterMiddle: \"Align Center Middle\",\n alignRightMiddle: \"Align Right Middle\",\n alignLeftBottom: \"Align Left Bottom\",\n alignCenterBottom: \"Align Center Bottom\",\n alignRightBottom: \"Align Right Bottom\",\n alignRemove: \"Remove Alignment\",\n columns: \"Columns\",\n rows: \"Rows\",\n selectAllCells: \"Apply to all cells\",\n applyToColumn: \"apply to column\",\n applyToRow: \"apply to row\",\n exportAs: \"Export As\",\n \"import\": \"Import\",\n print: \"Print\",\n headerRows: \"Header Rows\",\n headerColumns: \"Header Cols\",\n tableSummaryPlaceholder: \"Summary attribute is not HTML5 compatible.\",\n associateNone: \"None\",\n associateScope: \"Associate using 'scope' attribute\",\n associateIds: \"Associate using Ids\",\n copyFormat: \"Copy format\",\n applyFormat: \"Apply format\",\n borderNone: \"None\",\n undo: \"Undo\",\n redo: \"Redo\"\n };\n\n var supportedContentEditable = typeof(document.documentElement.contentEditable) != 'undefined';\n\n var toolGroups = {\n basic: [\"bold\", \"italic\", \"underline\", \"strikethrough\"],\n undo: [\"undo\", \"redo\"],\n scripts: [\"subscript\", \"superscript\" ],\n alignment: [\"justifyLeft\", \"justifyCenter\", \"justifyRight\", \"justifyFull\" ],\n lines: [\"lineHeight\"],\n symbols: [\"formattingMarks\"],\n links: [\"insertImage\", \"insertFile\", \"createLink\", \"unlink\"],\n lists: [\"insertUnorderedList\", \"insertOrderedList\", \"insertUpperRomanList\", \"insertLowerRomanList\",],\n dent: [\"indent\", \"outdent\"],\n tablesWizard: [\"tableProperties\", \"tableCellProperties\"],\n tablesInsert: [\"createTable\"],\n tablesAddDelete: [ \"addColumnLeft\", \"addColumnRight\", \"addRowAbove\", \"addRowBelow\", \"deleteRow\", \"deleteColumn\" ],\n tablesMerge: [ \"mergeCellsHorizontally\", \"mergeCellsVertically\", \"splitCellHorizontally\", \"splitCellVertically\" ],\n tablesPosition: [ \"tableAlignLeft\", \"tableAlignCenter\", \"tableAlignRight\" ],\n formatPainter: [ \"copyFormat\", \"applyFormat\" ]\n };\n\n var Editor = Widget.extend({\n init: function(element, options) {\n var that = this,\n editorNS = kendo.ui.editor,\n dom = editorNS.Dom,\n toolbarContainer,\n type, domElement;\n\n /* suppress initialization in devices w/o proper contenteditable support */\n if (!supportedContentEditable) {\n return;\n }\n\n Widget.fn.init.call(that, element, options);\n\n that.options = deepExtend({}, that.options, options);\n\n element = that.element;\n domElement = element[0];\n type = dom.name(domElement);\n\n this._registerHandler(\n element.closest(\"form\"), \"submit\", that.update.bind(that, undefined$1)\n );\n\n toolbarContainer = that._setupType(element);\n\n that._initToolbar(toolbarContainer);\n that._setupHeight(type);\n that._resizable();\n that._initializeContentElement(that);\n that._setupKeyboard();\n\n that.clipboard = new editorNS.Clipboard(this);\n that.undoRedoStack = new kendo.util.UndoRedoStack();\n\n that._populateValue(options, domElement);\n\n that._registerHandler(document, {\n \"mousedown\": function() { that._endTyping(); },\n \"mouseup\": function(e) { that._mouseup(e); }\n });\n\n that._registerHandler(window, \"resize\", that._handleSpaceAndNewLines.bind(that));\n\n that._initializeImmutables();\n\n if (type == \"textarea\") {\n that._ariaLabel(that.wrapper.find(\"iframe\"));\n }\n\n that.toolbar.resize();\n\n kendo.notify(that);\n\n if (that._showWatermarkOverlay) {\n that._showWatermarkOverlay((that.wrapper && that.wrapper[0]) || that.element[0]);\n }\n },\n\n events: [\n \"select\",\n \"change\",\n \"execute\",\n \"error\",\n \"paste\",\n \"keydown\",\n \"keyup\"\n ],\n\n options: {\n name: \"Editor\",\n messages: messages,\n placeholder: \"\",\n nonce: \"\",\n unsafeInline: true,\n formats: {},\n encoded: true,\n formattingMarksRefreshDelay: 250,\n domain: null,\n resizable: false,\n deserialization: {\n custom: null\n },\n serialization: {\n entities: true,\n semantic: true,\n scripts: false,\n optimizeTags: false,\n keepEOL: false\n },\n pasteCleanup: {\n all: false,\n css: false,\n custom: null,\n keepNewLines: false,\n msAllFormatting: false,\n msConvertLists: true,\n msTags: true,\n none: false,\n span: false\n },\n stylesheets: [],\n dialogOptions: {\n modal: true, resizable: false, draggable: true,\n animation: false\n },\n imageBrowser: null,\n fileBrowser: null,\n navigateOnTab: false,\n fontName: [\n { text: \"Arial\", value: \"Arial, Helvetica, sans-serif\" },\n { text: \"Courier New\", value: \"\\\"Courier New\\\", Courier, monospace\" },\n { text: \"Georgia\", value: \"Georgia, serif\" },\n { text: \"Impact\", value: \"Impact, Charcoal, sans-serif\" },\n { text: \"Lucida Console\", value: \"\\\"Lucida Console\\\", Monaco, monospace\" },\n { text: \"Tahoma\", value: \"Tahoma, Geneva, sans-serif\" },\n { text: \"Times New Roman\", value: \"\\\"Times New Roman\\\", Times, serif\" },\n { text: \"Trebuchet MS\", value: \"\\\"Trebuchet MS\\\", Helvetica, sans-serif\" },\n { text: \"Verdana\", value: \"Verdana, Geneva, sans-serif\" }\n ],\n fontSize: [\n { text: \"1 (8pt)\", value: \"xx-small\" },\n { text: \"2 (10pt)\", value: \"x-small\" },\n { text: \"3 (12pt)\", value: \"small\" },\n { text: \"4 (14pt)\", value: \"medium\" },\n { text: \"5 (18pt)\", value: \"large\" },\n { text: \"6 (24pt)\", value: \"x-large\" },\n { text: \"7 (36pt)\", value: \"xx-large\" }\n ],\n formatBlock: [\n { text: \"Paragraph\", value: \"p\" },\n { text: \"Quotation\", value: \"blockquote\" },\n { text: \"Heading 1\", value: \"h1\" },\n { text: \"Heading 2\", value: \"h2\" },\n { text: \"Heading 3\", value: \"h3\" },\n { text: \"Heading 4\", value: \"h4\" },\n { text: \"Heading 5\", value: \"h5\" },\n { text: \"Heading 6\", value: \"h6\" }\n ],\n tools: [\n \"formatting\",\n \"bold\",\n \"italic\",\n \"underline\",\n \"undo\",\n \"redo\",\n \"justifyLeft\",\n \"justifyCenter\",\n \"justifyRight\",\n \"copyFormat\",\n \"applyFormat\",\n \"insertUnorderedList\",\n \"insertOrderedList\",\n \"indent\",\n \"outdent\",\n \"createLink\",\n \"unlink\",\n \"insertImage\",\n \"tableProperties\",\n \"tableCellProperties\",\n \"createTable\",\n \"addRowAbove\",\n \"addRowBelow\",\n \"addColumnLeft\",\n \"addColumnRight\",\n \"deleteRow\",\n \"deleteColumn\",\n \"mergeCellsHorizontally\",\n \"mergeCellsVertically\",\n \"splitCellHorizontally\",\n \"splitCellVertically\",\n \"tableAlignLeft\",\n \"tableAlignCenter\",\n \"tableAlignRight\"\n ]\n },\n\n destroy: function() {\n var editor = this;\n\n Widget.fn.destroy.call(this);\n\n this._endTyping(true);\n\n this._deregisterHandlers();\n\n clearTimeout(this._spellCorrectTimeout);\n\n this._focusOutside();\n\n this.toolbar.destroy();\n\n if (this.windowInstance) {\n this.windowInstance.destroy();\n }\n if (this.tablePopup) {\n this.tablePopup.destroy();\n }\n\n editor._destroyUploadWidget();\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n this.wrapper.css(\"min-height\", \"\");\n this.wrapper.css(\"max-height\", \"\");\n }\n\n editor._destroyResizings();\n\n editor._destroyFormattingMarksOverlay();\n\n kendo.destroy(this.wrapper);\n },\n\n setOptions: function(options) {\n var editor = this;\n\n Widget.fn.setOptions.call(editor, options);\n\n if (options.tools) {\n this._setOptionsTools(options.tools);\n }\n\n this._initializePlaceholder();\n },\n\n createRange: function(document) {\n return kendo.ui.editor.RangeUtils.createRange(document || this.document);\n },\n\n encodedValue: function() {\n return kendo.ui.editor.Dom.encode(this.value());\n },\n\n exec: function(name, params) {\n var that = this;\n var command = null;\n var defaultTools = kendo.ui.Editor.defaultTools;\n var range, tool, prevented;\n\n if (!name) {\n throw new Error(\"kendoEditor.exec(): `name` parameter cannot be empty\");\n }\n\n if (that.body.getAttribute(\"contenteditable\") !== \"true\" &&\n name !== \"print\" &&\n name !== \"pdf\" &&\n name !== \"exportAs\") {\n return false;\n }\n\n if (!that.keyboard.isTypingInProgress()) {\n that._focusBody();\n that.selectRange(that._range || that.getRange());\n }\n\n tool = that.tools[name] || defaultTools[name];\n\n if (!tool) {\n Object.keys(defaultTools).map(key => {\n if (key.toLowerCase() === name) {\n tool = defaultTools[key];\n }\n });\n }\n\n if (tool) {\n range = that.getRange();\n\n if (tool.command) {\n command = tool.command(extend({ range: range, body: that.body, immutables: !!that.immutables }, params));\n }\n\n prevented = that.trigger(\"execute\", { name: name, command: command });\n\n if (prevented) {\n return;\n }\n\n if (/^(undo|redo)$/i.test(name)) {\n that.undoRedoStack[name]();\n } else if (command) {\n that.execCommand(command);\n\n if (command.async) {\n command.change = that._selectionChange.bind(that);\n return;\n }\n }\n\n that._handleSpaceAndNewLines();\n that._selectionChange();\n }\n },\n\n execCommand: function(command) {\n if (!command.managesUndoRedo) {\n this.undoRedoStack.push(command);\n }\n\n command.editor = this;\n command.exec();\n },\n\n focus: function() {\n this.restoreSelection();\n },\n\n getRange: function() {\n var selection = this.getSelection(),\n range = selection && selection.rangeCount > 0 ? selection.getRangeAt(0) : this.createRange(),\n doc = this.document;\n\n if (range.startContainer == doc && range.endContainer == doc && !range.startOffset && !range.endOffset) {\n range.setStart(this.body, 0);\n range.collapse(true);\n }\n\n return range;\n },\n\n getSelection: function() {\n return kendo.ui.editor.SelectionUtils.selectionFromDocument(this.document);\n },\n\n paste: function(html, options) {\n this.focus();\n\n var command = new kendo.ui.editor.InsertHtmlCommand($.extend({\n range: this.getRange(),\n html: html\n }, options));\n\n command.editor = this;\n\n command.exec();\n },\n\n refresh: function() {\n var that = this;\n\n if (that.textarea) {\n that._destroyResizings();\n // preserve updated value before re-initializing\n // don't use update() to prevent the editor from encoding the content too early\n var value = that.value();\n that.textarea.val(value);\n that.wrapper.find(\"iframe\").remove();\n that._initializeContentElement(that);\n that.value(value);\n }\n },\n\n restoreSelection: function() {\n this._focusBody();\n\n if (this.selectionRestorePoint) {\n this.selectRange(this.selectionRestorePoint.toRange());\n }\n },\n\n saveSelection: function(range) {\n range = range || this.getRange();\n var container = range.commonAncestorContainer,\n body = this.body;\n\n if (container == body || $.contains(body, container)) {\n this.selectionRestorePoint = new kendo.ui.editor.RestorePoint(range, body);\n }\n },\n\n selectedHtml: function() {\n return kendo.ui.editor.Serializer.domToXhtml(this.getRange().cloneContents());\n },\n\n selectRange: function(range) {\n this._focusBody();\n var selection = this.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n this.saveSelection(range);\n },\n\n state: function(toolName) {\n var tool = kendo.ui.Editor.defaultTools[toolName];\n var finder = tool && (tool.options.finder || tool.finder);\n var RangeUtils = kendo.ui.editor.RangeUtils;\n var range, textNodes;\n\n if (finder) {\n range = this.getRange();\n\n textNodes = RangeUtils.textNodes(range);\n\n if (!textNodes.length && range.collapsed) {\n textNodes = [range.startContainer];\n }\n\n return finder.getFormat ? finder.getFormat(textNodes) : finder.isFormatted(textNodes);\n }\n\n return false;\n },\n\n update: function(value) {\n value = value || this.options.encoded ? this.encodedValue() : this.value();\n\n if (this.textarea) {\n this.textarea.val(value);\n this._togglePlaceholder(!value.trim());\n } else {\n this._oldValue = value;\n }\n },\n\n value: function(html) {\n var body = this.body,\n editorNS = kendo.ui.editor,\n options = this.options,\n currentHtml = editorNS.Serializer.domToXhtml(body, options.serialization);\n\n if (html === undefined$1) {\n return currentHtml;\n }\n\n if (html == currentHtml) {\n return;\n }\n\n editorNS.Serializer.htmlToDom(html, body, options.deserialization);\n\n this.selectionRestorePoint = null;\n this.update();\n this._refreshTools();\n },\n\n _bindTools: function() {\n var that = this,\n defaultTools = this.tools;\n\n that.unbind(\"select\", that.toolbar.resize.bind(that.toolbar));\n\n that.toolbar.element.find(\"[data-command]\")\n .filter((i, el) => $(el).find(\"[data-command]\").length === 0)\n .each((i, el) => {\n var toolName = el.getAttribute(\"data-command\"),\n tool = defaultTools[toolName];\n\n if (tool && tool.initialize) {\n tool.initialize($(el), that);\n }\n });\n\n that.bind(\"select\", that.toolbar.resize.bind(that.toolbar));\n },\n\n _blur: function() {\n var textarea = this.textarea;\n var old = textarea ? textarea.val() : this._oldValue;\n var value = this.options.encoded ? this.encodedValue() : this.value();\n\n this.update();\n\n if (textarea) {\n textarea.trigger(\"blur\");\n }\n\n if (value != old) {\n this.trigger(\"change\");\n if (textarea) {\n textarea.trigger(\"change\");\n }\n }\n },\n\n _containsRange: function(range) {\n var dom = kendo.ui.editor.Dom;\n var body = this.body;\n return range && dom.isAncestorOrSelf(body, range.startContainer) &&\n dom.isAncestorOrSelf(body, range.endContainer);\n },\n\n _createContentElement: function(stylesheets) {\n var editor = this;\n var iframe, wnd, doc;\n var textarea = editor.textarea;\n var specifiedDomain = editor.options.domain;\n var domain = specifiedDomain || document.domain;\n var domainScript = \"\";\n var src = 'javascript:\"\"';\n var lang = \"\";\n\n textarea.hide();\n\n iframe = $(\"'); }\n },\n 'k:script': {\n start: function(node) { mapStart(node, \"script\"); },\n end: function() { result.push(''); },\n skipEncoding: true\n },\n span: {\n canOptimize: true,\n semantic: true,\n start: function(node) {\n var style = node.style;\n\n var attributes = specifiedAttributes(node);\n var semanticAttributes = semanticFilter(attributes);\n\n if (semanticAttributes.length) {\n result.push(\"\");\n }\n\n if (style.textDecoration == \"underline\") {\n result.push(\"\");\n }\n\n var font = [];\n if (style.color) {\n font.push('color=\"' + dom.toHex(style.color) + '\"');\n }\n\n if (style.fontFamily) {\n font.push('face=\"' + style.fontFamily + '\"');\n }\n\n if (style.fontSize) {\n var size = $.inArray(style.fontSize, fontSizeMappings);\n font.push('size=\"' + size + '\"');\n }\n\n // Apply the rest of the inline styles back\n var inlineStyles = [];\n var ignoredStylePrefixes = [\"text-decoration\", \"color\", \"font\"];\n\n for (let i = 0; i < style.length; i++) {\n var inlineStyle = style[i];\n\n if (ignoredStylePrefixes.filter(prop => inlineStyle.startsWith(prop)).length <= 0) {\n inlineStyles.push(`${inlineStyle}: ${style[inlineStyle]}`);\n }\n }\n\n if (inlineStyles.length) {\n font.push('style=\"' + inlineStyles.join(\";\") + '\"');\n }\n\n if (font.length) {\n result.push(\"\");\n }\n },\n end: function(node) {\n var style = node.style;\n\n if (style.color || style.fontFamily || style.fontSize) {\n result.push(\"\");\n }\n\n if (style.textDecoration == \"underline\") {\n result.push(\"\");\n }\n\n if (semanticFilter(specifiedAttributes(node)).length) {\n result.push(\"\");\n }\n }\n },\n strong: {\n semantic: true,\n start: function(node) { mapStart(node, \"b\"); },\n end: function() { result.push(''); }\n },\n em: {\n semantic: true,\n start: function(node) { mapStart(node, \"i\"); },\n end: function() { result.push(''); }\n },\n b: {\n semantic: false,\n start: function(node) { mapStart(node, \"strong\"); },\n end: function() { result.push(''); }\n },\n i: {\n semantic: false,\n start: function(node) { mapStart(node, \"em\"); },\n end: function() { result.push(''); }\n },\n u: {\n semantic: false,\n start: function(node) {\n result.push('');\n },\n end: function() { result.push(''); }\n },\n font: {\n canOptimize: true,\n semantic: false,\n start: function(node) {\n result.push('');\n },\n end: function() {\n result.push('');\n }\n }\n };\n\n tagMap.script = tagMap[\"k:script\"];\n\n options = options || {};\n\n if (typeof options.semantic == \"undefined\") {\n options.semantic = true;\n }\n\n function cssProperties(cssText) {\n var trim = kendo.trim;\n var css = trim(cssText);\n var match;\n var property, value;\n var properties = [];\n\n cssDeclaration.lastIndex = 0;\n\n while (true) {\n match = cssDeclaration.exec(css);\n\n if (!match) {\n break;\n }\n\n property = trim(match[1].toLowerCase());\n value = trim(match[2]);\n\n if (property == \"font-size-adjust\" || property == \"font-stretch\") {\n continue;\n }\n\n if (property.indexOf('color') >= 0) {\n value = dom.toHex(value);\n } else if (property.indexOf('font') >= 0) {\n value = value.replace(quoteRe, \"'\");\n } else if (/\\burl\\(/g.test(value)) {\n value = value.replace(quoteRe, \"\");\n }\n\n properties.push({ property: property, value: value });\n }\n\n return properties;\n }\n\n function styleAttr(cssText) {\n var properties = cssProperties(cssText);\n var i;\n\n for (i = 0; i < properties.length; i++) {\n result.push(properties[i].property);\n result.push(':');\n result.push(properties[i].value);\n result.push(';');\n }\n }\n\n function specifiedAttributes(node) {\n var result = [];\n var attributes = node.attributes;\n var attribute, i, l;\n var name, value, specified;\n\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n\n name = attribute.nodeName;\n value = attribute.value;\n specified = attribute.specified;\n\n // In IE < 8 the 'value' attribute is not returned as 'specified'. The same goes for type=\"text\"\n if (name == 'value' && 'value' in node && node.value) {\n specified = true;\n } else if (name == 'type' && value == 'text') {\n specified = true;\n } else if (name == \"class\" && !value) {\n specified = false;\n } else if (sizzleAttr.test(name)) {\n specified = false;\n } else if (name == 'complete') {\n specified = false;\n } else if (name == 'altHtml') {\n specified = false;\n } else if (name == 'start' && dom.is(node, \"ul\")) {\n specified = false;\n } else if (name == 'start' && dom.is(node, \"ol\") && value == \"1\") {\n specified = false;\n } else if (name.indexOf('_moz') >= 0) {\n specified = false;\n } else if (scriptAttr.test(name)) {\n specified = !!options.scripts;\n } else if (name == 'data-role' && value == 'resizable' && (dom.is(node, \"tr\") || dom.is(node, \"td\"))) {\n specified = false;\n }\n\n if (specified) {\n result.push(attribute);\n }\n }\n\n return result;\n }\n\n function attr(node, attributes) {\n var i, l, attribute, name, value;\n\n attributes = attributes || specifiedAttributes(node);\n\n if (dom.is(node, 'img')) {\n var width = node.style.width,\n height = node.style.height,\n $node = $(node);\n\n if (width && pixelRe.test(width)) {\n $node.attr('width', parseInt(width, 10));\n dom.unstyle(node, { width: undefined$1 });\n }\n\n if (height && pixelRe.test(height)) {\n $node.attr('height', parseInt(height, 10));\n dom.unstyle(node, { height: undefined$1 });\n }\n }\n\n if (!attributes.length) {\n return;\n }\n\n // Remove the following if everything seems to be in order.\n // https://github.com/telerik/kendo-ui-core/issues/3639\n // attributes.sort(function (a, b) {\n // return a.nodeName > b.nodeName ? 1 : a.nodeName < b.nodeName ? -1 : 0;\n // });\n\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n value = attribute.value;\n\n if (name == \"class\" && value == \"k-table\") {\n continue;\n }\n\n name = name.replace(scriptAttr, \"\");\n\n result.push(' ');\n result.push(name);\n result.push('=\"');\n\n if (name == 'style') {\n styleAttr(value || node.style.cssText);\n } else if (name == 'src' || name == 'href') {\n result.push(kendo.htmlEncode(node.getAttribute(name, 2)));\n } else {\n result.push(dom.fillAttrs[name] ? name : value);\n }\n\n result.push('\"');\n }\n }\n\n function children(node, skip, skipEncoding) {\n for (var childNode = node.firstChild; childNode; childNode = childNode.nextSibling) {\n child(childNode, skip, skipEncoding);\n }\n }\n\n function text(node) {\n return node.nodeValue.replace(/\\ufeff/g, \"\");\n }\n\n function isEmptyBomNode(node) {\n if (dom.isBom(node)) {\n do {\n node = node.parentNode;\n\n if (dom.is(node, TD) && node.childNodes.length === 1) {\n return true;\n }\n\n if (node.childNodes.length !== 1) {\n return false;\n }\n } while (!dom.isBlock(node));\n\n return true;\n }\n\n return false;\n }\n\n function child(node, skip, skipEncoding) {\n var nodeType = node.nodeType,\n tagName, mapper,\n parent, value, previous, jqNode;\n\n if (immutables && Editor.Immutables.immutable(node)) {\n result.push(immutables.serialize(node));\n } else if (nodeType == 1) {\n tagName = dom.name(node);\n jqNode = $(node);\n\n if (jqNode.hasClass(\"k-element-resize-handle-wrapper\") || jqNode.hasClass(\"k-column-resize-handle-wrapper\") || jqNode.hasClass(\"k-row-resize-handle-wrapper\")) {\n return;\n }\n\n if (!tagName || dom.insignificant(node)) {\n return;\n }\n\n if (!options.scripts && (tagName == \"script\" || tagName == \"k:script\")) {\n return;\n }\n\n mapper = tagMap[tagName];\n\n if (mapper) {\n if (mapper.canOptimize &&\n options.optimizeTags &&\n shouldOptimize(node)) {\n children(node, false, mapper.skipEncoding);\n return;\n }\n\n if (typeof mapper.semantic == \"undefined\" ||\n (options.semantic ^ mapper.semantic)) {\n mapper.start(node);\n children(node, false, mapper.skipEncoding);\n mapper.end(node);\n return;\n }\n }\n\n result.push('<');\n result.push(tagName);\n\n attr(node);\n\n if (dom.empty[tagName]) {\n result.push(' />');\n } else {\n result.push('>');\n children(node, skip || dom.is(node, 'pre'));\n result.push('');\n }\n } else if (nodeType == 3) {\n if (isEmptyBomNode(node)) {\n result.push(' ');\n return;\n }\n\n value = text(node);\n\n if (!skip && supportsLeadingWhitespace) {\n parent = node.parentNode;\n previous = node.previousSibling;\n\n if (!previous) {\n previous = (dom.isInline(parent) ? parent : node).previousSibling;\n }\n\n if (!previous || previous.innerHTML === \"\" || dom.isBlock(previous)) {\n if (options.keepEOL) {\n value = value.replace(/[\\r\\n\\v\\f\\t ]+/, ' ');\n } else {\n value = value.replace(/^[\\r\\n\\v\\f\\t ]+/, '');\n }\n }\n\n value = value.replace(/ +/, ' ');\n }\n\n result.push(skipEncoding ? value : dom.encode(value, options));\n\n } else if (nodeType == 4) {\n result.push('');\n } else if (nodeType == 8) {\n if (node.data.indexOf('[CDATA[') < 0) {\n result.push('');\n } else {\n result.push('');\n }\n }\n }\n\n function shouldOptimize(node) {\n return node.attributes.length === 0;\n }\n\n function textOnly(root) {\n var childrenCount = root.childNodes.length;\n var textChild = childrenCount && root.firstChild.nodeType == 3;\n\n return textChild && (childrenCount == 1 || (childrenCount == 2 && dom.insignificant(root.lastChild)));\n }\n\n function runCustom() {\n if (kendo.isFunction(options.custom)) {\n result = options.custom(result) || result;\n }\n }\n\n if (textOnly(root)) {\n result = dom.encode(text(root.firstChild).replace(/[\\r\\n\\v\\f\\t ]+/, ' '), options);\n runCustom();\n\n return result;\n }\n\n children(root);\n result = result.join('');\n runCustom();\n\n // if serialized dom contains only whitespace elements, consider it empty (required field validation)\n if (result.replace(brRe, \"\").replace(emptyPRe, \"\") === \"\") {\n return \"\";\n }\n\n return result;\n }\n\n };\n\n extend(Editor, {\n Serializer: Serializer\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n extend = $.extend,\n Editor = kendo.ui.editor,\n browser = kendo.support.browser,\n dom = Editor.Dom,\n findNodeIndex = dom.findNodeIndex,\n isDataNode = dom.isDataNode,\n findClosestAncestor = dom.findClosestAncestor,\n getNodeLength = dom.getNodeLength,\n normalize = dom.normalize;\n\n var SelectionUtils = {\n selectionFromWindow: function(window) {\n if (!window) {\n return;\n }\n\n if (!(\"getSelection\" in window)) {\n return new W3CSelection(window.document);\n }\n\n return window.getSelection();\n },\n\n selectionFromRange: function(range) {\n var rangeDocument = RangeUtils.documentFromRange(range);\n return SelectionUtils.selectionFromDocument(rangeDocument);\n },\n\n selectionFromDocument: function(document) {\n return SelectionUtils.selectionFromWindow(dom.windowFromDocument(document));\n }\n };\n\n var W3CRange = Class.extend({\n init: function(doc) {\n $.extend(this, {\n ownerDocument: doc, /* not part of the spec; used when cloning ranges, traversing the dom and creating fragments */\n startContainer: doc,\n endContainer: doc,\n commonAncestorContainer: doc,\n startOffset: 0,\n endOffset: 0,\n collapsed: true\n });\n },\n\n // Positioning Methods\n setStart: function(node, offset) {\n this.startContainer = node;\n this.startOffset = offset;\n updateRangeProperties(this);\n fixIvalidRange(this, true);\n },\n\n setEnd: function(node, offset) {\n this.endContainer = node;\n this.endOffset = offset;\n updateRangeProperties(this);\n fixIvalidRange(this, false);\n },\n\n setStartBefore: function(node) {\n this.setStart(node.parentNode, findNodeIndex(node));\n },\n\n setStartAfter: function(node) {\n this.setStart(node.parentNode, findNodeIndex(node) + 1);\n },\n\n setEndBefore: function(node) {\n this.setEnd(node.parentNode, findNodeIndex(node));\n },\n\n setEndAfter: function(node) {\n this.setEnd(node.parentNode, findNodeIndex(node) + 1);\n },\n\n selectNode: function(node) {\n this.setStartBefore(node);\n this.setEndAfter(node);\n },\n\n selectNodeContents: function(node) {\n this.setStart(node, 0);\n this.setEnd(node, node[node.nodeType === 1 ? 'childNodes' : 'nodeValue'].length);\n },\n\n collapse: function(toStart) {\n var that = this;\n\n if (toStart) {\n that.setEnd(that.startContainer, that.startOffset);\n } else {\n that.setStart(that.endContainer, that.endOffset);\n }\n },\n\n // Editing Methods\n\n deleteContents: function() {\n var that = this,\n range = that.cloneRange();\n\n if (that.startContainer != that.commonAncestorContainer) {\n that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n }\n\n that.collapse(true);\n\n (function deleteSubtree(iterator) {\n while (iterator.next()) {\n if (iterator.hasPartialSubtree()) {\n deleteSubtree(iterator.getSubtreeIterator());\n } else {\n iterator.remove();\n }\n }\n })(new RangeIterator(range));\n },\n\n cloneContents: function() {\n // clone subtree\n var document = RangeUtils.documentFromRange(this);\n return (function cloneSubtree(iterator) {\n var node, frag = document.createDocumentFragment();\n\n while (node = iterator.next()) {\n node = node.cloneNode(!iterator.hasPartialSubtree());\n\n if (iterator.hasPartialSubtree()) {\n node.appendChild(cloneSubtree(iterator.getSubtreeIterator()));\n }\n\n frag.appendChild(node);\n }\n\n return frag;\n })(new RangeIterator(this));\n },\n\n extractContents: function() {\n var that = this,\n range = that.cloneRange();\n\n if (that.startContainer != that.commonAncestorContainer) {\n that.setStartAfter(findClosestAncestor(that.commonAncestorContainer, that.startContainer));\n }\n\n that.collapse(true);\n\n var document = RangeUtils.documentFromRange(that);\n\n return (function extractSubtree(iterator) {\n var node, frag = document.createDocumentFragment();\n\n while (node = iterator.next()) {\n if (iterator.hasPartialSubtree()) {\n node = node.cloneNode(false);\n node.appendChild(extractSubtree(iterator.getSubtreeIterator()));\n } else {\n iterator.remove(that.originalRange);\n }\n\n frag.appendChild(node);\n }\n\n return frag;\n })(new RangeIterator(range));\n },\n\n insertNode: function(node) {\n var that = this;\n\n if (isDataNode(that.startContainer)) {\n if (that.startOffset != that.startContainer.nodeValue.length) {\n dom.splitDataNode(that.startContainer, that.startOffset);\n }\n\n dom.insertAfter(node, that.startContainer);\n } else {\n dom.insertAt(that.startContainer, node, that.startOffset);\n }\n\n that.setStart(that.startContainer, that.startOffset);\n },\n\n cloneRange: function() {\n // fast copy\n return $.extend(new W3CRange(this.ownerDocument), {\n startContainer: this.startContainer,\n endContainer: this.endContainer,\n commonAncestorContainer: this.commonAncestorContainer,\n startOffset: this.startOffset,\n endOffset: this.endOffset,\n collapsed: this.collapsed,\n\n originalRange: this /* not part of the spec; used to update the original range when calling extractContents() on clones */\n });\n },\n\n // used for debug purposes\n toString: function() {\n var startNodeName = this.startContainer.nodeName,\n endNodeName = this.endContainer.nodeName;\n\n return [startNodeName == \"#text\" ? this.startContainer.nodeValue : startNodeName, '(', this.startOffset, ') : ',\n endNodeName == \"#text\" ? this.endContainer.nodeValue : endNodeName, '(', this.endOffset, ')'].join('');\n }\n });\n\n W3CRange.fromNode = function(node) {\n return new W3CRange(node.ownerDocument);\n };\n\n /* can be used in Range.compareBoundaryPoints if we need it one day */\n function compareBoundaries(start, end, startOffset, endOffset) {\n if (start == end) {\n return endOffset - startOffset;\n }\n\n // end is child of start\n var container = end;\n while (container && container.parentNode != start) {\n container = container.parentNode;\n }\n\n if (container) {\n return findNodeIndex(container) - startOffset;\n }\n\n // start is child of end\n container = start;\n while (container && container.parentNode != end) {\n container = container.parentNode;\n }\n\n if (container) {\n return endOffset - findNodeIndex(container) - 1;\n }\n\n // deep traversal\n var root = dom.commonAncestor(start, end);\n var startAncestor = start;\n\n while (startAncestor && startAncestor.parentNode != root) {\n startAncestor = startAncestor.parentNode;\n }\n\n if (!startAncestor) {\n startAncestor = root;\n }\n\n var endAncestor = end;\n while (endAncestor && endAncestor.parentNode != root) {\n endAncestor = endAncestor.parentNode;\n }\n\n if (!endAncestor) {\n endAncestor = root;\n }\n\n if (startAncestor == endAncestor) {\n return 0;\n }\n\n return findNodeIndex(endAncestor) - findNodeIndex(startAncestor);\n }\n\n function fixIvalidRange(range, toStart) {\n function isInvalidRange(range) {\n try {\n return compareBoundaries(range.startContainer, range.endContainer, range.startOffset, range.endOffset) < 0;\n } catch (ex) {\n // range was initially invalid (e.g. when cloned from invalid range) - it must be fixed\n return true;\n }\n }\n\n if (isInvalidRange(range)) {\n if (toStart) {\n range.commonAncestorContainer = range.endContainer = range.startContainer;\n range.endOffset = range.startOffset;\n } else {\n range.commonAncestorContainer = range.startContainer = range.endContainer;\n range.startOffset = range.endOffset;\n }\n\n range.collapsed = true;\n }\n }\n\n function updateRangeProperties(range) {\n range.collapsed = range.startContainer == range.endContainer && range.startOffset == range.endOffset;\n\n var node = range.startContainer;\n while (node && node != range.endContainer && !dom.isAncestorOf(node, range.endContainer)) {\n node = node.parentNode;\n }\n\n range.commonAncestorContainer = node;\n }\n\n var RangeIterator = Class.extend({\n init: function(range) {\n $.extend(this, {\n range: range,\n _current: null,\n _next: null,\n _end: null\n });\n\n if (range.collapsed) {\n return;\n }\n\n var root = range.commonAncestorContainer;\n\n this._next = range.startContainer == root && !isDataNode(range.startContainer) ?\n range.startContainer.childNodes[range.startOffset] :\n findClosestAncestor(root, range.startContainer);\n\n this._end = range.endContainer == root && !isDataNode(range.endContainer) ?\n range.endContainer.childNodes[range.endOffset] :\n findClosestAncestor(root, range.endContainer).nextSibling;\n },\n\n hasNext: function() {\n return !!this._next;\n },\n\n next: function() {\n var that = this,\n current = that._current = that._next;\n that._next = that._current && that._current.nextSibling != that._end ?\n that._current.nextSibling : null;\n\n if (isDataNode(that._current)) {\n if (that.range.endContainer == that._current) {\n current = current.cloneNode(true);\n current.deleteData(that.range.endOffset, current.length - that.range.endOffset);\n }\n\n if (that.range.startContainer == that._current) {\n current = current.cloneNode(true);\n current.deleteData(0, that.range.startOffset);\n }\n }\n\n return current;\n },\n\n traverse: function(callback) {\n var that = this,\n current;\n\n function next() {\n that._current = that._next;\n that._next = that._current && that._current.nextSibling != that._end ? that._current.nextSibling : null;\n return that._current;\n }\n\n while (current = next()) {\n if (that.hasPartialSubtree()) {\n that.getSubtreeIterator().traverse(callback);\n } else {\n callback(current);\n }\n }\n\n return current;\n },\n\n remove: function(originalRange) {\n var that = this,\n inStartContainer = that.range.startContainer == that._current,\n inEndContainer = that.range.endContainer == that._current,\n start, end, delta;\n\n if (isDataNode(that._current) && (inStartContainer || inEndContainer)) {\n start = inStartContainer ? that.range.startOffset : 0;\n end = inEndContainer ? that.range.endOffset : that._current.length;\n delta = end - start;\n\n if (originalRange && (inStartContainer || inEndContainer)) {\n if (that._current == originalRange.startContainer && start <= originalRange.startOffset) {\n originalRange.startOffset -= delta;\n }\n\n if (that._current == originalRange.endContainer && end <= originalRange.endOffset) {\n originalRange.endOffset -= delta;\n }\n }\n\n that._current.deleteData(start, delta);\n } else {\n var parent = that._current.parentNode;\n\n if (originalRange && (that.range.startContainer == parent || that.range.endContainer == parent)) {\n var nodeIndex = findNodeIndex(that._current);\n\n if (parent == originalRange.startContainer && nodeIndex <= originalRange.startOffset) {\n originalRange.startOffset -= 1;\n }\n\n if (parent == originalRange.endContainer && nodeIndex < originalRange.endOffset) {\n originalRange.endOffset -= 1;\n }\n }\n\n dom.remove(that._current);\n }\n },\n\n hasPartialSubtree: function() {\n return !isDataNode(this._current) &&\n (dom.isAncestorOrSelf(this._current, this.range.startContainer) ||\n dom.isAncestorOrSelf(this._current, this.range.endContainer));\n },\n\n getSubtreeIterator: function() {\n return new RangeIterator(this.getSubRange());\n },\n\n getSubRange: function() {\n var that = this,\n subRange = that.range.cloneRange();\n subRange.selectNodeContents(that._current);\n if (dom.isAncestorOrSelf(that._current, that.range.startContainer)) {\n subRange.setStart(that.range.startContainer, that.range.startOffset);\n }\n if (dom.isAncestorOrSelf(that._current, that.range.endContainer)) {\n subRange.setEnd(that.range.endContainer, that.range.endOffset);\n }\n\n return subRange;\n }\n });\n\n var W3CSelection = Class.extend({\n init: function(doc) {\n this.ownerDocument = doc;\n this.rangeCount = 1;\n },\n\n addRange: function(range) {\n var textRange = this.ownerDocument.body.createTextRange();\n\n // end container should be adopted first in order to prevent selection with negative length\n adoptContainer(textRange, range, false);\n adoptContainer(textRange, range, true);\n\n textRange.select();\n },\n\n removeAllRanges: function() {\n var selection = this.ownerDocument.selection;\n\n if (selection.type != \"None\") {\n selection.empty();\n }\n },\n\n getRangeAt: function() {\n var textRange,\n range = new W3CRange(this.ownerDocument),\n selection = this.ownerDocument.selection,\n element, commonAncestor;\n\n try {\n textRange = selection.createRange();\n element = textRange.item ? textRange.item(0) : textRange.parentElement();\n if (element.ownerDocument != this.ownerDocument) {\n return range;\n }\n } catch (ex) {\n return range;\n }\n\n if (selection.type == \"Control\") {\n range.selectNode(textRange.item(0));\n } else {\n commonAncestor = textRangeContainer(textRange);\n adoptEndPoint(textRange, range, commonAncestor, true);\n adoptEndPoint(textRange, range, commonAncestor, false);\n\n if (range.startContainer.nodeType == 9) {\n range.setStart(range.endContainer, range.startOffset);\n }\n\n if (range.endContainer.nodeType == 9) {\n range.setEnd(range.startContainer, range.endOffset);\n }\n\n if (textRange.compareEndPoints(\"StartToEnd\", textRange) === 0) {\n range.collapse(false);\n }\n\n var startContainer = range.startContainer,\n endContainer = range.endContainer,\n body = this.ownerDocument.body;\n\n if (!range.collapsed && range.startOffset === 0 && range.endOffset == getNodeLength(range.endContainer) && // check for full body selection\n !(startContainer == endContainer && isDataNode(startContainer) && startContainer.parentNode == body)) { // but not when single textnode is selected\n var movedStart = false,\n movedEnd = false;\n\n while (findNodeIndex(startContainer) === 0 && startContainer == startContainer.parentNode.firstChild && startContainer != body) {\n startContainer = startContainer.parentNode;\n movedStart = true;\n }\n\n while (findNodeIndex(endContainer) == getNodeLength(endContainer.parentNode) - 1 && endContainer == endContainer.parentNode.lastChild && endContainer != body) {\n endContainer = endContainer.parentNode;\n movedEnd = true;\n }\n\n if (startContainer == body && endContainer == body && movedStart && movedEnd) {\n range.setStart(startContainer, 0);\n range.setEnd(endContainer, getNodeLength(body));\n }\n }\n }\n\n return range;\n }\n });\n\n function textRangeContainer(textRange) {\n var left = textRange.duplicate(),\n right = textRange.duplicate();\n\n left.collapse(true);\n right.collapse(false);\n\n return dom.commonAncestor(textRange.parentElement(), left.parentElement(), right.parentElement());\n }\n\n function adoptContainer(textRange, range, start) {\n // find anchor node and offset\n var container = range[start ? \"startContainer\" : \"endContainer\"],\n offset = range[start ? \"startOffset\" : \"endOffset\"],\n textOffset = 0,\n isData = isDataNode(container),\n anchorNode = isData ? container : container.childNodes[offset] || null,\n anchorParent = isData ? container.parentNode : container,\n doc = range.ownerDocument,\n cursor = doc.body.createTextRange(),\n cursorNode;\n\n // visible data nodes need a text offset\n if (container.nodeType == 3 || container.nodeType == 4) {\n textOffset = offset;\n }\n\n if (!anchorParent) {\n anchorParent = doc.body;\n }\n\n if (anchorParent.nodeName.toLowerCase() == \"img\") {\n cursor.moveToElementText(anchorParent);\n cursor.collapse(false);\n textRange.setEndPoint(start ? \"StartToStart\" : \"EndToStart\", cursor);\n } else {\n // create a cursor element node to position range (since we can't select text nodes)\n cursorNode = anchorParent.insertBefore(dom.create(doc, \"a\"), anchorNode);\n\n cursor.moveToElementText(cursorNode);\n dom.remove(cursorNode);\n cursor[start ? \"moveStart\" : \"moveEnd\"](\"character\", textOffset);\n cursor.collapse(false);\n textRange.setEndPoint(start ? \"StartToStart\" : \"EndToStart\", cursor);\n }\n }\n\n function adoptEndPoint(textRange, range, commonAncestor, start) {\n var cursorNode = dom.create(range.ownerDocument, \"a\"),\n cursor = textRange.duplicate(),\n comparison = start ? \"StartToStart\" : \"StartToEnd\",\n result, parent, target,\n previous, next,\n args, index,\n appended = false;\n\n cursorNode.innerHTML = \"\\ufeff\";\n cursor.collapse(start);\n\n parent = cursor.parentElement();\n\n if (!dom.isAncestorOrSelf(commonAncestor, parent)) {\n parent = commonAncestor;\n }\n\n // detect range end points\n // insert cursorNode within the textRange parent and move the cursor until it gets outside of the textRange\n do {\n if (appended) {\n parent.insertBefore(cursorNode, cursorNode.previousSibling);\n } else {\n parent.appendChild(cursorNode);\n appended = true;\n }\n cursor.moveToElementText(cursorNode);\n } while ((result = cursor.compareEndPoints(comparison, textRange)) > 0 && cursorNode.previousSibling);\n\n target = cursorNode.nextSibling;\n\n if (result == -1 && isDataNode(target)) {\n cursor.setEndPoint(start ? \"EndToStart\" : \"EndToEnd\", textRange);\n\n dom.remove(cursorNode);\n\n args = [target, cursor.text.length];\n } else {\n previous = !start && cursorNode.previousSibling;\n next = start && cursorNode.nextSibling;\n\n if (isDataNode(next)) {\n args = [next, 0];\n } else if (isDataNode(previous)) {\n args = [previous, previous.length];\n } else {\n index = findNodeIndex(cursorNode);\n\n if (parent.nextSibling && index == parent.childNodes.length - 1) {\n args = [parent.nextSibling, 0];\n } else {\n args = [parent, index];\n }\n }\n\n dom.remove(cursorNode);\n }\n\n range[start ? \"setStart\" : \"setEnd\"].apply(range, args);\n }\n\n var RangeEnumerator = Class.extend({\n init: function(range) {\n this.enumerate = function() {\n var nodes = [];\n\n function visit(node) {\n if (dom.is(node, \"img\") || (node.nodeType == 3 && (!dom.isEmptyspace(node) || node.nodeValue == \"\\ufeff\"))) {\n nodes.push(node);\n } else {\n node = node.firstChild;\n while (node) {\n visit(node);\n node = node.nextSibling;\n }\n }\n }\n\n new RangeIterator(range).traverse(visit);\n\n return nodes;\n };\n }\n });\n\n var ImmutablesRangeIterator = RangeIterator.extend({\n hasPartialSubtree: function() {\n var immutable = Editor.Immutables && Editor.Immutables.immutable;\n return immutable && !immutable(this._current) && RangeIterator.fn.hasPartialSubtree.call(this);\n },\n\n getSubtreeIterator: function() {\n return new ImmutablesRangeIterator(this.getSubRange());\n }\n });\n\n var ImmutablesRangeEnumerator = Class.extend({\n init: function(range) {\n this.enumerate = function() {\n var nodes = [];\n var immutable = Editor.Immutables && Editor.Immutables.immutable;\n function visit(node) {\n if (immutable && !immutable(node)) {\n if (dom.is(node, \"img\") || (node.nodeType == 3 && (!dom.isEmptyspace(node) || node.nodeValue == \"\\ufeff\"))) {\n nodes.push(node);\n } else {\n node = node.firstChild;\n while (node) {\n visit(node);\n node = node.nextSibling;\n }\n }\n }\n }\n\n new ImmutablesRangeIterator(range).traverse(visit);\n\n return nodes;\n };\n }\n });\n\n var RestorePoint = Class.extend({\n init: function(range, body, options) {\n var that = this;\n that.range = range;\n that.rootNode = RangeUtils.documentFromRange(range);\n that.body = body || that.getEditable(range);\n if (dom.name(that.body) != \"body\") {\n that.rootNode = that.body;\n }\n\n that.startContainer = that.nodeToPath(range.startContainer);\n that.endContainer = that.nodeToPath(range.endContainer);\n that.startOffset = that.offset(range.startContainer, range.startOffset);\n that.endOffset = that.offset(range.endContainer, range.endOffset);\n\n that.immutables = options && options.immutables;\n\n if (that.immutables) {\n that.serializedImmutables = Editor.Immutables.removeImmutables(that.body);\n }\n\n that.html = that.body.innerHTML;\n\n if (that.immutables && !that.serializedImmutables.empty) {\n Editor.Immutables.restoreImmutables(that.body, that.serializedImmutables);\n }\n },\n\n index: function(node) {\n var result = 0,\n lastType = node.nodeType;\n\n while (node = node.previousSibling) {\n var nodeType = node.nodeType;\n\n if (nodeType != 3 || lastType != nodeType) {\n result ++;\n }\n\n lastType = nodeType;\n }\n\n return result;\n },\n\n getEditable: function(range) {\n var root = range.commonAncestorContainer;\n\n while (root && (root.nodeType == 3 || root.attributes && (!root.attributes.contentEditable || root.attributes.contentEditable.nodeValue.toLowerCase() == \"false\"))) {\n root = root.parentNode;\n }\n\n return root;\n },\n\n restoreHtml: function() {\n var that = this;\n\n dom.removeChildren(that.body);\n that.body.innerHTML = that.html;\n if (that.immutables && !that.serializedImmutables.empty) {\n Editor.Immutables.restoreImmutables(that.body, that.serializedImmutables);\n }\n },\n\n offset: function(node, value) {\n if (node.nodeType == 3) {\n while ((node = node.previousSibling) && node.nodeType == 3) {\n value += node.nodeValue.length;\n }\n }\n\n return value;\n },\n\n nodeToPath: function(node) {\n var path = [];\n\n while (node != this.rootNode) {\n path.push(this.index(node));\n node = node.parentNode;\n }\n\n return path;\n },\n\n toRangePoint: function(range, start, path, denormalizedOffset) {\n var node = this.rootNode,\n length = path.length,\n offset = denormalizedOffset;\n\n while (length-- && node) {\n node = node.childNodes[path[length]];\n }\n\n while (node && node.nodeType == 3 && node.nodeValue.length < offset) {\n offset -= node.nodeValue.length;\n node = node.nextSibling;\n }\n\n if (node && offset >= 0) {\n range[start ? 'setStart' : 'setEnd'](node, offset);\n }\n },\n\n toRange: function() {\n var that = this,\n result = that.range.cloneRange();\n\n that.toRangePoint(result, true, that.startContainer, that.startOffset);\n that.toRangePoint(result, false, that.endContainer, that.endOffset);\n\n return result;\n }\n\n });\n\n var Marker = Class.extend({\n init: function() {\n this.caret = null;\n },\n\n addCaret: function(range) {\n var that = this;\n var caret = that.caret = dom.create(RangeUtils.documentFromRange(range), 'span', { className: 'k-marker' });\n range.insertNode(caret);\n\n dom.stripBomNode(caret.previousSibling);\n dom.stripBomNode(caret.nextSibling);\n\n range.selectNode(caret);\n return caret;\n },\n\n removeCaret: function(range) {\n var that = this,\n previous = that.caret.previousSibling,\n startOffset = 0;\n\n if (previous) {\n startOffset = isDataNode(previous) ? previous.nodeValue.length : findNodeIndex(previous);\n }\n\n var container = that.caret.parentNode;\n var containerIndex = previous ? findNodeIndex(previous) : 0;\n\n dom.remove(that.caret);\n normalize(container);\n\n var node = container.childNodes[containerIndex];\n\n if (isDataNode(node)) {\n range.setStart(node, startOffset);\n } else if (node) {\n var textNode = dom.lastTextNode(node);\n if (textNode) {\n range.setStart(textNode, textNode.nodeValue.length);\n } else {\n range[previous ? 'setStartAfter' : 'setStartBefore'](node);\n }\n } else {\n if (!browser.msie && !container.innerHTML) {\n container.innerHTML = '
';\n }\n\n range.selectNodeContents(container);\n }\n range.collapse(true);\n },\n\n add: function(range, expand) {\n var that = this;\n\n var collapsed = range.collapsed && !RangeUtils.isExpandable(range);\n var doc = RangeUtils.documentFromRange(range);\n\n if (expand && range.collapsed) {\n that.addCaret(range);\n range = RangeUtils.expand(range);\n }\n\n var rangeBoundary = range.cloneRange();\n\n rangeBoundary.collapse(false);\n that.end = dom.create(doc, 'span', { className: 'k-marker' });\n rangeBoundary.insertNode(that.end);\n\n rangeBoundary = range.cloneRange();\n rangeBoundary.collapse(true);\n that.start = that.end.cloneNode(true);\n rangeBoundary.insertNode(that.start);\n\n that._removeDeadMarkers(that.start, that.end);\n\n if (collapsed) {\n var bom = doc.createTextNode(\"\\ufeff\");\n dom.insertAfter(bom.cloneNode(), that.start);\n dom.insertBefore(bom, that.end);\n }\n\n normalize(range.commonAncestorContainer);\n\n range.setStartBefore(that.start);\n range.setEndAfter(that.end);\n\n return range;\n },\n\n _removeDeadMarkers: function(start, end) {\n if (start.previousSibling && start.previousSibling.nodeValue == \"\\ufeff\") {\n dom.remove(start.previousSibling);\n }\n\n if (end.nextSibling && end.nextSibling.nodeValue == \"\\ufeff\") {\n dom.remove(end.nextSibling);\n }\n },\n\n _normalizedIndex: function(node) {\n var index = findNodeIndex(node);\n var pointer = node;\n\n while (pointer.previousSibling) {\n if (pointer.nodeType == 3 && pointer.previousSibling.nodeType == 3) {\n index--;\n }\n\n pointer = pointer.previousSibling;\n }\n\n return index;\n },\n\n remove: function(range) {\n var that = this,\n start = that.start,\n end = that.end,\n shouldNormalizeStart,\n shouldNormalizeEnd,\n shouldNormalize;\n\n normalize(range.commonAncestorContainer);\n\n while (!start.nextSibling && start.parentNode) {\n start = start.parentNode;\n }\n\n while (!end.previousSibling && end.parentNode) {\n end = end.parentNode;\n }\n\n // merely accessing the siblings will solve range issues in IE\n shouldNormalizeStart = (start.previousSibling && start.previousSibling.nodeType == 3) &&\n (start.nextSibling && start.nextSibling.nodeType == 3);\n\n shouldNormalizeEnd = (end.previousSibling && end.previousSibling.nodeType == 3) &&\n (end.nextSibling && end.nextSibling.nodeType == 3);\n\n shouldNormalize = shouldNormalizeStart && shouldNormalizeEnd;\n\n start = start.nextSibling;\n end = end.previousSibling;\n\n var isBomSelected = start === end && dom.isBom(start);\n if (isBomSelected && start.length > 1) {\n start.nodeValue = start.nodeValue.charAt(0);\n }\n\n var collapsed = isBomSelected;\n var collapsedToStart = false;\n // collapsed range\n if (start == that.end) {\n collapsedToStart = !!that.start.previousSibling;\n start = end = that.start.previousSibling || that.end.nextSibling;\n collapsed = true;\n }\n\n dom.remove(that.start);\n dom.remove(that.end);\n\n if (!start || !end) {\n range.selectNodeContents(range.commonAncestorContainer);\n range.collapse(true);\n return;\n }\n\n var startOffset = collapsed ? isDataNode(start) ? start.nodeValue.length : start.childNodes.length : 0;\n var endOffset = isDataNode(end) ? end.nodeValue.length : end.childNodes.length;\n\n if (start.nodeType == 3) {\n while (start.previousSibling && start.previousSibling.nodeType == 3) {\n start = start.previousSibling;\n startOffset += start.nodeValue.length;\n }\n }\n\n if (end.nodeType == 3) {\n while (end.previousSibling && end.previousSibling.nodeType == 3) {\n end = end.previousSibling;\n endOffset += end.nodeValue.length;\n }\n }\n\n var startParent = start.parentNode;\n var endParent = end.parentNode;\n var startIndex = this._normalizedIndex(start);\n var endIndex = this._normalizedIndex(end);\n\n normalize(startParent);\n if (start.nodeType == 3) {\n start = startParent.childNodes[startIndex];\n }\n\n normalize(endParent);\n if (end.nodeType == 3) {\n end = endParent.childNodes[endIndex];\n }\n\n if (collapsed) {\n if (start.nodeType == 3) {\n range.setStart(start, startOffset);\n } else {\n range[collapsedToStart ? 'setStartAfter' : 'setStartBefore'](start);\n }\n\n range.collapse(true);\n\n } else {\n if (start.nodeType == 3) {\n range.setStart(start, startOffset);\n } else {\n range.setStartBefore(start);\n }\n\n if (end.nodeType == 3) {\n range.setEnd(end, endOffset);\n } else {\n range.setEndAfter(end);\n }\n }\n\n if (that.caret) {\n that.removeCaret(range);\n }\n }\n });\n\n var boundary = /[\\u0009-\\u000d]|\\u0020|\\u00a0|\\ufeff|\\.|,|;|:|!|\\(|\\)|\\?/;\n\n var RangeUtils = {\n nodes: function(range) {\n var nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n range.selectNodeContents(range.commonAncestorContainer);\n nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n nodes = dom.significantChildNodes(range.commonAncestorContainer);\n }\n }\n return nodes;\n },\n\n textNodes: function(range) {\n var allNodes = new RangeEnumerator(range).enumerate(),\n result = allNodes.filter(function(node) {\n return dom.allowsTextContent(node.parentElement);\n });\n\n return result;\n },\n\n editableTextNodes: function(range) {\n var nodes = [],\n immutableParent = Editor.Immutables && Editor.Immutables.immutableParent,\n result = [];\n\n if (immutableParent && !immutableParent(range.commonAncestorContainer)) {\n nodes = new ImmutablesRangeEnumerator(range).enumerate();\n result = nodes.filter(function(node) {\n return dom.allowsTextContent(node.parentElement);\n });\n }\n\n return result;\n },\n\n documentFromRange: function(range) {\n var startContainer = range.startContainer;\n return startContainer.nodeType == 9 ? startContainer : startContainer.ownerDocument;\n },\n\n createRange: function(document) {\n return document.createRange();\n },\n\n selectRange: function(range) {\n var image = RangeUtils.image(range);\n if (image) {\n range.setStartAfter(image);\n range.setEndAfter(image);\n }\n var selection = SelectionUtils.selectionFromRange(range);\n selection.removeAllRanges();\n selection.addRange(range);\n },\n\n stringify: function(range) {\n return kendo.format(\n \"{0}:{1} - {2}:{3}\",\n dom.name(range.startContainer), range.startOffset,\n dom.name(range.endContainer), range.endOffset\n );\n },\n\n split: function(range, node, trim) {\n function partition(start) {\n var partitionRange = range.cloneRange();\n partitionRange.collapse(start);\n partitionRange[start ? 'setStartBefore' : 'setEndAfter'](node);\n var contents = partitionRange.extractContents();\n if (trim) {\n contents = dom.trim(contents);\n }\n dom[start ? 'insertBefore' : 'insertAfter'](contents, node);\n }\n partition(true);\n partition(false);\n },\n\n mapAll: function(range, map) {\n var nodes = [];\n\n new RangeIterator(range).traverse(function(node) {\n var mapped = map(node);\n\n if (mapped && $.inArray(mapped, nodes) < 0) {\n nodes.push(mapped);\n }\n });\n\n return nodes;\n },\n\n getAll: function(range, predicate) {\n var selector = predicate;\n\n if (typeof predicate == \"string\") {\n predicate = function(node) {\n return dom.is(node, selector);\n };\n }\n\n return RangeUtils.mapAll(range, function(node) {\n if (predicate(node)) {\n return node;\n }\n });\n },\n\n getMarkers: function(range) {\n return RangeUtils.getAll(range, function(node) {\n return node.className == 'k-marker';\n });\n },\n\n image: function(range) {\n var nodes = RangeUtils.getAll(range, \"img\");\n\n if (nodes.length == 1) {\n return nodes[0];\n }\n },\n\n isStartOf: function(originalRange, node) {\n if (originalRange.startOffset !== 0) {\n return false;\n }\n\n var range = originalRange.cloneRange();\n\n while (range.startOffset === 0 && range.startContainer != node) {\n var index = dom.findNodeIndex(range.startContainer);\n var parent = range.startContainer.parentNode;\n\n while (index > 0 && parent[index - 1] && dom.insignificant(parent[index - 1])) {\n index--;\n }\n\n range.setStart(parent, index);\n }\n\n return range.startOffset === 0 && range.startContainer == node;\n },\n\n isEndOf: function(originalRange, node) {\n var range = originalRange.cloneRange();\n\n range.collapse(false);\n\n var start = range.startContainer;\n\n if (dom.isDataNode(start) && range.startOffset == dom.getNodeLength(start)) {\n range.setStart(start.parentNode, dom.findNodeIndex(start) + 1);\n range.collapse(true);\n }\n\n range.setEnd(node, dom.getNodeLength(node));\n\n var nodes = [];\n\n function visit(node) {\n if (!dom.insignificant(node) && !(dom.isDataNode(node) && /^[\\ufeff]*$/.test(node.nodeValue))) {\n nodes.push(node);\n }\n }\n\n new RangeIterator(range).traverse(visit);\n\n return !nodes.length;\n },\n\n wrapSelectedElements: function(range) {\n var startEditable = dom.editableParent(range.startContainer);\n var endEditable = dom.editableParent(range.endContainer);\n\n while (range.startOffset === 0 && range.startContainer != startEditable) {\n range.setStart(range.startContainer.parentNode, dom.findNodeIndex(range.startContainer));\n }\n\n function isEnd(offset, container) {\n var length = dom.getNodeLength(container);\n\n if (offset == length) {\n return true;\n }\n\n for (var i = offset; i < length; i++) {\n if (!dom.insignificant(container.childNodes[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n while (isEnd(range.endOffset, range.endContainer) && range.endContainer != endEditable) {\n range.setEnd(range.endContainer.parentNode, dom.findNodeIndex(range.endContainer) + 1);\n }\n\n return range;\n },\n\n expand: function(range) {\n var result = range.cloneRange();\n\n var startContainer = result.startContainer.childNodes[result.startOffset === 0 ? 0 : result.startOffset - 1];\n var endContainer = result.endContainer.childNodes[result.endOffset];\n\n if (!isDataNode(startContainer) || !isDataNode(endContainer)) {\n return result;\n }\n\n var beforeCaret = startContainer.nodeValue;\n var afterCaret = endContainer.nodeValue;\n\n if (!beforeCaret || !afterCaret) {\n return result;\n }\n\n var startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n var endOffset = afterCaret.search(boundary);\n\n if (!startOffset || !endOffset) {\n return result;\n }\n\n endOffset = endOffset == -1 ? afterCaret.length : endOffset;\n startOffset = startOffset == -1 ? 0 : beforeCaret.length - startOffset;\n\n result.setStart(startContainer, startOffset);\n result.setEnd(endContainer, endOffset);\n\n return result;\n },\n\n isExpandable: function(range) {\n var node = range.startContainer;\n var rangeDocument = RangeUtils.documentFromRange(range);\n\n if (node == rangeDocument || node == rangeDocument.body) {\n return false;\n }\n\n var result = range.cloneRange();\n\n var value = node.nodeValue;\n if (!value) {\n return false;\n }\n\n var beforeCaret = value.substring(0, result.startOffset);\n var afterCaret = value.substring(result.startOffset);\n\n var startOffset = 0, endOffset = 0;\n\n if (beforeCaret) {\n startOffset = beforeCaret.split('').reverse().join('').search(boundary);\n }\n\n if (afterCaret) {\n endOffset = afterCaret.search(boundary);\n }\n\n return startOffset && endOffset;\n }\n };\n\n extend(Editor, {\n SelectionUtils: SelectionUtils,\n W3CRange: W3CRange,\n RangeIterator: RangeIterator,\n W3CSelection: W3CSelection,\n RangeEnumerator: RangeEnumerator,\n RestorePoint: RestorePoint,\n Marker: Marker,\n RangeUtils: RangeUtils\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n var kendo = window.kendo,\n Class = kendo.Class,\n Editor = kendo.ui.editor,\n dom = Editor.Dom,\n template = kendo.template,\n RangeUtils = Editor.RangeUtils,\n complexBlocks = [\"ul\", \"ol\", \"tbody\", \"thead\", \"table\"],\n toolsToBeUpdated = [\n \"bold\",\n \"italic\",\n \"underline\",\n \"strikethrough\",\n \"superscript\",\n \"subscript\",\n \"forecolor\",\n \"backcolor\",\n \"fontname\",\n \"fontsize\",\n \"createlink\",\n \"unlink\",\n \"autolink\",\n \"addcolumnleft\",\n \"addcolumnright\",\n \"addrowabove\",\n \"addrowbelow\",\n \"deleterow\",\n \"deletecolumn\",\n \"mergecells\",\n \"formatting\",\n \"cleanformatting\" ],\n IMMUTABALE = \"k-immutable\",\n IMMUTABALE_MARKER_SELECTOR = \"[\" + IMMUTABALE + \"]\",\n IMMUTABLE_SELECTOR = \"[contenteditable='false']\";\n\n var rootCondition = function(node) {\n return $(node).is(\"body,.k-editor\");\n };\n\n var immutable = function(node) {\n return node.getAttribute && node.getAttribute(\"contenteditable\") == \"false\";\n };\n\n var immutableParent = function(node) {\n return dom.closestBy(node, immutable, rootCondition);\n };\n\n var expandImmutablesIn = function(range) {\n var startImmutableParent = immutableParent(range.startContainer);\n var endImmutableParent = immutableParent(range.endContainer);\n\n if (startImmutableParent || endImmutableParent) {\n if (startImmutableParent) {\n range.setStartBefore(startImmutableParent);\n }\n if (endImmutableParent) {\n range.setEndAfter(endImmutableParent);\n }\n }\n };\n\n var immutablesContext = function(range) {\n if (immutableParent(range.commonAncestorContainer)) {\n return true;\n } else if (immutableParent(range.startContainer) || immutableParent(range.endContainer)) {\n var editableNodes = RangeUtils.editableTextNodes(range);\n if (editableNodes.length === 0) {\n return true;\n }\n }\n return false;\n };\n\n var randomId = function(length) {\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length || 10; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n };\n\n var removeImmutables = function(root) {\n var serializedImmutables = { empty: true }, nodeName, id, serialized;\n $(root).find(IMMUTABLE_SELECTOR).each(function(i, node) {\n nodeName = dom.name(node);\n id = randomId();\n serialized = \"<\" + nodeName + \" \" + IMMUTABALE + \"='\" + id + \"'>\";\n serializedImmutables[id] = { node: node, style: $(node).attr(\"style\") };\n serializedImmutables.empty = false;\n $(node).replaceWith(serialized);\n });\n\n return serializedImmutables;\n };\n\n var restoreImmutables = function(root, serializedImmutables) {\n var id, immutable;\n $(root).find(IMMUTABALE_MARKER_SELECTOR).each(function(i, node) {\n id = node.getAttribute(IMMUTABALE);\n immutable = serializedImmutables[id];\n $(node).replaceWith(immutable.node);\n if (immutable.style != $(immutable.node).attr(\"style\")) {\n $(immutable.node).removeAttr(\"style\").attr(\"style\", immutable.style);\n }\n });\n };\n\n var deletingKey = function(keyCode) {\n var keys = kendo.keys;\n return keyCode === keys.BACKSPACE || keyCode == keys.DELETE;\n };\n var updateToolOptions = function(tool) {\n var options = tool ? tool.options : undefined$1;\n if (options && options.finder) {\n options.finder._initOptions({ immutables: true });\n }\n };\n\n var Immutables = Class.extend({\n init: function(editor) {\n this.editor = editor;\n this.serializedImmutables = {};\n this.options = $.extend({}, editor && editor.options && editor.options.immutables);\n\n var tools = kendo.ui.Editor.defaultTools;\n updateToolOptions(tools.justifyLeft);\n updateToolOptions(tools.justifyCenter);\n updateToolOptions(tools.justifyRight);\n updateToolOptions(tools.justifyFull);\n },\n\n serialize: function(node) {\n var result = this._toHtml(node),\n id;\n\n if (result.indexOf(IMMUTABALE) === -1) {\n id = this.randomId();\n result = result.replace(/>/, ' ' + IMMUTABALE + '=\"' + id + '\">');\n } else {\n id = result.match(/k-immutable\\s*=\\s*['\"](.*)['\"]/)[1];\n }\n\n this.serializedImmutables[id] = node;\n return result;\n },\n\n _toHtml: function(node) {\n var serialization = this.options.serialization;\n var serializationType = typeof serialization;\n var nodeName;\n\n switch (serializationType) {\n case \"string\":\n return template(serialization)(node);\n case \"function\":\n return serialization(node);\n default:\n nodeName = dom.name(node);\n return \"<\" + nodeName + \">\";\n }\n },\n\n deserialize: function(node) {\n var that = this;\n var deserialization = this.options.deserialization;\n\n $(IMMUTABALE_MARKER_SELECTOR, node).each(function() {\n var id = this.getAttribute(IMMUTABALE);\n var immutable = that.serializedImmutables[id];\n if (kendo.isFunction(deserialization)) {\n deserialization(this, immutable);\n }\n $(this).replaceWith(immutable);\n });\n\n that.serializedImmutables = {};\n },\n\n randomId: function(length) {\n return randomId(length);\n },\n\n keydown: function(e, range) {\n var isDeleting = deletingKey(e.keyCode);\n var shouldCancelEvent = (isDeleting && this._cancelDeleting(e, range)) ||\n (!isDeleting && this._cancelTyping(e, range));\n\n if (shouldCancelEvent) {\n e.preventDefault();\n return true;\n }\n },\n\n _cancelTyping: function(e, range) {\n var editor = this.editor;\n var keyboard = editor.keyboard;\n\n return range.collapsed && !keyboard.typingInProgress &&\n keyboard.isTypingKey(e) && immutablesContext(range);\n },\n\n _cancelDeleting: function(e, range) {\n var keys = kendo.keys;\n var backspace = e.keyCode === keys.BACKSPACE;\n var del = e.keyCode == keys.DELETE;\n\n if (!backspace && !del) {\n return false;\n }\n var cancelDeleting = false;\n if (range.collapsed) {\n if (immutablesContext(range)) {\n return true;\n }\n var immutable = this.nextImmutable(range, del);\n if (immutable && backspace) {\n var closestSelectionLi = dom.closest(range.commonAncestorContainer, \"li\");\n if (closestSelectionLi) {\n var closestImmutableLi = dom.closest(immutable, \"li\");\n if (closestImmutableLi && closestImmutableLi !== closestSelectionLi) {\n return cancelDeleting;\n }\n }\n }\n if (immutable && !dom.tableCell(immutable)) {\n if (dom.parentOfType(immutable, complexBlocks) === dom.parentOfType(range.commonAncestorContainer, complexBlocks)) {\n while (immutable && immutable.parentNode.childNodes.length == 1) {\n immutable = immutable.parentNode;\n }\n if (dom.tableCell(immutable)) {\n return cancelDeleting;\n }\n this._removeImmutable(immutable, range);\n }\n cancelDeleting = true;\n }\n }\n return cancelDeleting;\n },\n\n nextImmutable: function(range, forwards) {\n var commonContainer = range.commonAncestorContainer;\n if (dom.isBom(commonContainer) || ((forwards && RangeUtils.isEndOf(range, commonContainer)) || (!forwards && RangeUtils.isStartOf(range, commonContainer)))) {\n var next = this._nextNode(commonContainer, forwards);\n if (next && dom.isBlock(next) && !immutableParent(next)) {\n while (next && next.children && next.children[forwards ? 0 : next.children.length - 1]) {\n next = next.children[forwards ? 0 : next.children.length - 1];\n }\n }\n return immutableParent(next);\n }\n },\n\n _removeImmutable: function(immutable, range) {\n var editor = this.editor;\n var startRestorePoint = new Editor.RestorePoint(range, editor.body);\n dom.remove(immutable);\n Editor._finishUpdate(editor, startRestorePoint);\n },\n\n _nextNode: function(node, forwards) {\n var sibling = forwards ? \"nextSibling\" : \"previousSibling\";\n var current = node, next;\n while (current && !next && !dom.isChildOfBaseContainer(current)) {\n next = current[sibling];\n if (next && dom.isDataNode(next) && /^\\s|[\\ufeff]$/.test(next.nodeValue)) {\n current = next;\n next = current[sibling];\n }\n if (!next) {\n current = current.parentNode;\n }\n }\n return next;\n }\n });\n\n Immutables.immutable = immutable;\n Immutables.immutableParent = immutableParent;\n Immutables.expandImmutablesIn = expandImmutablesIn;\n Immutables.immutablesContext = immutablesContext;\n Immutables.toolsToBeUpdated = toolsToBeUpdated;\n Immutables.removeImmutables = removeImmutables;\n Immutables.restoreImmutables = restoreImmutables;\n\n Editor.Immutables = Immutables;\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n editorNS = kendo.ui.editor,\n dom = editorNS.Dom,\n RestorePoint = editorNS.RestorePoint,\n Marker = editorNS.Marker,\n extend = $.extend;\n\n function finishUpdate(editor, startRestorePoint) {\n var endRestorePoint = editor.selectionRestorePoint = new RestorePoint(editor.getRange(), editor.body);\n var command = new GenericCommand(startRestorePoint, endRestorePoint);\n command.editor = editor;\n\n editor.undoRedoStack.push(command);\n editor._refreshTools();\n\n return endRestorePoint;\n }\n\n var Command = Class.extend({\n init: function(options) {\n this.options = options;\n this.restorePoint = new RestorePoint(options.range, options.body, { immutables: options.immutables });\n this.marker = new Marker();\n this.formatter = options.formatter;\n },\n\n getRange: function() {\n return this.restorePoint.toRange();\n },\n\n lockRange: function(expand) {\n return this.marker.add(this.getRange(), expand);\n },\n\n releaseRange: function(range) {\n this.marker.remove(range);\n this.editor.selectRange(range);\n },\n\n undo: function() {\n var point = this.restorePoint;\n point.restoreHtml();\n this.editor.selectRange(point.toRange());\n },\n\n redo: function() {\n this.exec();\n },\n\n createDialog: function(content, options) {\n var editor = this.editor;\n\n return $(content).appendTo(document.body)\n .kendoWindow(extend({}, editor.options.dialogOptions, options))\n .closest(\".k-window\")\n .addClass(\"k-editor-window\")\n .toggleClass(\"k-rtl\", kendo.support.isRtl(editor.wrapper)).end();\n },\n\n exec: function() {\n var range = this.lockRange(true);\n this.formatter.editor = this.editor;\n this.formatter.toggle(range);\n this.releaseRange(range);\n },\n\n immutables: function() {\n return this.editor && this.editor.options.immutables;\n },\n\n expandImmutablesIn: function(range) {\n if (this.immutables()) {\n kendo.ui.editor.Immutables.expandImmutablesIn(range);\n this.restorePoint = new RestorePoint(range, this.editor.body);\n }\n },\n\n _actionButtonsTemplate: function({ messages, insertButtonIcon, cancelButtonIcon }) {\n return '
' +\n kendo.html.renderButton(``, { themeColor: \"primary\", icon: insertButtonIcon }) +\n kendo.html.renderButton(``, { icon: cancelButtonIcon }) +\n '
';\n }\n });\n\n var GenericCommand = Class.extend({\n init: function(startRestorePoint, endRestorePoint) {\n this.body = startRestorePoint.body;\n this.startRestorePoint = startRestorePoint;\n this.endRestorePoint = endRestorePoint;\n },\n\n redo: function() {\n dom.removeChildren(this.body);\n\n this.body.innerHTML = this.endRestorePoint.html;\n this.editor.selectRange(this.endRestorePoint.toRange());\n },\n\n undo: function() {\n dom.removeChildren(this.body);\n\n this.body.innerHTML = this.startRestorePoint.html;\n this.editor.selectRange(this.startRestorePoint.toRange());\n }\n });\n\n extend(editorNS, {\n _finishUpdate: finishUpdate,\n Command: Command,\n GenericCommand: GenericCommand\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n Command = Editor.Command,\n Tool = Editor.Tool,\n dom = Editor.Dom;\n\n var ViewHtmlCommand = Command.extend({\n init: function(options) {\n var cmd = this;\n cmd.options = options;\n Command.fn.init.call(cmd, options);\n cmd.attributes = null;\n cmd.async = true;\n },\n\n exec: function() {\n var that = this,\n editor = that.editor,\n options = editor.options,\n messages = editor.options.messages,\n dialog = $(kendo.template(ViewHtmlCommand.template)(messages)).appendTo(document.body),\n textarea = \".k-editor-textarea > textarea\",\n content, comments;\n\n options.serialization.immutables = editor.immutables;\n\n comments = dom.getAllComments(editor.body);\n\n content = EditorUtils.cacheComments(editor.value(), comments);\n content = ViewHtmlCommand.indent(content);\n content = EditorUtils.retrieveComments(content, comments);\n\n options.serialization.immutables = undefined$1;\n\n function apply(e) {\n options.deserialization.immutables = editor.immutables;\n editor.value(dialog.find(textarea).val());\n options.deserialization.immutables = undefined$1;\n\n close(e);\n\n if (that.change) {\n that.change();\n }\n\n editor.trigger(\"change\");\n }\n\n function close(e) {\n e.preventDefault();\n\n dialog.data(\"kendoWindow\").destroy();\n\n if (editor.immutables) {\n editor.immutables.serializedImmutables = {};\n }\n\n editor.focus();\n }\n\n let window = this.createDialog(dialog, {\n title: messages.viewHtml,\n _footerTemplate: ViewHtmlCommand._footerTemplate,\n _footerMessages: messages,\n width: 600,\n height: 400,\n resizable: true,\n close: close,\n visible: false\n })\n .find(textarea).val(content).end()\n .data(\"kendoWindow\");\n\n window.center().open();\n\n window.wrapper.find(\".k-dialog-update\").on(\"click\", apply).end();\n window.wrapper.find(\".k-dialog-close\").on(\"click\", close).end();\n dialog.find(textarea).trigger(\"focus\");\n }\n });\n\n extend(ViewHtmlCommand, {\n template: () =>\n '
' +\n '' +\n '
',\n _footerTemplate: ({ dialogUpdate, dialogCancel }) =>\n `
` +\n kendo.html.renderButton(``, { themeColor: \"primary\", icon: \"check\" }) +\n kendo.html.renderButton(``, { icon: \"cancel-outline\" }) +\n `
`,\n indent: function(content) {\n return content.replace(/<\\/(p|li|ul|ol|h[1-6]|table|tr|td|th)>/ig, \"\\n\")\n .replace(/<(ul|ol)([^>]*)>
  • \\n/ig, \"
    \\n\")\n .replace(/\\n$/, \"\");\n }\n });\n\n kendo.ui.editor.ViewHtmlCommand = ViewHtmlCommand;\n\n Editor.EditorUtils.registerTool(\"viewHtml\", new Tool({ command: ViewHtmlCommand }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n Tool = Editor.Tool,\n Command = Editor.Command,\n EditorUtils = Editor.EditorUtils;\n\n var FormatCommand = Command.extend({\n init: function(options) {\n options.formatter = options.formatter();\n var finder = options.formatter.finder;\n if (finder && EditorUtils.formatByName(\"immutable\", finder.format)) {\n finder._initOptions({ immutables: options.immutables });\n }\n Command.fn.init.call(this, options);\n }\n });\n\n var FormatTool = Tool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n },\n\n command: function(commandArguments) {\n var that = this;\n\n return new FormatCommand(extend(commandArguments, {\n formatter: that.options.formatter\n }));\n },\n\n update: function(ui, nodes) {\n var isFormatted = this.options.finder.isFormatted(nodes),\n toolbar = ui.closest(\".k-toolbar\").getKendoToolBar();\n\n if (toolbar && ui.getKendoToggleButton()) {\n toolbar.toggle(ui, isFormatted);\n }\n }\n });\n\n $.extend(Editor, {\n FormatCommand: FormatCommand,\n FormatTool: FormatTool\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo,\n Class = kendo.Class,\n Editor = kendo.ui.editor,\n formats = kendo.ui.Editor.fn.options.formats,\n Tool = Editor.Tool,\n FormatTool = Editor.FormatTool,\n dom = Editor.Dom,\n RangeUtils = Editor.RangeUtils,\n extend = $.extend,\n registerTool = Editor.EditorUtils.registerTool,\n registerFormat = Editor.EditorUtils.registerFormat,\n MOUSEDOWN_NS = \"mousedown.kendoEditor\",\n KEYDOWN_NS = \"keydown.kendoEditor\",\n KMARKER = \"k-marker\";\n\n var InlineFormatFinder = Class.extend({\n init: function(format) {\n this.format = format;\n },\n\n numberOfSiblings: function(referenceNode) {\n var textNodesCount = 0,\n elementNodesCount = 0,\n markerCount = 0,\n parentNode = referenceNode.parentNode,\n node;\n\n for (node = parentNode.firstChild; node; node = node.nextSibling) {\n if (node != referenceNode) {\n if (node.className == KMARKER) {\n markerCount++;\n } else if (node.nodeType == 3) {\n textNodesCount++;\n } else {\n elementNodesCount++;\n }\n }\n }\n\n if (markerCount > 1 && parentNode.firstChild.className == KMARKER && parentNode.lastChild.className == KMARKER) {\n // full node selection\n return 0;\n } else {\n return elementNodesCount + textNodesCount;\n }\n },\n\n findSuitable: function(sourceNode, skip) {\n if (!skip && this.numberOfSiblings(sourceNode) > 0) {\n return null;\n }\n\n var node = sourceNode.parentNode;\n var tags = this.format[0].tags;\n\n while (!dom.ofType(node, tags)) {\n if (this.numberOfSiblings(node) > 0) {\n return null;\n }\n\n node = node.parentNode;\n }\n\n return node;\n },\n\n findFormat: function(sourceNode) {\n var format = this.format,\n attrEquals = dom.attrEquals,\n i, len, node, tags, attributes;\n\n for (i = 0, len = format.length; i < len; i++) {\n node = sourceNode;\n tags = format[i].tags;\n attributes = format[i].attr;\n\n if (node && dom.ofType(node, tags) && attrEquals(node, attributes)) {\n return node;\n }\n\n while (node) {\n node = dom.parentOfType(node, tags);\n if (node && attrEquals(node, attributes)) {\n return node;\n }\n }\n }\n\n return null;\n },\n\n isFormatted: function(nodes) {\n var i, len;\n\n for (i = 0, len = nodes.length; i < len; i++) {\n if (this.findFormat(nodes[i])) {\n return true;\n }\n }\n return false;\n }\n });\n\n var InlineFormatter = Class.extend({\n init: function(format, values) {\n this.finder = new InlineFormatFinder(format);\n this.attributes = extend({}, format[0].attr, values);\n this.tag = format[0].tags[0];\n },\n\n wrap: function(node) {\n return dom.wrap(node, dom.create(node.ownerDocument, this.tag, this.attributes));\n },\n\n activate: function(range, nodes) {\n if (this.finder.isFormatted(nodes)) {\n this.split(range);\n this.remove(nodes);\n } else {\n this.apply(nodes);\n }\n },\n\n toggle: function(range) {\n var textNodes = this.immutables() ? RangeUtils.editableTextNodes : RangeUtils.textNodes;\n var nodes = textNodes(range);\n\n if (nodes.length > 0) {\n this.activate(range, nodes);\n }\n },\n\n immutables: function() {\n return this.editor && this.editor.options.immutables;\n },\n\n apply: function(nodes) {\n var formatNodes = [];\n var i, l, node, formatNode;\n\n if (nodes.length > 1) {\n for (i = 0, l = nodes.length; i < l; i++) {\n node = nodes[i];\n formatNode = this.format(node, true);\n formatNodes.push(formatNode);\n\n }\n } else {\n node = nodes[0];\n formatNode = this.format(node, false);\n }\n\n this.consolidate(formatNodes);\n },\n\n format: function(node, outerMostInline) {\n var formatNode = this.finder.findSuitable(node);\n var attributes = this.attributes;\n var styleAttr = attributes ? attributes.style || {} : {};\n\n if (formatNode) {\n if (dom.is(formatNode, \"font\")) {\n if (styleAttr.color) {\n formatNode.removeAttribute(\"color\");\n }\n if (styleAttr.fontName) {\n formatNode.removeAttribute(\"face\");\n }\n if (styleAttr.fontSize) {\n formatNode.removeAttribute(\"size\");\n }\n }\n dom.attr(formatNode, attributes);\n } else {\n while (!dom.isBlock(node.parentNode) && node.parentNode.childNodes.length == 1 && node.parentNode.contentEditable !== 'true' && outerMostInline) {\n node = node.parentNode;\n }\n\n formatNode = this.wrap(node);\n }\n\n return formatNode;\n },\n\n remove: function(nodes) {\n var i, l, formatNode;\n\n for (i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n if (this.attributes && this.attributes.style) {\n dom.unstyle(formatNode, this.attributes.style);\n if (!formatNode.style.cssText && !formatNode.attributes[\"class\"]) {\n dom.unwrap(formatNode);\n }\n } else {\n dom.unwrap(formatNode);\n }\n }\n }\n },\n\n split: function(range) {\n var nodes = RangeUtils.textNodes(range);\n var l = nodes.length;\n var i, formatNode;\n\n if (l > 0) {\n for (i = 0; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n RangeUtils.split(range, formatNode, true);\n }\n }\n }\n },\n\n consolidate: function(nodes) {\n var node, last;\n\n while (nodes.length > 1) {\n node = nodes.pop();\n last = nodes[nodes.length - 1];\n\n if (node.previousSibling && node.previousSibling.className == KMARKER) {\n last.appendChild(node.previousSibling);\n }\n\n if (node.tagName == last.tagName &&\n node.previousSibling == last &&\n node.style.cssText == last.style.cssText &&\n node.className === last.className) {\n\n while (node.firstChild) {\n last.appendChild(node.firstChild);\n }\n\n dom.remove(node);\n }\n }\n }\n });\n\n var GreedyInlineFormatFinder = InlineFormatFinder.extend({\n init: function(format, greedyProperty, fontAttr, defaultValue) {\n this.format = format;\n this.greedyProperty = greedyProperty;\n this.fontAttr = fontAttr;\n this.defaultValue = defaultValue;\n InlineFormatFinder.fn.init.call(this, format);\n },\n\n getInlineCssValue: function(node) {\n var attributes = node.attributes;\n var trim = kendo.trim;\n var i, l, attribute, name, attributeValue, css, pair, cssIndex, len;\n var propertyAndValue, property, value;\n\n if (!attributes) {\n return;\n }\n\n for (i = 0, l = attributes.length; i < l; i++) {\n attribute = attributes[i];\n name = attribute.nodeName;\n attributeValue = attribute.nodeValue;\n\n if (attribute.specified && name == \"style\") {\n\n css = trim(attributeValue || node.style.cssText).split(\";\");\n\n for (cssIndex = 0, len = css.length; cssIndex < len; cssIndex++) {\n pair = css[cssIndex];\n if (pair.length) {\n propertyAndValue = pair.split(\":\");\n property = trim(propertyAndValue[0].toLowerCase());\n value = trim(propertyAndValue[1]);\n\n if (property != this.greedyProperty) {\n continue;\n }\n\n return property.indexOf(\"color\") >= 0 ? dom.toHex(value) : value;\n }\n }\n }\n\n if (this.fontAttr && attribute.specified && name == this.fontAttr) {\n property = attribute.nodeValue;\n value = attribute.nodeValue;\n\n return property.indexOf(\"color\") >= 0 ? dom.toHex(value) : value;\n }\n }\n },\n\n getFormatInner: function(node) {\n var $node = $(dom.isDataNode(node) ? node.parentNode : node);\n var parents = $node.parentsUntil(\"[contentEditable]\").addBack().toArray().reverse();\n var i, len, value;\n\n for (i = 0, len = parents.length; i < len; i++) {\n value = this.greedyProperty == \"className\" ? parents[i].className : this.getInlineCssValue(parents[i]);\n\n if (value) {\n return value;\n }\n }\n\n return this.defaultValue || \"inherit\";\n },\n\n getFormat: function(nodes) {\n var result = this.getFormatInner(nodes[0]), i, len;\n\n for (i = 1, len = nodes.length; i < len; i++) {\n if (result != this.getFormatInner(nodes[i])) {\n return \"\";\n }\n }\n\n return result;\n },\n\n isFormatted: function(nodes) {\n return this.getFormat(nodes) !== \"\";\n }\n });\n\n var GreedyInlineFormatter = InlineFormatter.extend({\n init: function(format, values, greedyProperty) {\n InlineFormatter.fn.init.call(this, format, values);\n\n this.values = values;\n this.finder = new GreedyInlineFormatFinder(format, greedyProperty);\n\n if (greedyProperty) {\n this.greedyProperty = kendo.toCamelCase(greedyProperty);\n }\n\n },\n\n activate: function(range, nodes) {\n var greedyProperty = this.greedyProperty;\n var action = \"apply\";\n\n this.split(range);\n\n if (greedyProperty && this.values.style[greedyProperty] == \"inherit\") {\n action = \"remove\";\n }\n\n this[action](nodes);\n }\n });\n\n var InlineFormatTool = FormatTool.extend({\n init: function(options) {\n FormatTool.fn.init.call(this, extend(options, {\n finder: new InlineFormatFinder(options.format),\n formatter: function() { return new InlineFormatter(options.format); }\n }));\n }\n });\n\n var DelayedExecutionTool = Tool.extend({\n update: function(ui, nodes) {\n var list = ui.data(this.type);\n\n list.close();\n list.value(this.finder.getFormat(nodes));\n }\n });\n\n var FontTool = DelayedExecutionTool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n\n // IE has single selection hence we are using select box instead of combobox\n this.type = \"kendoComboBox\";\n this.format = [{ tags: [\"span\", \"font\"] }];\n this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr, options.fontAttr);\n },\n\n command: function(commandArguments) {\n var options = this.options,\n format = this.format,\n style = {};\n\n return new Editor.FormatCommand(extend(commandArguments, {\n formatter: function() {\n style[options.domAttr] = commandArguments.value;\n\n return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n }\n }));\n },\n\n initialize: function(ui, editor) {\n var options = this.options,\n toolName = options.name,\n dataSource,\n range,\n widget = ui.data(\"kendoComboBox\"),\n defaultValue = [];\n\n if (!widget) {\n return;\n }\n\n if (options.defaultValue) {\n defaultValue = [{\n text: editor.options.messages[options.defaultValue[0].text],\n value: options.defaultValue[0].value\n }];\n }\n\n dataSource = defaultValue.concat(options.items ? options.items : (editor.options[toolName] || [] ));\n widget.setDataSource(dataSource);\n\n widget.bind(\"change\", (e) => {\n editor._range = range;\n if (e.sender.value() !== \"\") {\n Tool.exec(editor, toolName, e.sender.value());\n }\n });\n\n widget.bind(\"close\", () => {\n setTimeout(function() {\n editor._deleteSavedRange();\n },0);\n });\n\n widget.value(\"inherit\");\n\n widget.wrapper.on(MOUSEDOWN_NS, \".k-select,.k-input-button,.k-input\", function() {\n var newRange = editor.getRange();\n range = editor._containsRange(newRange) ? newRange : range;\n })\n .on(KEYDOWN_NS, function(e) {\n if (e.keyCode === kendo.keys.ENTER) {\n editor._deleteSavedRange();\n e.preventDefault();\n }\n });\n }\n\n });\n\n var ColorTool = Tool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n\n this.format = [{ tags: [\"span\",\"font\"] }];\n this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr);\n },\n\n options: {\n palette: \"websafe\",\n columns: 18\n },\n\n update: function() {\n this._widget.close();\n },\n\n command: function(commandArguments) {\n var options = this.options,\n format = this.format,\n style = {};\n\n return new Editor.FormatCommand(extend(commandArguments, {\n formatter: function() {\n style[options.domAttr] = commandArguments.value;\n\n return new GreedyInlineFormatter(format, { style: style }, options.cssAttr);\n }\n }));\n },\n\n initialize: function(ui, editor) {\n var that = this,\n toolName = that.options.name,\n component = this._widget = ui.getKendoColorPicker();\n\n if (!component) {\n return;\n }\n\n component.bind(\"change\", () => {\n var color = component.value();\n\n if (color) {\n Tool.exec(editor, toolName, color);\n }\n\n delete that.storedRange;\n delete that._inputFocused;\n\n editor.focus();\n });\n\n component.bind(\"open\", () => {\n that.storedRange = editor.getRange();\n\n component._popup.element.on(MOUSEDOWN_NS, function(e) {\n if (!$(e.target).is(\"input.k-color-value\")) {\n e.preventDefault();\n }\n });\n\n if (!component._popup.element.is(\"[unselectable='on']\")) {\n component._popup.element\n .attr({ unselectable: \"on\" })\n .find(\"*:not(input)\").attr(\"unselectable\", \"on\")\n .end().find(\"input\").on(\"focus\", function() {\n that._inputFocused = true;\n });\n }\n\n component._popup.one(\"activate\", () => {\n component._popup.element.find(\".k-colorpalette\").trigger(\"focus\");\n });\n });\n\n component.bind(\"close\", (e) => {\n component._popup.element.off(MOUSEDOWN_NS);\n });\n\n component.unbind(\"activate\").bind(\"activate\", (e) => {\n if (!component._value || component._value.toCssRgba() === \"rgba(255, 255, 255, 0)\") {\n return;\n }\n\n component.trigger(\"change\");\n });\n\n component.wrapper\n .attr({ unselectable: \"on\" })\n .find(\"*:not(input)\").attr(\"unselectable\", \"on\");\n\n component.value(\"transparent\");\n }\n });\n\n extend(Editor, {\n InlineFormatFinder: InlineFormatFinder,\n InlineFormatter: InlineFormatter,\n DelayedExecutionTool: DelayedExecutionTool,\n GreedyInlineFormatFinder: GreedyInlineFormatFinder,\n GreedyInlineFormatter: GreedyInlineFormatter,\n InlineFormatTool: InlineFormatTool,\n FontTool: FontTool,\n ColorTool: ColorTool\n });\n\n registerFormat(\"bold\", [ { tags: [\"strong\", \"b\"] }, { tags: [\"span\"], attr: { style: { fontWeight: \"bold\" } } } ]);\n registerTool(\"bold\", new InlineFormatTool({\n key: \"B\",\n ctrl: true,\n format: formats.bold,\n ui: {\n togglable: true\n }\n }));\n\n registerFormat(\"italic\", [ { tags: [\"em\", \"i\"] }, { tags: [\"span\"], attr: { style: { fontStyle: \"italic\" } } } ]);\n registerTool(\"italic\", new InlineFormatTool({\n key: \"I\",\n ctrl: true,\n format: formats.italic,\n ui: {\n togglable: true\n }\n }));\n\n registerFormat(\"underline\", [ { tags: [\"span\"], attr: { style: { textDecoration: \"underline\" } } }, { tags: [\"u\"] } ]);\n registerTool(\"underline\", new InlineFormatTool({\n key: \"U\",\n ctrl: true,\n format: formats.underline,\n ui: {\n togglable: true\n }\n }));\n\n registerFormat(\"strikethrough\", [ { tags: [\"del\", \"strike\"] }, { tags: [\"span\"], attr: { style: { textDecoration: \"line-through\" } } } ]);\n registerTool(\"strikethrough\", new InlineFormatTool({\n format: formats.strikethrough,\n ui: {\n togglable: true\n }\n }));\n\n registerFormat(\"superscript\", [ { tags: [\"sup\"] } ]);\n registerTool(\"superscript\", new InlineFormatTool({\n format: formats.superscript,\n ui: {\n togglable: true\n }\n }));\n\n registerFormat(\"subscript\", [ { tags: [\"sub\"] } ]);\n registerTool(\"subscript\", new InlineFormatTool({\n format: formats.subscript,\n ui: {\n togglable: true\n }\n }));\n\n registerTool(\"foreColor\", new ColorTool({\n cssAttr: \"color\",\n fontAttr: \"color\",\n domAttr: \"color\",\n name: \"foreColor\",\n ui: {\n type: \"component\",\n overflow: \"never\",\n component: \"ColorPicker\",\n componentOptions: {\n views: [\"palette\"],\n toolIcon: \"foreground-color\",\n palette: \"websafe\",\n columns: 18,\n preview: false,\n input: false,\n buttons: false,\n commandOn: \"change\",\n closeOnSelect: true\n }\n }\n }));\n\n registerTool(\"backColor\", new ColorTool({\n cssAttr: \"background-color\",\n domAttr: \"backgroundColor\",\n name: \"backColor\",\n ui: {\n type: \"component\",\n overflow: \"never\",\n component: \"ColorPicker\",\n componentOptions: {\n views: [\"palette\"],\n toolIcon: \"droplet\",\n palette: \"websafe\",\n columns: 18,\n preview: false,\n input: false,\n buttons: false,\n commandOn: \"change\",\n closeOnSelect: true\n }\n }\n }));\n\n registerTool(\"fontName\", new FontTool({\n cssAttr: \"font-family\",\n fontAttr: \"face\",\n domAttr: \"fontFamily\",\n name: \"fontName\",\n defaultValue: [{ text: \"fontNameInherit\", value: \"inherit\" }],\n ui: {\n type: \"component\",\n component: \"ComboBox\",\n componentOptions: {\n dataValueField: \"value\",\n dataTextField: \"text\",\n valuePrimitive: true\n },\n overflow: \"never\"\n }\n }));\n\n registerTool(\"fontSize\", new FontTool({\n cssAttr: \"font-size\",\n fontAttr: \"size\",\n domAttr: \"fontSize\",\n name: \"fontSize\",\n defaultValue: [{ text: \"fontSizeInherit\", value: \"inherit\" }],\n ui: {\n type: \"component\",\n component: \"ComboBox\",\n componentOptions: {\n dataValueField: \"value\",\n dataTextField: \"text\",\n valuePrimitive: true\n },\n overflow: \"never\"\n }\n }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n Class = kendo.Class,\n extend = $.extend,\n Editor = kendo.ui.editor,\n dom = Editor.Dom,\n RangeUtils = Editor.RangeUtils,\n Command = Editor.Command,\n Tool = Editor.Tool,\n InlineFormatter = Editor.InlineFormatter,\n InlineFormatFinder = Editor.InlineFormatFinder,\n textNodes = RangeUtils.textNodes,\n editableTextNodes = RangeUtils.editableTextNodes,\n registerTool = Editor.EditorUtils.registerTool,\n keys = kendo.keys;\n\n var HTTP_PROTOCOL = \"http://\";\n var protocolRegExp = /^\\w*:\\/\\//;\n var endLinkCharsRegExp = /[\\w\\/\\$\\-_\\*\\?]/i;\n\n var LinkFormatFinder = Class.extend({\n findSuitable: function(sourceNode) {\n return dom.parentOfType(sourceNode, [\"a\"]);\n }\n });\n\n var LinkFormatter = Class.extend({\n init: function() {\n this.finder = new LinkFormatFinder();\n },\n\n apply: function(range, attributes) {\n var nodes = this.immutables ? editableTextNodes(range) : textNodes(range);\n var markers, doc, formatter, a, parent;\n\n if (attributes.innerText) {\n doc = RangeUtils.documentFromRange(range);\n markers = RangeUtils.getMarkers(range);\n\n range.deleteContents();\n a = dom.create(doc, \"a\", attributes);\n range.insertNode(a);\n\n parent = a.parentNode;\n if (dom.name(parent) == \"a\") {\n dom.insertAfter(a, parent);\n }\n\n if (dom.emptyNode(parent)) {\n dom.remove(parent);\n }\n\n // move range and markers after inserted link\n var ref = a;\n for (var i = 0; i < markers.length; i++) {\n dom.insertAfter(markers[i], ref);\n ref = markers[i];\n }\n\n if (markers.length) {\n dom.insertBefore(doc.createTextNode(\"\\ufeff\"), markers[1] || markers[0]);\n dom.insertAfter(doc.createTextNode(\"\\ufeff\"), markers[1] || markers[0]);\n range.setStartBefore(markers[0]);\n range.setEndAfter(markers[markers.length - 1]);\n }\n } else {\n formatter = new InlineFormatter([{ tags: [\"a\"] }], attributes);\n formatter.finder = this.finder;\n formatter.apply(nodes);\n }\n }\n });\n\n var UnlinkCommand = Command.extend({\n init: function(options) {\n var that = this;\n options.formatter = /** @ignore */ {\n toggle: function(range) {\n var nodes = that.immutables() ? editableTextNodes(range) : textNodes(range);\n new InlineFormatter([{ tags: [\"a\"] }]).remove(nodes);\n }\n };\n this.options = options;\n Command.fn.init.call(this, options);\n }\n });\n\n var LinkCommand = Command.extend({\n init: function(options) {\n var that;\n this.options = options;\n Command.fn.init.call(this, options);\n this.formatter = new LinkFormatter();\n\n if (!options.url) {\n this.attributes = null;\n this.async = true;\n } else {\n this.exec = function() {\n this.formatter.immutables = that && that.immutables();\n this.formatter.apply(options.range, {\n href: options.url,\n innerText: options.text || options.url,\n target: options.target\n });\n };\n }\n },\n\n exec: function() {\n var messages = this.editor.options.messages;\n this._initialText = \"\";\n this._range = this.lockRange(true);\n this.formatter.immutables = this.immutables();\n\n var nodes = textNodes(this._range);\n var a = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null;\n var img = nodes.length && dom.name(nodes[0]) == \"img\";\n\n var dialog = this.createDialog(\"
    \", {\n title: messages.createLink,\n minWidth: 340,\n close: this._close.bind(this),\n visible: false\n }).data(\"kendoWindow\");\n\n this._form = this._createForm(dialog);\n\n if (a) {\n this._range.selectNodeContents(a);\n nodes = textNodes(this._range);\n }\n\n this._initialText = this.linkText(nodes);\n\n dialog.wrapper\n .find(\".k-dialog-insert\").on(\"click\", this._apply.bind(this)).end()\n .find(\".k-dialog-close\").on(\"click\", this._close.bind(this)).end()\n .find(\".k-form-field input\").on(\"keydown\", this._keydown.bind(this)).end()\n .find(\"#k-editor-link-url\").val(this.linkUrl(a)).end()\n .find(\"#k-editor-link-text\").val(this._initialText).end()\n .find(\"#k-editor-link-title\").val(a ? a.title : \"\").end()\n .find(\"#k-editor-link-target\").prop(\"checked\", a ? a.target == \"_blank\" : false).end()\n .find(\".k-editor-link-text-row\").toggle(!img);\n\n this._dialog = dialog.center().open();\n\n $(\"#k-editor-link-url\", dialog.element).trigger(\"focus\").select();\n },\n\n _createForm: function(dialog) {\n var that = this;\n var formElement = $(\"
    \").appendTo(dialog.element);\n var messages = that.editor.options.messages;\n var form = formElement.kendoForm({\n renderButtons: false,\n items: [\n {\n field: \"k-editor-link-url\",\n label: encode(messages.linkWebAddress),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-link-text\",\n label: encode(messages.linkText),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-link-title\",\n label: encode(messages.linkToolTip),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-link-target\",\n editorOptions: {\n label: encode(messages.linkOpenInNewWindow)\n },\n label: \"\",\n editor: \"CheckBox\"\n }\n ]\n }).data(\"kendoForm\");\n\n formElement.find(\"#k-editor-link-text\").parents(\".k-form-field\").addClass(\"k-editor-link-text-row\");\n\n dialog.element.after($(that._actionButtonsTemplate({ messages, insertButtonIcon: \"link\", cancelButtonIcon: \"cancel-outline\" })));\n\n return form;\n },\n\n _keydown: function(e) {\n var keys = kendo.keys;\n\n if (e.keyCode == keys.ENTER) {\n this._apply(e);\n } else if (e.keyCode == keys.ESC) {\n this._close(e);\n }\n },\n\n _apply: function(e) {\n var element = this._dialog.element;\n var href = $(\"#k-editor-link-url\", element).val();\n var title, text, target;\n var textInput = $(\"#k-editor-link-text\", element);\n\n if (href && href != HTTP_PROTOCOL) {\n\n if (href.indexOf(\"@\") > 0 && !/^(\\w+:)|(\\/\\/)/i.test(href)) {\n href = \"mailto:\" + href;\n }\n\n this.attributes = { href: href };\n\n title = $(\"#k-editor-link-title\", element).val();\n if (title) {\n this.attributes.title = title;\n }\n\n if (textInput.is(\":visible\")) {\n text = kendo.trim(textInput.val());\n if (!text && !this._initialText) {\n this.attributes.innerText = href;\n } else if (text && (text !== this._initialText)) {\n this.attributes.innerText = dom.stripBom(text);\n }\n }\n\n target = $(\"#k-editor-link-target\", element).is(\":checked\");\n this.attributes.target = target ? \"_blank\" : null;\n\n this.formatter.apply(this._range, this.attributes);\n }\n\n this._close(e);\n\n if (this.change) {\n this.change();\n }\n },\n\n _close: function(e) {\n e.preventDefault();\n this._form.destroy();\n this._dialog.destroy();\n\n dom.windowFromDocument(RangeUtils.documentFromRange(this._range)).focus();\n\n this.releaseRange(this._range);\n },\n\n linkUrl: function(anchor) {\n if (anchor) {\n // IE < 8 returns absolute url if getAttribute is not used\n return anchor.getAttribute(\"href\", 2);\n }\n\n return HTTP_PROTOCOL;\n },\n\n linkText: function(nodes) {\n var text = \"\";\n var i;\n\n for (i = 0; i < nodes.length; i++) {\n text += nodes[i].nodeValue;\n }\n\n return dom.stripBom(text || \"\");\n },\n\n redo: function() {\n var range = this.lockRange(true);\n\n this.formatter.apply(range, this.attributes);\n this.releaseRange(range);\n }\n\n });\n\n var AutoLinkCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n\n this.formatter = new LinkFormatter();\n },\n\n exec: function() {\n var detectedLink = this.detectLink();\n if (!detectedLink) {\n return;\n }\n\n var range = this.getRange();\n var linkMarker = new kendo.ui.editor.Marker();\n var linkRange = range.cloneRange();\n\n linkRange.setStart(detectedLink.start.node, detectedLink.start.offset);\n linkRange.setEnd(detectedLink.end.node, detectedLink.end.offset);\n\n range = this.lockRange();\n linkMarker.add(linkRange);\n\n this.formatter.apply(linkRange, {\n href: this._ensureWebProtocol(detectedLink.text)\n });\n\n linkMarker.remove(linkRange);\n this.releaseRange(range);\n },\n\n detectLink: function() {\n var range = this.getRange();\n var startNode = range.startContainer;\n var startOffset = range.startOffset;\n var prev = startNode.previousSibling;\n if (!prev && ((dom.isBom(startNode) && !startNode.nextSibling) || (!startOffset && dom.isDataNode(startNode)))) {\n startNode = startNode.parentNode;\n startOffset = 0;\n }\n var traverser = new LeftDomTextTraverser({\n node: startNode,\n offset: startOffset,\n cancelAtNode: function(node) { return node && dom.name(node) === \"a\"; }\n });\n\n var detection = new DomTextLinkDetection(traverser);\n return detection.detectLink();\n },\n\n changesContent: function() {\n return !!this.detectLink();\n },\n\n _ensureWebProtocol: function(linkText) {\n var hasProtocol = this._hasProtocolPrefix(linkText);\n return hasProtocol ? linkText : this._prefixWithWebProtocol(linkText);\n },\n\n _hasProtocolPrefix: function(linkText) {\n return protocolRegExp.test(linkText);\n },\n\n _prefixWithWebProtocol: function(linkText) {\n return HTTP_PROTOCOL + linkText;\n }\n });\n\n var UnlinkTool = Tool.extend({\n init: function(options) {\n this.options = options;\n this.finder = new InlineFormatFinder([{ tags: [\"a\"] }]);\n\n Tool.fn.init.call(this, $.extend(options, { command: UnlinkCommand }));\n },\n\n update: function(ui, nodes) {\n var isLink = this.finder.isFormatted(nodes),\n toolbar = ui.closest(\".k-toolbar\").data(\"kendoToolBar\");\n\n if (isLink) {\n toolbar.enable(ui, true);\n } else {\n toolbar.enable(ui, false);\n }\n }\n });\n\n var DomTextLinkDetection = Class.extend({\n init: function(traverser) {\n this.traverser = traverser;\n this.start = DomPos();\n this.end = DomPos();\n this.text = \"\";\n },\n\n detectLink: function() {\n var node = this.traverser.node;\n var offset = this.traverser.offset;\n if (dom.isDataNode(node)) {\n var text = node.data.substring(0, offset);\n if (/\\s{2}$/.test(dom.stripBom(text))) {\n return;\n }\n } else if (offset === 0) {//heuristic for new line\n var p = dom.closestEditableOfType(node, dom.blockElements);\n if (p && p.previousSibling) {\n this.traverser.init({\n node: p.previousSibling\n });\n }\n }\n\n this.traverser.traverse(this._detectEnd.bind(this));\n if (!this.end.blank()) {\n this.traverser = this.traverser.clone(this.end);\n this.traverser.traverse(this._detectStart.bind(this));\n\n if (!this._isLinkDetected()) {\n var puntuationOptions = this.traverser.extendOptions(this.start);\n var puntuationTraverser = new RightDomTextTraverser(puntuationOptions);\n puntuationTraverser.traverse(this._skipStartPuntuation.bind(this));\n if (!this._isLinkDetected()) {\n this.start = DomPos();\n }\n }\n }\n\n if (this.start.blank()) {\n return null;\n } else {\n return {\n start: this.start,\n end: this.end,\n text: this.text\n };\n }\n },\n\n _isLinkDetected: function() {\n return protocolRegExp.test(this.text) || /^w{3}\\./i.test(this.text);\n },\n\n _detectEnd: function(text, node) {\n var i = lastIndexOfRegExp(text, endLinkCharsRegExp);\n if (i > -1) {\n this.end.node = node;\n this.end.offset = i + 1;\n\n return false;\n }\n },\n\n _detectStart: function(text, node) {\n var i = lastIndexOfRegExp(text, /\\s/);\n var ii = i + 1;\n this.text = text.substring(ii) + this.text;\n\n this.start.node = node;\n this.start.offset = ii;\n\n if (i > -1) {\n return false;\n }\n },\n\n _skipStartPuntuation: function(text, node, offset) {\n var i = indexOfRegExp(text, /\\w/);\n var ii = i;\n if (i === -1) {\n ii = text.length;\n }\n\n this.text = this.text.substring(ii);\n this.start.node = node;\n this.start.offset = ii + (offset | 0);\n\n if (i > -1) {\n return false;\n }\n }\n });\n\n function lastIndexOfRegExp(str, search) {\n var i = str.length;\n while (i-- && !search.test(str[i])) {}\n\n return i;\n }\n function indexOfRegExp(str, search) {\n var r = search.exec(str);\n\n return r ? r.index : -1;\n }\n\n var DomPos = function() {\n return {\n node: null,\n offset: null,\n blank: function() {\n return this.node === null && this.offset === null;\n }\n };\n };\n\n var DomTextTraverser = Class.extend({\n init: function(options) {\n this.node = options.node;\n this.offset = options.offset === undefined$1 ? (dom.isDataNode(this.node) && this.node.length) || 0 : options.offset;\n this.cancelAtNode = options.cancelAtNode || this.cancelAtNode || $.noop;\n },\n\n traverse: function(callback) {\n if (!callback) {\n return;\n }\n this.cancel = false;\n this._traverse(callback, this.node, this.offset);\n },\n\n _traverse: function(callback, node, offset) {\n if (!node || this.cancel) {\n return;\n }\n if (node.nodeType === 3) {\n var text = node.data;\n if (offset !== undefined$1) {\n text = this.subText(text, offset);\n }\n this.cancel = (callback(text, node, offset) === false);\n }\n else {\n var edgeNode = this.edgeNode(node);\n this.cancel = this.cancel || this.cancelAtNode(edgeNode);\n return this._traverse(callback, edgeNode);\n }\n\n var next = this.next(node);\n if (!next) {\n var parent = node.parentNode;\n while (!next && dom.isInline(parent)) {\n next = this.next(parent);\n parent = parent.parentNode;\n }\n }\n this.cancel = this.cancel || this.cancelAtNode(next);\n this._traverse(callback, next);\n },\n\n extendOptions: function(o) {\n return $.extend({\n node: this.node,\n offset: this.offset,\n cancelAtNode: this.cancelAtNode\n }, o || {});\n },\n\n edgeNode: function(node) {},\n next: function(node) {},\n subText: function(text, offset) {}\n\n });\n\n var LeftDomTextTraverser = DomTextTraverser.extend({\n subText: function(text, splitIndex) {\n return text.substring(0, splitIndex);\n },\n\n next: function(node) {\n return node.previousSibling;\n },\n\n edgeNode: function(node) {\n return node.lastChild;\n },\n\n clone: function(options) {\n var o = this.extendOptions(options);\n return new LeftDomTextTraverser(o);\n }\n });\n\n var RightDomTextTraverser = DomTextTraverser.extend({\n subText: function(text, splitIndex) {\n return text.substring(splitIndex);\n },\n\n next: function(node) {\n return node.nextSibling;\n },\n\n edgeNode: function(node) {\n return node.firstChild;\n },\n\n clone: function(options) {\n var o = this.extendOptions(options);\n return new RightDomTextTraverser(o);\n }\n });\n\n extend(kendo.ui.editor, {\n LinkFormatFinder: LinkFormatFinder,\n LinkFormatter: LinkFormatter,\n UnlinkCommand: UnlinkCommand,\n LinkCommand: LinkCommand,\n AutoLinkCommand: AutoLinkCommand,\n UnlinkTool: UnlinkTool,\n DomTextLinkDetection: DomTextLinkDetection,\n LeftDomTextTraverser: LeftDomTextTraverser,\n RightDomTextTraverser: RightDomTextTraverser\n });\n\n registerTool(\"createLink\", new Tool({ key: \"K\", ctrl: true, command: LinkCommand }));\n registerTool(\"unlink\", new UnlinkTool({ key: \"K\", ctrl: true, shift: true, ui: { enable: false } }));\n registerTool(\"autoLink\", new Tool({ key: [keys.ENTER, keys.SPACEBAR], keyPressCommand: true, command: AutoLinkCommand }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo,\n Class = kendo.Class,\n extend = $.extend,\n Editor = kendo.ui.editor,\n formats = kendo.ui.Editor.fn.options.formats,\n dom = Editor.Dom,\n FormatTool = Editor.FormatTool,\n EditorUtils = Editor.EditorUtils,\n registerTool = EditorUtils.registerTool,\n registerFormat = EditorUtils.registerFormat,\n RangeUtils = Editor.RangeUtils;\n\n var BlockFormatFinder = Class.extend({\n init: function(format) {\n this.format = format;\n },\n\n contains: function(node, children) {\n var i, len, child;\n\n for (i = 0, len = children.length; i < len; i++) {\n child = children[i];\n if (!child || !dom.isAncestorOrSelf(node, child)) {\n return false;\n }\n }\n\n return true;\n },\n\n findSuitable: function(nodes) {\n var format = this.format,\n suitable = [],\n i, len, candidate;\n\n for (i = 0, len = nodes.length; i < len; i++) {\n for (var f = format.length - 1; f >= 0; f--) {\n candidate = dom.ofType(nodes[i], format[f].tags) ? nodes[i] : dom.closestEditableOfType(nodes[i], format[f].tags);\n if (candidate) {\n break;\n }\n }\n\n if (!candidate || candidate.contentEditable === 'true') {\n return [];\n }\n\n if ($.inArray(candidate, suitable) < 0) {\n suitable.push(candidate);\n }\n }\n\n this._resolveListsItems(suitable);\n\n for (i = 0, len = suitable.length; i < len; i++) {\n if (this.contains(suitable[i], suitable)) {\n return [suitable[i]];\n }\n }\n\n return suitable;\n },\n _resolveListsItems: function(nodes) {\n var i, node, wrapper;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n wrapper = dom.is(node, \"li\") ? node : dom.wrapper(node);\n wrapper = wrapper && dom.list(wrapper) ? wrapper.children[0] : wrapper;\n if (dom.is(wrapper, \"li\")) {\n node = nodes[i] = wrapper;\n }\n }\n },\n\n findFormat: function(sourceNode, until) {\n var format = this.format,\n i, len, node, tags, attributes;\n var editableParent = dom.editableParent(sourceNode);\n var immutables = this.options && this.options.immutables;\n var ImmutablesNS = Editor.Immutables;\n\n for (i = 0, len = format.length; i < len; i++) {\n node = sourceNode;\n tags = format[i].tags;\n attributes = format[i].attr;\n\n if (immutables && tags && tags[0] == \"immutable\") {\n var immutable = ImmutablesNS.immutableParent(node);\n if (immutable && dom.attrEquals(immutable, attributes)) {\n return node;\n }\n }\n\n while (node && dom.isAncestorOf(editableParent, node)) {\n if (dom.ofType(node, tags) && dom.attrEquals(node, attributes)) {\n return node;\n }\n\n if (until && until(node)) {\n break;\n }\n\n node = node.parentNode;\n }\n }\n return null;\n },\n\n getFormat: function(nodes) {\n var that = this,\n findFormat = function(node) {\n return that.findFormat(dom.isDataNode(node) ? node.parentNode : node);\n },\n result = findFormat(nodes[0]),\n i, len;\n\n if (!result) {\n return \"\";\n }\n\n for (i = 1, len = nodes.length; i < len; i++) {\n if (result != findFormat(nodes[i])) {\n return \"\";\n }\n }\n\n return result.nodeName.toLowerCase();\n },\n\n isFormatted: function(nodes, until) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n if (!this.findFormat(nodes[i], until)) {\n return false;\n }\n }\n\n return true;\n }\n });\n\n var BlockFormatter = Class.extend({\n init: function(format, values) {\n this.format = format;\n this.values = values;\n this.finder = new BlockFormatFinder(format);\n },\n\n wrap: function(tag, attributes, nodes) {\n\n var commonAncestor = nodes.length == 1 ? dom.blockParentOrBody(nodes[0]) : dom.commonAncestor.apply(null, nodes);\n\n if (dom.isInline(commonAncestor)) {\n commonAncestor = dom.blockParentOrBody(commonAncestor);\n }\n\n var ancestors = dom.significantChildNodes(commonAncestor),\n position = dom.findNodeIndex(ancestors[0]),\n wrapper = dom.create(commonAncestor.ownerDocument, tag, attributes),\n i, ancestor;\n\n for (i = 0; i < ancestors.length; i++) {\n ancestor = ancestors[i];\n if (dom.isBlock(ancestor)) {\n dom.attr(ancestor, attributes);\n\n if (wrapper.childNodes.length) {\n dom.insertBefore(wrapper, ancestor);\n wrapper = wrapper.cloneNode(false);\n }\n\n position = dom.findNodeIndex(ancestor) + 1;\n\n continue;\n }\n\n wrapper.appendChild(ancestor);\n }\n\n if (wrapper.firstChild) {\n dom.insertAt(commonAncestor, wrapper, position);\n }\n },\n\n apply: function(nodes) {\n var format, values = this.values;\n\n function attributes(format) {\n return extend({}, format && format.attr, values);\n }\n\n this._handleImmutables(nodes, true);\n\n var images = dom.filter(\"img\", nodes);\n var imageFormat = EditorUtils.formatByName(\"img\", this.format);\n var imageAttributes = attributes(imageFormat);\n $.each(images, function() {\n dom.attr(this, imageAttributes);\n });\n\n // only images were selected, no need to wrap\n if (images.length == nodes.length) {\n return;\n }\n\n var nonImages = dom.filter(\"img\", nodes, true);\n var formatNodes = this.finder.findSuitable(nonImages);\n\n if (formatNodes.length) {\n for (var i = 0, len = formatNodes.length; i < len; i++) {\n format = EditorUtils.formatByName(dom.name(formatNodes[i]), this.format);\n dom.attr(formatNodes[i], attributes(format));\n }\n } else {\n format = this.format[0];\n this.wrap(format.tags[0], attributes(format), nonImages);\n }\n },\n\n _handleImmutables: function(nodes, applyFormatting) {\n if (!this.immutables()) {\n return;\n }\n var immutableFormat = EditorUtils.formatByName(\"immutable\", this.format);\n if (!immutableFormat) {\n return;\n }\n var ImmutablesNS = Editor.Immutables;\n var l = nodes.length - 1;\n for (var i = l; i >= 0; i--) {\n var immutableParent = ImmutablesNS.immutableParent(nodes[i]);\n if (!immutableParent) {\n continue;\n }\n if (immutableParent !== nodes[i + 1]) {\n if (applyFormatting) {\n dom.attr(immutableParent, immutableFormat.attr);\n } else {\n dom.unstyle(immutableParent, immutableFormat.attr.style);\n }\n }\n nodes.splice(i, 1);\n }\n },\n\n immutables: function() {\n return this.editor && this.editor.options.immutables;\n },\n\n remove: function(nodes) {\n var i, l, formatNode, namedFormat, name;\n\n this._handleImmutables(nodes, false);\n\n for (i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n name = dom.name(formatNode);\n namedFormat = EditorUtils.formatByName(name, this.format);\n if (namedFormat.attr.style) {\n dom.unstyle(formatNode, namedFormat.attr.style);\n }\n if (namedFormat.attr.className) {\n dom.removeClass(formatNode, namedFormat.attr.className);\n }\n }\n }\n },\n\n toggle: function(range) {\n var that = this,\n nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n\n if (that.finder.isFormatted(nodes)) {\n that.remove(nodes);\n } else {\n that.apply(nodes);\n }\n }\n });\n\n var GreedyBlockFormatter = Class.extend({\n init: function(format, values) {\n var that = this;\n that.format = format;\n that.values = values;\n that.finder = new BlockFormatFinder(format);\n },\n\n apply: function(nodes) {\n var format = this.format;\n var blocks = dom.blockParents(nodes);\n var formatTag = format[0].tags[0];\n var i, len, list, formatter, range;\n var element;\n var tagName;\n var block;\n var immutalbeParent;\n\n if (blocks.length) {\n for (i = 0, len = blocks.length; i < len; i++) {\n block = blocks[i];\n immutalbeParent = this.immutables() && Editor.Immutables.immutableParent(block);\n\n if (!immutalbeParent) {\n tagName = dom.name(block);\n\n if (tagName == \"li\") {\n list = block.parentNode;\n formatter = new Editor.ListFormatter(list.nodeName.toLowerCase(), formatTag);\n range = this.editor.createRange();\n range.selectNode(blocks[i]);\n formatter.toggle(range);\n } else if (formatTag && (tagName == \"td\" || block.attributes.contentEditable)) {\n new BlockFormatter(format, this.values).apply(block.childNodes);\n } else {\n element = dom.changeTag(block, formatTag);\n dom.attr(element, format[0].attr);\n }\n }\n }\n } else {\n var blockFormatter = new BlockFormatter(format, this.values);\n blockFormatter.editor = this.editor;\n blockFormatter.apply(nodes);\n }\n },\n\n toggle: function(range) {\n var nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n range.selectNodeContents(range.commonAncestorContainer);\n nodes = RangeUtils.textNodes(range);\n if (!nodes.length) {\n nodes = dom.significantChildNodes(range.commonAncestorContainer);\n }\n }\n\n this.apply(nodes);\n },\n\n immutables: function() {\n return this.editor && this.editor.options.immutables;\n }\n });\n\n var BlockFormatTool = FormatTool.extend({ init: function(options) {\n FormatTool.fn.init.call(this, extend(options, {\n finder: new BlockFormatFinder(options.format),\n formatter: function() {\n return new BlockFormatter(options.format);\n }\n }));\n }\n });\n\n extend(Editor, {\n BlockFormatFinder: BlockFormatFinder,\n BlockFormatter: BlockFormatter,\n GreedyBlockFormatter: GreedyBlockFormatter,\n BlockFormatTool: BlockFormatTool\n });\n\n var listElements = [\"ul\",\"ol\",\"li\"];\n\n registerFormat(\"justifyLeft\", [\n { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"left\" } } },\n { tags: [\"img\"], attr: { style: { \"float\": \"left\", display: \"\", marginLeft: \"\", marginRight: \"\" } } },\n { tags: [\"immutable\"], attr: { style: { \"float\": \"left\", display: \"\", marginLeft: \"\", marginRight: \"\" } } },\n { tags: listElements, attr: { style: { textAlign: \"left\", listStylePosition: \"\" } } }\n ]);\n registerTool(\"justifyLeft\", new BlockFormatTool({\n format: formats.justifyLeft,\n ui: {\n togglable: true,\n group: \"align\"\n }\n }));\n\n registerFormat(\"justifyCenter\", [\n { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"center\" } } },\n { tags: [\"img\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" } } },\n { tags: [\"immutable\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" } } },\n { tags: listElements, attr: { style: { textAlign: \"center\", listStylePosition: \"inside\" } } }\n ]);\n registerTool(\"justifyCenter\", new BlockFormatTool({\n format: formats.justifyCenter,\n ui: {\n togglable: true,\n group: \"align\"\n }\n }));\n\n registerFormat(\"justifyRight\", [\n { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"right\" } } },\n { tags: [\"img\"], attr: { style: { \"float\": \"right\", display: \"\", marginLeft: \"\", marginRight: \"\" } } },\n { tags: [\"immutable\"], attr: { style: { \"float\": \"right\", display: \"\", marginLeft: \"\", marginRight: \"\" } } },\n { tags: listElements, attr: { style: { textAlign: \"right\", listStylePosition: \"inside\" } } }\n ]);\n registerTool(\"justifyRight\", new BlockFormatTool({\n format: formats.justifyRight,\n ui: {\n togglable: true,\n group: \"align\"\n }\n }));\n\n registerFormat(\"justifyFull\", [\n { tags: dom.nonListBlockElements, attr: { style: { textAlign: \"justify\" } } },\n { tags: [\"img\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" } } },\n { tags: [\"immutable\"], attr: { style: { display: \"block\", marginLeft: \"auto\", marginRight: \"auto\", \"float\": \"\" } } },\n { tags: listElements, attr: { style: { textAlign: \"justify\", listStylePosition: \"\" } } }\n ]);\n registerTool(\"justifyFull\", new BlockFormatTool({\n format: formats.justifyFull,\n ui: {\n togglable: true,\n group: \"align\"\n }\n }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n extend = $.extend,\n Editor = kendo.ui.editor,\n dom = Editor.Dom,\n RangeUtils = Editor.RangeUtils,\n Command = Editor.Command,\n FormatTool = Editor.FormatTool,\n BlockFormatFinder = Editor.BlockFormatFinder,\n textNodes = RangeUtils.textNodes,\n registerTool = Editor.EditorUtils.registerTool;\n\n var ListFormatFinder = BlockFormatFinder.extend({\n init: function(options) {\n this.tag = options.tag;\n this.attr = options.attr;\n this.altAttr = options.altAttr;\n\n var tags = this.tags = [this.tag == 'ul' ? 'ol' : 'ul', this.tag];\n var format = [{ tags: tags, attr: this.attr }];\n\n if (this.altAttr) {\n format.push({\n tags: tags,\n attr: this.altAttr\n });\n }\n\n BlockFormatFinder.fn.init.call(this, format);\n },\n\n matchesType: function(node) {\n return dom.attrEquals(node, this.attr) || (this.altAttr && dom.attrEquals(node, this.altAttr));\n },\n\n isList: function(node) {\n return dom.list(node);\n },\n\n isFormatted: function(nodes) {\n var formatNodes = [];\n var formatNode, i;\n\n for (i = 0; i < nodes.length; i++) {\n formatNode = this.findFormat(nodes[i], this.isList);\n\n if (formatNode && dom.name(formatNode) == this.tag && this.matchesType(formatNode)) {\n formatNodes.push(formatNode);\n }\n }\n\n if (formatNodes.length < 1) {\n return false;\n }\n\n if (formatNodes.length != nodes.length) {\n return false;\n }\n\n // check if sequential lists are selected\n for (i = 0; i < formatNodes.length; i++) {\n if (formatNodes[i].parentNode != formatNode.parentNode) {\n break;\n }\n\n if (formatNodes[i] != formatNode) {\n return false;\n }\n }\n\n return true;\n },\n\n findSuitable: function(nodes) {\n var candidate = this.findFormat(nodes[0], this.isList);\n\n if (candidate && dom.name(candidate) == this.tag) {\n return candidate;\n }\n\n return null;\n }\n\n });\n\n var ListFormatter = Class.extend({\n init: function(options, unwrapTag) {\n var that = this;\n options = $.isPlainObject(options) ? options : { tag: options, attr: null };\n that.tag = options.tag;\n that.attr = options.attr;\n that.finder = new ListFormatFinder(options);\n that.unwrapTag = unwrapTag;\n },\n\n isList: function(node) {\n return dom.list(node);\n },\n\n immutables: function() {\n return this.editor && !!this.editor.options.immutables;\n },\n\n wrap: function(list, nodes) {\n var li = dom.create(list.ownerDocument, \"li\"),\n i, node,\n isImmutable = this.immutables() ? Editor.Immutables.immutable : $.noop;\n\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n\n if (dom.is(node, 'li')) {\n list.appendChild(node);\n continue;\n }\n\n if (this.isList(node)) {\n while (node.firstChild) {\n list.appendChild(node.firstChild);\n }\n continue;\n }\n\n if (dom.is(node, \"td\")) {\n while (node.firstChild) {\n li.appendChild(node.firstChild);\n }\n list.appendChild(li);\n node.appendChild(list);\n list = list.cloneNode(false);\n li = li.cloneNode(false);\n continue;\n }\n\n li.appendChild(node);\n\n if (dom.isBlock(node)) {\n list.appendChild(li);\n if (!isImmutable(node)) {\n dom.unwrap(node);\n }\n li = li.cloneNode(false);\n }\n }\n\n if (li.firstChild) {\n list.appendChild(li);\n }\n },\n\n containsAny: function(parent, nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (dom.isAncestorOrSelf(parent, nodes[i])) {\n return true;\n }\n }\n\n return false;\n },\n\n suitable: function(candidate, nodes) {\n if (candidate.className == \"k-marker\") {\n var sibling = candidate.nextSibling;\n\n if (sibling && dom.isBlock(sibling)) {\n return false;\n }\n\n sibling = candidate.previousSibling;\n\n if (sibling && dom.isBlock(sibling)) {\n return false;\n }\n }\n\n return this.containsAny(candidate, nodes) || dom.isInline(candidate) || candidate.nodeType == 3;\n },\n\n _parentLists: function(node) {\n var editable = dom.closestEditable(node);\n\n return $(node).parentsUntil(editable, \"ul,ol\");\n },\n\n split: function(range) {\n var nodes = textNodes(range);\n var start, end, parents;\n\n if (nodes.length) {\n start = dom.parentOfType(nodes[0], ['li']);\n end = dom.parentOfType(nodes[nodes.length - 1], ['li']);\n range.setStartBefore(start);\n range.setEndAfter(end);\n\n for (var i = 0, l = nodes.length; i < l; i++) {\n var formatNode = this.finder.findFormat(nodes[i]);\n if (formatNode) {\n parents = this._parentLists(formatNode);\n if (parents.length) {\n RangeUtils.split(range, parents.last()[0], true);\n } else {\n RangeUtils.split(range, formatNode, true);\n }\n }\n }\n }\n },\n\n merge: function(tag, formatNode) {\n var prev = formatNode.previousSibling, next;\n\n while (prev && (prev.className == \"k-marker\" || (prev.nodeType == 3 && dom.isWhitespace(prev)))) {\n prev = prev.previousSibling;\n }\n\n // merge with previous list\n if (prev && dom.name(prev) == tag && this.finder.matchesType(prev)) {\n while (formatNode.firstChild) {\n prev.appendChild(formatNode.firstChild);\n }\n dom.remove(formatNode);\n formatNode = prev;\n }\n\n next = formatNode.nextSibling;\n while (next && (next.className == \"k-marker\" || (next.nodeType == 3 && dom.isWhitespace(next)))) {\n next = next.nextSibling;\n }\n\n // merge with next list\n if (next && dom.name(next) == tag && this.finder.matchesType(next)) {\n while (formatNode.lastChild) {\n next.insertBefore(formatNode.lastChild, next.firstChild);\n }\n dom.remove(formatNode);\n }\n },\n\n breakable: function(node) {\n return (\n node != node.ownerDocument.body &&\n !/table|tbody|thead|tr|td/.test(dom.name(node)) &&\n !node.attributes.contentEditable\n );\n },\n\n findSuitableNode: function(nodes) {\n var that = this,\n finder = that.finder,\n tag = that.tag,\n formatNode;\n\n formatNode = finder.findSuitable(nodes);\n\n if (!formatNode) {\n // Find the opposite tag\n finder = new ListFormatFinder({ tag: tag == \"ul\" ? \"ol\" : \"ul\" });\n formatNode = finder.findSuitable(nodes);\n }\n\n if (!formatNode) {\n // Find the same tag\n finder = new ListFormatFinder({ tag: tag });\n formatNode = finder.findSuitable(nodes);\n formatNode = formatNode && that.finder.matchesType(formatNode) ? null : formatNode;\n }\n\n\n return formatNode;\n },\n\n applyOnSection: function(section, nodes) {\n var tag = this.tag;\n var attr = this.attr;\n var commonAncestor = dom.closestSplittableParent(nodes);\n\n var ancestors = [];\n var formatNode = this.findSuitableNode(nodes);\n\n var childNodes;\n\n if (/table|tbody|thead/.test(dom.name(commonAncestor))) {\n childNodes = $.map(nodes, function(node) {\n return dom.parentOfType(node, [\"td\"]);\n });\n } else {\n childNodes = dom.significantChildNodes(commonAncestor);\n\n if ($.grep(childNodes, dom.isBlock).length) {\n childNodes = $.grep(childNodes, (function(node) {\n return this.containsAny(node, nodes);\n }).bind(this));\n }\n\n if (!childNodes.length) {\n childNodes = nodes;\n }\n }\n\n function pushAncestor() {\n ancestors.push(this);\n }\n\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n var suitable = (!formatNode || !dom.isAncestorOrSelf(formatNode, child)) && this.suitable(child, nodes);\n\n if (!suitable) {\n continue;\n }\n\n if (formatNode && this.isList(child)) {\n // merging lists\n $.each(child.children, pushAncestor);\n dom.remove(child);\n } else {\n ancestors.push(child);\n }\n }\n\n if (ancestors.length == childNodes.length && this.breakable(commonAncestor)) {\n ancestors = [commonAncestor];\n }\n\n if (!formatNode) {\n formatNode = dom.create(commonAncestor.ownerDocument, tag, attr);\n if (dom.isBlock(ancestors[0])) {\n dom.mergeAttributes(ancestors[0], formatNode);\n }\n dom.insertBefore(formatNode, ancestors[0]);\n }\n\n this.wrap(formatNode, ancestors);\n\n while (dom.isBom(formatNode.nextSibling)) {\n dom.remove(formatNode.nextSibling);\n }\n\n if (!this.finder.matchesType(formatNode)) {\n formatNode.removeAttribute(\"type\");\n formatNode.style.listStyleType = \"\";\n dom.mergeAttributes(dom.create(commonAncestor.ownerDocument, tag, attr), formatNode, true);\n }\n\n if (formatNode && formatNode.getAttribute(\"type\") === \"\") {\n formatNode.removeAttribute(\"type\");\n }\n\n if (!dom.is(formatNode, tag)) {\n dom.changeTag(formatNode, tag);\n }\n\n this.merge(tag, formatNode);\n },\n\n apply: function(nodes) {\n var i = 0,\n sections = [],\n lastSection,\n lastNodes,\n section,\n node,\n l = nodes.length,\n immutableParent = this.immutables() ? Editor.Immutables.immutableParent : $.noop;\n\n function addLastSection() {\n if (lastSection) {\n sections.push({\n section: lastSection,\n nodes: lastNodes\n });\n }\n }\n\n // split nodes into sections that need to be different lists\n for (i = 0; i < l; i++) {\n node = immutableParent(nodes[i]) || nodes[i];\n section = dom.closestEditable(node, [\"td\",\"th\",\"body\"]);\n if (!lastSection || section != lastSection) {\n addLastSection();\n lastNodes = [node];\n lastSection = section;\n } else {\n lastNodes.push(node);\n }\n }\n\n addLastSection();\n\n for (i = 0; i < sections.length; i++) {\n this.applyOnSection(sections[i].section, sections[i].nodes);\n }\n },\n\n unwrap: function(ul) {\n var fragment = ul.ownerDocument.createDocumentFragment(),\n unwrapTag = this.unwrapTag,\n parents,\n li,\n p,\n child;\n\n for (li = ul.firstChild; li; li = li.nextSibling) {\n p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n\n while (li.firstChild) {\n child = li.firstChild;\n\n if (dom.isBlock(child)) {\n\n if (p.firstChild) {\n fragment.appendChild(p);\n p = dom.create(ul.ownerDocument, unwrapTag || 'p');\n }\n\n fragment.appendChild(child);\n } else {\n p.appendChild(child);\n }\n }\n\n if (p.firstChild) {\n fragment.appendChild(p);\n }\n }\n\n parents = this._parentLists(ul);\n\n if (parents[0]) {\n dom.insertAfter(fragment, parents.last()[0]);\n parents.last().remove();\n } else {\n dom.insertAfter(fragment, ul);\n }\n\n dom.remove(ul);\n },\n\n remove: function(nodes) {\n var formatNode;\n for (var i = 0, l = nodes.length; i < l; i++) {\n formatNode = this.finder.findFormat(nodes[i]);\n\n if (formatNode) {\n this.unwrap(formatNode);\n }\n }\n },\n\n toggle: function(range) {\n var that = this,\n nodes = textNodes(range),\n ancestor = range.commonAncestorContainer;\n\n if (!nodes.length) {\n range.selectNodeContents(ancestor);\n nodes = textNodes(range);\n if (!nodes.length) {\n var text = ancestor.ownerDocument.createTextNode(\"\");\n range.startContainer.appendChild(text);\n nodes = [text];\n range.selectNode(text.parentNode);\n }\n }\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n if (that.finder.isFormatted(nodes)) {\n that.split(range);\n that.remove(nodes);\n } else {\n that.apply(nodes);\n }\n }\n\n });\n\n var ListCommand = Command.extend({\n init: function(options) {\n options.formatter = new ListFormatter({ tag: options.tag, attr: options.attr });\n Command.fn.init.call(this, options);\n }\n });\n\n var ListTool = FormatTool.extend({\n init: function(options) {\n this.options = options;\n\n FormatTool.fn.init.call(this, extend(options, {\n finder: new ListFormatFinder(options)\n }));\n },\n\n command: function(commandArguments) {\n return new ListCommand(extend(commandArguments, { tag: this.options.tag, attr: this.options.attr }));\n }\n });\n\n extend(Editor, {\n ListFormatFinder: ListFormatFinder,\n ListFormatter: ListFormatter,\n ListCommand: ListCommand,\n ListTool: ListTool\n });\n\n registerTool(\"insertUnorderedList\", new ListTool({ tag: 'ul', attr: { style: { listStyleType: \"\" }, type: \"\" }, ui: { togglable: true, group: \"lists\" } }));\n registerTool(\"insertOrderedList\", new ListTool({ tag: 'ol', attr: { style: { listStyleType: \"\" }, type: \"\" }, ui: { togglable: true, group: \"lists\" } }));\n registerTool(\"insertUpperRomanList\", new ListTool({ tag: 'ol', attr: { style: { listStyleType: \"upper-roman\" } }, altAttr: { type: \"I\" }, ui: { togglable: true, group: \"lists\" } }));\n registerTool(\"insertLowerRomanList\", new ListTool({ tag: 'ol', attr: { style: { listStyleType: \"lower-roman\" } }, altAttr: { type: \"i\" }, ui: { togglable: true, group: \"lists\" } }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo,\n Editor = kendo.ui.editor,\n Tool = Editor.Tool,\n DelayedExecutionTool = Editor.DelayedExecutionTool,\n Command = Editor.Command,\n dom = Editor.Dom,\n EditorUtils = Editor.EditorUtils,\n RangeUtils = Editor.RangeUtils,\n registerTool = EditorUtils.registerTool;\n\n\n var FormattingTool = DelayedExecutionTool.extend({\n init: function(options) {\n var that = this;\n Tool.fn.init.call(that, kendo.deepExtend({}, that.options, options));\n\n that.type = \"kendoDropDownList\";\n\n that.finder = {\n getFormat: function() { return \"\"; }\n };\n },\n\n options: {\n items: [\n { text: \"Paragraph\", value: \"p\" },\n { text: \"Quotation\", value: \"blockquote\" },\n { text: \"Heading 1\", value: \"h1\" },\n { text: \"Heading 2\", value: \"h2\" },\n { text: \"Heading 3\", value: \"h3\" },\n { text: \"Heading 4\", value: \"h4\" },\n { text: \"Heading 5\", value: \"h5\" },\n { text: \"Heading 6\", value: \"h6\" }\n ],\n width: 110\n },\n\n toFormattingItem: function(item) {\n var value = item.value;\n\n if (!value) {\n return item;\n }\n\n if (item.tag || item.className) {\n return item;\n }\n\n var dot = value.indexOf(\".\");\n\n if (dot === 0) {\n item.className = value.substring(1);\n } else if (dot == -1) {\n item.tag = value;\n } else {\n item.tag = value.substring(0, dot);\n item.className = value.substring(dot + 1);\n }\n\n return item;\n },\n\n command: function(args) {\n var that = this;\n var item = args.value;\n\n item = this.toFormattingItem(item);\n\n return new Editor.FormatCommand({\n range: args.range,\n formatter: function() {\n var formatter,\n tags = (item.tag || item.context || \"span\").split(\",\"),\n format = [{\n tags: tags,\n attr: { className: item.className || \"\" }\n }];\n\n if ($.inArray(tags[0], dom.inlineElements) >= 0) {\n formatter = new Editor.GreedyInlineFormatter(format);\n } else {\n formatter = new Editor.GreedyBlockFormatter(format);\n }\n\n formatter.editor = that.editor;\n return formatter;\n }\n });\n },\n\n decorate: function(body) {\n var component = this.component,\n dataSource = component.dataSource,\n items = dataSource.data(),\n i, tag, className, style;\n\n if (body) {\n component.list.css(\"background-color\", dom.getEffectiveBackground($(body)));\n }\n\n if (this.component && this.component.options && this.component.options.unsafeInline !== false) {\n for (i = 0; i < items.length; i++) {\n tag = items[i].tag || \"span\";\n className = items[i].className;\n\n style = dom.inlineStyle(body, tag, { className: className });\n\n style = style.replace(/\"/g, \"'\");\n\n items[i].style = style + \";display:inline-block\";\n }\n }\n\n dataSource.trigger(\"change\");\n },\n\n initialize: function(ui, editor) {\n var options = this.options;\n var toolName = options.name;\n var that = this;\n var component = ui.getKendoDropDownList();\n\n if (!component) {\n return;\n }\n\n that.editor = editor;\n that.component = component;\n\n // must be moved to themes\n ui.closest(\".k-dropdownlist\").width(options.width);\n\n component.setOptions({\n optionLabel: editor.options.messages.formatting,\n change: () => {\n var dataItem = component.dataItem();\n\n if (dataItem) {\n Tool.exec(editor, toolName, dataItem.toJSON());\n }\n },\n dataBound: function() {\n var i, items = component.dataSource.data(),\n optionLabel = component.list.parent().find(\".k-list-optionlabel\");\n\n for (i = 0; i < items.length; i++) {\n items[i] = that.toFormattingItem(items[i]);\n }\n\n if (optionLabel.length) {\n optionLabel.remove();\n }\n }\n });\n },\n\n getFormattingValue: function(items, nodes) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var tag = item.tag || item.context || \"\";\n var className = item.className ? \".\" + item.className : \"\";\n var selector = tag + className;\n\n var element = $(nodes[0]).closest(selector)[0];\n\n if (!element) {\n continue;\n }\n\n if (nodes.length == 1) {\n return item.value;\n }\n\n for (var n = 1; n < nodes.length; n++) {\n if (!$(nodes[n]).closest(selector)[0]) {\n break;\n } else if (n == nodes.length - 1) {\n return item.value;\n }\n }\n }\n\n return \"\";\n },\n\n update: function(ui, nodes) {\n var selectBox = $(ui).data(this.type);\n // necessary until formatBlock is deleted\n if (!selectBox) {\n return;\n }\n\n var dataSource = selectBox.dataSource,\n items = dataSource.data(),\n i, context,\n ancestor = dom.commonAncestor.apply(null, nodes);\n\n if (ancestor != dom.closestEditable(ancestor) && this._ancestor == ancestor) {\n return;\n } else {\n this._ancestor = ancestor;\n }\n\n for (i = 0; i < items.length; i++) {\n context = items[i].context;\n\n items[i].visible = !context || !!$(ancestor).closest(context).length;\n }\n\n dataSource.filter([{ field: \"visible\", operator: \"eq\", value: true }]);\n\n DelayedExecutionTool.fn.update.call(this, ui, nodes);\n\n selectBox.value(this.getFormattingValue(dataSource.view(), nodes));\n\n selectBox.wrapper.toggleClass(\"k-disabled\", !dataSource.view().length);\n },\n\n destroy: function() {\n this._ancestor = null;\n }\n });\n\n var CleanFormatCommand = Command.extend({\n exec: function() {\n var range = this.lockRange(true);\n this.tagsToClean = this.options.remove || \"strong,em,span,sup,sub,del,b,i,u,font\".split(\",\");\n\n RangeUtils.wrapSelectedElements(range);\n\n var nodes = RangeUtils.mapAll(range, function(node) {\n return node;\n });\n\n\n for (var c = nodes.length - 1; c >= 0; c--) {\n var node = nodes[c];\n if (!this.immutableParent(node)) {\n this.clean(node);\n }\n }\n\n this.releaseRange(range);\n },\n\n clean: function(node) {\n if (!node || dom.isMarker(node)) {\n return;\n }\n\n var name = dom.name(node);\n\n if (name == \"ul\" || name == \"ol\") {\n var listFormatter = new Editor.ListFormatter(name);\n var prev = node.previousSibling;\n var next = node.nextSibling;\n\n listFormatter.unwrap(node);\n\n // clean contents\n for (; prev && prev != next; prev = prev.nextSibling) {\n this.clean(prev);\n }\n } else if (name == \"blockquote\") {\n dom.changeTag(node, \"p\");\n } else if (node.nodeType == 1 && !dom.insignificant(node)) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n this.clean(node.childNodes[i]);\n }\n\n node.removeAttribute(\"style\");\n node.removeAttribute(\"class\");\n } else {\n unwrapListItem(node);\n }\n\n if ($.inArray(name, this.tagsToClean) > -1) {\n dom.unwrap(node);\n }\n },\n\n immutableParent: function(node) {\n return this.immutables() && Editor.Immutables.immutableParent(node);\n }\n });\n\n\n function unwrapListItem(node) {\n var li = dom.closestEditableOfType(node, [\"li\"]);\n if (li) {\n var listFormatter = new Editor.ListFormatter(dom.name(li.parentNode));\n var range = kendo.ui.editor.W3CRange.fromNode(node);\n range.selectNode(li);\n listFormatter.toggle(range);\n }\n }\n\n $.extend(Editor, {\n FormattingTool: FormattingTool,\n CleanFormatCommand: CleanFormatCommand\n });\n\n registerTool(\"formatting\", new FormattingTool({\n ui: {\n type: \"component\",\n component: \"DropDownList\",\n componentOptions: {\n dataTextField: \"text\",\n dataValueField: \"value\",\n highlightFirst: false,\n autoWidth: true,\n template: kendo.template(\n (data) => `${kendo.htmlEncode(data.text)}`\n )\n },\n overflow: \"never\"\n }\n }));\n\n registerTool(\"cleanFormatting\", new Tool({ command: CleanFormatCommand }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n encode = kendo.htmlEncode,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n dom = Editor.Dom,\n registerTool = EditorUtils.registerTool,\n RangeUtils = Editor.RangeUtils,\n Command = Editor.Command,\n keys = kendo.keys,\n KEDITORIMAGEURL = \"#k-editor-image-url\",\n KEDITORIMAGETITLE = \"#k-editor-image-title\",\n KEDITORIMAGEWIDTH = \"#k-editor-image-width\",\n KEDITORIMAGEHEIGHT = \"#k-editor-image-height\";\n\n var ImageCommand = Command.extend({\n init: function(options) {\n var that = this;\n Command.fn.init.call(that, options);\n\n that.async = true;\n that.attributes = {};\n },\n\n insertImage: function(img, range) {\n var attributes = this.attributes;\n var doc = RangeUtils.documentFromRange(range);\n\n if (attributes.src && attributes.src != \"http://\") {\n\n var removeIEAttributes = function() {\n setTimeout(function() {\n if (!attributes.width) {\n img.removeAttribute(\"width\");\n }\n\n if (!attributes.height) {\n img.removeAttribute(\"height\");\n }\n\n img.removeAttribute(\"complete\");\n });\n };\n\n if (!img) {\n img = dom.create(doc, \"img\", attributes);\n img.onload = img.onerror = removeIEAttributes;\n\n range.deleteContents();\n range.insertNode(img);\n\n if (!img.nextSibling) {\n dom.insertAfter(doc.createTextNode(\"\\ufeff\"), img);\n }\n\n removeIEAttributes();\n\n range.setStartAfter(img);\n range.setEndAfter(img);\n RangeUtils.selectRange(range);\n return true;\n } else {\n img.onload = img.onerror = removeIEAttributes;\n dom.attr(img, attributes);\n removeIEAttributes();\n }\n }\n\n return false;\n },\n\n redo: function() {\n var that = this,\n range = that.lockRange();\n\n if (!that.insertImage(RangeUtils.image(range), range)) {\n that.releaseRange(range);\n }\n },\n\n exec: function() {\n var that = this,\n range = that.lockRange(),\n applied = false,\n img = RangeUtils.image(range),\n imageWidth = img && img.getAttribute(\"width\") || \"\",\n imageHeight = img && img.getAttribute(\"height\") || \"\",\n dialog,\n form,\n isIE = kendo.support.browser.msie,\n options = that.editor.options,\n messages = options.messages,\n imageBrowser = options.imageBrowser,\n showBrowser = !!(kendo.ui.ImageBrowser && imageBrowser && imageBrowser.transport && imageBrowser.transport.read !== undefined$1),\n dialogOptions = {\n title: messages.insertImage,\n visible: false,\n resizable: showBrowser\n };\n\n this.expandImmutablesIn(range);\n\n function apply(e) {\n var element = dialog.element,\n w = parseInt(element.find(KEDITORIMAGEWIDTH).val(), 10),\n h = parseInt(element.find(KEDITORIMAGEHEIGHT).val(), 10);\n\n that.attributes = {\n src: element.find(KEDITORIMAGEURL).val().replace(/ /g, \"%20\"),\n alt: element.find(KEDITORIMAGETITLE).val()\n };\n\n that.attributes.width = null;\n that.attributes.height = null;\n\n if (!isNaN(w) && w > 0) {\n that.attributes.width = w;\n }\n\n if (!isNaN(h) && h > 0) {\n that.attributes.height = h;\n }\n\n applied = that.insertImage(img, range);\n\n close(e);\n\n if (that.change) {\n that.change();\n }\n }\n\n function close(e) {\n e.preventDefault();\n form.destroy();\n dialog.destroy();\n\n dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n if (!applied) {\n that.releaseRange(range);\n }\n }\n\n function keyDown(e) {\n if (e.keyCode == keys.ENTER) {\n apply(e);\n } else if (e.keyCode == keys.ESC) {\n close(e);\n }\n }\n\n dialogOptions.close = close;\n\n if (showBrowser) {\n dialogOptions.width = 750;\n }\n dialogOptions.minWidth = 350;\n\n dialog = this.createDialog(\"
    \", dialogOptions).data(\"kendoWindow\");\n\n form = that._createForm(dialog, showBrowser);\n\n dialog.element.toggleClass(\"k-filebrowser-dialog\", showBrowser);\n dialog.wrapper\n .find(\".k-dialog-insert\").on(\"click\", apply).end()\n .find(\".k-dialog-close\").on(\"click\", close).end()\n .find(\".k-form-field input\").on(\"keydown\", keyDown).end()\n // IE < 8 returns absolute url if getAttribute is not used\n .find(KEDITORIMAGEURL).val(img ? img.getAttribute(\"src\", 2) : \"http://\").end()\n .find(KEDITORIMAGETITLE).val(img ? img.alt : \"\").end()\n .find(KEDITORIMAGEWIDTH).val(imageWidth).end()\n .find(KEDITORIMAGEHEIGHT).val(imageHeight).end();\n\n var element = dialog.element;\n if (showBrowser) {\n this._imageBrowser = new kendo.ui.ImageBrowser(\n element.find(\".k-imagebrowser\"),\n extend({}, imageBrowser)\n );\n\n this._imageBrowser.bind(\"change\", function(ev) {\n if (ev.selected.get(\"type\") === \"f\") {\n element.find(KEDITORIMAGEURL).val(this.value());\n }\n });\n\n this._imageBrowser.bind(\"apply\", apply);\n }\n\n if (isIE) {\n var dialogHeight = element.closest(\".k-window\").height();\n element.css(\"max-height\", dialogHeight);\n }\n dialog.center().open();\n element.find(KEDITORIMAGEURL).trigger(\"focus\").select();\n },\n\n _createForm: function(dialog, showBrowser) {\n var that = this;\n var formElement = $(\"
    \").appendTo(dialog.element);\n var messages = that.editor.options.messages;\n var form = formElement.kendoForm({\n renderButtons: false,\n items: [\n {\n field: \"k-editor-image-url\",\n label: encode(messages.imageWebAddress),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-image-title\",\n label: encode(messages.imageAltText),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-image-width\",\n label: encode(messages.imageWidth),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-image-height\",\n label: encode(messages.imageHeight),\n editor: \"TextBox\"\n }\n ]\n }).data(\"kendoForm\");\n\n if (showBrowser) {\n formElement.prepend($('
    '));\n }\n\n dialog.element.after($(that._actionButtonsTemplate({ messages, insertButtonIcon: \"image-add\", cancelButtonIcon: \"cancel-outline\" })));\n\n return form;\n }\n\n });\n\n kendo.ui.editor.ImageCommand = ImageCommand;\n\n registerTool(\"insertImage\", new Editor.Tool({ command: ImageCommand }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n Command = Editor.Command,\n Tool = Editor.Tool,\n registerTool = EditorUtils.registerTool,\n loadingOverlay = '
    ';\n\n var ImportCommand = Command.extend({\n exec: function() {\n (this.editor._uploadWidget || this._initializeUploadWidget()).element.click();\n },\n\n _initializeUploadWidget: function() {\n var cmd = this;\n var editor = cmd.editor;\n var importOptions = editor.options[\"import\"];\n var upload = $('').kendoUpload({\n success: cmd._onUploadSuccess.bind(cmd),\n progress: cmd._onUploadProgress.bind(cmd),\n select: cmd._onUploadSelect.bind(cmd),\n error: cmd._onUploadError.bind(cmd),\n complete: cmd._onUploadComplete.bind(cmd),\n showFileList: false,\n multiple: false,\n async: {\n saveUrl: importOptions.proxyURL,\n autoUpload: true,\n saveField: \"file\"\n },\n validation: {\n allowedExtensions: importOptions.allowedExtensions,\n maxFileSize: importOptions.maxFileSize\n }\n }).getKendoUpload();\n\n editor._uploadWidget = upload;\n\n return upload;\n },\n _onUploadComplete: function(ev) {\n this._trigger(\"complete\", ev);\n ev.sender.clearAllFiles();\n\n this._removeLoadingOverlay();\n },\n _onUploadSuccess: function(ev) {\n this.editor.value(ev.response.html.replace(/<\\/?body>/ig, \"\"));\n this._trigger(\"success\", ev);\n },\n _onUploadProgress: function(ev) {\n this._trigger(\"progress\", ev);\n },\n _onUploadSelect: function(ev) {\n this._trigger(\"select\", ev);\n if (!ev.files[0].validationErrors) {\n this._initLoadingOverlay();\n }\n },\n _onUploadError: function(ev) {\n this._trigger(\"error\", ev);\n },\n\n _trigger: function(eventType, uploadEvent) {\n var editor = this.editor;\n var importOptions = editor.options[\"import\"];\n if (typeof importOptions[eventType] === \"function\") {\n importOptions[eventType].call(editor, uploadEvent);\n }\n },\n\n _initLoadingOverlay: function() {\n var editable = this.editor.body;\n if (Editor.Dom.is(editable, \"body\")) {\n this._iframeWrapper = this._container =\n this.editor.wrapper.find(\"iframe\").parent()\n .css({ position: \"relative\" }).append(loadingOverlay);\n } else {\n this._container = $(editable).append(loadingOverlay);\n }\n\n kendo.ui.progress(this._container, true);\n },\n\n _removeLoadingOverlay: function() {\n kendo.ui.progress(this._container, false);\n $(this._iframeWrapper).css({\n position: \"\"\n });\n\n delete this._container;\n delete this._iframeWrapper;\n }\n });\n\n extend(Editor, {\n ImportCommand: ImportCommand\n });\n\n registerTool(\"import\", new Tool({\n command: ImportCommand,\n ui: {\n showText: \"both\"\n }\n }));\n\n }(window.kendo.jQuery));\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n editorNS = kendo.ui.editor,\n Command = editorNS.Command,\n GenericCommand = editorNS.GenericCommand,\n EditorUtils = editorNS.EditorUtils,\n registerTool = EditorUtils.registerTool,\n Tool = editorNS.Tool,\n RestorePoint = editorNS.RestorePoint,\n extend = $.extend;\n\n var InsertHtmlCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n\n this.managesUndoRedo = true;\n },\n\n exec: function() {\n var editor = this.editor;\n var options = this.options;\n var range = options.range;\n var body = editor.body;\n var startRestorePoint = new RestorePoint(range, body);\n var html = options.html || options.value || '';\n\n editor.selectRange(range);\n\n editor.clipboard.paste(html, options);\n\n if (options.postProcess) {\n options.postProcess(editor, editor.getRange());\n }\n\n var genericCommand = new GenericCommand(startRestorePoint, new RestorePoint(editor.getRange(), body));\n genericCommand.editor = editor;\n editor.undoRedoStack.push(genericCommand);\n\n editor.focus();\n }\n });\n\n var InsertHtmlTool = Tool.extend({\n initialize: function(ui, editor) {\n var options = this.options,\n dataSource = options.items ? options.items : editor.options.insertHtml,\n component = ui.getKendoDropDownList();\n\n if (!component) {\n return;\n }\n\n component.one(\"open\", () => {\n var optionLabel = component.list.parent().find(\".k-list-optionlabel\");\n\n if (optionLabel.length) {\n optionLabel.remove();\n }\n });\n\n component.setOptions({\n dataSource: dataSource,\n optionLabel: editor.options.messages.insertHtml\n });\n component.bind(\"change\", () => {\n Tool.exec(editor, 'insertHtml', component.value());\n });\n },\n\n command: function(commandArguments) {\n return new InsertHtmlCommand(commandArguments);\n },\n\n update: function(ui) {\n var component = ui.data(\"kendoDropDownList\");\n component.close();\n component.value(null);\n }\n });\n\n extend(editorNS, {\n InsertHtmlCommand: InsertHtmlCommand,\n InsertHtmlTool: InsertHtmlTool\n });\n\n registerTool(\"insertHtml\", new InsertHtmlTool({\n ui: {\n initialValue: \"Insert HTML\",\n type: \"component\",\n component: \"DropDownList\",\n componentOptions: {\n dataTextField: \"text\",\n dataValueField: \"value\",\n autoSize: true,\n highlightFirst: false\n },\n overflow: \"never\"\n }\n }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n Command = Editor.Command,\n Tool = Editor.Tool,\n registerTool = EditorUtils.registerTool,\n defaultExportAsItems = [\n { text: 'Docx', value: 'docx' },\n { text: 'Rtf', value: 'rtf' },\n { text: 'Pdf', value: 'pdf' },\n { text: 'Html', value: 'html' },\n { text: 'Plain Text', value: 'txt' }\n ];\n\n var ExportAsCommand = Command.extend({\n init: function(options) {\n var cmd = this;\n cmd.options = options;\n Command.fn.init.call(cmd, options);\n cmd.attributes = null;\n cmd.exportType = options.exportType;\n },\n\n exec: function() {\n var cmd = this;\n var range = this.lockRange(true);\n cmd.postToProxy();\n cmd.releaseRange(range);\n },\n\n postToProxy: function() {\n this.generateForm().appendTo('body').submit().remove();\n },\n\n generateForm: function() {\n var cmd = this;\n var exportAsOptions = cmd.editor.options.exportAs;\n var form = $('
    ').attr({\n action: exportAsOptions && exportAsOptions.proxyURL || \"\",\n method: 'POST'\n });\n\n form.append([\n cmd.valueInput(),\n cmd.exportTypeInput(),\n cmd.fileNameInput(),\n cmd.antiForgeryInput()\n ]);\n\n return form;\n },\n\n valueInput: function() {\n var editor = this.editor;\n return $('').attr({\n value: editor.encodedValue(),\n name: 'value',\n type: 'hidden'\n });\n },\n\n exportTypeInput: function() {\n var cmd = this;\n return $('').attr({\n value: cmd.exportType,\n name: 'exportType',\n type: 'hidden'\n });\n\n },\n\n fileNameInput: function() {\n var editor = this.editor;\n var exportAsOptions = editor.options.exportAs;\n var fileName = exportAsOptions && exportAsOptions.fileName || editor.element.attr(\"id\") || \"editor\";\n return $('').attr({\n value: fileName,\n name: 'fileName',\n type: 'hidden'\n });\n },\n\n antiForgeryInput: function() {\n var csrf_param = $(\"meta[name=csrf-param],meta[name=_csrf_header]\").attr(\"content\");\n\n return $(\"input[name^='__RequestVerificationToken']\").clone()\n .add($(\"input[name^='\" + csrf_param + \"']\").clone());\n }\n });\n\n var ExportAsTool = Tool.extend({\n init: function(options) {\n var tool = this;\n Tool.fn.init.call(tool, kendo.deepExtend({}, tool.options, options));\n tool.type = 'kendoDropDownList';\n },\n\n options: {\n items: defaultExportAsItems\n },\n\n command: function(args) {\n var value = args.value;\n return new Editor.ExportAsCommand({\n range: args.range,\n exportType: value.exportType\n });\n },\n\n initialize: function(ui, editor) {\n var tool = this,\n component = ui.getKendoDropDownList();\n\n tool.editor = editor;\n\n component.bind(\"change\", this.changeHandler.bind(this));\n },\n\n changeHandler: function(e) {\n this._exec(e.sender.value());\n e.sender.value(null);\n e.sender.wrapper.find(\".k-export-tool-text\").text(kendo.htmlEncode(this.editor.options.messages.exportAs));\n },\n\n update: function(ui, editor) {\n var component = ui.data(\"kendoDropDownList\");\n\n component.close();\n component.value(null);\n ui.closest(\".k-dropdownlist\").find(\".k-export-tool-text\").text(kendo.htmlEncode(this.editor.options.messages.exportAs));\n },\n\n _exec: function(value) {\n if (value) {\n Tool.exec(this.editor, this.options.name, { exportType: value } );\n }\n },\n\n destroy: function() {\n this._ancestor = null;\n }\n });\n\n extend(Editor, {\n ExportAsTool: ExportAsTool,\n ExportAsCommand: ExportAsCommand\n });\n\n registerTool('exportAs', new ExportAsTool({\n ui: {\n type: \"component\",\n overflow: \"never\",\n component: \"DropDownList\",\n componentOptions: {\n dataTextField: \"text\",\n dataValueField: \"value\",\n valuePrimitive: true,\n value: null,\n width: \"140px\",\n highlightFirst: false,\n autoWidth: true,\n itemTemplate: (data) => `${data.text}`,\n icon: \"export\",\n valueTemplate: () => `${kendo.ui.icon({ icon: \"export\", iconClass: \"k-button-icon\" })}`\n }\n }\n }));\n\n }(window.kendo.jQuery));\n\n (function($, undefined$1) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n extend = $.extend,\n Editor = kendo.ui.editor,\n dom = Editor.Dom,\n EditorUtils = Editor.EditorUtils,\n registerTool = EditorUtils.registerTool,\n Command = Editor.Command,\n Tool = Editor.Tool,\n RangeUtils = Editor.RangeUtils,\n blockElements = dom.blockElements,\n BlockFormatFinder = Editor.BlockFormatFinder,\n BlockFormatter = Editor.BlockFormatter;\n\n function indent(node, value) {\n var isRtl = $(node).css(\"direction\") == \"rtl\",\n indentDirection = isRtl ? \"Right\" : \"Left\",\n property = dom.name(node) != \"td\" ? \"margin\" + indentDirection : \"padding\" + indentDirection;\n if (value === undefined$1) {\n return node.style[property] || 0;\n } else {\n if (value > 0) {\n node.style[property] = value + \"px\";\n } else {\n node.style[property] = \"\";\n\n if (!node.style.cssText) {\n node.removeAttribute(\"style\");\n }\n }\n }\n }\n\n var IndentFormatter = Class.extend({\n init: function() {\n this.finder = new BlockFormatFinder([{ tags: dom.blockElements }]);\n },\n\n apply: function(nodes) {\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n var formatNodes = this.finder.findSuitable(nodes),\n targets = [],\n i, len, formatNode, parentList, sibling;\n\n formatNodes = this.mapImmutables(formatNodes);\n\n if (formatNodes.length) {\n for (i = 0, len = formatNodes.length; i < len; i++) {\n if (dom.is(formatNodes[i], \"li\")) {\n if (!$(formatNodes[i]).index()) {\n targets.push(formatNodes[i].parentNode);\n } else if ($.inArray(formatNodes[i].parentNode, targets) < 0) {\n targets.push(formatNodes[i]);\n }\n } else {\n targets.push(formatNodes[i]);\n }\n }\n\n while (targets.length) {\n formatNode = targets.shift();\n if (dom.is(formatNode, \"li\")) {\n parentList = formatNode.parentNode;\n sibling = $(formatNode).prev(\"li\");\n var siblingList = sibling.find(\"ul,ol\").last();\n\n var nestedList = $(formatNode).children(\"ul,ol\")[0];\n\n if (nestedList && sibling[0]) {\n if (siblingList[0]) {\n siblingList.append(formatNode);\n siblingList.append($(nestedList).children());\n dom.remove(nestedList);\n } else {\n sibling.append(nestedList);\n nestedList.insertBefore(formatNode, nestedList.firstChild);\n }\n } else {\n nestedList = sibling.children(\"ul,ol\")[0];\n if (!nestedList) {\n nestedList = dom.create(formatNode.ownerDocument, dom.name(parentList), this.getListTypeAttr(parentList));\n sibling.append(nestedList);\n }\n\n while (formatNode && formatNode.parentNode == parentList) {\n nestedList.appendChild(formatNode);\n formatNode = targets.shift();\n }\n }\n } else {\n var marginLeft = parseInt(indent(formatNode), 10) + 30;\n indent(formatNode, marginLeft);\n\n for (var targetIndex = 0; targetIndex < targets.length; targetIndex++) {\n if ($.contains(formatNode, targets[targetIndex])) {\n targets.splice(targetIndex, 1);\n }\n }\n }\n }\n } else {\n var formatter = new BlockFormatter([{ tags: [\"p\"] }], { style: { marginLeft: 30 } });\n\n formatter.apply(nodes);\n }\n },\n\n getListTypeAttr: function(list) {\n var type = list.getAttribute(\"type\");\n var styleType = list.style.listStyleType;\n\n return type ? { type: type } : { style: { listStyleType: styleType } };\n },\n\n mapImmutables: function(nodes) {\n if (!this.immutables) {\n return nodes;\n } else {\n var immutables = [];\n return $.map(nodes, function(node) {\n var immutable = Editor.Immutables.immutableParent(node);\n if (immutable) {\n if ($.inArray(immutable, immutables) === -1) {\n immutables.push(immutable);\n } else {\n return null;\n }\n }\n return immutable || node;\n });\n }\n },\n\n remove: function(nodes) {\n nodes = dom.filterBy(nodes, dom.htmlIndentSpace, true);\n var formatNodes = this.finder.findSuitable(nodes),\n targetNode, i, len, list, listParent, siblings,\n formatNode, marginLeft;\n\n formatNodes = this.mapImmutables(formatNodes);\n\n for (i = 0, len = formatNodes.length; i < len; i++) {\n formatNode = $(formatNodes[i]);\n\n if (formatNode.is(\"li\")) {\n list = formatNode.parent();\n listParent = list.parent();\n // listParent will be ul or ol in case of invalid dom -
    \n if (listParent.is(\"li,ul,ol\") && !indent(list[0])) {\n // skip already processed nodes\n if (targetNode && $.contains(targetNode, listParent[0])) {\n continue;\n }\n\n siblings = formatNode.nextAll(\"li\");\n if (siblings.length) {\n $(list[0].cloneNode(false)).appendTo(formatNode).append(siblings);\n }\n\n if (listParent.is(\"li\")) {\n formatNode.insertAfter(listParent);\n } else {\n formatNode.appendTo(listParent);\n }\n\n if (!list.children(\"li\").length) {\n list.remove();\n }\n\n continue;\n } else {\n if (targetNode == list[0]) {\n // removing format on sibling LI elements\n continue;\n }\n targetNode = list[0];\n }\n } else {\n targetNode = formatNodes[i];\n }\n\n marginLeft = parseInt(indent(targetNode), 10) - 30;\n indent(targetNode, marginLeft);\n }\n }\n\n });\n\n var IndentCommand = Command.extend({\n init: function(options) {\n var that = this;\n options.formatter = /** @ignore */ {\n toggle: (function(range) {\n var indentFormatter = new IndentFormatter();\n indentFormatter.immutables = this.editor && this.editor.options.immutables;\n indentFormatter.apply(RangeUtils.nodes(range));\n }).bind(that)\n };\n Command.fn.init.call(this, options);\n }\n });\n\n var OutdentCommand = Command.extend({\n init: function(options) {\n var that = this;\n options.formatter = {\n toggle: (function(range) {\n var indentFormatter = new IndentFormatter();\n indentFormatter.immutables = this.editor && this.editor.options.immutables;\n indentFormatter.remove(RangeUtils.nodes(range));\n }).bind(that)\n };\n Command.fn.init.call(this, options);\n }\n });\n\n var OutdentTool = Tool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n\n this.finder = new BlockFormatFinder([{ tags: blockElements }]);\n },\n\n initialize: function(ui, editor) {\n $.extend(this.options, {\n immutables: editor && editor.options.immutables\n });\n },\n\n update: function(ui, nodes) {\n var suitableNodes = this.finder.findSuitable(nodes),\n toolbar = ui.closest(\".k-toolbar\").data(\"kendoToolBar\"),\n isOutdentable, listParentsCount, i, len, suitable, immutableParent;\n\n for (i = 0, len = suitableNodes.length; i < len; i++) {\n suitable = suitableNodes[i];\n\n if (this.options.immutables) {\n immutableParent = Editor.Immutables.immutableParent(suitable);\n\n if (immutableParent) {\n suitable = immutableParent;\n }\n }\n\n isOutdentable = indent(suitable);\n\n if (!isOutdentable) {\n listParentsCount = $(suitable).parents(\"ul,ol\").length;\n isOutdentable = (dom.is(suitable, \"li\") && (listParentsCount > 1 || indent(suitable.parentNode))) ||\n (dom.ofType(suitable, [\"ul\",\"ol\"]) && listParentsCount > 0);\n }\n\n if (isOutdentable) {\n toolbar.enable(ui, true);\n return;\n }\n }\n\n toolbar.enable(ui, false);\n }\n });\n\n extend(Editor, {\n IndentFormatter: IndentFormatter,\n IndentCommand: IndentCommand,\n OutdentCommand: OutdentCommand,\n OutdentTool: OutdentTool\n });\n\n registerTool(\"indent\", new Tool({ command: IndentCommand }));\n registerTool(\"outdent\", new OutdentTool({ command: OutdentCommand, ui: { enable: false } }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n extend = $.extend,\n editorNS = kendo.ui.editor,\n dom = editorNS.Dom,\n Command = editorNS.Command,\n Tool = editorNS.Tool,\n BlockFormatter = editorNS.BlockFormatter,\n normalize = dom.normalize,\n RangeUtils = editorNS.RangeUtils,\n registerTool = editorNS.EditorUtils.registerTool;\n\n var ParagraphCommand = Command.extend({\n init: function(options) {\n this.options = options;\n Command.fn.init.call(this, options);\n },\n\n _insertMarker: function(doc, range) {\n var marker = dom.create(doc, 'a'), container;\n marker.className = \"k-marker\";\n\n range.insertNode(marker);\n\n if (!marker.parentNode) {\n // inserting paragraph in Firefox full body range\n container = range.commonAncestorContainer;\n container.innerHTML = \"\";\n container.appendChild(marker);\n }\n\n normalize(marker.parentNode);\n\n return marker;\n },\n\n _moveFocus: function(range, candidate) {\n if (dom.isEmpty(candidate)) {\n range.setStartBefore(candidate);\n } else {\n range.selectNodeContents(candidate);\n\n var focusNode = RangeUtils.textNodes(range)[0];\n\n if (!focusNode) {\n while (candidate.childNodes.length && !dom.is(candidate.firstChild, \"br\")) {\n candidate = candidate.firstChild;\n }\n\n focusNode = candidate;\n }\n\n if (dom.isEmpty(focusNode)) {\n range.setStartBefore(focusNode);\n } else {\n if (dom.emptyNode(focusNode)) {\n focusNode.innerHTML = \"\\ufeff\";\n }\n var startNode = focusNode.firstChild || focusNode;\n if (dom.isDataNode(startNode)) {\n range.setStart(startNode, 0);\n } else {\n range.setStartBefore(startNode);\n }\n }\n }\n },\n\n shouldTrim: function(range) {\n var blocks = 'p,h1,h2,h3,h4,h5,h6'.split(','),\n startInBlock = dom.parentOfType(range.startContainer, blocks),\n endInBlock = dom.parentOfType(range.endContainer, blocks);\n return (startInBlock && !endInBlock) || (!startInBlock && endInBlock);\n },\n\n _blankAfter: function(node) {\n while (node && (dom.isMarker(node) || dom.stripBom(node.nodeValue) === \"\")) {\n node = node.nextSibling;\n }\n\n return !node;\n },\n\n exec: function() {\n var range = this.getRange(),\n doc = RangeUtils.documentFromRange(range),\n parent, previous, next,\n emptyParagraphContent = editorNS.emptyElementContent,\n paragraph, marker, li, heading, tableNode, rng,\n shouldTrim;\n\n this.expandImmutablesIn(range);\n\n shouldTrim = this.shouldTrim(range);\n\n range.deleteContents();\n marker = this._insertMarker(doc, range);\n\n dom.stripBomNode(marker.previousSibling);\n dom.stripBomNode(marker.nextSibling);\n\n li = dom.closestEditableOfType(marker, ['li']);\n heading = dom.closestEditableOfType(marker, 'h1,h2,h3,h4,h5,h6'.split(','));\n tableNode = dom.is(marker.parentNode, 'table') && marker.parentNode;\n\n if (li) {\n // hitting 'enter' in empty li\n if (dom.emptyNode(li)) {\n paragraph = dom.create(doc, 'p');\n\n if (dom.next(li)) {\n rng = range.cloneRange();\n rng.selectNode(li);\n\n RangeUtils.split(rng, li.parentNode);\n }\n\n var br = $(\"br\", li);\n if (br.length == 1) {\n br.remove();\n }\n\n var parentNode = li.parentNode;\n var parentChildrenLength = li.parentNode.children.length;\n var firstChild = parentChildrenLength > 1 && li.childNodes.length == 1 && li.children[0];\n\n dom.insertAfter(paragraph, parentNode);\n dom.remove(parentChildrenLength == 1 ? li.parentNode : li);\n\n if (firstChild && firstChild !== marker) {\n paragraph.appendChild(firstChild);\n paragraph.appendChild(marker);\n } else {\n paragraph.innerHTML = emptyParagraphContent;\n }\n next = paragraph;\n }\n } else if (heading && this._blankAfter(marker)) {\n paragraph = this._insertParagraphAfter(heading);\n dom.remove(marker);\n next = paragraph;\n } else if (tableNode) {\n paragraph = this._insertParagraphAfter(tableNode);\n dom.remove(marker);\n next = paragraph;\n }\n\n if (!next) {\n if (!(li || heading)) {\n new BlockFormatter([{ tags: ['p'] }]).apply([marker]);\n }\n\n range.selectNode(marker);\n\n parent = dom.parentOfType(marker, [li ? 'li' : heading ? dom.name(heading) : 'p']);\n\n RangeUtils.split(range, parent, shouldTrim);\n\n previous = parent.previousSibling;\n\n if (dom.is(previous, 'li') && previous.firstChild && !dom.is(previous.firstChild, 'br')) {\n previous = previous.firstChild;\n }\n\n next = parent.nextSibling;\n\n this.clean(previous, { links: true });\n this.clean(next, { links: true });\n\n if (dom.is(next, 'li') && next.firstChild && !dom.is(next.firstChild, 'br')) {\n next = next.firstChild;\n }\n\n dom.remove(parent);\n\n // normalize updates the caret display in Gecko\n normalize(previous);\n }\n\n normalize(next);\n\n this._moveFocus(range, next);\n\n range.collapse(true);\n\n dom.scrollTo(next, true);\n\n RangeUtils.selectRange(range);\n },\n\n _insertParagraphAfter: function(node) {\n var range = this.getRange();\n var doc = RangeUtils.documentFromRange(range);\n var emptyElementContent = editorNS.emptyElementContent;\n var paragraph = dom.create(doc, 'p');\n\n dom.insertAfter(paragraph, node);\n paragraph.innerHTML = emptyElementContent;\n\n return paragraph;\n },\n\n clean: function(node, options) {\n var root = node;\n\n if (node.firstChild && dom.is(node.firstChild, 'br')) {\n dom.remove(node.firstChild);\n }\n\n if (dom.isDataNode(node) && !node.nodeValue) {\n node = node.parentNode;\n }\n\n if (node) {\n var siblings = false;\n while (node.firstChild && node.firstChild.nodeType == 1) {\n siblings = siblings || (dom.significantNodes(node.childNodes).length > 1);\n node = node.firstChild;\n }\n\n if (!dom.isEmpty(node) && node.className != \"k-br\" && /^\\s*$/.test(node.innerHTML) && !siblings) {\n $(root).find(\".k-br\").remove();\n node.innerHTML = editorNS.emptyElementContent;\n }\n\n if (options && options.links) {\n while (node != root) {\n if (dom.is(node, \"a\") && dom.emptyNode(node)) {\n dom.unwrap(node);\n break;\n }\n node = node.parentNode;\n }\n }\n }\n }\n });\n\n var NewLineCommand = Command.extend({\n init: function(options) {\n this.options = options;\n Command.fn.init.call(this, options);\n },\n\n exec: function() {\n var range = this.getRange();\n this.expandImmutablesIn(range);\n\n var br = dom.create(RangeUtils.documentFromRange(range), 'br');\n var node = range.startContainer;\n var filler;\n var browser = kendo.support.browser;\n var oldIE = browser.msie && browser.version < 11;\n var tableNode = dom.is(node, 'table') && node;\n var kbrParent;\n\n range.deleteContents();\n if (tableNode) {\n dom.insertAfter(br, tableNode);\n } else {\n kbrParent = $(node).closest('.k-br');\n range.insertNode(br);\n\n if (kbrParent.length) {\n // pressing enter in an k-br node\n dom.unwrap(kbrParent[0]);\n }\n }\n\n normalize(br.parentNode);\n\n if (!oldIE && (!br.nextSibling || dom.isWhitespace(br.nextSibling))) {\n // Gecko and WebKit cannot put the caret after only one br.\n if (!!br.nextSibling && dom.isWhitespace(br.nextSibling)) {\n $(br.nextSibling).remove();\n }\n filler = br.cloneNode(true);\n filler.className = 'k-br';\n dom.insertAfter(filler, br);\n }\n\n range.setStartAfter(br);\n range.collapse(true);\n\n dom.scrollTo(br.nextSibling || br, true);\n\n RangeUtils.selectRange(range);\n }\n });\n\n extend(editorNS, {\n ParagraphCommand: ParagraphCommand,\n NewLineCommand: NewLineCommand\n });\n\n registerTool(\"insertLineBreak\", new Tool({ key: 13, shift: true, command: NewLineCommand }));\n registerTool(\"insertParagraph\", new Tool({ key: 13, command: ParagraphCommand }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n encode = kendo.htmlEncode,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n dom = Editor.Dom,\n registerTool = EditorUtils.registerTool,\n RangeUtils = Editor.RangeUtils,\n Command = Editor.Command,\n LinkFormatter = Editor.LinkFormatter,\n textNodes = RangeUtils.textNodes,\n keys = kendo.keys,\n KEDITORFILEURL = \"#k-editor-file-url\",\n KEDITORFILETEXT = \"#k-editor-file-text\",\n KEDITORFILETITLE = \"#k-editor-file-title\";\n\n var FileCommand = Command.extend({\n init: function(options) {\n var that = this;\n Command.fn.init.call(that, options);\n\n that.formatter = new LinkFormatter();\n\n that.async = true;\n that.attributes = {};\n },\n\n insertFile: function(file, range) {\n var attributes = this.attributes;\n var doc = RangeUtils.documentFromRange(range);\n\n if (attributes.href && attributes.href != \"http://\") {\n\n if (!file) {\n file = dom.create(doc, \"a\", { href: attributes.href });\n file.innerHTML = attributes.innerHTML;\n file.title = attributes.title;\n\n range.deleteContents();\n range.insertNode(file);\n\n if (!file.nextSibling) {\n dom.insertAfter(doc.createTextNode(\"\\ufeff\"), file);\n }\n\n range.setStartAfter(file);\n range.setEndAfter(file);\n RangeUtils.selectRange(range);\n return true;\n } else {\n dom.attr(file, attributes);\n }\n }\n\n return false;\n },\n\n redo: function() {\n var that = this,\n range = that.lockRange();\n\n this.formatter.apply(range, this.attributes);\n that.releaseRange(range);\n },\n\n exec: function() {\n var that = this,\n range = that.lockRange(),\n nodes = textNodes(range),\n applied = false,\n file = nodes.length ? this.formatter.finder.findSuitable(nodes[0]) : null,\n dialog,\n form,\n isIE = kendo.support.browser.msie,\n options = that.editor.options,\n messages = options.messages,\n fileBrowser = options.fileBrowser,\n showBrowser = !!(kendo.ui.FileBrowser && fileBrowser && fileBrowser.transport && fileBrowser.transport.read !== undefined$1),\n dialogOptions = {\n title: messages.insertFile,\n visible: false,\n resizable: showBrowser\n };\n\n this.expandImmutablesIn(range);\n\n function apply(e) {\n var element = dialog.element,\n href = element.find(KEDITORFILEURL).val().replace(/ /g, \"%20\"),\n innerHTML = element.find(KEDITORFILETEXT).val(),\n title = element.find(KEDITORFILETITLE).val();\n\n that.attributes = {\n href: href,\n innerHTML: innerHTML !== \"\" ? innerHTML : href,\n title: title\n };\n\n applied = that.insertFile(file, range);\n\n close(e);\n\n if (that.change) {\n that.change();\n }\n }\n\n function close(e) {\n e.preventDefault();\n form.destroy();\n dialog.destroy();\n\n dom.windowFromDocument(RangeUtils.documentFromRange(range)).focus();\n if (!applied) {\n that.releaseRange(range);\n }\n }\n\n function keyDown(e) {\n if (e.keyCode == keys.ENTER) {\n apply(e);\n } else if (e.keyCode == keys.ESC) {\n close(e);\n }\n }\n\n dialogOptions.close = close;\n\n if (showBrowser) {\n dialogOptions.width = 750;\n }\n dialogOptions.minWidth = 350;\n\n dialog = this.createDialog(\"
    \", dialogOptions).data(\"kendoWindow\");\n form = that._createForm(dialog, showBrowser);\n\n dialog.element.toggleClass(\"k-filebrowser-dialog\", showBrowser);\n dialog.wrapper\n .find(\".k-dialog-insert\").on(\"click\", apply).end()\n .find(\".k-dialog-close\").on(\"click\", close).end()\n .find(\".k-form-field input\").on(\"keydown\", keyDown).end()\n // IE < 8 returns absolute url if getAttribute is not used\n .find(KEDITORFILEURL).val(file ? file.getAttribute(\"href\", 2) : \"http://\").end()\n .find(KEDITORFILETEXT).val(file ? file.innerText : \"\").end()\n .find(KEDITORFILETITLE).val(file ? file.title : \"\").end();\n\n var element = dialog.element;\n if (showBrowser) {\n that._fileBrowser = new kendo.ui.FileBrowser(\n element.find(\".k-filebrowser\"),\n extend({}, fileBrowser)\n );\n\n that._fileBrowser.bind(\"change\", function(ev) {\n if (ev.selected.get(\"type\") === \"f\") {\n element.find(KEDITORFILEURL).val(this.value());\n }\n } );\n\n that._fileBrowser.bind(\"apply\", apply);\n }\n\n if (isIE) {\n var dialogHeight = element.closest(\".k-window\").height();\n element.css(\"max-height\", dialogHeight);\n }\n dialog.center().open();\n element.find(KEDITORFILEURL).trigger(\"focus\").select();\n },\n\n _createForm: function(dialog, showBrowser) {\n var that = this;\n var formElement = $(\"
    \").appendTo(dialog.element);\n var messages = that.editor.options.messages;\n\n var form = formElement.kendoForm({\n renderButtons: false,\n items: [\n {\n field: \"k-editor-file-url\",\n label: encode(messages.fileWebAddress),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-file-text\",\n label: encode(messages.fileText),\n editor: \"TextBox\"\n },\n {\n field: \"k-editor-file-title\",\n label: encode(messages.fileTitle),\n editor: \"TextBox\"\n }\n ]\n }).data(\"kendoForm\");\n\n if (showBrowser) {\n formElement.prepend($('
    '));\n }\n\n dialog.element.after($(that._actionButtonsTemplate({ messages, insertButtonIcon: \"file-add\", cancelButtonIcon: \"cancel-outline\" })));\n\n return form;\n }\n\n });\n\n kendo.ui.editor.FileCommand = FileCommand;\n\n registerTool(\"insertFile\", new Editor.Tool({ command: FileCommand }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n dom = Editor.Dom,\n RangeUtils = Editor.RangeUtils,\n Command = Editor.Command,\n\n NS = \"kendoEditor\",\n ACTIVESTATE = \"k-active\",\n SELECTEDSTATE = \"k-selected\",\n SCOPE = \"scope\",\n ROW = \"row\",\n COL = \"col\",\n ROWGROUP = \"rowgroup\",\n COLGROUP = \"colgroup\",\n COLSPAN = \"colspan\",\n ROWSPAN = \"rowspan\",\n TABLE = \"table\",\n THEAD = \"thead\",\n TBODY = \"tbody\",\n TR = \"tr\",\n TD = \"td\",\n TH = \"th\",\n\n Tool = Editor.Tool,\n InsertHtmlCommand = Editor.InsertHtmlCommand,\n BlockFormatFinder = Editor.BlockFormatFinder,\n BlockFormatTool = Editor.BlockFormatTool,\n FormatCommand = Editor.FormatCommand,\n registerTool = Editor.EditorUtils.registerTool,\n registerFormat = Editor.EditorUtils.registerFormat,\n formats = kendo.ui.Editor.fn.options.formats,\n getTouches = kendo.getTouches;\n var template = kendo.template;\n\n var columnTemplate = ({ width, content }) => `${content}`;\n\n var tableFormatFinder = new BlockFormatFinder([{ tags: [TABLE] }]);\n\n var TableCommand = InsertHtmlCommand.extend({\n init: function(options) {\n var o = $.extend({\n postProcess: this.postProcess,\n skipCleaners: true\n }, options || {});\n\n InsertHtmlCommand.fn.init.call(this, o);\n },\n _tableHtml: function(rows, columns) {\n rows = rows || 1;\n columns = columns || 1;\n var columnHtml = template(columnTemplate)({ width: 100 / columns, content: Editor.emptyTableCellContent });\n var rowHeight = 100 / rows;\n\n return \"\" +\n new Array(rows + 1).join(\n \"\" +\n new Array(columns + 1).join(columnHtml) +\n \"\") +\n \"
    \";\n },\n\n postProcess: function(editor, range) {\n var insertedTable = $(\"table[data-last]\", editor.document).removeAttr(\"data-last\");\n\n range.setStart(insertedTable.find(TD)[0], 0);\n range.collapse(true);\n\n editor.selectRange(range);\n },\n\n exec: function() {\n var options = this.options;\n options.html = this._tableHtml(options.rows, options.columns);\n\n InsertHtmlCommand.fn.exec.call(this);\n }\n });\n\n var PopupTool = Tool.extend({\n initialize: function(ui, editor) {\n var that = this;\n var btn = $(\"\");\n var popup = $(this.options.popupTemplate).appendTo(\"body\").kendoPopup({\n anchor: ui,\n copyAnchorStyles: false,\n open: this._open.bind(this),\n activate: this._activate.bind(this),\n close: this._close.bind(this)\n }).data(\"kendoPopup\");\n\n ui.on(\"click\", this._toggle.bind(this))\n .on(\"keydown\", this._keydown.bind(this));\n\n this._editor = editor;\n this._popup = popup;\n\n editor.tablePopup = this._popup;\n\n var tableWizard = new Editor.TableWizardTool({\n command: Editor.TableWizardCommand,\n insertNewTable: true\n });\n\n registerTool(\"tableWizardInsert\", tableWizard);\n\n btn.appendTo(popup.element);\n btn.kendoButton({\n icon: \"table-wizard\"\n });\n\n btn.on(\"click\", () => {\n that._editor.exec(\"tableWizardInsert\");\n });\n },\n\n popup: function() {\n return this._popup;\n },\n\n _activate: $.noop,\n\n _open: function() {\n this._popup.options.anchor.addClass(ACTIVESTATE);\n },\n\n _close: function() {\n this._popup.options.anchor.removeClass(ACTIVESTATE);\n },\n\n _keydown: function(e) {\n var that = this,\n keys = kendo.keys,\n key = e.keyCode;\n\n if (key == keys.ESC) {\n that._popup.close();\n } else if (key == keys.DOWN && e.altKey) {\n that._popup.open();\n that._setTableSize({ row: 1, col: 1 });\n } else if (key === keys.ENTER) {\n setTimeout(() => {\n that._setTableSize({ row: 1, col: 1 });\n });\n }\n },\n\n _toggle: function(e) {\n var button = $(e.target).closest(\".k-tool\");\n\n if (!button.hasClass(\"k-disabled\")) {\n this.popup().toggle();\n }\n },\n\n update: function(ui) {\n var popup = this.popup();\n\n if (popup.wrapper && popup.wrapper.css(\"display\") == \"block\") {\n popup.close();\n }\n\n ui.removeClass(\"k-hover\");\n },\n\n destroy: function() {\n if (this._popup) {\n this._popup.destroy();\n }\n }\n });\n\n var InsertTableTool = PopupTool.extend({\n init: function(options) {\n this.cols = 8;\n this.rows = 6;\n\n PopupTool.fn.init.call(this, $.extend(options, {\n command: TableCommand,\n popupTemplate:\n \"
    \" +\n \"
    \" +\n new Array(this.cols * this.rows + 1).join(\"\") +\n \"
    \" +\n \"
    \" +\n \"
    \"\n }));\n },\n\n _activate: function() {\n var that = this,\n element = that._popup.element,\n cells = element.find(\".k-ct-cell\"),\n firstCell = cells.eq(0),\n lastCell = cells.eq(cells.length - 1),\n start = kendo.getOffset(firstCell),\n end = kendo.getOffset(lastCell),\n cols = that.cols,\n rows = that.rows,\n cellWidth, cellHeight;\n\n element.find(\"*\").addBack().attr(\"unselectable\", \"on\");\n\n end.left += lastCell[0].offsetWidth;\n end.top += lastCell[0].offsetHeight;\n\n cellWidth = (end.left - start.left) / cols;\n cellHeight = (end.top - start.top) / rows;\n\n function tableFromLocation(e) {\n var w = $(window);\n return {\n row: Math.floor((e.clientY + w.scrollTop() - start.top) / cellHeight) + 1,\n col: Math.floor((e.clientX + w.scrollLeft() - start.left) / cellWidth) + 1\n };\n }\n\n element.autoApplyNS(NS)\n .on(\"mousemove\", \".k-ct-cell\", function(e) {\n that._setTableSize(tableFromLocation(e));\n })\n .on(\"mouseleave\", \".k-ct-cell\", function() {\n that._setTableSize();\n })\n .on(\"down\", \".k-ct-cell\", function(e) {\n e.preventDefault();\n var touch = getTouches(e)[0];\n that._exec(tableFromLocation(touch.location));\n });\n },\n\n _valid: function(size) {\n return size && size.row > 0 && size.col > 0 && size.row <= this.rows && size.col <= this.cols;\n },\n\n _exec: function(size) {\n if (this._valid(size)) {\n this._editor.exec(\"createTable\", {\n rows: size.row,\n columns: size.col\n });\n this._popup.close();\n }\n },\n\n _setTableSize: function(size) {\n var element = this._popup.element;\n var status = element.find(\".k-status\");\n var cells = element.find(\".k-ct-cell\");\n var cols = this.cols;\n var messages = this._editor.options.messages;\n\n if (this._valid(size)) {\n status.text(kendo.format(messages.createTableHint, size.row, size.col));\n\n cells.each(function(i) {\n $(this).toggleClass(\n SELECTEDSTATE,\n i % cols < size.col && i / cols < size.row\n );\n });\n } else {\n status.text(messages.createTable);\n cells.removeClass(SELECTEDSTATE);\n }\n },\n\n _keydown: function(e) {\n var initiallyVisible = this._popup.visible();\n\n PopupTool.fn._keydown.call(this, e);\n\n if (!this._popup.visible()) {\n return;\n }\n\n var keys = kendo.keys;\n var key = e.keyCode;\n var cells = this._popup.element.find(\".k-ct-cell\");\n var focus = Math.max(cells.filter(\".k-selected\").last().index(), 0);\n var selectedRows = Math.floor(focus / this.cols);\n var selectedColumns = focus % this.cols;\n\n var changed = false,\n button;\n\n if (key == keys.DOWN && !e.altKey) {\n changed = true;\n selectedRows++;\n } else if (key == keys.UP) {\n changed = true;\n selectedRows--;\n } else if (key == keys.RIGHT) {\n changed = true;\n selectedColumns++;\n } else if (key == keys.LEFT) {\n changed = true;\n selectedColumns--;\n } else if (key == keys.TAB) {\n button = this._popup.element.find(\".k-button\");\n\n if (button.length > 0) {\n changed = true;\n button.trigger(\"focus\");\n }\n }\n\n var tableSize = {\n row: Math.max(1, Math.min(this.rows, selectedRows + 1)),\n col: Math.max(1, Math.min(this.cols, selectedColumns + 1))\n };\n\n if (key == keys.ENTER && initiallyVisible) {\n this._exec(tableSize);\n } else {\n this._setTableSize(tableSize);\n }\n\n if (changed) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n },\n\n _open: function() {\n var messages = this._editor.options.messages;\n\n PopupTool.fn._open.call(this);\n\n this.popup().element\n .find(\".k-status\").text(messages.createTable).end()\n .find(\".k-ct-cell\").removeClass(SELECTEDSTATE);\n },\n\n _close: function() {\n PopupTool.fn._close.call(this);\n this.popup().element.off(\".\" + NS);\n }\n });\n\n var TableModificationCommand = Command.extend({\n undo: function() {\n var point = this.restorePoint;\n point.restoreHtml();\n\n $(this.editor.body).find(\".k-element-resize-handle-wrapper\")\n .each(function(index,el) {\n el.remove();\n });\n\n this.editor.selectRange(point.toRange());\n },\n _clearColIndexAttr: function(table) {\n dom.clearTableMappings(table, \"col-index\");\n },\n _mapColIndices: function(table) {\n dom.reMapTableColumns(table, \"col-index\");\n },\n _findRowSpanCell: function(parent, rowIndex, colIndex) {\n var row, cell;\n\n for (var i = rowIndex; i >= 0; i--) {\n row = parent.rows[i];\n cell = $(row).find(\"[col-index=\" + colIndex + \"]\");\n\n if (cell.length) {\n return cell;\n }\n }\n },\n _resetElementResizing: function(editor) {\n editor._destroyResizings();\n editor._initializeColumnResizing();\n editor._initializeRowResizing();\n editor._initializeElementResizing();\n },\n _findNextTdInRow: function(row, colIndex) {\n var lastTd = row.find(\"td:last-child\"),\n lastIndex = parseInt(lastTd.attr(\"col-index\"), 10) + lastTd.prop(\"colSpan\") - 1,\n td;\n\n for (var i = colIndex; i <= lastIndex; i++) {\n td = row.find(\"[col-index=\" + i + \"]\");\n if (td.length) {\n return td;\n }\n }\n },\n _adjustColgroups: function(row, table) {\n var colElements = table.getElementsByTagName(COL),\n colgroupElements = table.getElementsByTagName(COLGROUP),\n cells = row.cells,\n numberOfCells = cells.length,\n i, colgroup, cell;\n\n while (colElements.length > 0) {\n colElements[0].remove();\n }\n while (colgroupElements.length > 0) {\n colgroupElements[0].remove();\n }\n\n for (i = numberOfCells - 1; i >= 0; i--) {\n cell = cells[i];\n if (cell.getAttribute(SCOPE) === COLGROUP) {\n colgroup = dom.createEmptyNode(this.editor.document, COLGROUP);\n colgroup.setAttribute(\"span\", cell.getAttribute(COLSPAN));\n table.prepend(colgroup);\n } else {\n table.prepend(dom.createEmptyNode(this.editor.document, COL));\n }\n }\n },\n _associateHeaderIds: function(table) {\n dom.clearTableMappings(table, \"col-index\");\n dom.reMapTableColumns(table, \"col-index\");\n $(table).find(\"th, td\").removeAttr(\"id headers\");\n dom.associateWithIds(table);\n },\n _getNumberOfColumns: function(table) {\n return dom._getNumberOfColumns(table, \"td, th\");\n }\n });\n\n var InsertRowCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(true),\n td = dom.closest(range.endContainer, [TD, TH]),\n table = dom.closest(td, TABLE),\n position = this.options.position || \"after\",\n cellCount, row, cell,\n newRow, rowIndex, rowSpanIndex, createdCell;\n\n if (!table || (this.immutables() && Editor.Immutables.immutableParent(td))) {\n this.releaseRange(range);\n return;\n }\n\n this._mapColIndices(table);\n\n row = td.parentNode;\n rowIndex = dom.findNodeIndex(row, true);\n\n if (td.rowSpan > 1 && position === \"after\") {\n row = table.rows[rowIndex + td.rowSpan - 1];\n }\n\n cellCount = this._getNumberOfColumns(table);\n newRow = row.cloneNode(true);\n $(newRow).empty();\n\n for (var i = 0; i < cellCount; i = i + cell.prop(\"colSpan\")) {\n cell = $(row).find(\"[col-index=\" + i + \"]\");\n\n if (cell.length) {\n if (cell.prop(\"rowSpan\") > 1 && position === \"after\" && cell) {\n cell.attr(ROWSPAN, cell.prop(\"rowSpan\") + 1);\n } else {\n this._appendCell(newRow, cell);\n }\n } else {\n rowIndex = dom.findNodeIndex(row, true);\n cell = this._findRowSpanCell(row.parentElement, rowIndex, i);\n rowSpanIndex = cell.closest(TR).index();\n\n if (rowSpanIndex + cell.prop(\"rowSpan\") - 1 === rowIndex && position === \"after\") {\n this._appendCell(newRow, cell);\n } else {\n cell.attr(ROWSPAN, cell.prop(\"rowSpan\") + 1);\n }\n }\n\n createdCell = $(newRow).find(\"[col-index=\" + i + \"]\");\n if (createdCell.attr(SCOPE) === ROWGROUP && !createdCell.attr(ROWSPAN)) {\n createdCell.attr(SCOPE, ROW);\n }\n }\n\n if (position == \"before\") {\n dom.insertBefore(newRow, row);\n } else {\n dom.insertAfter(newRow, row);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n\n this._resetElementResizing(this.editor);\n },\n _appendCell: function(row, cell) {\n var newCell;\n\n newCell = cell.clone();\n newCell.html(Editor.emptyTableCellContent);\n newCell.removeAttr(ROWSPAN);\n newCell.appendTo(row);\n }\n });\n\n var InsertColumnCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(true),\n td = dom.closest(range.endContainer, [TD, TH]),\n table = dom.closest(td, TABLE),\n colElements = table.getElementsByTagName(COL),\n colgroupElements = table.getElementsByTagName(COLGROUP),\n columnIndex,\n i,\n rows = table && table.rows,\n cell,\n newCell,\n position = this.options.position || \"after\";\n\n\n if (!td || (this.immutables() && Editor.Immutables.immutableParent(td))) {\n this.releaseRange(range);\n return;\n }\n\n this._mapColIndices(table);\n\n columnIndex = parseInt(td.getAttribute(\"col-index\"),10);\n\n if (td.colSpan > 1 && position === \"after\") {\n td.setAttribute(\"col-index\", columnIndex + td.colSpan - 1);\n columnIndex = columnIndex + td.colSpan - 1;\n }\n\n for (i = 0; i < rows.length; i++) {\n cell = this._processForColSpan(rows[i], columnIndex, position, td);\n\n if (!cell) {\n continue;\n }\n\n newCell = cell.cloneNode();\n newCell.innerHTML = Editor.emptyTableCellContent;\n newCell.removeAttribute(COLSPAN);\n\n if (newCell.getAttribute(SCOPE) && newCell.getAttribute(SCOPE) === COLGROUP) {\n newCell.setAttribute(SCOPE, COL);\n }\n\n if (position == \"before\") {\n dom.insertBefore(newCell, cell);\n } else {\n dom.insertAfter(newCell, cell);\n }\n\n this._resizeCells(newCell, cell);\n }\n\n if (colElements.length > 0 || colgroupElements.length > 0) {\n this._adjustColgroups(rows[0], table);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n\n this._resetElementResizing(this.editor);\n },\n _processForColSpan: function(row, columnIndex, position, selectedCell) {\n var cell,\n colSpanEffect,\n index = columnIndex - 1;\n\n cell = $(row).find(\"[col-index=\" + columnIndex + \"]\")[0];\n\n if (cell && cell.colSpan > 1 && position === \"after\" && cell !== selectedCell) {\n cell.colSpan += 1;\n return;\n }\n\n if (cell) {\n return cell;\n }\n\n for (index; index >= 0; index--) {\n cell = $(row).find(\"[col-index=\" + index + \"]\")[0];\n\n if (cell && cell.colSpan > 1) {\n break;\n }\n }\n\n if (!cell) {\n return;\n }\n\n colSpanEffect = parseInt(cell.getAttribute(\"col-index\"),10) + cell.colSpan - 1;\n\n if (colSpanEffect === columnIndex && position === \"after\") {\n return cell;\n } else if (columnIndex <= colSpanEffect) {\n cell.setAttribute(COLSPAN, cell.colSpan + 1);\n }\n },\n _resizeCells: function(newCell, cell) {\n var width = newCell.style.width,\n parsedWidth, unit, calculatedWidth;\n\n if (!width) {\n return;\n }\n\n parsedWidth = parseFloat(width);\n unit = width.slice(parsedWidth.toString().length);\n calculatedWidth = (parsedWidth / 2) + unit;\n\n newCell.style.width = calculatedWidth;\n cell.style.width = calculatedWidth;\n }\n });\n\n var DeleteRowCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange();\n var rows = RangeUtils.mapAll(range, function(node) {\n return $(node).closest(TR)[0];\n });\n var td = dom.closest(range.endContainer, [TD, TH]);\n var row = rows[0];\n var rowSpan = td ? td.rowSpan : 1;\n var rowIndex = $(rows[0]).index();\n var table = dom.closest(row, TABLE);\n var rowParent = row.parentElement;\n var focusElement;\n\n if (!table || (this.immutables() && Editor.Immutables.immutableParent(row))) {\n this.releaseRange(range);\n return;\n }\n\n for (var x = 0; x < rowSpan; x++) {\n if (rows.indexOf(rowParent.rows[rowIndex + x]) < 0) {\n rows.push(rowParent.rows[rowIndex + x]);\n }\n }\n\n if (table.rows.length <= rows.length) {\n focusElement = dom.next(table);\n if (!focusElement || dom.insignificant(focusElement)) {\n focusElement = dom.prev(table);\n }\n\n if (focusElement && focusElement.rows) {\n focusElement = focusElement.rows[0].cells[0];\n }\n\n dom.remove(table);\n this._resetElementResizing(this.editor);\n } else if (rowParent.rows.length <= rows.length) {\n focusElement = rowParent.nextSibling;\n\n if (!focusElement) {\n focusElement = rowParent.previousSibling;\n }\n\n dom.remove(rowParent);\n } else {\n this._mapColIndices(table);\n\n for (var i = 0; i < rows.length; i++) {\n row = rows[i];\n dom.removeTextSiblings(row);\n focusElement = dom.next(row) || dom.prev(row);\n focusElement = focusElement.cells[0];\n\n // IE needs to focus the new row before removing the old one\n this._focusElement(range, focusElement);\n focusElement = null;\n\n this._handleRowSpanCells(table, row);\n\n dom.remove(row);\n }\n\n this._clearColIndexAttr(table);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n } else if (dom.is(rowParent, THEAD) && $(table).find(\"[scope]\").length > 0) {\n this._adjustColgroups(rowParent.rows[0], table);\n }\n\n if (focusElement) {\n this._focusElement(range, focusElement);\n }\n\n this._resetElementResizing(this.editor);\n },\n _focusElement: function(range, node) {\n range.setStart(node, 0);\n range.collapse(true);\n this.editor.selectRange(range);\n },\n _handleRowSpanCells: function(table, row) {\n var index, cell, adjacentCell, nextRow, rowIndex = dom.findNodeIndex(row, true),\n firstRow = table.rows[0],\n lastCell = firstRow.cells[firstRow.cells.length - 1],\n lastIndex = parseInt(lastCell.getAttribute(\"col-index\"),10) + lastCell.colSpan - 1;\n\n for (index = 0; index <= lastIndex; index = index + cell.prop(\"colSpan\")) {\n cell = $(row).find(\"[col-index=\" + index + \"]\");\n\n if (cell.length && cell.prop(\"rowSpan\") > 1) {\n nextRow = table.rows[rowIndex + 1];\n adjacentCell = $(nextRow).find(\"[col-index=\" + (index + 1) + \"]\");\n\n if (adjacentCell.length) {\n adjacentCell.before(cell);\n } else {\n $(nextRow).append(cell);\n }\n this._reduceRowSpan(cell);\n }\n\n if (!cell.length) {\n cell = this._findRowSpanCell(row.parentElement, rowIndex, index);\n this._reduceRowSpan(cell);\n }\n }\n },\n _reduceRowSpan: function(td) {\n var rowSpanValue = td.prop(\"rowSpan\") - 1;\n\n if (rowSpanValue <= 1) {\n td.removeAttr(ROWSPAN);\n if (td.attr(SCOPE) === ROWGROUP) {\n td.attr(SCOPE, ROW);\n }\n } else {\n td.attr(ROWSPAN, rowSpanValue);\n }\n }\n });\n\n var DeleteColumnCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(),\n td = dom.closest(range.endContainer, [TD, TH]),\n table = dom.closest(td, TABLE),\n rows = table && table.rows,\n columnIndex = dom.findNodeIndex(td, true),\n columnCount = rows && rows[0].cells.length,\n colElements = table.getElementsByTagName(COL),\n colgroupElements = table.getElementsByTagName(COLGROUP),\n focusElement, i, cell, x;\n\n if (!td || (this.immutables() && Editor.Immutables.immutableParent(td))) {\n this.releaseRange(range);\n return;\n }\n\n if (columnCount == 1 || td.colSpan == columnCount) {\n focusElement = dom.next(table);\n if (!focusElement || dom.insignificant(focusElement)) {\n focusElement = dom.prev(table);\n }\n\n if (focusElement && focusElement.rows) {\n focusElement = focusElement.rows[0].cells[0];\n }\n\n dom.remove(table);\n this._resetElementResizing(this.editor);\n } else {\n dom.removeTextSiblings(td);\n\n focusElement = dom.next(td) || dom.prev(td);\n\n this._mapColIndices(table);\n\n columnIndex = parseInt(td.getAttribute(\"col-index\"), 10);\n\n for (x = 0; x < td.colSpan; x++) {\n for (i = 0; i < rows.length; i = i + (cell.prop(\"rowSpan\") || 1)) {\n cell = $(rows[i]).find(\"[col-index=\" + (columnIndex + x) + \"]\");\n\n if (cell.length && cell.prop(\"colSpan\") <= 1) {\n cell.remove();\n } else {\n this._handleColSpanCells(rows[i], columnIndex + x);\n }\n }\n }\n\n this._clearColIndexAttr(table);\n }\n\n if (colElements.length > 0 || colgroupElements.length > 0) {\n this._adjustColgroups(rows[0], table);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n if (focusElement) {\n range.setStart(focusElement, 0);\n range.collapse(true);\n this.editor.selectRange(range);\n }\n\n this._resetElementResizing(this.editor);\n },\n _handleColSpanCells: function(row, colIndex) {\n var cell = $(row).find(\"[col-index=\" + colIndex + \"]\");\n\n if (cell.length && cell.prop(\"colSpan\") > 1) {\n var clone = cell.clone(true);\n cell.after(clone);\n this._reduceColSpan(clone);\n clone.attr(\"col-index\", parseInt(cell.attr(\"col-index\"),10) + 1);\n cell.remove();\n return;\n }\n\n for (var i = colIndex; i >= 0; i--) {\n cell = $(row).find(\"[col-index=\" + i + \"]\");\n\n if (cell.length) {\n this._reduceColSpan(cell);\n cell.attr(\"col-index\", parseInt(cell.attr(\"col-index\"),10) + 1);\n return;\n }\n }\n },\n _reduceColSpan: function(td) {\n var colSpanValue = td.prop(\"colSpan\") - 1;\n\n if (colSpanValue <= 1) {\n td.removeAttr(COLSPAN);\n if (td.attr(SCOPE) === COLGROUP) {\n td.attr(SCOPE, COL);\n }\n } else {\n td.attr(COLSPAN, colSpanValue);\n }\n }\n });\n\n var MergeCellsHorizontallyCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(),\n td = dom.closest(range.endContainer, [TD, TH]),\n table, row, columnIndex, nextTd, colspan;\n\n if (!td) {\n this.releaseRange(range);\n return;\n }\n\n table = dom.closest(td, TABLE);\n row = td.parentNode;\n columnIndex = dom.findNodeIndex(td, true);\n nextTd = row.children[columnIndex + 1];\n\n if (this.immutables() && Editor.Immutables.immutableParent(td)) {\n this.releaseRange(range);\n return;\n }\n\n this._mapColIndices(table);\n\n columnIndex = parseInt($(td).attr(\"col-index\"), 10);\n nextTd = $(row).find(\"[col-index=\" + (columnIndex + 1 + this._getColspan(td) - 1) + \"]\").get(0);\n\n if (!nextTd || nextTd.rowSpan !== td.rowSpan || td.tagName !== nextTd.tagName) {\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n return;\n }\n\n colspan = this._getColspan(td) + this._getColspan(nextTd);\n\n $(td).prop(COLSPAN, colspan)\n .append(dom.emptyNode(nextTd) ? \"\" : \"
    \" + nextTd.innerHTML);\n\n $(td).width(td.offsetWidth);\n $(nextTd).remove();\n\n if (td.getAttribute(SCOPE) === COL) {\n td.setAttribute(SCOPE, COLGROUP);\n }\n if (td.getAttribute(SCOPE) === COLGROUP) {\n this._adjustColgroups(row, table);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n this._resetElementResizing(this.editor);\n },\n _getColspan: function(td) {\n return parseInt(td.getAttribute(COLSPAN), 10) || 1;\n }\n });\n\n var MergeCellsVerticallyCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(),\n td = dom.closest(range.endContainer, [TD, TH]),\n tr, parent, table, columnIndex, rowIndex, targetRow, bottomTd;\n\n if (!td) {\n this.releaseRange(range);\n return;\n }\n\n tr = dom.closest(td, TR);\n parent = dom.closest(td, [THEAD, TBODY]);\n table = dom.closest(td, TABLE);\n columnIndex = dom.findNodeIndex(td, true);\n rowIndex = dom.findNodeIndex(tr, true);\n\n if (rowIndex + 1 === parent.rows.length) {\n this.releaseRange(range);\n return;\n }\n\n targetRow = parent.rows[rowIndex + this._getRowspan(td)];\n bottomTd = targetRow && targetRow.children[columnIndex];\n\n if (this.immutables() && Editor.Immutables.immutableParent(td)) {\n this.releaseRange(range);\n return;\n }\n\n this._mapColIndices(table);\n\n columnIndex = $(td).attr(\"col-index\");\n bottomTd = $(targetRow).find(\"[col-index=\" + columnIndex + \"]\").get(0);\n\n if (!bottomTd || bottomTd.colSpan !== td.colSpan || td.tagName !== bottomTd.tagName) {\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n return;\n }\n\n $(td).prop(ROWSPAN, this._getRowspan(td) + this._getRowspan(bottomTd))\n .append(dom.emptyNode(bottomTd) ? \"\" : \"
    \" + bottomTd.innerHTML);\n\n if (td.getAttribute(SCOPE) === ROW) {\n td.setAttribute(SCOPE, ROWGROUP);\n }\n\n $(bottomTd).remove();\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n },\n _getRowspan: function(td) {\n return parseInt(td.getAttribute(ROWSPAN), 10) || 1;\n }\n });\n\n var SplitCellCommand = TableModificationCommand.extend({\n exec: function() {\n var range = this.lockRange(),\n type = this.options.type,\n attr = type === \"row\" ? COLSPAN : ROWSPAN,\n td = dom.closest(range.endContainer, [TD, TH]),\n parent = dom.closest(td, [THEAD, TBODY]),\n table = dom.closest(td, TABLE),\n emptyTd = dom.createEmptyNode(this.editor.document, td.nodeName.toLowerCase());\n\n if (!td || (this.immutables() && Editor.Immutables.immutableParent(td))) {\n this.releaseRange(range);\n return;\n }\n\n this._mapColIndices(table);\n\n if (type === \"row\" && $(td).is(\"[\" + attr + \"]\")) {\n this._splitCellHorizontally(td, parent, attr, emptyTd);\n } else if (type === \"column\" && $(td).is(\"[\" + attr + \"]\")) {\n this._splitCellVertically(td, parent, attr, emptyTd);\n }\n\n if ($(td).prop(attr.toLowerCase()) <= 1) {\n $(td).removeAttr(attr);\n }\n\n if ($(table).find(\"[headers]\").length > 0) {\n this._associateHeaderIds(table);\n }\n\n this._clearColIndexAttr(table);\n this.releaseRange(range);\n },\n _getRowspanValue: function(td) {\n return parseInt(td.getAttribute(ROWSPAN), 10);\n },\n _getColspanValue: function(td) {\n return parseInt(td.getAttribute(COLSPAN), 10);\n },\n _splitCellHorizontally: function(td, parent, attr, emptyTd) {\n var rowSpan = td.rowSpan,\n colSpan = td.colSpan,\n tdToAdd = $(emptyTd),\n colSpanResult = Math.floor(colSpan / 2);\n\n if (colSpanResult > 1) {\n tdToAdd.attr(COLSPAN, colSpanResult);\n }\n\n if (rowSpan > 1) {\n tdToAdd.attr(ROWSPAN, rowSpan);\n }\n\n $(td).prop(attr, colSpan - colSpanResult)\n .after(tdToAdd);\n\n $(td).width(td.offsetWidth);\n tdToAdd.width(tdToAdd[0].offsetWidth);\n\n if (td.hasAttribute(SCOPE)) {\n if (td.getAttribute(SCOPE) === COLGROUP) {\n tdToAdd.attr(SCOPE, COL);\n if (!td.getAttribute(COLSPAN) || td.getAttribute(COLSPAN) === \"1\") {\n td.setAttribute(SCOPE, COL);\n }\n\n this._adjustColgroups(td.parentNode, parent.parentNode);\n } else {\n tdToAdd.attr(SCOPE, td.getAttribute(SCOPE));\n }\n }\n },\n _splitCellVertically: function(td, parent, attr, emptyTd) {\n var tr = dom.closest(td,TR),\n columnIndex = parseInt($(td).attr(\"col-index\"), 10),\n rowIndex = dom.findNodeIndex(tr, true),\n rowSpan = td.rowSpan,\n colSpan = td.colSpan,\n rowSpanResult = Math.floor(rowSpan / 2),\n targetRow = $(parent).find(TR).eq(rowIndex + rowSpan - rowSpanResult),\n nextTd = this._findNextTdInRow(targetRow, columnIndex + colSpan),\n tdToAdd = $(emptyTd);\n\n if (rowSpanResult > 1) {\n tdToAdd.attr(ROWSPAN, rowSpanResult);\n }\n if (colSpan > 1) {\n tdToAdd.attr(COLSPAN, colSpan);\n }\n\n if (nextTd && nextTd.length) {\n nextTd.before(tdToAdd);\n } else {\n targetRow.append(tdToAdd);\n }\n\n $(td).prop(attr, rowSpan - rowSpanResult);\n\n if (td.hasAttribute(SCOPE)) {\n if (td.getAttribute(SCOPE) === ROWGROUP) {\n tdToAdd.attr(SCOPE, ROW);\n if (!td.getAttribute(ROWSPAN) || td.getAttribute(ROWSPAN) === \"1\") {\n td.setAttribute(SCOPE, ROW);\n }\n } else {\n tdToAdd.attr(SCOPE, td.getAttribute(SCOPE));\n }\n }\n }\n });\n\n var TableModificationTool = Tool.extend({\n command: function(options) {\n var commandsMap = {\n row: {\n insert: InsertRowCommand,\n \"delete\": DeleteRowCommand,\n merge: MergeCellsHorizontallyCommand,\n split: SplitCellCommand\n },\n column: {\n insert: InsertColumnCommand,\n \"delete\": DeleteColumnCommand,\n merge: MergeCellsVerticallyCommand,\n split: SplitCellCommand\n }\n };\n\n options = extend(options, this.options);\n options.action = options.action || \"insert\";\n\n return new commandsMap[options.type][options.action](options);\n },\n\n update: function(ui, nodes) {\n var isFormatted = !tableFormatFinder.isFormatted(nodes),\n toolbar = ui.closest(\".k-toolbar\").getKendoToolBar();\n\n if (isFormatted === true) {\n toolbar.hide(ui);\n } else {\n toolbar.show(ui);\n }\n }\n });\n\n var TableFormatCommand = FormatCommand.extend({\n exec: function() {\n var that = this;\n var editor = that.editor;\n\n FormatCommand.fn.exec.call(this);\n\n if (editor.elementResizing) {\n editor.elementResizing._showResizeHandles();\n }\n }\n });\n\n // var tableAlignFormatFinder = BlockFormatFinder.extend({\n\n // });\n\n var TableFormatTool = BlockFormatTool.extend({\n update: function(ui, nodes) {\n var isTable = !tableFormatFinder.isFormatted(nodes),\n isFormatted = this.options.finder.isFormatted(nodes, this.isTable),\n toolbar = ui.closest(\".k-toolbar\").getKendoToolBar();\n\n if (toolbar) {\n toolbar.toggle(ui, isFormatted);\n }\n\n if (isTable === true) {\n toolbar.hide(ui);\n } else {\n toolbar.show(ui);\n }\n },\n command: function(commandArguments) {\n var that = this;\n\n return new TableFormatCommand(extend(commandArguments, {\n formatter: that.options.formatter\n }));\n },\n isTable: function(node) {\n return dom.is(node, \"table\");\n }\n });\n\n extend(kendo.ui.editor, {\n PopupTool: PopupTool,\n TableCommand: TableCommand,\n InsertTableTool: InsertTableTool,\n TableFormatTool: TableFormatTool,\n TableFormatCommand: TableFormatCommand,\n TableModificationTool: TableModificationTool,\n InsertRowCommand: InsertRowCommand,\n InsertColumnCommand: InsertColumnCommand,\n DeleteRowCommand: DeleteRowCommand,\n DeleteColumnCommand: DeleteColumnCommand,\n MergeCellsHorizontallyCommand: MergeCellsHorizontallyCommand,\n MergeCellsVerticallyCommand: MergeCellsVerticallyCommand,\n SplitCellCommand: SplitCellCommand\n });\n\n\n registerTool(\"createTable\", new InsertTableTool({ ui: { popup: true, overflow: \"never\" } }));\n\n registerTool(\"addColumnLeft\", new TableModificationTool({ type: \"column\", position: \"before\" }));\n registerTool(\"addColumnRight\", new TableModificationTool({ type: \"column\" }));\n registerTool(\"addRowAbove\", new TableModificationTool({ type: \"row\", position: \"before\" }));\n registerTool(\"addRowBelow\", new TableModificationTool({ type: \"row\" }));\n registerTool(\"deleteRow\", new TableModificationTool({ type: \"row\", action: \"delete\" }));\n registerTool(\"deleteColumn\", new TableModificationTool({ type: \"column\", action: \"delete\" }));\n registerTool(\"mergeCellsHorizontally\", new TableModificationTool({ type: \"row\", action: \"merge\" }));\n registerTool(\"mergeCellsVertically\", new TableModificationTool({ type: \"column\", action: \"merge\" }));\n registerTool(\"splitCellHorizontally\", new TableModificationTool({ type: \"row\", action: \"split\" }));\n registerTool(\"splitCellVertically\", new TableModificationTool({ type: \"column\", action: \"split\" }));\n\n registerFormat(\"tableAlignLeft\", [\n { tags: [\"table\"], attr: { style: { marginLeft: \"\", marginRight: \"auto\" } } },\n { tags: [\"table\"], attr: { align: \"left\" } }\n ]);\n registerTool(\"tableAlignLeft\", new TableFormatTool({\n format: formats.tableAlignLeft,\n ui: {\n togglable: true,\n group: \"tableAlign\"\n }\n }));\n\n registerFormat(\"tableAlignCenter\", [\n { tags: [\"table\"], attr: { style: { marginLeft: \"auto\", marginRight: \"auto\" } } },\n { tags: [\"table\"], attr: { align: \"center\" } }\n ]);\n registerTool(\"tableAlignCenter\", new TableFormatTool({\n format: formats.tableAlignCenter,\n ui: {\n togglable: true,\n group: \"tableAlign\"\n }\n }));\n\n registerFormat(\"tableAlignRight\", [\n { tags: [\"table\"], attr: { style: { marginLeft: \"auto\", marginRight: \"\" } } },\n { tags: [\"table\"], attr: { align: \"right\" } }\n ]);\n registerTool(\"tableAlignRight\", new TableFormatTool({\n format: formats.tableAlignRight,\n ui: {\n togglable: true,\n group: \"tableAlign\"\n }\n }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n editorNS = kendo.ui.editor,\n RangeUtils = editorNS.RangeUtils,\n dom = editorNS.Dom,\n RestorePoint = editorNS.RestorePoint,\n Marker = editorNS.Marker,\n browser = kendo.support.browser,\n extend = $.extend;\n\n var Clipboard = Class.extend({\n init: function(editor) {\n this.editor = editor;\n var pasteCleanup = editor.options.pasteCleanup;\n this.nonSplittableTagsOnPaste = editor.options.nonSplittableTagsOnPaste || [];\n this.cleaners = [\n new ScriptCleaner(pasteCleanup),\n new TabCleaner(pasteCleanup),\n new MSWordFormatCleaner(pasteCleanup),\n new WebkitFormatCleaner(pasteCleanup),\n new HtmlTagsCleaner(pasteCleanup),\n new HtmlAttrCleaner(pasteCleanup),\n new HtmlContentCleaner(pasteCleanup),\n new CustomCleaner(pasteCleanup) //always keep at end\n ];\n },\n\n htmlToFragment: function(html) {\n var editor = this.editor,\n doc = editor.document,\n container = dom.create(doc, 'div'),\n fragment = doc.createDocumentFragment();\n\n container.innerHTML = html;\n\n while (container.firstChild) {\n fragment.appendChild(container.firstChild);\n }\n\n return fragment;\n },\n\n isBlock: function(html) {\n return (/<(div|p|ul|ol|table|h[1-6])/i).test(html);\n },\n\n _startModification: function() {\n var range;\n var restorePoint;\n var editor = this.editor;\n\n if (this._inProgress) {\n return;\n }\n\n this._inProgress = true;\n\n range = editor.getRange();\n restorePoint = new RestorePoint(range, editor.body);\n\n dom.persistScrollTop(editor.document);\n\n return { range: range, restorePoint: restorePoint };\n },\n\n _endModification: function(modificationInfo) {\n editorNS._finishUpdate(this.editor, modificationInfo.restorePoint);\n\n this.editor._selectionChange();\n\n this._inProgress = false;\n },\n\n _contentModification: function(before, after) {\n var that = this;\n var editor = that.editor;\n var modificationInfo = that._startModification();\n\n if (!modificationInfo) {\n return;\n }\n\n before.call(that, editor, modificationInfo.range);\n\n setTimeout(function() {\n after.call(that, editor, modificationInfo.range);\n\n that._endModification(modificationInfo);\n });\n },\n\n _removeBomNodes: function(range) {\n var nodes = RangeUtils.textNodes(range);\n\n for (var i = 0; i < nodes.length; i++) {\n nodes[i].nodeValue = dom.stripBom(nodes[i].nodeValue) || nodes[i].nodeValue;\n }\n },\n\n _onBeforeCopy: function(range) {\n var marker = new Marker();\n marker.add(range);\n\n this._removeBomNodes(range);\n\n marker.remove(range);\n\n this.editor.selectRange(range);\n },\n\n oncopy: function() {\n this._onBeforeCopy(this.editor.getRange());\n },\n\n oncut: function() {\n this._onBeforeCopy(this.editor.getRange());\n this._contentModification($.noop, $.noop);\n },\n\n _fileToDataURL: function(blob) {\n var deferred = $.Deferred();\n\n var reader = new FileReader();\n\n if (!(blob instanceof window.File) && blob.getAsFile) {\n blob = blob.getAsFile();\n }\n\n reader.onload = deferred.resolve.bind(deferred);\n\n reader.readAsDataURL(blob);\n\n return deferred.promise();\n },\n\n _triggerPaste: function(html, options) {\n var args = { html: html || \"\" };\n\n args.html = args.html.replace(/\\ufeff/g, \"\");\n\n this.editor.trigger(\"paste\", args);\n\n this.paste(args.html, options || {});\n },\n\n _handleImagePaste: function(e) {\n if (!('FileReader' in window) || (browser.msie && browser.version > 10)) {\n return;\n }\n\n var clipboardData = e.clipboardData || e.originalEvent.clipboardData ||\n window.clipboardData || {};\n\n var items = clipboardData.items || clipboardData.files;\n\n return this._insertImages(items);\n },\n\n _insertImages: function(items) {\n if (!items) {\n return;\n }\n\n var images = $.grep(items, function(item) { return (/^image\\//i).test(item.type); });\n var html = $.grep(items, function(item) { return (/^text\\/html/i).test(item.type); });\n\n if (html.length || !images.length) {\n return;\n }\n\n var modificationInfo = this._startModification();\n\n if (!modificationInfo) {\n return;\n }\n\n $.when.apply($, $.map(images, this._fileToDataURL))\n .done((function() {\n var results = Array.prototype.slice.call(arguments);\n var html = $.map(results, function(e) {\n return '';\n }).join(\"\");\n\n this._triggerPaste(html);\n\n this._endModification(modificationInfo);\n }).bind(this));\n\n return true;\n },\n\n onpaste: function(e) {\n if (this.editor.body.contentEditable === \"false\") {\n return;\n }\n\n if (this._handleImagePaste(e)) {\n e.preventDefault();\n return;\n }\n\n this.expandImmutablesIn();\n\n this._contentModification(\n function beforePaste(editor, range) {\n var clipboardNode = dom.create(editor.document, 'div', {\n className: 'k-paste-container',\n innerHTML: \"\\ufeff\"\n });\n var browser = kendo.support.browser;\n var body = editor.body;\n\n this._decoreateClipboardNode(clipboardNode, body);\n\n body.appendChild(clipboardNode);\n\n //Browser scrolls to clipboardNode\n if (browser.webkit) {\n this._moveToCaretPosition(clipboardNode, range);\n }\n\n // text ranges are slow in IE10-, DOM ranges are buggy in IE9-10\n if (browser.msie && browser.version < 11) {\n e.preventDefault();\n var r = editor.createRange();\n r.selectNodeContents(clipboardNode);\n editor.selectRange(r);\n var textRange = editor.document.body.createTextRange();\n textRange.moveToElementText(clipboardNode);\n $(body).off('paste');\n textRange.execCommand('Paste');\n $(body).on('paste', this.onpaste.bind(this));\n } else {\n var clipboardRange = editor.createRange();\n clipboardRange.selectNodeContents(clipboardNode);\n editor.selectRange(clipboardRange);\n }\n\n range.deleteContents();\n },\n function afterPaste(editor, range) {\n var html = \"\", containers;\n\n editor.selectRange(range);\n\n containers = $(editor.body).children(\".k-paste-container\");\n\n containers.each(function() {\n var lastChild = this.lastChild;\n\n if (lastChild && dom.is(lastChild, 'br')) {\n dom.remove(lastChild);\n }\n\n html += this.innerHTML;\n });\n\n containers.remove();\n\n this._triggerPaste(html, { clean: true });\n }\n );\n },\n ondragover: function(e) {\n if (browser.msie || browser.edge) {\n e.stopPropagation();\n e.preventDefault();\n }\n },\n ondrop: function(e) {\n if (!('FileReader' in window)) {\n return;\n }\n\n var dataTransfer = (e.originalEvent || e).dataTransfer || {};\n var items = dataTransfer.items || dataTransfer.files;\n\n if (this._insertImages(items)) {\n e.preventDefault();\n }\n },\n _decoreateClipboardNode: function(node, body) {\n if (!browser.msie && !browser.webkit) {\n return;\n }\n\n node = $(node);\n node.css({\n borderWidth: \"0px\",\n width: \"0px\",\n height: \"0px\",\n overflow: \"hidden\",\n margin: \"0\",\n padding: \"0\"\n });\n\n if (browser.msie) {\n //node inherits BODY styles and this causes the browser to add additional\n var documentElement = $(body.ownerDocument.documentElement);\n\n node.css({\n fontVariant: \"normal\",\n fontWeight: \"normal\",\n lineSpacing: \"normal\",\n lineHeight: \"normal\",\n textDecoration: \"none\"\n });\n var color = documentElement.css(\"color\");\n if (color) {\n node.css(\"color\", color);\n }\n var fontFamily = documentElement.css(\"fontFamily\");\n if (fontFamily) {\n node.css(\"fontFamily\", fontFamily);\n }\n var fontSize = documentElement.css(\"fontSize\");\n if (fontSize) {\n node.css(\"fontSize\", fontSize);\n }\n }\n },\n _moveToCaretPosition: function(node, range) {\n var that = this;\n var body = that.editor.body;\n var nodeOffset = dom.offset(node, body);\n var caretOffset = that._caretOffset(range, body);\n var translateX = caretOffset.left - nodeOffset.left;\n var translateY = caretOffset.top - nodeOffset.top;\n var translate = \"translate(\" + translateX + \"px,\" + translateY + \"px)\";\n\n $(node).css({\n \"-webkit-transform\": translate,\n \"transform\": translate\n });\n },\n _caretOffset: function(range, body) {\n var editor = this.editor;\n var caret = dom.create(editor.document, 'span', { innerHTML: \"\\ufeff\" });\n var startContainer = range.startContainer;\n var rangeChanged;\n\n if (range.collapsed) {\n var isStartTextNode = dom.isDataNode(startContainer);\n if (isStartTextNode && (dom.isBom(startContainer) || range.startOffset === 0)) {\n dom.insertBefore(caret, startContainer);\n } else if (isStartTextNode && range.startOffset === startContainer.length) {\n dom.insertAfter(caret, startContainer);\n } else {\n range.insertNode(caret);\n rangeChanged = true;\n }\n } else {\n startContainer = startContainer === body ?\n startContainer.childNodes[range.startOffset] : startContainer;\n dom.insertBefore(caret, startContainer);\n }\n\n var offset = dom.offset(caret, body);\n var prev = caret.previousSibling;\n var next = caret.nextSibling;\n\n dom.remove(caret);\n\n if (rangeChanged && dom.isDataNode(prev) && dom.isDataNode(next) && !dom.isBom(prev) && !dom.isBom(next)) {\n var prevLength = prev.length;\n next.data = prev.data + next.data;\n range.setStart(next, prevLength);\n dom.remove(prev);\n\n range.collapse(true);\n editor.selectRange(range);\n }\n\n return offset;\n },\n\n expandImmutablesIn: function(range) {\n var editor = this.editor;\n if (editor && editor.options.immutables) {\n var body = editor.body;\n range = range || editor.getRange();\n kendo.ui.editor.Immutables.expandImmutablesIn(range);\n if (range.startContainer === body && range.startOffset === 0) {\n var doc = body.ownerDocument;\n var bomNode = doc.createTextNode(\"\\ufeff\");\n body.insertBefore(bomNode, body.childNodes[0]);\n range.setStartBefore(bomNode);\n }\n editor.selectRange(range);\n }\n },\n\n splittableParent: function(block, node) {\n var parentNode, body;\n\n if (block) {\n return dom.closestEditableOfType(node, ['p', 'ul', 'ol']) || node.parentNode;\n }\n\n parentNode = node.parentNode;\n body = node.ownerDocument.body;\n\n if (dom.isInline(parentNode)) {\n while (parentNode.parentNode != body && !dom.isBlock(parentNode.parentNode)) {\n parentNode = parentNode.parentNode;\n }\n }\n\n return parentNode;\n },\n\n paste: function(html, options) {\n var editor = this.editor,\n nonSplittableTagsOnPaste = this.nonSplittableTagsOnPaste,\n preventSplit = false,\n unwrapPasted = false,\n i, l, childNodes, isList;\n\n this.expandImmutablesIn();\n\n options = extend({ clean: false, split: true }, options);\n\n if (!options.skipCleaners) {\n for (i = 0, l = this.cleaners.length; i < l; i++) {\n if (this.cleaners[i].applicable(html)) {\n html = this.cleaners[i].clean(html);\n }\n }\n }\n\n if (options.clean) {\n // remove br elements which immediately precede block elements\n html = html.replace(/(
    (\\s| )*)+(<\\/?(div|p|li|col|t))/ig, \"$3\");\n // remove empty inline elements\n html = html.replace(/<(a|span)[^>]*><\\/\\1>/ig, \"\");\n }\n\n html = html.replace(/<(a|span|font)([^>]*)> <\\/\\1>/ig, \"<$1$2> \");\n\n // It is possible in IE to copy just
  • tags\n html = html.replace(/^
  • $/g, 'li>');\n\n var block = this.isBlock(html);\n\n editor.focus();\n var range = editor.getRange();\n range.deleteContents();\n\n if (range.startContainer == editor.document) {\n range.selectNodeContents(editor.body);\n }\n\n var marker = new Marker();\n var caret = marker.addCaret(range);\n\n var parent = this.splittableParent(block, caret);\n var unwrap = false;\n\n for (i = 0; i < nonSplittableTagsOnPaste.length; i++) {\n const splitter = nonSplittableTagsOnPaste[i],\n tag = splitter.tag || splitter;\n\n if (dom.is(parent, tag)) {\n preventSplit = true;\n unwrapPasted = splitter.unwrap !== false;\n break;\n }\n }\n\n var splittable = parent != editor.body && !dom.is(parent, \"td\") && !preventSplit;\n\n if (options.split && splittable && (block || dom.isInline(parent))) {\n range.selectNode(caret);\n RangeUtils.split(range, parent, true);\n unwrap = true;\n }\n\n var fragment = this.htmlToFragment(html);\n\n if (fragment.firstChild && fragment.firstChild.className === \"k-paste-container\") {\n var fragmentsHtml = [];\n for (i = 0, l = fragment.childNodes.length; i < l; i++) {\n fragmentsHtml.push(fragment.childNodes[i].innerHTML);\n }\n\n fragment = this.htmlToFragment(fragmentsHtml.join('
    '));\n }\n\n childNodes = fragment.childNodes;\n\n if (unwrapPasted) {\n isList = dom.list(childNodes[0]);\n dom.unwrap(childNodes[0]);\n\n if (isList) {\n range.selectNode(caret.parentNode);\n }\n }\n\n $(childNodes)\n .filter(\"table\").addClass(\"k-table\").end()\n .find(\"table\").addClass(\"k-table\");\n\n $(childNodes).each(function(index, elm) {\n if (dom.isBlock(elm) && !dom.isSelfClosing(elm) && elm.innerHTML === \"\") {\n elm.appendChild(editor.document.createTextNode(\"\\ufeff\"));\n }\n });\n\n range.insertNode(fragment);\n\n parent = this.splittableParent(block, caret);\n if (unwrap) {\n while (caret.parentNode != parent) {\n dom.unwrap(caret.parentNode);\n }\n\n dom.unwrap(caret.parentNode);\n }\n\n dom.normalize(range.commonAncestorContainer);\n caret.style.display = 'inline';\n dom.restoreScrollTop(editor.document);\n dom.scrollTo(caret);\n marker.removeCaret(range);\n\n var rangeEnd = range.commonAncestorContainer.parentNode;\n if (range.collapsed && dom.name(rangeEnd) == \"tbody\" || range.collapsed && dom.name(rangeEnd) == \"thead\") {\n range.setStartAfter($(rangeEnd).closest(\"table\")[0]);\n range.collapse(true);\n }\n\n var focusedTable = $(range.commonAncestorContainer.parentNode).closest(\"table\");\n\n if (focusedTable.get(0)) {\n var siblingNodes = focusedTable.parent().contents();\n var lastSiblingIndex = siblingNodes.length - 1;\n var lastSibling = siblingNodes.get(lastSiblingIndex);\n\n while (lastSibling.nodeValue !== null && (lastSibling.nodeValue === \" \" || lastSibling.nodeValue === \"\")) {\n lastSiblingIndex -= 1;\n lastSibling = siblingNodes.get(lastSiblingIndex);\n }\n\n if (lastSibling === focusedTable.get(0) && !focusedTable.parents(\"table\").length) {\n dom.insertAfter(dom.createEmptyNode(editor.document, \"p\"), focusedTable[0]);\n }\n }\n\n editor._handleSpaceAndNewLines();\n editor.selectRange(range);\n }\n });\n\n var Cleaner = Class.extend({\n init: function(options) {\n this.options = options || {};\n this.replacements = [];\n },\n\n clean: function(html, customReplacements) {\n var that = this,\n replacements = customReplacements || that.replacements,\n i, l;\n\n for (i = 0, l = replacements.length; i < l; i += 2) {\n html = html.replace(replacements[i], replacements[i + 1]);\n }\n\n return html;\n }\n });\n\n var ScriptCleaner = Cleaner.extend({\n init: function(options) {\n Cleaner.fn.init.call(this, options);\n\n this.replacements = [\n /<(\\/?)script([^>]*)>/i, \"<$1telerik:script$2>\"\n ];\n },\n\n applicable: function(html) {\n return !this.options.none && (/]*>/i).test(html);\n }\n });\n\n var TabCleaner = Cleaner.extend({\n init: function(options) {\n Cleaner.fn.init.call(this, options);\n\n var replacement = ' ';\n this.replacements = [\n /]*>\\s*<\\/span>/gi, replacement,\n /\\t/gi, replacement,\n /    /gi, replacement\n ];\n },\n\n applicable: function(html) {\n return (/    |class=\"?Apple-tab-span/i).test(html);\n }\n });\n\n var MSWordFormatCleaner = Cleaner.extend({\n init: function(options) {\n Cleaner.fn.init.call(this, options);\n\n this.junkReplacements = [\n /<\\?xml[^>]*>/gi, '',\n //g, '', /* comments */\n /"/g, \"'\", /* encoded quotes (in attributes) */\n / <\\/o:p>/ig, ' ',\n /<\\/?(meta|link|style|o:|v:|x:)[^>]*>((?:.|\\n)*?<\\/(meta|link|style|o:|v:|x:)[^>]*>)?/ig, '', /* external references and namespaced tags */\n /<\\/o>/g, ''\n ];\n this.replacements = this.junkReplacements.concat([\n /(?:
     [\\s\\r\\n]+|
    )*(<\\/?(h[1-6]|hr|p|div|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|address|pre|form|blockquote|dl|dt|dd|dir|fieldset)[^>]*>)(?:
     [\\s\\r\\n]+|
    )*/g, '$1',\n /

    /g, '

    ',\n /
    \\n/g, '
    ',\n /
    (?!\\n)/g, ' ',\n /]*)>(\\s| )+]*>(\\s| )*<\\/tr>/gi, '',\n /]*>(\\s| )*<\\/tbody>/gi, '',\n /]*>(\\s| )*<\\/table>/gi, '',\n /

    /g, '
    ',\n /^\\s*( )+/gi, '',\n /( |]*>)+\\s*$/gi, '',\n /mso-[^;\"]*;?/ig, '', /* office-related CSS attributes */\n /<(\\/?)b(\\s[^>]*)?>/ig, '<$1strong$2>',\n /<(\\/?)font(\\s[^>]*)?>/ig, this.convertFontMatch,\n /<(\\/?)i(\\s[^>]*)?>/ig, '<$1em$2>',\n /style=([\"|'])\\s*\\1/g, '', /* empty style attributes */\n /(]*>)?\\n/g, function($0, $1) { return $1 ? $0 : ' '; } /* phantom extra line feeds */\n ]);\n },\n\n convertFontMatch: function(match, closing, args) {\n var faceRe = /face=['\"]([^'\"]+)['\"]/i;\n var face = faceRe.exec(args);\n var family = args && face && face[1];\n\n if (closing) {\n return '';\n } else if (family) {\n return '';\n } else {\n return '';\n }\n },\n\n applicable: function(html) {\n return (/class=\"?Mso/i).test(html) ||\n (/style=\"[^\"]*mso-/i).test(html) ||\n (/urn:schemas-microsoft-com:office/).test(html);\n },\n\n stripEmptyAnchors: function(html) {\n return html.replace(/]*)>\\s*<\\/a>/ig, function(a, attributes) {\n if (!attributes || attributes.indexOf(\"href\") < 0) {\n return \"\";\n }\n\n return a;\n });\n },\n\n listType: function(p, listData) {\n var html = p.innerHTML;\n var text = dom.innerText(p);\n\n var startingSymbol;\n var matchSymbol = html.match(/^(?:]*texhtml[^>]*>)?]*(?:Symbol|Wingdings)[^>]*>([^<]+)/i);\n var symbol = matchSymbol && matchSymbol[1];\n var isNumber = /^[a-z\\d]/i.test(symbol);//including alpha-numeric and roman numerals\n\n var trimStartText = function(text) {\n return text.replace(/^(?: |[\\u00a0\\n\\r\\s])+/, '');\n };\n\n if (matchSymbol) {\n startingSymbol = true;\n }\n\n html = html.replace(/<\\/?\\w+[^>]*>/g, '').replace(/ /g, '\\u00a0');\n\n if ((!startingSymbol && /^[\\u2022\\u00b7\\u00a7\\u00d8o]\\u00a0+/.test(html)) ||\n (startingSymbol && /^.\\u00a0+/.test(html)) ||\n (symbol && !isNumber && listData)) {\n return {\n tag: 'ul',\n style: this._guessUnorderedListStyle(trimStartText(text))\n };\n }\n\n if (/^\\s*\\w+[\\.\\)][\\u00a0 ]{2,}/.test(html)) {\n return {\n tag: 'ol',\n style: this._guessOrderedListStyle(trimStartText(text))\n };\n }\n },\n\n _convertToLi: function(p) {\n var content;\n\n if (p.childNodes.length == 1) {\n content = p.firstChild.nodeType === dom.nodeTypes.TEXT_NODE ? dom.innerText(p) : p.firstChild.innerHTML.replace(/^\\w+[\\.\\)]( )+ /, \"\");\n content = this._checkForBullet(content);\n } else {\n content = this._getHtmlNoBullet(p);\n }\n\n dom.remove(p);\n\n return dom.create(document, 'li', { innerHTML: content });\n },\n\n _checkForBullet: function(html) {\n var p = dom.create(document, 'p', { innerHTML: html });\n var bulletRgx = /^\\s*\\w+[\\.\\)]\\s+/;\n\n if (bulletRgx.test(p.innerText)) {\n return this._getHtmlNoBullet(p);\n }\n\n return html;\n },\n\n _getHtmlNoBullet: function(element) {\n var content,\n name = dom.name(element);\n\n dom.remove(element.firstChild);\n\n // check for roman numerals\n if (element.firstChild.nodeType == 3) {\n if (/^[ivxlcdm]+\\.$/i.test(element.firstChild.nodeValue)) {\n dom.remove(element.firstChild);\n }\n }\n\n if (/^( |\\s)+$/i.test(element.firstChild.innerHTML)) {\n dom.remove(element.firstChild);\n }\n\n if (name != \"p\") {\n content = \"<\" + name + \">\" + element.innerHTML + \"\";\n } else {\n content = element.innerHTML;\n }\n\n return content;\n },\n\n _guessUnorderedListStyle: function(symbol) {\n if (/^[\\u2022\\u00b7\\u00FC\\u00D8\\u002dv-]/.test(symbol)) {\n return null;//return \"disc\"; //default CSS value\n } else if (/^o/.test(symbol)) {\n return \"circle\";\n } else {\n return \"square\";\n }\n },\n _guessOrderedListStyle: function(symbol) {\n var listType = null;\n if (!/^\\d/.test(symbol)) {\n listType = (/^[a-z]/.test(symbol) ? 'lower-' : 'upper-') +\n (/^[ivxlcdm]/i.test(symbol) ? 'roman' : 'alpha');\n }\n\n return listType;\n },\n\n extractListLevels: function(html) {\n var msoListRegExp = /style=['\"]?[^'\"]*?mso-list:\\s?[a-zA-Z]+(\\d+)\\s[a-zA-Z]+(\\d+)\\s(\\w+)/gi;\n\n html = html.replace(msoListRegExp, function(match, list, level) {\n return kendo.format('data-list=\"{0}\" data-level=\"{1}\" {2}', list, level, match);\n });\n\n return html;\n },\n\n _createList: function(type, styleType) {\n return dom.create(document, type, {\n style: { listStyleType: styleType }\n });\n },\n\n lists: function(placeholder) {\n var blockChildren = $(placeholder).find(dom.blockElements.join(',')),\n lastMargin = -1,\n name,\n levels = {},\n li,\n rootMargin,\n rootIndex,\n lastRootLi,\n isLastRootLi,\n rootList,\n i, p, type, margin, list, listData,\n acceptedNameTags = [\"p\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"],\n isParentTable = false;\n\n for (i = 0; i < blockChildren.length; i++) {\n p = blockChildren[i];\n listData = $(p).data();\n var listIndex = listData.list;\n name = dom.name(p);\n isParentTable = !!$(p).parents(\"table\").length;\n\n if (isParentTable) {\n continue;\n }\n\n var listType = this.listType(p, listData);\n type = listType && listType.tag;\n\n if (!type || acceptedNameTags.indexOf(name) < 0) {\n if (!p.innerHTML) {\n dom.remove(p);\n } else if (li && !isLastRootLi) {\n li.appendChild(p);\n }\n continue;\n }\n\n // not supported list levels in ie\n if (browser.msie) {\n continue;\n }\n\n margin = listData.level || parseFloat(p.style.marginLeft || 0);\n\n var levelType = type + listIndex;\n if (!levels[margin]) {\n levels[margin] = {};\n }\n\n if (!rootMargin || rootMargin < 0) {\n rootMargin = margin;\n rootIndex = listIndex;\n lastRootLi = $(placeholder).find(\"[data-list='\" + rootIndex + \"']\").last()[0];\n rootList = this._createList(type, listType.style);\n dom.insertBefore(rootList, p);\n lastMargin = margin;\n levels[margin][levelType] = rootList;\n }\n\n isLastRootLi = lastRootLi === p;\n\n list = levels[margin][levelType];\n\n if (margin > lastMargin || !list) {\n list = this._createList(type, listType.style);\n levels[margin][levelType] = list;\n li.appendChild(list);\n }\n\n li = this._convertToLi(p);\n list.appendChild(li);\n\n if (isLastRootLi) {\n rootMargin = lastMargin = -1;\n } else {\n lastMargin = margin;\n }\n }\n },\n\n removeAttributes: function(element) {\n var attributes = element.attributes,\n i = attributes.length,\n significantStyles = [],\n isSignificantCss = function(val) {\n var significantCss = [\"border\", \"background\", \"padding\"];\n\n return significantCss.filter(function(cssAttr) {\n return val.trim().indexOf(cssAttr) === 0;\n }).length > 0;\n },\n addSignificantStyles = function(val) {\n if (isSignificantCss(val)) {\n significantStyles.push(val.trim());\n }\n },\n attr, attributeName, attributeValues;\n\n while (i--) {\n if (dom.name(attributes[i]) != \"colspan\") {\n attr = attributes[i];\n attributeName = attr.name;\n\n if (attributeName === \"style\" && (element.nodeName === \"TD\" || element.nodeName === \"TH\")) {\n attributeValues = attr.value.split(\";\");\n attributeValues.forEach(addSignificantStyles);\n }\n\n element.removeAttributeNode(attributes[i]);\n }\n }\n\n if (significantStyles.length > 0) {\n element.setAttribute(\"style\", significantStyles.join(\";\"));\n }\n },\n\n createColGroup: function(row) {\n var cells = row.cells;\n var table = $(row).closest(\"table\");\n var colgroup = table.children(\"colgroup\");\n\n if (cells.length < 2) {\n return;\n } else if (colgroup.length) {\n cells = colgroup.children();\n colgroup[0].parentNode.removeChild(colgroup[0]);\n }\n\n colgroup = $($.map(cells, function(cell) {\n var width = cell.width;\n if (width && parseInt(width, 10) !== 0) {\n return kendo.format('', width);\n }\n\n return \"\";\n }).join(\"\"));\n\n // jquery 1.9/2.0 discrepancy\n if (!colgroup.is(\"colgroup\")) {\n colgroup = $(\"\").append(colgroup);\n }\n\n colgroup.prependTo(table);\n },\n\n convertHeaders: function(row) {\n var cells = row.cells,\n i,\n boldedCells = $.map(cells, function(cell) {\n var child = $(cell).children(\"p\").children(\"strong\")[0];\n\n if (child && dom.name(child) == \"strong\") {\n return child;\n }\n });\n\n if (boldedCells.length == cells.length) {\n for (i = 0; i < boldedCells.length; i++) {\n dom.unwrap(boldedCells[i]);\n }\n\n $(row).closest(\"table\")\n .find(\"colgroup\").after(\"\").end()\n .find(\"thead\").append(row);\n\n for (i = 0; i < cells.length; i++) {\n dom.changeTag(cells[i], \"th\");\n }\n }\n },\n\n removeParagraphs: function(cells) {\n var i, j, len, cell, paragraphs;\n\n for (i = 0; i < cells.length; i++) {\n this.removeAttributes(cells[i]);\n\n // remove paragraphs and insert line breaks between them\n cell = $(cells[i]);\n paragraphs = cell.children(\"p\");\n\n for (j = 0, len = paragraphs.length; j < len; j++) {\n if (j < len - 1) {\n dom.insertAfter(dom.create(document, \"br\"), paragraphs[j]);\n }\n\n dom.unwrap(paragraphs[j]);\n }\n }\n },\n\n removeTextNodes: function(trs) {\n var i, j, childNodes, currentNode, row;\n\n for (i = 0; i < trs.length; i++) {\n row = trs[i];\n childNodes = row.childNodes;\n\n for (j = 0; j < childNodes.length; j++) {\n currentNode = childNodes[j];\n\n if (currentNode.nodeType === dom.nodeTypes.TEXT_NODE) {\n row.removeChild(currentNode);\n }\n }\n }\n },\n\n tables: function(placeholder) {\n var tables = $(placeholder).find(\"table\"),\n that = this,\n rows,\n firstRow, longestRow, i, j;\n\n for (i = 0; i < tables.length; i++) {\n rows = tables[i].rows;\n longestRow = firstRow = rows[0];\n\n for (j = 1; j < rows.length; j++) {\n if (rows[j].cells.length > longestRow.cells.length) {\n longestRow = rows[j];\n }\n }\n\n that.createColGroup(longestRow);\n that.convertHeaders(firstRow);\n\n that.removeAttributes(tables[i]);\n\n that.removeParagraphs(tables.eq(i).find(\"td,th\"));\n\n that.removeTextNodes(tables.eq(i).find(\"tr\"));\n }\n },\n\n headers: function(placeholder) {\n var titles = $(placeholder).find(\"p.MsoTitle\");\n\n for (var i = 0; i < titles.length; i++) {\n dom.changeTag(titles[i], \"h1\");\n }\n },\n\n removeFormatting: function(placeholder) {\n $(placeholder).find(\"*\").each(function() {\n $(this).css({\n fontSize: \"\",\n fontFamily: \"\"\n });\n\n if (!this.getAttribute(\"style\") && !this.style.cssText) {\n this.removeAttribute(\"style\");\n }\n });\n },\n\n clean: function(html) {\n var that = this, placeholder;\n var filters = this.options;\n\n if (filters.none) {\n html = Cleaner.fn.clean.call(that, html, this.junkReplacements);\n html = that.stripEmptyAnchors(html);\n } else {\n\n html = filters.msConvertLists ? this.extractListLevels(html) : html;\n html = Cleaner.fn.clean.call(that, html);\n html = that.stripEmptyAnchors(html);\n\n placeholder = dom.create(document, 'div', { innerHTML: html });\n that.headers(placeholder);\n\n if (filters.msConvertLists) {\n that.lists(placeholder);\n }\n that.tables(placeholder);\n\n if (filters.msAllFormatting) {\n that.removeFormatting(placeholder);\n }\n\n html = placeholder.innerHTML.replace(/(<[^>]*)\\s+class=\"?[^\"\\s>]*\"?/ig, '$1');\n }\n\n return html;\n }\n });\n\n var WebkitFormatCleaner = Cleaner.extend({\n init: function(options) {\n Cleaner.fn.init.call(this, options);\n\n this.replacements = [\n /\\s+class=\"Apple-style-span[^\"]*\"/gi, '',\n /<(div|p|h[1-6])\\s+style=\"[^\"]*\"/gi, '<$1',\n /^
    (.*)<\\/div>$/, '$1'\n ];\n },\n\n applicable: function(html) {\n return (/class=\"?Apple-style-span|style=\"[^\"]*-webkit-nbsp-mode/i).test(html);\n }\n });\n\n var DomCleaner = Cleaner.extend({\n clean: function(html) {\n var container = dom.create(document, 'div', { innerHTML: html });\n container = this.cleanDom(container);\n return container.innerHTML;\n },\n\n cleanDom: function(container) {\n return container;\n }\n });\n\n var HtmlTagsCleaner = DomCleaner.extend({\n cleanDom: function(container) {\n var tags = this.collectTags();\n\n $(container).find(tags).each(function() {\n dom.unwrap(this);\n });\n\n return container;\n },\n\n collectTags: function() {\n if (this.options.span) {\n return \"span\";\n }\n },\n\n applicable: function() {\n return this.options.span;\n }\n });\n\n var HtmlAttrCleaner = DomCleaner.extend({\n cleanDom: function(container) {\n var attributes = this.collectAttr();\n var nodes = $(container).find(\"[\" + attributes.join(\"],[\") + \"]\");\n nodes.removeAttr(attributes.join(\" \"));\n\n return container;\n },\n\n collectAttr: function() {\n if (this.options.css) {\n return [\"class\", \"style\"];\n }\n\n return [];\n },\n\n applicable: function() {\n return this.options.css;\n }\n });\n\n var TextContainer = function() {\n this.text = \"\";\n this.add = function(text) {\n this.text += text;\n };\n };\n\n var HtmlTextLines = Class.extend({\n init: function(separators) {\n this.separators = separators || {\n text: \" \",\n line: \"
    \"\n };\n this.lines = [];\n this.inlineBlockText = [];\n this.resetLine();\n },\n\n appendText: function(text) {\n if (text.nodeType === 3) {\n text = text.nodeValue;\n }\n\n this.textContainer.add(text);\n },\n\n appendInlineBlockText: function(text) {\n this.inlineBlockText.push(text);\n },\n\n flashInlineBlockText: function() {\n if (this.inlineBlockText.length) {\n this.appendText(this.inlineBlockText.join(\" \"));\n this.inlineBlockText = [];\n }\n },\n\n endLine: function() {\n this.flashInlineBlockText();\n this.resetLine();\n },\n\n html: function() {\n var separators = this.separators;\n var result = \"\";\n var lines = this.lines;\n\n this.flashInlineBlockText();\n\n for (var i = 0, il = lines.length, il1 = il - 1; i < il; i++) {\n var line = lines[i];\n for (var j = 0, jl = line.length, jl1 = jl - 1; j < jl; j++) {\n var text = line[j].text;\n result += text;\n if (j !== jl1) {\n result += separators.text;\n }\n }\n if (i !== il1) {\n result += separators.line;\n }\n }\n\n return result;\n },\n\n resetLine: function() {\n this.textContainer = new TextContainer();\n this.line = [];\n this.line.push(this.textContainer);\n this.lines.push(this.line);\n }\n });\n\n var DomEnumerator = Class.extend({\n init: function(callback) {\n this.callback = callback;\n },\n enumerate: function(node) {\n if (!node) {\n return;\n }\n\n var preventDown = this.callback(node);\n\n var child = node.firstChild;\n if (!preventDown && child) {\n this.enumerate(child);\n }\n\n this.enumerate(node.nextSibling);\n }\n });\n\n var HtmlContentCleaner = Cleaner.extend({\n init: function(options) {\n Cleaner.fn.init.call(this, options);\n this.hasText = false; //unpleasant flag to prevent an empty line at the beginning of the generated content.\n this.enumerator = new DomEnumerator(this.buildText.bind(this));\n },\n\n clean: function(html) {\n var container = dom.create(document, 'div', { innerHTML: html });\n\n return this.cleanDom(container);\n },\n\n cleanDom: function(container) {\n this.separators = this.getDefaultSeparators();\n this.htmlLines = new HtmlTextLines(this.separators);\n this.enumerator.enumerate(container.firstChild);\n this.hasText = false;\n\n return this.htmlLines.html();\n },\n\n buildText: function(node) {\n if (dom.isDataNode(node)) {\n if (dom.isEmptyspace(node)) {\n return;\n }\n this.htmlLines.appendText(node.nodeValue.replace('\\n', this.separators.line));\n this.hasText = true;\n } else if (dom.isBlock(node) && this.hasText) {\n var action = this.actions[dom.name(node)] || this.actions.block;\n return action(this, node);\n } else if (dom.isBr(node)) {\n this.htmlLines.appendText(this.separators.line);\n }\n },\n\n applicable: function() {\n var o = this.options;\n return o.all || o.keepNewLines;\n },\n\n getDefaultSeparators: function() {\n if (this.options.all) {\n return { text: \" \", line: \" \" };\n } else {\n return { text: \" \", line: \"
    \" };\n }\n },\n\n actions: {\n ul: $.noop,\n ol: $.noop,\n table: $.noop,\n thead: $.noop,\n tbody: $.noop,\n td: function(cleaner, node) {\n var tdCleaner = new HtmlContentCleaner({ all: true });\n\n var cellText = tdCleaner.cleanDom(node);\n cleaner.htmlLines.appendInlineBlockText(cellText);\n\n return true;\n },\n\n block: function(cleaner) {\n cleaner.htmlLines.endLine();\n }\n }\n });\n\n var CustomCleaner = Cleaner.extend({\n clean: function(html) {\n return this.options.custom(html);\n },\n\n applicable: function() {\n return typeof(this.options.custom) === \"function\";\n }\n });\n\n extend(editorNS, {\n Clipboard: Clipboard,\n Cleaner: Cleaner,\n ScriptCleaner: ScriptCleaner,\n TabCleaner: TabCleaner,\n MSWordFormatCleaner: MSWordFormatCleaner,\n WebkitFormatCleaner: WebkitFormatCleaner,\n HtmlTagsCleaner: HtmlTagsCleaner,\n HtmlAttrCleaner: HtmlAttrCleaner,\n HtmlContentCleaner: HtmlContentCleaner,\n HtmlTextLines: HtmlTextLines,\n CustomCleaner: CustomCleaner\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n Class = kendo.Class,\n editorNS = kendo.ui.editor,\n RangeUtils = editorNS.RangeUtils,\n dom = editorNS.Dom,\n RestorePoint = editorNS.RestorePoint,\n Marker = editorNS.Marker,\n browser = kendo.support.browser,\n bomSpan = \"\\ufeff\",\n extend = $.extend;\n var nodeTypes = dom.nodeTypes;\n var PREVIOUS_SIBLING = \"previousSibling\";\n\n function selected(node, range) {\n return range.startContainer === node && range.endContainer === node &&\n range.startOffset === 0 && range.endOffset == node.childNodes.length;\n }\n\n function getSibling(node, direction, condition) {\n var sibling = node ? node[direction] : null;\n\n while (sibling && !condition(sibling)) {\n sibling = sibling[direction];\n }\n\n return sibling;\n }\n\n var tableCells = \"td,th,caption\";\n var tableCellsWrappers = \"table,tbody,thead,tfoot,tr\";\n var tableElements = tableCellsWrappers + \",\" + tableCells;\n var inTable = function(range) { return !range.collapsed && $(range.commonAncestorContainer).is(tableCellsWrappers); };\n\n var RemoveTableContent = Class.extend({\n remove: function(range) {\n var that = this;\n var marker = new Marker();\n marker.add(range, false);\n\n var nodes = RangeUtils.getAll(range, function(node) { return $(node).is(tableElements); });\n var doc = RangeUtils.documentFromRange(range);\n var start = marker.start;\n var end = marker.end;\n var cellsTypes = tableCells.split(\",\");\n var startCell = dom.parentOfType(start, cellsTypes);\n var endCell = dom.parentOfType(end, cellsTypes);\n that._removeContent(start, startCell, true);\n that._removeContent(end, endCell, false);\n $(nodes).each(function(i, node) {\n node = $(node);\n (node.is(tableCells) ? node : node.find(tableCells)).each(function(j, cell) {\n cell.innerHTML = \"\";\n });\n });\n if (startCell && !start.previousSibling) {\n dom.insertBefore(doc.createTextNode(\"\\ufeff\"), start);\n }\n if (endCell && !end.nextSibling) {\n dom.insertAfter(doc.createTextNode(\"\\ufeff\"), end);\n }\n if (startCell) {\n range.setStartBefore(start);\n } else if (nodes[0]) {\n startCell = $(nodes[0]);\n startCell = startCell.is(tableCells) ? startCell : startCell.find(tableCells).first();\n if (startCell.length) {\n range.setStart(startCell.get(0), 0);\n }\n }\n\n range.collapse(true);\n\n dom.remove(start);\n dom.remove(end);\n },\n _removeContent: function(start, top, forwards) {\n if (top) {\n var sibling = forwards ? \"nextSibling\" : \"previousSibling\",\n next,\n getNext = function(node) {\n while (node && !node[sibling]) {\n node = node.parentNode;\n }\n return node && $.contains(top, node) ? node[sibling] : null;\n };\n start = getNext(start);\n while (start) {\n next = getNext(start);\n dom.remove(start);\n start = next;\n }\n }\n }\n });\n\n var TypingHandler = Class.extend({\n init: function(editor) {\n this.editor = editor;\n },\n\n keydown: function(e) {\n var that = this,\n editor = that.editor,\n keyboard = editor.keyboard,\n isTypingKey = keyboard.isTypingKey(e),\n evt = extend($.Event(), e);\n\n that.editor.trigger(\"keydown\", evt);\n\n if (evt.isDefaultPrevented()) {\n e.preventDefault();\n return true;\n }\n\n if (!evt.isDefaultPrevented() && isTypingKey && !keyboard.isTypingInProgress()) {\n var range = editor.getRange();\n var body = editor.body;\n that.startRestorePoint = new RestorePoint(range, body);\n\n if (inTable(range)) {\n var removeTableContent = new RemoveTableContent(editor);\n removeTableContent.remove(range);\n editor.selectRange(range);\n }\n\n if (browser.webkit && !range.collapsed && selected(body, range)) {\n body.innerHTML = \"\";\n }\n\n if (editor.immutables && editorNS.Immutables.immutablesContext(range)) {\n var backspaceHandler = new editorNS.BackspaceHandler(editor);\n backspaceHandler.deleteSelection(range);\n }\n\n keyboard.startTyping(function() {\n that._removeBomSpan();\n that.endRestorePoint = editorNS._finishUpdate(editor, that.startRestorePoint);\n });\n\n return true;\n }\n\n return false;\n },\n\n keyup: function(e) {\n var keyboard = this.editor.keyboard;\n\n this.editor.trigger(\"keyup\", e);\n\n if (keyboard.isTypingInProgress()) {\n keyboard.endTyping();\n return true;\n }\n\n return false;\n },\n\n _removeBomSpan: function() {\n var node = this.editor.getRange().commonAncestorContainer;\n\n if (!dom.emptyNode(node)) {\n if (node.nodeType === 3) {\n node = node.parentNode;\n }\n\n if (dom.insignificant(node)) {\n // typing in an insignificant node\n // make it significant\n node.textContent = dom.stripBom(node.textContent);\n dom.unwrap(node);\n }\n }\n }\n });\n\n var BackspaceHandler = Class.extend({\n init: function(editor) {\n this.editor = editor;\n },\n _addCaret: function(container) {\n var caret = dom.create(this.editor.document, \"a\");\n\n // Only if not Chrome: Make sure to include cared in the formatted inline node\n if (!kendo.support.browser.chrome && container.firstChild &&\n container.firstChild.nodeType === nodeTypes.ELEMENT_NODE) {\n\n container = container.firstChild;\n }\n\n dom.insertAt(container, caret, 0);\n dom.stripBomNode(caret.previousSibling);\n dom.stripBomNode(caret.nextSibling);\n return caret;\n },\n _restoreCaret: function(caret) {\n var range = this.editor.createRange();\n\n if (!caret.nextSibling && dom.isDataNode(caret.previousSibling)) {\n range.setStart(caret.previousSibling, caret.previousSibling.length);\n } else {\n range.setStartAfter(caret);\n }\n\n range.collapse(true);\n this.editor.selectRange(range);\n dom.remove(caret);\n },\n _handleDelete: function(range) {\n var node = range.endContainer;\n var block = dom.closestEditableOfType(node, dom.blockElements);\n\n if (block && editorNS.RangeUtils.isEndOf(range, block)) {\n // join with next sibling\n var next = dom.next(block);\n if (!next || dom.name(next) != \"p\") {\n return false;\n }\n\n var caretPlaceholder = dom.significantChildNodes(next)[0];\n caretPlaceholder = (caretPlaceholder && dom.isInline(caretPlaceholder)) ? caretPlaceholder : next;\n var caret = this._addCaret(caretPlaceholder);\n\n this._merge(block, next);\n\n this._restoreCaret(caret);\n\n return true;\n }\n\n return false;\n },\n _cleanBomBefore: function(range) {\n var offset = range.startOffset;\n var node = range.startContainer;\n var text = node.nodeValue;\n var count = 0;\n while (offset - count >= 0 && text[offset - count - 1] == \"\\ufeff\") {\n count++;\n }\n\n if (count > 0) {\n node.deleteData(offset - count, count);\n\n range.setStart(node, Math.max(0, offset - count));\n range.collapse(true);\n\n this.editor.selectRange(range);\n }\n },\n _handleBackspace: function(range) {\n var node = range.startContainer;\n var li = dom.closestEditableOfType(node, ['li']);\n var block = dom.closestEditableOfType(node, 'p,h1,h2,h3,h4,h5,h6'.split(','));\n var editor = this.editor;\n var previousSibling;\n\n if (dom.isDataNode(node)) {\n if (range.collapsed && /^\\s[\\ufeff]+$/.test(node.nodeValue)) {\n range.setStart(node, 0);\n range.setEnd(node, node.length);\n editor.selectRange(range);\n return false;\n }\n this._cleanBomBefore(range);\n }\n\n previousSibling = getSibling(block, PREVIOUS_SIBLING, function(sibling) {\n return !dom.htmlIndentSpace(sibling);\n });\n\n //deleting the first list item with empty content in IE results in invalid range\n if (range.collapsed && range.startOffset !== range.endOffset && range.startOffset < 0) {\n range.startOffset = 0;\n range.endOffset = 0;\n editor.selectRange(range);\n }\n\n var startAtLi = li && editorNS.RangeUtils.isStartOf(range, li);\n var liIndex = li && $(li).index();\n var startAtNonFirstLi = startAtLi && liIndex > 0;\n if (startAtNonFirstLi) {\n block = li;\n previousSibling = dom.prev(li);\n }\n\n if (block && previousSibling && dom.is(previousSibling, 'table') && editorNS.RangeUtils.isStartOf(range, block)) {\n if (block.innerText === '') {\n block.innerHTML = '\\ufeff';\n }\n return true;\n }\n\n // outdent\n if (editorNS.RangeUtils.isStartOf(range, block) && parseInt(block.style.marginLeft,10) > 0) {\n editor.exec(\"outdent\");\n return true;\n }\n\n // unwrap block\n if ((block && previousSibling && editorNS.RangeUtils.isStartOf(range, block)) || startAtNonFirstLi) {\n var caretPlaceholder = dom.significantChildNodes(block)[0];\n caretPlaceholder = (caretPlaceholder && dom.isInline(caretPlaceholder) && !dom.isImg(caretPlaceholder)) ? caretPlaceholder : block;\n\n var caret = this._addCaret(caretPlaceholder);\n this._merge(previousSibling, block);\n this._restoreCaret(caret);\n\n return true;\n }\n\n // unwrap li element\n if (startAtLi && liIndex === 0) {\n var child = li.firstChild;\n if (!child) {\n li.innerHTML = editorNS.emptyElementContent;\n child = li.firstChild;\n }\n\n var formatter = new editorNS.ListFormatter(dom.name(li.parentNode), \"p\");\n range.selectNodeContents(li);\n formatter.toggle(range);\n\n if (dom.insignificant(child)) {\n range.setStartBefore(child);\n } else {\n range.setStart(child, 0);\n }\n\n editor.selectRange(range);\n\n return true;\n }\n\n var rangeStartNode = node.childNodes[range.startOffset - 1];\n var linkRange = range;\n var anchor = rangeStartNode && dom.closestEditableOfType(rangeStartNode, ['a']);\n var previousNode = getSibling(rangeStartNode || node, PREVIOUS_SIBLING, function(sibling) {\n return !dom.isDataNode(sibling) || (!dom.isBom(sibling) && sibling.length > 0);\n });\n if (anchor || ((range.startOffset === 0 || rangeStartNode) && dom.is(previousNode, \"a\"))) {\n anchor = anchor || previousNode;\n linkRange = editor.createRange();\n linkRange.setStart(anchor, anchor.childNodes.length);\n linkRange.collapse(true);\n }\n\n anchor = anchor || dom.closestEditableOfType(rangeStartNode || linkRange.startContainer, ['a']);\n var isEndOfLink = anchor && editorNS.RangeUtils.isEndOf(linkRange, anchor);\n if (isEndOfLink) {\n var command = new editorNS.UnlinkCommand({ range: linkRange, body: editor.body, immutables: !!editor.immutables });\n editor.execCommand(command);\n editor._selectionChange();\n }\n return false;\n },\n _handleSelection: function(range) {\n var ancestor = range.commonAncestorContainer;\n var table = dom.closest(ancestor, \"table\");\n var emptyParagraphContent = editorNS.emptyElementContent;\n var editor = this.editor;\n var parentElementOrNode;\n\n if (inTable(range)) {\n var removeTableContent = new RemoveTableContent(editor);\n removeTableContent.remove(range);\n editor.selectRange(range);\n return true;\n }\n\n var marker = new Marker();\n marker.add(range, false);\n\n if (range.commonAncestorContainer === editor.body) {\n this._surroundFullyContent(marker, range);\n }\n\n if (editor.immutables) {\n this._handleImmutables(marker);\n }\n\n this._surroundFullySelectedAnchor(marker, range);\n\n range.setStartAfter(marker.start);\n range.setEndBefore(marker.end);\n\n var start = range.startContainer;\n var end = range.endContainer;\n\n range.deleteContents();\n\n if (end.tagName.toLocaleLowerCase() === \"li\" && dom.emptyNode(end)) {\n range.selectNode(end);\n range.deleteContents();\n }\n\n if (table && $(table).text() === \"\") {\n range.selectNode(table);\n range.deleteContents();\n }\n\n ancestor = range.commonAncestorContainer;\n\n if (dom.name(ancestor) === \"p\" && ancestor.innerHTML === \"\") {\n ancestor.innerHTML = emptyParagraphContent;\n range.setStart(ancestor, 0);\n }\n\n this._join(start, end);\n\n dom.insertAfter(editor.document.createTextNode(\"\\ufeff\"), marker.start);\n marker.remove(range);\n\n start = range.startContainer;\n if (dom.name(start) == \"tr\") {\n start = start.childNodes[Math.max(0, range.startOffset - 1)];\n range.setStart(start, dom.getNodeLength(start));\n }\n\n range.collapse(true);\n\n editor.selectRange(range);\n\n parentElementOrNode = start.parentElement || start.parentNode;\n\n if (dom.isDataNode(start) && !dom.emptyNode(parentElementOrNode)) {\n this._cleanBomBefore(range);\n }\n\n return true;\n },\n _handleImmutables: function(marker) {\n var immutableParent = editorNS.Immutables.immutableParent;\n var startImmutable = immutableParent(marker.start);\n var endImmutable = immutableParent(marker.start);\n if (startImmutable) {\n dom.insertBefore(marker.start, startImmutable);\n }\n if (endImmutable) {\n dom.insertAfter(marker.end, endImmutable);\n }\n if (startImmutable) {\n dom.remove(startImmutable);\n }\n if (endImmutable && endImmutable.parentNode) {\n dom.remove(endImmutable);\n }\n },\n _surroundFullyContent: function(marker, range) {\n var children = range.commonAncestorContainer.children,\n startParent = children[0],\n endParent = children[children.length - 1];\n\n this._moveMarker(marker, range, startParent, endParent);\n },\n _surroundFullySelectedAnchor: function(marker, range) {\n var start = marker.start,\n startParent = $(start).closest(\"a\").get(0),\n end = marker.end,\n endParent = $(end).closest(\"a\").get(0);\n\n this._moveMarker(marker, range, startParent, endParent);\n },\n _moveMarker: function(marker, range, startParent, endParent) {\n var start = marker.start,\n end = marker.end;\n\n if (startParent && RangeUtils.isStartOf(range, startParent)) {\n dom.insertBefore(start, startParent);\n }\n\n if (endParent && RangeUtils.isEndOf(range, endParent)) {\n dom.insertAfter(end, endParent);\n }\n },\n _root: function(node) {\n while (node && dom.name(node) != \"body\" && node.parentNode && dom.name(node.parentNode) != \"body\") {\n node = node.parentNode;\n }\n\n return node;\n },\n _join: function(start, end) {\n start = this._root(start);\n end = this._root(end);\n\n if (start != end && dom.is(end, \"p\")) {\n this._merge(start, end);\n }\n },\n _merge: function(dest, src) {\n dom.removeTrailingBreak(dest);\n\n while (dest && src.firstChild) {\n if (dest.nodeType == 1) {\n dest = dom.list(dest) ? dest.children[dest.children.length - 1] : dest;\n\n if (dest) {\n dest.appendChild(src.firstChild);\n }\n } else if (dest.nodeType === nodeTypes.TEXT_NODE) {\n this._mergeWithTextNode(dest, src.firstChild);\n } else {\n dest.parentNode.appendChild(src.firstChild);\n }\n }\n\n dom.remove(src);\n },\n\n _mergeWithTextNode: function(textNode, appendedNode) {\n if (textNode && textNode.nodeType === nodeTypes.TEXT_NODE) {\n if (textNode.nextSibling && this._isCaret(textNode.nextSibling)) {\n dom.insertAfter(appendedNode, textNode.nextSibling);\n }\n else {\n dom.insertAfter(appendedNode, textNode);\n }\n }\n },\n\n _isCaret: function(element) {\n return $(element).is(\"a\");\n },\n\n keydown: function(e) {\n var method, startRestorePoint;\n var editor = this.editor;\n var range = editor.getRange();\n var keyCode = e.keyCode;\n var keys = kendo.keys;\n var backspace = keyCode === keys.BACKSPACE;\n var del = keyCode == keys.DELETE;\n\n if (editor.immutables && editor.immutables.keydown(e, range)) {\n return;\n }\n\n if ((backspace || del) && !range.collapsed) {\n method = \"_handleSelection\";\n } else if (backspace) {\n method = \"_handleBackspace\";\n } else if (del) {\n method = \"_handleDelete\";\n }\n\n if (!method) {\n return;\n }\n\n startRestorePoint = new RestorePoint(range, editor.body);\n\n if (this[method](range)) {\n e.preventDefault();\n\n editorNS._finishUpdate(editor, startRestorePoint);\n }\n },\n deleteSelection: function(range) {\n this._handleSelection(range);\n },\n keyup: $.noop\n });\n\n var SystemHandler = Class.extend({\n init: function(editor) {\n this.editor = editor;\n this.systemCommandIsInProgress = false;\n },\n\n createUndoCommand: function() {\n this.startRestorePoint = this.endRestorePoint = editorNS._finishUpdate(this.editor, this.startRestorePoint);\n },\n\n changed: function() {\n if (this.startRestorePoint) {\n return this.startRestorePoint.html != this.editor.body.innerHTML;\n }\n\n return false;\n },\n\n keydown: function(e) {\n var that = this,\n editor = that.editor,\n keyboard = editor.keyboard;\n\n if (keyboard.isModifierKey(e)) {\n\n if (keyboard.isTypingInProgress()) {\n keyboard.endTyping(true);\n }\n\n that.startRestorePoint = new RestorePoint(editor.getRange(), editor.body);\n return true;\n }\n\n if (keyboard.isSystem(e)) {\n that.systemCommandIsInProgress = true;\n\n if (that.changed()) {\n that.systemCommandIsInProgress = false;\n that.createUndoCommand();\n }\n\n return true;\n }\n\n return false;\n },\n\n keyup: function() {\n var that = this;\n\n if (that.systemCommandIsInProgress && that.changed()) {\n that.systemCommandIsInProgress = false;\n that.createUndoCommand();\n return true;\n }\n\n return false;\n }\n });\n\n var SelectAllHandler = Class.extend({\n init: function(editor) {\n this.editor = editor;\n },\n\n keydown: function(e) {\n if (!browser.webkit || e.isDefaultPrevented() ||\n !(e.ctrlKey && e.keyCode == 65 && !e.altKey && !e.shiftKey)) {\n return;\n }\n if (this.editor.options.immutables) {\n this._toSelectableImmutables();\n }\n this._selectEditorBody();\n },\n\n _selectEditorBody: function() {\n var editor = this.editor;\n var range = editor.getRange();\n range.selectNodeContents(editor.body);\n\n setTimeout(function() {\n editor.selectRange(range);\n });\n },\n\n _toSelectableImmutables: function() {\n var editor = this.editor,\n body = editor.body,\n immutable = editorNS.Immutables.immutable,\n emptyTextNode = dom.emptyTextNode,\n first = body.firstChild,\n last = body.lastChild;\n\n while (emptyTextNode(first)) {\n first = first.nextSibling;\n }\n\n while (emptyTextNode(last)) {\n last = last.previousSibling;\n }\n\n if (first && immutable(first)) {\n $(bomSpan).prependTo(body);\n }\n\n if (last && immutable(last)) {\n $(bomSpan).appendTo(body);\n }\n },\n\n keyup: $.noop\n });\n\n var Keyboard = Class.extend({\n init: function(handlers) {\n this.handlers = handlers;\n this.typingInProgress = false;\n },\n\n isCharacter: function(keyCode) {\n return (keyCode >= 48 && keyCode <= 90) || (keyCode >= 96 && keyCode <= 111) ||\n (keyCode >= 186 && keyCode <= 192) || (keyCode >= 219 && keyCode <= 222) ||\n keyCode == 229;\n },\n\n toolFromShortcut: function(tools, e) {\n var key = String.fromCharCode(e.keyCode),\n toolName,\n toolOptions,\n modifier = this._getShortcutModifier(e, navigator.platform);\n\n for (toolName in tools) {\n toolOptions = $.extend({ ctrl: false, alt: false, shift: false }, tools[toolName].options);\n\n if ((toolOptions.key == key || toolOptions.key == e.keyCode) &&\n toolOptions.ctrl == modifier &&\n toolOptions.alt == e.altKey &&\n toolOptions.shift == e.shiftKey) {\n return toolName;\n }\n }\n },\n\n _getShortcutModifier: function(e, platform) {\n var mac = platform.toUpperCase().indexOf('MAC') >= 0;\n return mac ? e.metaKey : e.ctrlKey;\n },\n\n toolsFromShortcut: function(tools, e) {\n var key = String.fromCharCode(e.keyCode),\n toolName,\n o,\n matchesKey,\n found = [];\n var matchKey = function(toolKey) { return toolKey == key || toolKey == e.keyCode || toolKey == e.charCode; };\n\n for (toolName in tools) {\n o = $.extend({ ctrl: false, alt: false, shift: false }, tools[toolName].options);\n\n matchesKey = Array.isArray(o.key) ? $.grep(o.key, matchKey).length > 0 : matchKey(o.key);\n if (matchesKey &&\n o.ctrl == e.ctrlKey &&\n o.alt == e.altKey &&\n o.shift == e.shiftKey) {\n found.push(tools[toolName]);\n }\n }\n\n return found;\n },\n\n isTypingKey: function(e) {\n var keyCode = e.keyCode;\n return (this.isCharacter(keyCode) && !e.ctrlKey && !e.altKey) ||\n keyCode == 32 || keyCode == 13 || keyCode == 8 ||\n (keyCode == 46 && !e.shiftKey && !e.ctrlKey && !e.altKey);\n },\n\n isModifierKey: function(e) {\n var keyCode = e.keyCode;\n return (keyCode == 17 && !e.shiftKey && !e.altKey) ||\n (keyCode == 16 && !e.ctrlKey && !e.altKey) ||\n (keyCode == 18 && !e.ctrlKey && !e.shiftKey);\n },\n\n isSystem: function(e) {\n return e.keyCode == 46 && e.ctrlKey && !e.altKey && !e.shiftKey;\n },\n\n startTyping: function(callback) {\n this.onEndTyping = callback;\n this.typingInProgress = true;\n },\n\n stopTyping: function() {\n if (this.typingInProgress && this.onEndTyping) {\n this.onEndTyping();\n }\n this.typingInProgress = false;\n },\n\n endTyping: function(force) {\n var that = this;\n that.clearTimeout();\n if (force) {\n that.stopTyping();\n } else {\n that.timeout = window.setTimeout(that.stopTyping.bind(that), 1000);\n }\n },\n\n isTypingInProgress: function() {\n return this.typingInProgress;\n },\n\n clearTimeout: function() {\n window.clearTimeout(this.timeout);\n },\n\n notify: function(e, what) {\n var i, handlers = this.handlers;\n\n for (i = 0; i < handlers.length; i++) {\n if (handlers[i][what](e)) {\n break;\n }\n }\n },\n\n keydown: function(e) {\n this.notify(e, 'keydown');\n },\n\n keyup: function(e) {\n this.notify(e, 'keyup');\n }\n });\n\n extend(editorNS, {\n TypingHandler: TypingHandler,\n SystemHandler: SystemHandler,\n BackspaceHandler: BackspaceHandler,\n SelectAllHandler: SelectAllHandler,\n Keyboard: Keyboard\n });\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n editorNS = kendo.ui.editor,\n Command = editorNS.Command,\n EditorUtils = editorNS.EditorUtils,\n registerTool = EditorUtils.registerTool,\n Tool = editorNS.Tool,\n extend = $.extend;\n\n var ExportPdfCommand = Command.extend({\n init: function(options) {\n this.async = true;\n Command.fn.init.call(this, options);\n },\n\n exec: function() {\n var that = this;\n var range = that.lockRange(true);\n var editor = that.editor;\n\n editor._destroyResizings();\n\n editor.saveAsPDF().then(function() {\n that.releaseRange(range);\n editor._initializeColumnResizing();\n editor._initializeRowResizing();\n editor._initializeElementResizing();\n });\n }\n });\n\n extend(editorNS, {\n ExportPdfCommand: ExportPdfCommand\n });\n\n registerTool(\"pdf\", new Tool({ command: ExportPdfCommand }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n // Imports ================================================================\n var kendo = window.kendo,\n editorNS = kendo.ui.editor,\n Command = editorNS.Command,\n EditorUtils = editorNS.EditorUtils,\n registerTool = EditorUtils.registerTool,\n Tool = editorNS.Tool,\n extend = $.extend;\n\n var PrintCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n\n this.managesUndoRedo = true;\n },\n\n exec: function() {\n var editor = this.editor;\n\n if (kendo.support.browser.msie) {\n editor.document.execCommand(\"print\", false, null);\n } else if (editor.window.print) {\n editor.window.print();\n }\n }\n });\n\n extend(editorNS, {\n PrintCommand: PrintCommand\n });\n\n registerTool(\"print\", new Tool({ command: PrintCommand }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n var kendo = window.kendo,\n Editor = kendo.ui.editor,\n Tool = Editor.Tool,\n Command = Editor.Command,\n EditorUtils = Editor.EditorUtils,\n dom = Editor.Dom,\n RangeUtils = Editor.RangeUtils,\n registerTool = EditorUtils.registerTool;\n\n var CopyFormatCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n },\n\n exec: function() {\n var range = this.lockRange(true);\n this.inlineStyles = [];\n this.blockStyles = [];\n this.collectStyles(range);\n this.editor.inlineStyles = this.inlineStyles;\n this.editor.blockStyles = this.blockStyles;\n this.releaseRange(range);\n },\n\n collectStyles: function(range) {\n var rangeNodes = RangeUtils.nodes(range);\n var node;\n\n if (rangeNodes.length === 1) {\n node = rangeNodes[0].parentNode;\n } else {\n node = range.startContainer;\n }\n\n while (node && !dom.is(node, \"body\") && node.getAttribute(\"data-role\") !== \"editor\") {\n if (dom.isBlock(node)) {\n this.populateStyles(node, \"blockStyles\");\n if (dom.is(node, \"li\")) {\n node = node.parentNode;\n } else {\n node = null;\n }\n } else {\n this.populateStyles(node, \"inlineStyles\");\n node = node.parentNode;\n }\n }\n },\n\n populateStyles: function(node, destination) {\n var styles = node.style;\n var attributes = node.attributes;\n var nodeStyles = {\n tags: [ node.tagName ],\n attr: {\n style: {}\n }\n };\n var styleValue, styleKey, attributeKey, attributeValue, i;\n\n for (i = 0; styles && i < styles.length; i++) {\n styleKey = styles[i];\n styleValue = styles[styleKey];\n nodeStyles.attr.style[styleKey] = styleValue;\n }\n\n for (i = 0; attributes && i < attributes.length; i++) {\n attributeKey = attributes[i].nodeName;\n attributeValue = attributes[i].nodeValue;\n if (attributeKey === \"style\") {\n continue;\n } else if (attributeKey === \"class\") {\n nodeStyles.attr.className = attributeValue;\n } else {\n nodeStyles.attr[attributeKey] = attributeValue;\n }\n }\n\n this[destination].push(nodeStyles);\n }\n });\n\n var ApplyFormatCommand = Command.extend({\n init: function(options) {\n Command.fn.init.call(this, options);\n },\n\n exec: function() {\n var range = this.lockRange(true);\n var markers = RangeUtils.getMarkers(range);\n var editor = this.editor;\n var inlineStyles = editor.inlineStyles;\n var blockStyles = editor.blockStyles;\n var nodes;\n\n if ((!inlineStyles || inlineStyles.length === 0) && (!blockStyles || blockStyles.length === 0)) {\n return;\n }\n\n if (markers.length === 3) {\n this.marker.removeCaret(range);\n this.marker.caret = null;\n }\n\n this.removeEmptyElementsFromRange(range);\n nodes = RangeUtils.nodes(range);\n this.cleanInlineParents(nodes);\n dom.normalize(range.commonAncestorContainer);\n\n if (markers.length === 2) {\n range.setStartAfter(markers[0]);\n range.setEndBefore(markers[1]);\n } else {\n range.setStartBefore(nodes[0]);\n range.setEndAfter(nodes[0]);\n }\n\n nodes = RangeUtils.nodes(range);\n\n if (nodes && blockStyles && blockStyles.length) {\n this.applyBlockStyles(nodes, blockStyles);\n }\n\n if (nodes && inlineStyles && inlineStyles.length) {\n this.applyInlineStyles(nodes, inlineStyles);\n }\n\n this.releaseRange(range);\n },\n\n removeEmptyElementsFromRange: function(range) {\n var isEmptyInline = function(node) {\n return dom.isInline(node) && !node.firstChild && !dom.isMarker(node);\n };\n var emptyElements, i;\n\n emptyElements = RangeUtils.getAll(range, isEmptyInline);\n\n if (emptyElements && emptyElements.length > 0) {\n for (i = 0; i < emptyElements.length; i++) {\n emptyElements[i].parentNode.removeChild(emptyElements[i]);\n }\n }\n },\n\n cleanInlineParents: function(nodes) {\n var i, node, parent, children, j, child, newNode;\n\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n parent = node.parentNode;\n\n if (this.immutableParent(node)) {\n continue;\n }\n\n while (parent && dom.isInline(parent)) {\n children = parent.childNodes;\n\n for (j = 0; j < children.length; j++) {\n child = children[j];\n\n if (!dom.isMarker(child) && child !== node) {\n newNode = parent.cloneNode(true);\n newNode.innerHTML = \"\";\n dom.wrap(child, newNode);\n }\n }\n\n dom.unwrap(parent);\n parent = node.parentNode;\n }\n }\n },\n\n applyBlockStyles: function(nodes, blockStyles) {\n var formatTag = blockStyles[0].tags[0];\n var attr = blockStyles[0].attr;\n var document = this.editor.document;\n var i, len, node, wrapper, blockParent, outerWrapper;\n var previousNodes, nextNodes, previous, next, prevWrapper, nextWrapper, child, j, listItems;\n\n for (i = 0, len = nodes.length; i < len; i++) {\n node = nodes[i];\n\n if (dom.isWhitespace(node) || this.immutableParent(node)) {\n continue;\n }\n\n blockParent = dom.blockParentOrBody(node);\n\n if (blockParent.tagName !== \"BODY\" && blockParent.tagName !== formatTag) {\n if (blockParent.tagName !== \"LI\" && blockParent.tagName !== \"TD\" && blockParent.tagName !== \"TH\") {\n previousNodes = [];\n nextNodes = [];\n previous = node.previousSibling;\n next = node.nextSibling;\n\n while (previous) {\n if (!dom.isMarker(previous)) {\n previousNodes.push(previous);\n }\n\n previous = previous.previousSibling;\n }\n\n if (previousNodes.length) {\n prevWrapper = blockParent.cloneNode(true);\n prevWrapper.innerHTML = \"\";\n dom.insertBefore(prevWrapper, previousNodes[0]);\n\n for (j = 0; j < previousNodes.length; j++) {\n child = previousNodes[j];\n dom.insertAt(prevWrapper, child, 0);\n }\n }\n\n while (next) {\n if (!dom.isMarker(next)) {\n nextNodes.push(next);\n }\n\n next = next.nextSibling;\n }\n\n if (nextNodes.length) {\n nextWrapper = blockParent.cloneNode(true);\n nextWrapper.innerHTML = \"\";\n dom.insertBefore(nextWrapper, nextNodes[0]);\n\n for (j = 0; j < nextNodes.length; j++) {\n child = nextNodes[j];\n nextWrapper.appendChild(child);\n }\n }\n\n dom.unwrap(blockParent);\n }\n\n wrapper = dom.create(document, formatTag, attr);\n dom.wrap(node, wrapper);\n } else if (blockParent.tagName === formatTag) {\n dom.attr(blockParent, attr);\n }\n }\n\n if (blockParent && blockStyles.length === 2 && blockParent.tagName !== \"LI\" && formatTag === \"LI\") {\n listItems = [];\n\n while (dom.is(wrapper, \"li\")) {\n listItems.push(wrapper);\n wrapper = dom.prev(wrapper);\n }\n\n outerWrapper = dom.create(document, blockStyles[1].tags[0], blockStyles[1].attr);\n dom.insertBefore(outerWrapper, listItems[listItems.length - 1]);\n outerWrapper.appendChild(listItems[0]);\n\n for (i = 1, len = listItems.length; i < len; i++) {\n dom.insertBefore(listItems[i], outerWrapper.firstChild);\n }\n } else if (blockParent && blockStyles.length === 2 && blockParent.tagName !== \"LI\") {\n outerWrapper = dom.create(document, blockStyles[1].tags[0], blockStyles[1].attr);\n dom.wrap(wrapper, outerWrapper);\n }\n },\n\n applyInlineStyles: function(nodes, inlineStyles) {\n var document = this.editor.document;\n var currentStyle, createdNode, topNode, i, newNode, node;\n\n for (i = 0; i < inlineStyles.length; i++) {\n currentStyle = inlineStyles[i];\n createdNode = dom.create(document, currentStyle.tags[0], currentStyle.attr);\n\n if (topNode) {\n createdNode.appendChild(topNode);\n }\n\n topNode = createdNode;\n }\n\n if (topNode) {\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n if (dom.isWhitespace(node) || this.immutableParent(node)) {\n continue;\n }\n newNode = topNode.cloneNode(true);\n dom.insertBefore(newNode, node);\n\n while (newNode.children && newNode.children.length) {\n newNode = newNode.children[0];\n }\n\n newNode.appendChild(node);\n }\n }\n },\n\n immutables: function() {\n return this.editor && this.editor.options.immutables;\n },\n\n immutableParent: function(node) {\n return this.immutables() && Editor.Immutables.immutableParent(node);\n }\n });\n\n var CopyFormatTool = Tool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n },\n\n command: function(commandArguments) {\n return new CopyFormatCommand(commandArguments);\n }\n });\n\n var ApplyFormatTool = Tool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n },\n\n command: function(commandArguments) {\n return new ApplyFormatCommand(commandArguments);\n }\n });\n\n $.extend(Editor, {\n CopyFormatCommand: CopyFormatCommand,\n ApplyFormatCommand: ApplyFormatCommand,\n CopyFormatTool: CopyFormatTool,\n ApplyFormatTool: ApplyFormatTool\n });\n\n registerTool(\"copyFormat\", new CopyFormatTool({ }));\n registerTool(\"applyFormat\", new ApplyFormatTool({ }));\n\n })(window.kendo.jQuery);\n\n (function($) {\n\n const kendo = window.kendo,\n extend = $.extend,\n Editor = kendo.ui.editor,\n formats = kendo.ui.Editor.fn.options.formats,\n dom = Editor.Dom,\n Tool = Editor.Tool,\n DelayedExecutionTool = Editor.DelayedExecutionTool,\n BlockFormatter = Editor.BlockFormatter,\n FormatCommand = Editor.FormatCommand,\n GreedyInlineFormatFinder = Editor.GreedyInlineFormatFinder,\n EditorUtils = Editor.EditorUtils,\n registerTool = EditorUtils.registerTool,\n registerFormat = EditorUtils.registerFormat,\n RangeUtils = Editor.RangeUtils;\n\n const LineHeightCommand = FormatCommand.extend({\n exec: function() {\n const cmd = this,\n range = cmd.lockRange(true),\n nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n\n cmd.formatter.format[0].attr.style.lineHeight = cmd.options.value.lineHeight;\n cmd.formatter.apply(nodes);\n cmd.releaseRange(range);\n }\n });\n\n const LineHeightFormatTool = DelayedExecutionTool.extend({\n init: function(options) {\n Tool.fn.init.call(this, options);\n\n this.type = \"kendoComboBox\";\n this.format = [{ tags: [\"p\", \"lineHeight\"] }];\n this.finder = new GreedyInlineFormatFinder(this.format, options.cssAttr, options.fontAttr, options.defaultValue);\n },\n\n command: function(commandArguments) {\n var that = this;\n\n return new LineHeightCommand(extend(commandArguments, {\n formatter: function() {\n return new BlockFormatter(that.options.format);\n }\n }));\n },\n\n initialize: function(ui, editor) {\n var tool = this,\n component = ui.getKendoComboBox();\n\n tool.editor = editor;\n\n component.bind(\"change\", this.changeHandler.bind(this));\n },\n\n changeHandler: function(e) {\n this._exec(e.sender.value());\n },\n\n _exec: function(value) {\n if (value) {\n Tool.exec(this.editor, this.options.name, { lineHeight: value });\n }\n },\n });\n\n $.extend(Editor, {\n LineHeightCommand: LineHeightCommand,\n LineHeightFormatTool: LineHeightFormatTool\n });\n\n registerFormat(\"lineHeight\", [\n { tags: dom.blockElements, attr: { style: { lineHeight: \"normal\" } } }\n ]);\n\n registerTool(\"lineHeight\", new LineHeightFormatTool({\n cssAttr: \"line-height\",\n format: formats.lineHeight,\n defaultValue: 1.15,\n ui: {\n type: \"component\",\n component: \"ComboBox\",\n componentOptions: {\n value: 1.15,\n dataTextField: \"text\",\n dataValueField: \"value\",\n prefixOptions: {\n icon: \"paragraphHeight\"\n },\n autoSize: true,\n dataSource: [\n { text: \"1\", value: \"1\" },\n { text: \"1.15\", value: \"1.15\" },\n { text: \"1.5\", value: \"1.5\" },\n { text: \"2\", value: \"2\" },\n { text: \"2.5\", value: \"2.5\" },\n ]\n }\n }\n }));\n })(window.kendo.jQuery);\n\n (function($) {\n\n const kendo = window.kendo,\n Editor = kendo.ui.editor,\n Tool = Editor.Tool,\n Command = Editor.Command,\n EditorUtils = Editor.EditorUtils,\n registerTool = EditorUtils.registerTool,\n DOM = Editor.Dom,\n SPACE_UNICODE = \"\\u00B7\",\n NEW_LINE_UNICODE = \"\\u21B5\";\n\n const createMark = function(range, document, character, scrollTop, index) {\n const clonedRange = range.cloneRange(),\n container = clonedRange.startContainer;\n\n let domRect, x, y, textNode;\n\n if (index !== undefined) {\n clonedRange.setStart(container, index);\n clonedRange.setEnd(container, index + 1);\n }\n\n domRect = clonedRange.getBoundingClientRect();\n\n if (character === SPACE_UNICODE) {\n x = domRect.x - domRect.width / 4;\n y = domRect.y + domRect.height + scrollTop;\n } else if (character === NEW_LINE_UNICODE) {\n x = domRect.x;\n y = domRect.y + domRect.height + scrollTop;\n }\n\n textNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"text\");\n textNode.setAttributeNS(null, \"x\", x);\n textNode.setAttributeNS(null, \"y\", y);\n textNode.setAttributeNS(null, \"fill\", \"#6098f2\");\n textNode.setAttributeNS(null, \"font-size\", `${Math.ceil(domRect.height + domRect.width)}px`);\n textNode.textContent = character;\n\n return textNode;\n };\n\n const appendSvgMarks = function() {\n const that = this,\n range = that.getRange().cloneRange(),\n svgNodes = [],\n overlay = that._formattingMarksOverlay[0],\n fragment = that.document.createDocumentFragment(),\n document = that.document,\n scrollTop = document.documentElement.scrollTop;\n\n range.setStart(that.body.firstChild, 0);\n range.setEnd(that.body.lastChild, 0);\n\n const nodes = DOM.getTextNodes(that.body).concat($(that.body).find(\"br\").toArray());\n\n nodes.forEach((node) => {\n if (node.nodeType === DOM.nodeTypes.TEXT_NODE) {\n range.selectNodeContents(node);\n\n for (let i = range.startOffset; i < range.endOffset; i++) {\n if ((range.startContainer.textContent.charCodeAt(i) === 32 || range.startContainer.textContent.charCodeAt(i) === 160)) {\n fragment.appendChild(createMark(range, document, SPACE_UNICODE, scrollTop, i));\n }\n }\n } else {\n range.selectNode(node);\n fragment.appendChild(createMark(range, document, NEW_LINE_UNICODE, scrollTop));\n }\n });\n\n overlay.appendChild(fragment);\n };\n\n const clearFormattingMarksOverlay = function(editor) {\n editor._formattingMarksOverlay.empty();\n };\n\n const applyFormattingMarks = function(editor) {\n appendSvgMarks.call(editor);\n };\n\n const FormattingMarksCommand = Command.extend({\n exec: function() {\n const cmd = this,\n range = cmd.lockRange(true),\n editor = cmd.editor;\n\n if (!editor._toggledFormattingMarks) {\n editor._toggledFormattingMarks = true;\n editor._appendFormattingMarksOverlay();\n editor._appendFormattingMarksStyles();\n clearFormattingMarksOverlay(editor);\n applyFormattingMarks(editor);\n } else {\n editor._toggledFormattingMarks = false;\n editor._destroyFormattingMarksOverlay();\n }\n\n cmd.releaseRange(range);\n }\n });\n\n $.extend(Editor, {\n FormattingMarksCommand: FormattingMarksCommand,\n applyFormattingMarks: applyFormattingMarks,\n clearFormattingMarksOverlay: clearFormattingMarksOverlay\n });\n\n registerTool(\"formattingMarks\", new Tool({ command: FormattingMarksCommand, icon: \"paragraphMark\", ui: { togglable: true } }));\n })(window.kendo.jQuery);\n\n (function(kendo, undefined$1) {\n var global = window;\n var math = global.Math;\n var min = math.min;\n var max = math.max;\n var parseFloat = global.parseFloat;\n\n var $ = kendo.jQuery;\n var extend = $.extend;\n\n var Editor = kendo.ui.editor;\n\n var PERCENTAGE = \"%\";\n var PIXEL = \"px\";\n var REGEX_NUMBER_IN_PERCENTAGES = /(\\d+)(\\.?)(\\d*)%/;\n var REGEX_NUMBER_IN_PIXELS = /(\\d+)(\\.?)(\\d*)px/;\n var STRING = \"string\";\n\n function constrain(options) {\n var value = options.value;\n var lowerBound = options.min;\n var upperBound = options.max;\n\n return max(min(parseFloat(value), parseFloat(upperBound)), parseFloat(lowerBound));\n }\n\n function getScrollBarWidth(element) {\n if (element && !$(element).is(\"body\") && element.scrollHeight > element.clientHeight) {\n return kendo.support.scrollbar();\n }\n\n return 0;\n }\n\n function calculatePercentageRatio(value, total) {\n if (inPercentages(value)) {\n return parseFloat(value);\n }\n else {\n return ((parseFloat(value) / total) * 100);\n }\n }\n\n function inPercentages(value) {\n return (typeof(value) === STRING && REGEX_NUMBER_IN_PERCENTAGES.test(value));\n }\n\n function inPixels(value) {\n return (typeof(value) === STRING && REGEX_NUMBER_IN_PIXELS.test(value));\n }\n\n function toPercentages(value) {\n return (parseFloat(value) + PERCENTAGE);\n }\n\n function toPixels(value) {\n return (parseFloat(value) + PIXEL);\n }\n\n var ResizingUtils = {\n constrain: constrain,\n getScrollBarWidth: getScrollBarWidth,\n calculatePercentageRatio: calculatePercentageRatio,\n inPercentages: inPercentages,\n inPixels: inPixels,\n toPercentages: toPercentages,\n toPixels: toPixels\n };\n\n extend(Editor, {\n ResizingUtils: ResizingUtils\n });\n })(window.kendo);\n\n (function(kendo, undefined$1) {\n var $ = kendo.jQuery;\n var extend = $.extend;\n var noop = $.noop;\n\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n\n var KEY_DOWN = \"keydown\";\n var MOUSE_DOWN = \"mousedown\";\n var MOUSE_ENTER = \"mouseenter\";\n var MOUSE_LEAVE = \"mouseleave\";\n var MOUSE_MOVE = \"mousemove\";\n var MOUSE_UP = \"mouseup\";\n\n var COMMA = \",\";\n var DOT = \".\";\n var LAST_CHILD = \":last-child\";\n\n var TABLE = \"table\";\n\n var TableElementResizing = Class.extend({\n init: function(element, options) {\n var that = this;\n\n that.options = extend({}, that.options, options);\n\n that.options.tags = Array.isArray(that.options.tags) ? that.options.tags : [that.options.tags];\n\n if ($(element).is(TABLE)) {\n that.element = element;\n that._attachEventHandlers();\n }\n },\n\n destroy: function() {\n var that = this;\n var eventNamespace = that.options.eventNamespace;\n\n if (that.element) {\n $(that.element).off(eventNamespace);\n that.element = null;\n }\n\n $(that.options.rootElement).off(KEY_DOWN + eventNamespace);\n\n that._destroyResizeHandle();\n },\n\n options: {\n tags: [],\n min: 0,\n rootElement: null,\n eventNamespace: \"\",\n rtl: false,\n handle: {\n dataAttribute: \"\",\n height: 0,\n width: 0,\n classNames: {},\n template: \"\"\n }\n },\n\n _attachEventHandlers: function() {\n var that = this;\n var options = that.options;\n\n $(that.element).on(MOUSE_MOVE + options.eventNamespace, options.tags.join(COMMA), that.detectElementBorderHovering.bind(that));\n },\n\n resizingInProgress: function() {\n var that = this;\n var resizable = that._resizable;\n\n if (resizable) {\n return !!resizable.resizing;\n }\n\n return false;\n },\n\n resize: noop,\n\n detectElementBorderHovering: function(e) {\n var that = this;\n var options = that.options;\n var handleOptions = options.handle;\n var tableElement = $(e.currentTarget);\n var resizeHandle = that.resizeHandle;\n var dataAttribute = handleOptions.dataAttribute;\n\n if (!that.resizingInProgress()) {\n if (!tableElement.is(LAST_CHILD) && that.elementBorderHovered(tableElement, e)) {\n if (resizeHandle) {\n if (resizeHandle.data(dataAttribute) && resizeHandle.data(dataAttribute) !== tableElement[0]) {\n that.showResizeHandle(tableElement, e);\n }\n }\n else {\n that.showResizeHandle(tableElement, e);\n }\n }\n else {\n if (resizeHandle) {\n that._destroyResizeHandle();\n }\n }\n }\n },\n\n elementBorderHovered: noop,\n\n showResizeHandle: function(tableElement, e) {\n var that = this;\n\n if (e.buttons !== 0) {\n //prevent showing when a mouse button is still being pressed\n return;\n }\n\n that._initResizeHandle();\n that.setResizeHandlePosition(tableElement);\n that.setResizeHandleDimensions();\n that.setResizeHandleDataAttributes(tableElement[0]);\n that._attachResizeHandleEventHandlers();\n\n that._initResizable(tableElement);\n\n that._hideResizeMarker();\n that.resizeHandle.show();\n },\n\n _initResizeHandle: function() {\n var that = this;\n var options = that.options;\n\n that._destroyResizeHandle();\n\n that.resizeHandle = $(options.handle.template).appendTo(options.rootElement);\n },\n\n setResizeHandlePosition: noop,\n\n setResizeHandleDimensions: noop,\n\n setResizeHandleDataAttributes: function(tableElement) {\n var that = this;\n\n that.resizeHandle.data(that.options.handle.dataAttribute, tableElement);\n },\n\n _attachResizeHandleEventHandlers: function() {\n var that = this;\n var options = that.options;\n var eventNamespace = options.eventNamespace;\n var markerClass = options.handle.classNames.marker;\n var resizeHandle = that.resizeHandle;\n\n that.resizeHandle\n .on(MOUSE_DOWN + eventNamespace, function() {\n resizeHandle.find(DOT + markerClass).show();\n })\n .on(MOUSE_UP + eventNamespace, function() {\n resizeHandle.find(DOT + markerClass).hide();\n });\n },\n\n _hideResizeMarker: function() {\n var that = this;\n\n that.resizeHandle.find(DOT + that.options.handle.classNames.marker).hide();\n },\n\n _destroyResizeHandle: function() {\n var that = this;\n\n if (that.resizeHandle) {\n that._destroyResizable();\n that.resizeHandle.off(that.options.eventNamespace).remove();\n that.resizeHandle = null;\n }\n },\n\n _initResizable: function(tableElement) {\n var that = this;\n\n if (!that.resizeHandle) {\n return;\n }\n\n that._destroyResizable();\n\n that._resizable = new kendo.ui.Resizable(tableElement, {\n draggableElement: that.resizeHandle[0],\n start: that.onResizeStart.bind(that),\n resize: that.onResize.bind(that),\n resizeend: that.onResizeEnd.bind(that)\n });\n },\n\n _destroyResizable: function() {\n var that = this;\n\n if (that._resizable) {\n that._resizable.destroy();\n that._resizable = null;\n }\n },\n\n onResizeStart: function() {\n this._disableKeyboard();\n },\n\n onResize: function(e) {\n this.setResizeHandleDragPosition(e);\n },\n\n setResizeHandleDragPosition: noop,\n\n onResizeEnd: function(e) {\n var that = this;\n\n that.resize(e);\n that._destroyResizeHandle();\n that._enableKeyboard();\n },\n\n _enableKeyboard: function() {\n var options = this.options;\n\n $(options.rootElement).off(KEY_DOWN + options.eventNamespace);\n },\n\n _disableKeyboard: function() {\n var options = this.options;\n\n $(options.rootElement).on(KEY_DOWN + options.eventNamespace, function(e) {\n e.preventDefault();\n });\n },\n\n _forceResizing: function(e) {\n var resizable = this._resizable;\n\n if (resizable && resizable.userEvents) {\n resizable.userEvents._end(e);\n }\n }\n });\n\n var ResizingFactory = Class.extend({\n create: function(editor, options) {\n var that = this;\n var resizingName = options.name;\n var NS = options.eventNamespace;\n\n $(editor.body)\n .on(MOUSE_ENTER + NS, TABLE, function(e) {\n var table = e.currentTarget;\n var resizing = editor[resizingName];\n\n e.stopPropagation();\n\n if (resizing) {\n if (resizing.element !== table && !resizing.resizingInProgress()) {\n that._destroyResizing(editor, options);\n that._initResizing(editor, table, options);\n }\n }\n else {\n that._initResizing(editor, table, options);\n }\n })\n .on(MOUSE_LEAVE + NS, TABLE, function(e) {\n var parentTable;\n var resizing = editor[resizingName];\n\n e.stopPropagation();\n\n if (resizing && !resizing.resizingInProgress() && !resizing.resizeHandle) {\n parentTable = $(resizing.element).parents(TABLE)[0];\n\n if (parentTable) {\n that._destroyResizing(editor, options);\n that._initResizing(editor, parentTable, options);\n }\n }\n })\n .on(MOUSE_LEAVE + NS, function() {\n var resizing = editor[resizingName];\n\n if (resizing && !resizing.resizingInProgress()) {\n that._destroyResizing(editor, options);\n }\n })\n .on(MOUSE_UP + NS, function(e) {\n var resizing = editor[resizingName];\n var parentTable;\n\n if (resizing && resizing.resizingInProgress()) {\n parentTable = $(e.target).parents(TABLE)[0];\n\n if (parentTable) {\n resizing._forceResizing(e);\n that._destroyResizing(editor, options);\n that._initResizing(editor, parentTable, options);\n }\n }\n });\n },\n\n dispose: function(editor, options) {\n $(editor.body).off(options.eventNamespace);\n },\n\n _initResizing: function(editor, tableElement, options) {\n var resizingName = options.name;\n var resizingType = options.type;\n\n editor[resizingName] = new resizingType(tableElement, {\n rtl: kendo.support.isRtl(editor.element),\n rootElement: editor.body\n });\n },\n\n _destroyResizing: function(editor, options) {\n var resizingName = options.name;\n\n if (editor[resizingName]) {\n editor[resizingName].destroy();\n editor[resizingName] = null;\n }\n }\n });\n ResizingFactory.current = new ResizingFactory();\n\n TableElementResizing.create = function(editor, options) {\n ResizingFactory.current.create(editor, options);\n };\n\n TableElementResizing.dispose = function(editor, options) {\n ResizingFactory.current.dispose(editor, options);\n };\n\n extend(Editor, {\n TableElementResizing: TableElementResizing\n });\n\n })(window.kendo);\n\n (function(kendo, undefined$1) {\n var global = window;\n var math = global.Math;\n var abs = math.abs;\n\n var $ = kendo.jQuery;\n var extend = $.extend;\n\n var Editor = kendo.ui.editor;\n var dom = Editor.Dom;\n var TableElementResizing = Editor.TableElementResizing;\n var ResizingUtils = Editor.ResizingUtils;\n var constrain = ResizingUtils.constrain;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var getScrollBarWidth = ResizingUtils.getScrollBarWidth;\n var inPercentages = ResizingUtils.inPercentages;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerWidth = kendo._outerWidth;\n\n var NS = \".kendoEditorColumnResizing\";\n var RESIZE_HANDLE_CLASS = \"k-column-resize-handle\";\n var RESIZE_MARKER_CLASS = \"k-column-resize-marker\";\n\n var BODY = \"body\";\n var TBODY = \"tbody\";\n var THEAD = \"thead\";\n var TD = \"td\";\n var TH = \"th\";\n var TR = \"tr\";\n\n var COLATTR = \"col-index\";\n\n var COMMA = \",\";\n var WIDTH = \"width\";\n\n var ColumnResizing = TableElementResizing.extend({\n options: {\n tags: [TD, TH],\n min: 20,\n rootElement: null,\n eventNamespace: NS,\n rtl: false,\n handle: {\n dataAttribute: \"column\",\n width: 10,\n height: 0,\n classNames: {\n handle: RESIZE_HANDLE_CLASS,\n marker: RESIZE_MARKER_CLASS\n },\n template:\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    '\n }\n },\n\n elementBorderHovered: function(column, e) {\n var that = this;\n var options = that.options;\n var handleWidth = options.handle.width;\n var borderOffset = column.offset().left + (options.rtl ? 0 : outerWidth(column));\n\n\n var mousePosition = e.clientX + $(column[0].ownerDocument).scrollLeft();\n\n if ((mousePosition > (borderOffset - handleWidth)) && (mousePosition < (borderOffset + handleWidth))) {\n return true;\n }\n else {\n return false;\n }\n },\n\n setResizeHandlePosition: function(column) {\n var that = this;\n var tableInnerElement = $(that.element.tHead || that.element.tBodies[0]);\n var options = that.options;\n var rtl = options.rtl;\n var handleWidth = options.handle.width;\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : kendo.scrollLeft(rootElement);\n var columnWidthOffset = rtl ? 0 : outerWidth(column);\n var scrollBarWidth = rtl ? getScrollBarWidth(rootElement[0]) : 0;\n var columnOffsetLeft = column.offset().left -\n (rootElement.offset().left + parseFloat(rootElement.css(\"borderLeftWidth\"))) -\n parseFloat(column.css(\"marginLeft\"));\n var innerElementOffsetTop = tableInnerElement.offset().top -\n (rootElement.offset().top + parseFloat(rootElement.css(\"borderTopWidth\"))) -\n parseFloat(tableInnerElement.css(\"marginTop\"));\n var browser = kendo.support.browser;\n\n if (rtl && (browser.mozilla || (browser.webkit && browser.version >= 85))) {\n scrollLeftOffset = scrollLeftOffset * -1;\n }\n\n that.resizeHandle.css({\n top: innerElementOffsetTop + scrollTopOffset,\n left: columnOffsetLeft + columnWidthOffset + (scrollLeftOffset - scrollBarWidth) - (handleWidth / 2),\n position: \"absolute\"\n });\n },\n\n setResizeHandleDimensions: function() {\n var that = this;\n var tableHead = $(that.element).children(THEAD);\n var tableBody = $(that.element).children(TBODY);\n var fullHeight = tableHead.length > 0 ? tableHead.height() + tableBody.height() : tableBody.height();\n\n that.resizeHandle.css({\n width: that.options.handle.width,\n height: fullHeight\n });\n },\n\n setResizeHandleDragPosition: function(e) {\n var that = this;\n var column = $($(e.currentTarget).data(that.options.handle.dataAttribute));\n var options = that.options;\n var rootElement = $(options.rootElement);\n var handleWidth = options.handle ? options.handle.width : 0;\n var min = options.min;\n var rtl = options.rtl;\n var columnWidth = outerWidth(column);\n var columnLeftOffset = column.offset().left -\n (rootElement.offset().left + parseFloat(rootElement.css(\"borderLeftWidth\"))) -\n parseFloat(column.css(\"marginLeft\"));\n var adjacentColumnWidth = outerWidth(column.next());\n var resizeHandle = $(that.resizeHandle);\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : kendo.scrollLeft(rootElement);\n var scrollBarWidth = rtl ? getScrollBarWidth(rootElement[0]) : 0;\n var resizeHandleOffsetLeft = resizeHandle.offset().left -\n (rootElement.offset().left + parseFloat(rootElement.css(\"borderLeftWidth\"))) -\n parseFloat(resizeHandle.css(\"marginLeft\"));\n var browser = kendo.support.browser;\n\n if (rtl && (browser.mozilla || (browser.webkit && browser.version >= 85))) {\n scrollLeftOffset = scrollLeftOffset * -1;\n }\n\n var handleOffset = constrain({\n value: resizeHandleOffsetLeft + (scrollLeftOffset - scrollBarWidth) + e.x.delta,\n min: columnLeftOffset + (scrollLeftOffset - scrollBarWidth) - (rtl ? adjacentColumnWidth : 0) + min,\n max: columnLeftOffset + columnWidth + (scrollLeftOffset - scrollBarWidth) + (rtl ? 0 : adjacentColumnWidth) - handleWidth - min\n });\n\n resizeHandle.css({ left: handleOffset });\n },\n\n resize: function(e) {\n var that = this;\n var column = $($(e.currentTarget).data(that.options.handle.dataAttribute));\n var options = that.options;\n var rtlModifier = options.rtl ? (-1) : 1;\n var min = options.min;\n var initialDeltaX = rtlModifier * e.x.initialDelta;\n var newWidth;\n var initialAdjacentColumnWidth;\n var initialColumnWidth;\n var colIndex;\n var nextColumn;\n\n dom.reMapTableColumns(that.element, COLATTR);\n\n colIndex = parseInt(column.attr(COLATTR), 10);\n\n if (column.prop(\"colSpan\") > 1) {\n column = $(that.element).find(\"[\" + COLATTR + \"=\" + (colIndex + column.prop(\"colSpan\") - 1) + \"]\").eq(0);\n colIndex = parseInt(column.attr(COLATTR), 10);\n }\n\n nextColumn = $(that.element).find(\"[\" + COLATTR + \"=\" + (colIndex + 1) + \"]:not([colspan])\");\n\n that._setTableComputedWidth();\n that._setColumnsComputedWidth();\n\n initialColumnWidth = outerWidth(column);\n initialAdjacentColumnWidth = outerWidth(nextColumn);\n\n newWidth = constrain({\n value: initialColumnWidth + initialDeltaX,\n min: min,\n max: initialColumnWidth + initialAdjacentColumnWidth - min\n });\n\n that._resizeColumn(column[0], newWidth);\n that._resizeTopAndBottomColumns(column[0], newWidth);\n that._resizeAdjacentColumns(parseInt(column.attr(COLATTR),10), initialAdjacentColumnWidth, initialColumnWidth, (initialColumnWidth - newWidth));\n\n dom.clearTableMappings(that.element, COLATTR);\n },\n\n _setTableComputedWidth: function() {\n var element = this.element;\n\n if (element.style[WIDTH] === \"\") {\n element.style[WIDTH] = toPixels(outerWidth($(element)));\n }\n },\n\n _setColumnsComputedWidth: function() {\n var that = this;\n var tableInnerElement = $(that.element.tHead || that.element.tBodies[0]);\n var innerElementWidth = outerWidth(tableInnerElement);\n var columns = tableInnerElement.children(TR).children(TD);\n var length = columns.length;\n var currentColumnsWidths = columns.map(function() {\n return outerWidth($(this));\n });\n var i;\n\n for (i = 0; i < length; i++) {\n if (inPercentages(columns[i].style[WIDTH])) {\n columns[i].style[WIDTH] = toPercentages(calculatePercentageRatio(currentColumnsWidths[i], innerElementWidth));\n }\n else {\n columns[i].style[WIDTH] = toPixels(currentColumnsWidths[i]);\n }\n }\n },\n\n _resizeTopAndBottomColumns: function(column, newWidth) {\n var that = this;\n var columnIndex = $(column).attr(COLATTR);\n var topAndBottomColumns = $(that.element).children(TBODY + COMMA + THEAD).children(TR).children(that.options.tags.join(COMMA))\n .filter(function() {\n var cell = this;\n return ($(cell).attr(COLATTR) === columnIndex && cell !== column);\n });\n var length = topAndBottomColumns.length;\n var i;\n\n for (i = 0; i < length; i++) {\n that._resizeColumn(topAndBottomColumns[i], newWidth);\n }\n },\n\n _resizeColumn: function(column, newWidth) {\n var innerTableElement = $(this.element.tHead || this.element.tBodies[0]);\n if (inPercentages(column.style[WIDTH])) {\n column.style[WIDTH] = toPercentages(calculatePercentageRatio(newWidth, outerWidth(innerTableElement)));\n }\n else {\n column.style[WIDTH] = toPixels(newWidth);\n }\n },\n\n _resizeAdjacentColumns: function(columnIndex, initialAdjacentColumnWidth, initialColumnWidth, deltaWidth) {\n var that = this;\n var adjacentColumns = $(that.element).children(TBODY + COMMA + THEAD).children(TR).children(that.options.tags.join(COMMA))\n .filter(function() {\n return (parseInt($(this).attr(COLATTR),10) === (columnIndex + 1));\n });\n var length = adjacentColumns.length;\n var i;\n\n for (i = 0; i < length; i++) {\n that._resizeAdjacentColumn(adjacentColumns[i], initialAdjacentColumnWidth, initialColumnWidth, deltaWidth);\n }\n },\n\n _resizeAdjacentColumn: function(adjacentColumn, initialAdjacentColumnWidth, initialColumnWidth, deltaWidth) {\n var that = this;\n var min = that.options.min;\n var newWidth;\n\n newWidth = constrain({\n value: initialAdjacentColumnWidth + deltaWidth,\n min: min,\n max: abs(initialColumnWidth + initialAdjacentColumnWidth - min)\n });\n\n that._resizeColumn(adjacentColumn, newWidth);\n }\n });\n\n ColumnResizing.create = function(editor) {\n TableElementResizing.create(editor, {\n name: \"columnResizing\",\n type: ColumnResizing,\n eventNamespace: NS\n });\n };\n\n ColumnResizing.dispose = function(editor) {\n TableElementResizing.dispose(editor, {\n eventNamespace: NS\n });\n };\n\n extend(Editor, {\n ColumnResizing: ColumnResizing\n });\n\n })(window.kendo);\n\n (function(kendo, undefined$1) {\n var math = window.Math;\n var abs = math.abs;\n\n var $ = kendo.jQuery;\n var extend = $.extend;\n\n var Editor = kendo.ui.editor;\n var TableElementResizing = Editor.TableElementResizing;\n var ResizingUtils = Editor.ResizingUtils;\n var getScrollBarWidth = ResizingUtils.getScrollBarWidth;\n var constrain = ResizingUtils.constrain;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var inPercentages = ResizingUtils.inPercentages;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerHeight = kendo._outerHeight;\n\n var NS = \".kendoEditorRowResizing\";\n var RESIZE_HANDLE_CLASS = \"k-row-resize-handle\";\n var RESIZE_HANDLE_MARKER_WRAPPER_CLASS = \"k-row-resize-marker-wrapper\";\n var RESIZE_MARKER_CLASS = \"k-row-resize-marker\";\n\n var BODY = \"body\";\n var TR = \"tr\";\n var TBODY = \"tbody\";\n var THEAD = \"thead\";\n\n var COMMA = \",\";\n var HEIGHT = \"height\";\n\n var RowResizing = TableElementResizing.extend({\n options: {\n tags: [TR],\n min: 20,\n rootElement: null,\n eventNamespace: NS,\n rtl: false,\n handle: {\n dataAttribute: \"row\",\n width: 0,\n height: 10,\n classNames: {\n handle: RESIZE_HANDLE_CLASS,\n marker: RESIZE_MARKER_CLASS\n },\n template:\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    '\n }\n },\n\n elementBorderHovered: function(tableElement, e) {\n var that = this;\n var handleHeight = that.options.handle[HEIGHT];\n var borderOffset = tableElement.offset().top + outerHeight(tableElement);\n var mousePosition = e.clientY + $(tableElement[0].ownerDocument).scrollTop();\n\n if ((mousePosition > (borderOffset - handleHeight)) && (mousePosition < (borderOffset + handleHeight))) {\n return true;\n }\n else {\n return false;\n }\n },\n\n setResizeHandlePosition: function(row) {\n var that = this;\n var options = that.options;\n var handleHeight = options.handle[HEIGHT];\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var scrollLeftOffset = rootElement.is(BODY) ? 0 : kendo.scrollLeft(rootElement);\n var scrollBarWidth = options.rtl ? getScrollBarWidth(rootElement[0]) : 0;\n\n var rowOffsetLeft = row.offset().left -\n (rootElement.offset().left + parseFloat(rootElement.css(\"borderLeftWidth\"))) -\n parseFloat(row.css(\"marginLeft\"));\n var rowOffsetTop = row.offset().top -\n (rootElement.offset().top + parseFloat(rootElement.css(\"borderTopWidth\"))) -\n parseFloat(row.css(\"marginTop\"));\n var browser = kendo.support.browser;\n\n if (options.rtl && (browser.mozilla || (browser.webkit && browser.version >= 85))) {\n scrollLeftOffset = scrollLeftOffset * -1;\n }\n\n that.resizeHandle.css({\n top: rowOffsetTop + outerHeight(row) + scrollTopOffset - (handleHeight / 2),\n left: rowOffsetLeft + (scrollLeftOffset - scrollBarWidth),\n position: \"absolute\"\n });\n },\n\n setResizeHandleDimensions: function() {\n var that = this;\n var innerTableElement = $(that.element.tHead || that.element.tBodies[0]);\n\n that.resizeHandle.css({\n width: innerTableElement.width(),\n height: that.options.handle[HEIGHT]\n });\n },\n\n setResizeHandleDragPosition: function(e) {\n var that = this;\n var options = that.options;\n var min = options.min;\n var tableHead = $(that.element).children(THEAD);\n var tableBody = $(that.element).children(TBODY);\n var topInnerTableElement = tableHead.length > 0 ? tableHead : tableBody;\n var resizeHandle = $(that.resizeHandle);\n var row = $(e.currentTarget).data(options.handle.dataAttribute);\n var $row = $(row);\n var rootElement = $(options.rootElement);\n var scrollTopOffset = rootElement.is(BODY) ? 0 : rootElement.scrollTop();\n var tableTopOffset = topInnerTableElement.offset().top -\n (rootElement.offset().top + parseFloat(rootElement.css(\"borderTopWidth\"))) -\n parseFloat(topInnerTableElement.css(\"marginTop\"));\n\n var rowOffsetTop = $row.offset().top -\n (rootElement.offset().top + parseFloat(rootElement.css(\"borderTopWidth\"))) -\n parseFloat($row.css(\"marginTop\"));\n\n var resizeHandleOffsetTop = resizeHandle.offset().top -\n (Math.max(0 , rootElement.offset().top) + parseFloat(rootElement.css(\"borderTopWidth\"))) -\n parseFloat(resizeHandle.css(\"marginTop\"));\n\n var handleOffset = constrain({\n value: resizeHandleOffsetTop + scrollTopOffset + e.y.delta,\n min: rowOffsetTop + scrollTopOffset + min,\n max: tableTopOffset + outerHeight(tableHead) + outerHeight(tableBody) + scrollTopOffset - options.handle[HEIGHT] - min\n });\n\n resizeHandle.css({ top: handleOffset });\n },\n\n resize: function(e) {\n var that = this;\n var options = that.options;\n var row = $(e.currentTarget).data(options.handle.dataAttribute);\n var currentRowHeight = outerHeight($(row));\n var element = $(that.element);\n var initialTableHeight = outerHeight(element);\n var tableHead = element.children(THEAD);\n var tableHeadHeight = tableHead.length > 0 ? tableHead.height() : 0;\n var tableBody = element.children(TBODY);\n var tableBodyHeight = tableBody.height();\n var initialStyleHeight = row.style[HEIGHT];\n var newRowHeight = constrain({\n value: currentRowHeight + e.y.initialDelta,\n min: options.min,\n max: abs(tableHeadHeight + tableBodyHeight - options.min)\n });\n\n that._setRowsHeightInPixels();\n row.style[HEIGHT] = toPixels(newRowHeight);\n that._setTableHeight(initialTableHeight + (newRowHeight - currentRowHeight));\n\n if (inPercentages(initialStyleHeight)) {\n //resize rows in percentages as late as possible to prevent incorrect precision calculations\n that._setRowsHeightInPercentages();\n }\n },\n\n _setRowsHeightInPixels: function() {\n var that = this;\n var rows = $(that.element).children(TBODY + COMMA + THEAD).children(TR);\n var length = rows.length;\n var currentRowsHeights = rows.map(function() {\n return outerHeight($(this));\n });\n var i;\n\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPixels(currentRowsHeights[i]);\n }\n },\n\n _setRowsHeightInPercentages: function() {\n var that = this;\n var tableHead = $(that.element).children(THEAD);\n var tableHeadHeight = tableHead.length > 0 ? tableHead.height() : 0;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyHeight = tableBody.height();\n var rows = $(that.element).children(THEAD + COMMA + TBODY).children(TR);\n var length = rows.length;\n var currentRowsHeights = rows.map(function() {\n return outerHeight($(this));\n });\n var i;\n\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPercentages(calculatePercentageRatio(currentRowsHeights[i], tableHeadHeight + tableBodyHeight));\n }\n },\n\n _setTableHeight: function(newHeight) {\n var element = this.element;\n\n if (inPercentages(element.style[HEIGHT])) {\n element.style[HEIGHT] = toPercentages(calculatePercentageRatio(newHeight, $(element).parent().height()));\n }\n else {\n element.style[HEIGHT] = toPixels(newHeight);\n }\n }\n });\n\n RowResizing.create = function(editor) {\n TableElementResizing.create(editor, {\n name: \"rowResizing\",\n type: RowResizing,\n eventNamespace: NS\n });\n };\n\n RowResizing.dispose = function(editor) {\n TableElementResizing.dispose(editor, {\n eventNamespace: NS\n });\n };\n\n extend(Editor, {\n RowResizing: RowResizing\n });\n\n })(window.kendo);\n\n (function(kendo, undefined$1) {\n var $ = kendo.jQuery;\n var extend = $.extend;\n var noop = $.noop;\n\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n var Draggable = kendo.ui.Draggable;\n var Observable = kendo.Observable;\n var getScrollBarWidth = Editor.ResizingUtils.getScrollBarWidth;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n\n var NS = \".kendoEditorElementResizeHandle\";\n var RESIZE_HANDLE_CLASS = \"k-element-resize-handle\";\n\n var DRAG_START = \"dragStart\";\n var DRAG = \"drag\";\n var DRAG_END = \"dragEnd\";\n var HALF_INSIDE = \"halfInside\";\n var MOUSE_OVER = \"mouseover\";\n var MOUSE_OUT = \"mouseout\";\n\n var BODY = \"body\";\n var TABLE = \"table\";\n\n var EAST = \"east\";\n var NORTH = \"north\";\n var NORTHEAST = \"northeast\";\n var NORTHWEST = \"northwest\";\n var SOUTH = \"south\";\n var SOUTHEAST = \"southeast\";\n var SOUTHWEST = \"southwest\";\n var WEST = \"west\";\n\n var DOT = \".\";\n\n var ElementResizeHandle = Observable.extend({\n init: function(options) {\n var that = this;\n\n Observable.fn.init.call(that);\n\n that.options = extend({}, that.options, options);\n that.element = $(that.options.template).appendTo(that.options.appendTo)[0];\n\n that._attachEventHandlers();\n that._addStyles();\n that._initDraggable();\n that._initPositioningStrategy();\n that._initDraggingStrategy();\n\n $(that.element).data(TABLE, that.options.resizableElement);\n },\n\n destroy: function() {\n var that = this;\n\n $(that.element).off(NS).remove();\n that.element = null;\n\n that._destroyDraggable();\n\n that.unbind();\n },\n\n options: {\n appendTo: null,\n direction: SOUTHEAST,\n resizableElement: null,\n rtl: false,\n template:\n \"
    \" +\n \"
    \" +\n \"
    \"\n },\n\n events: [\n DRAG_START,\n DRAG,\n DRAG_END,\n MOUSE_OVER,\n MOUSE_OUT\n ],\n\n show: function() {\n this._setPosition();\n },\n\n _setPosition: function() {\n var that = this;\n var position = that._positioningStrategy.getPosition();\n\n $(that.element).css({\n top: position.top,\n left: position.left,\n position: \"absolute\"\n });\n },\n\n _attachEventHandlers: function() {\n var that = this;\n\n $(that.element)\n .on(MOUSE_OVER + NS, that._onMouseOver.bind(that))\n .on(MOUSE_OUT + NS, that._onMouseOut.bind(that));\n },\n\n _onMouseOver: function() {\n this.trigger(MOUSE_OVER);\n },\n\n _onMouseOut: function() {\n this.trigger(MOUSE_OUT);\n },\n\n _addStyles: function() {\n var that = this;\n $(that.element).children(DOT + RESIZE_HANDLE_CLASS).addClass(\"k-resize-\" + that.options.direction);\n },\n\n _initPositioningStrategy: function() {\n var that = this;\n var options = that.options;\n\n that._positioningStrategy = HandlePositioningStrategy.create({\n name: options.direction,\n handle: that.element,\n resizableElement: options.resizableElement,\n rootElement: options.rootElement,\n rtl: options.rtl\n });\n },\n\n _initDraggable: function() {\n var that = this;\n var element = that.element;\n\n if (that._draggable || !element) {\n return;\n }\n\n that._draggable = new Draggable(element, {\n dragstart: that._onDragStart.bind(that),\n drag: that._onDrag.bind(that),\n dragend: that._onDragEnd.bind(that)\n });\n },\n\n _onDragStart: function() {\n this.trigger(DRAG_START);\n },\n\n _onDrag: function(e) {\n var that = this;\n\n that.trigger(DRAG, that._draggingStrategy.adjustDragDelta({\n deltaX: e.x.delta,\n deltaY: e.y.delta,\n initialDeltaX: e.x.initialDelta,\n initialDeltaY: e.y.initialDelta\n }));\n },\n\n _onDragEnd: function() {\n this.trigger(DRAG_END);\n },\n\n _destroyDraggable: function() {\n var that = this;\n\n if (that._draggable) {\n that._draggable.destroy();\n that._draggable = null;\n }\n },\n\n _initDraggingStrategy: function() {\n var that = this;\n\n that._draggingStrategy = HandleDraggingStrategy.create({\n name: that.options.direction\n });\n }\n });\n\n var StrategyFactory = Class.extend({\n init: function() {\n this._items = [];\n },\n\n register: function(name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n\n create: function(options) {\n var items = this._items;\n var itemsLength = items.length;\n var name = options.name ? options.name.toLowerCase() : \"\";\n var match;\n var item;\n var i;\n\n for (i = 0; i < itemsLength; i++) {\n item = items[i];\n\n if (item.name.toLowerCase() === name) {\n match = item;\n break;\n }\n }\n\n if (match) {\n return new match.type(options);\n }\n }\n });\n\n var PositioningStrategyFactory = StrategyFactory.extend({});\n PositioningStrategyFactory.current = new PositioningStrategyFactory();\n\n var HandlePositioningStrategy = Class.extend({\n init: function(options) {\n var that = this;\n that.options = extend({}, that.options, options);\n },\n\n options: {\n handle: null,\n offset: HALF_INSIDE,\n resizableElement: null,\n rootElement: null,\n rtl: false\n },\n\n getPosition: function() {\n var that = this;\n\n var position = that.calculatePosition();\n var handleOffsetPosition = that.applyHandleOffset(position);\n var scrollOffsetPosition = that.applyScrollOffset(handleOffsetPosition);\n\n return scrollOffsetPosition;\n },\n\n calculatePosition: noop,\n\n applyHandleOffset: function(position) {\n var options = this.options;\n var handle = $(options.handle);\n\n if (options.offset === HALF_INSIDE) {\n return {\n top: position.top - (outerHeight(handle) / 2),\n left: position.left - (outerWidth(handle) / 2)\n };\n }\n\n return position;\n },\n\n applyScrollOffset: function(position) {\n var options = this.options;\n var rootElement = $(options.rootElement);\n var scrollBarWidth = options.rtl ? getScrollBarWidth(rootElement[0]) : 0;\n var browser = kendo.support.browser;\n var rootLeft;\n\n if (!rootElement.is(BODY)) {\n rootLeft = kendo.scrollLeft(rootElement) || 0;\n\n if (options.rtl && (browser.mozilla || (browser.webkit && browser.version >= 85))) {\n rootLeft = rootLeft * -1;\n }\n\n return {\n top: position.top + (rootElement.scrollTop() || 0),\n left: position.left + rootLeft - scrollBarWidth\n };\n }\n\n return position;\n }\n });\n\n HandlePositioningStrategy.create = function(options) {\n return PositioningStrategyFactory.current.create(options);\n };\n\n var EastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top + (outerHeight(resizableElement) / 2),\n left: offset.left + outerWidth(resizableElement) + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(EAST, EastPositioningStrategy);\n\n var NorthPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top,\n left: offset.left + (outerWidth(resizableElement) / 2) + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTH, NorthPositioningStrategy);\n\n var NortheastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top,\n left: offset.left + outerWidth(resizableElement) + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTHEAST, NortheastPositioningStrategy);\n\n var NorthwestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top,\n left: offset.left + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(NORTHWEST, NorthwestPositioningStrategy);\n\n var SouthPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left + (outerWidth(resizableElement) / 2) + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTH, SouthPositioningStrategy);\n\n var SoutheastPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left + outerWidth(resizableElement) + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTHEAST, SoutheastPositioningStrategy);\n\n var SouthwestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top + outerHeight(resizableElement),\n left: offset.left + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(SOUTHWEST, SouthwestPositioningStrategy);\n\n var WestPositioningStrategy = HandlePositioningStrategy.extend({\n calculatePosition: function() {\n var resizableElement = $(this.options.resizableElement);\n var offset = resizableElement.position();\n var marginLeft = parseInt(resizableElement.css(\"marginLeft\"), 10);\n\n return {\n top: offset.top + (outerHeight(resizableElement) / 2),\n left: offset.left + marginLeft\n };\n }\n });\n PositioningStrategyFactory.current.register(WEST, WestPositioningStrategy);\n\n var DraggingStrategyFactory = StrategyFactory.extend({});\n DraggingStrategyFactory.current = new DraggingStrategyFactory();\n\n var HandleDraggingStrategy = Class.extend({\n init: function(options) {\n var that = this;\n that.options = extend({}, that.options, options);\n },\n\n options: {\n deltaX: {\n adjustment: null,\n modifier: null\n },\n deltaY: {\n adjustment: null,\n modifier: null\n }\n },\n\n adjustDragDelta: function(deltas) {\n var options = this.options;\n var xAxisAdjustment = options.deltaX.adjustment * options.deltaX.modifier;\n var yAxisAdjustment = options.deltaY.adjustment * options.deltaY.modifier;\n\n return {\n deltaX: deltas.deltaX * xAxisAdjustment,\n deltaY: deltas.deltaY * yAxisAdjustment,\n initialDeltaX: deltas.initialDeltaX * xAxisAdjustment,\n initialDeltaY: deltas.initialDeltaY * yAxisAdjustment\n };\n }\n });\n\n HandleDraggingStrategy.create = function(options) {\n return DraggingStrategyFactory.current.create(options);\n };\n\n var HorizontalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 1,\n modifier: 1\n },\n deltaY: {\n adjustment: 0,\n modifier: 0\n }\n }\n });\n\n var EastDraggingStrategy = HorizontalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: 1\n }\n }\n });\n DraggingStrategyFactory.current.register(EAST, EastDraggingStrategy);\n\n var WestDraggingStrategy = HorizontalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: (-1)\n }\n }\n });\n DraggingStrategyFactory.current.register(WEST, WestDraggingStrategy);\n\n var VerticalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 0,\n modifier: 0\n },\n deltaY: {\n adjustment: 1,\n modifier: 1\n }\n }\n });\n\n var NorthDraggingStrategy = VerticalDraggingStrategy.extend({\n options: {\n deltaY: {\n modifier: (-1)\n }\n }\n });\n DraggingStrategyFactory.current.register(NORTH, NorthDraggingStrategy);\n\n var SouthDraggingStrategy = VerticalDraggingStrategy.extend({\n options: {\n deltaY: {\n modifier: 1\n }\n }\n });\n DraggingStrategyFactory.current.register(SOUTH, SouthDraggingStrategy);\n\n var HorizontalAndVerticalDraggingStrategy = HandleDraggingStrategy.extend({\n options: {\n deltaX: {\n adjustment: 1,\n modifier: 1\n },\n deltaY: {\n adjustment: 1,\n modifier: 1\n }\n }\n });\n\n var NorthEastDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: 1\n },\n deltaY: {\n modifier: (-1)\n }\n }\n });\n DraggingStrategyFactory.current.register(NORTHEAST, NorthEastDraggingStrategy);\n\n var NorthWestDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: (-1)\n },\n deltaY: {\n modifier: (-1)\n }\n }\n });\n DraggingStrategyFactory.current.register(NORTHWEST, NorthWestDraggingStrategy);\n\n var SouthEastDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: 1\n },\n deltaY: {\n modifier: 1\n }\n }\n });\n DraggingStrategyFactory.current.register(SOUTHEAST, SouthEastDraggingStrategy);\n\n var SouthWestDraggingStrategy = HorizontalAndVerticalDraggingStrategy.extend({\n options: {\n deltaX: {\n modifier: (-1)\n },\n deltaY: {\n modifier: 1\n }\n }\n });\n DraggingStrategyFactory.current.register(SOUTHWEST, SouthWestDraggingStrategy);\n\n extend(Editor, {\n ElementResizeHandle: ElementResizeHandle\n });\n })(window.kendo);\n\n (function(kendo, undefined$1) {\n var global = window;\n var math = global.Math;\n var min = math.min;\n var max = math.max;\n\n var $ = kendo.jQuery;\n var contains = $.contains;\n var extend = $.extend;\n\n var browser = kendo.support.browser;\n var Editor = kendo.ui.editor;\n var Class = kendo.Class;\n var ElementResizeHandle = Editor.ElementResizeHandle;\n var ResizingUtils = Editor.ResizingUtils;\n var calculatePercentageRatio = ResizingUtils.calculatePercentageRatio;\n var constrain = ResizingUtils.constrain;\n var inPercentages = ResizingUtils.inPercentages;\n var inPixels = ResizingUtils.inPixels;\n var toPercentages = ResizingUtils.toPercentages;\n var toPixels = ResizingUtils.toPixels;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var RangeUtils = Editor.RangeUtils;\n\n var NS = \".kendoEditorElementResizing\";\n var RESIZE_HANDLE_WRAPPER_CLASS = \"k-element-resize-handle-wrapper\";\n var TABLE_CLASS = \"k-table\";\n var ELEMENT_RESIZING_CLASS = \"k-element-resizing\";\n\n var DRAG_START = \"dragStart\";\n var DRAG = \"drag\";\n var DRAG_END = \"dragEnd\";\n var KEY_DOWN = \"keydown\";\n var MOUSE_DOWN = \"mousedown\";\n var SELECT = \"select\";\n var DROP = \"drop\";\n\n var COLUMN = \"td\";\n var ROW = \"tr\";\n var TBODY = \"tbody\";\n var THEAD = \"thead\";\n var TABLE = \"table\";\n var IMG = \"img\";\n var ELEMENT_TYPES = [\"TABLE\", \"IMG\"];\n\n var COMMA = \",\";\n var WIDTH = \"width\";\n var HEIGHT = \"height\";\n\n var EAST = \"east\";\n var NORTH = \"north\";\n var NORTHEAST = \"northeast\";\n var NORTHWEST = \"northwest\";\n var SOUTH = \"south\";\n var SOUTHEAST = \"southeast\";\n var SOUTHWEST = \"southwest\";\n var WEST = \"west\";\n\n var DOT = \".\";\n\n function isUndefined(value) {\n return typeof(value) === \"undefined\";\n }\n\n var ElementResizing = Class.extend({\n init: function(element, options) {\n var that = this;\n\n that.options = extend({}, that.options, options);\n that.handles = [];\n\n // Check whether the element is TABLE or IMG\n if (ELEMENT_TYPES.indexOf(element.nodeName) >= 0) {\n that.element = element;\n }\n },\n\n destroy: function() {\n var that = this;\n\n $(that.element).off(NS);\n that.element = null;\n\n $(that.options.rootElement).off(KEY_DOWN + NS);\n\n that._destroyResizeHandles();\n },\n\n options: {\n appendHandlesTo: null,\n rtl: false,\n rootElement: null,\n minWidth: 10,\n minHeight: 10,\n handles: [{\n direction: NORTHWEST\n }, {\n direction: NORTH\n }, {\n direction: NORTHEAST\n }, {\n direction: EAST\n }, {\n direction: SOUTHEAST\n }, {\n direction: SOUTH\n }, {\n direction: SOUTHWEST\n }, {\n direction: WEST\n }]\n },\n\n resize: function(args) {\n var that = this;\n var deltas = extend({}, {\n deltaX: 0,\n deltaY: 0,\n initialDeltaX: 0,\n initialDeltaY: 0\n }, args);\n\n that._resizeWidth(deltas.deltaX, deltas.initialDeltaX);\n that._resizeHeight(deltas.deltaY, deltas.initialDeltaY);\n\n that.showResizeHandles();\n },\n\n _resizeWidth: function() {\n return false;\n },\n\n _resizeHeight: function() {\n return false;\n },\n\n _getMaxDimensionValue: function(dimension) {\n var that = this;\n var element = $(that.element);\n var dimensionLowercase = dimension.toLowerCase();\n var rtlModifier = that.options.rtl ? (-1) : 1;\n var parent = $(that.element).parent();\n var parentElement = parent[0];\n var parentDimension = parent[dimensionLowercase]();\n var parentScrollOffset = rtlModifier * (dimension === WIDTH ? kendo.scrollLeft(parent) : parent.scrollTop());\n\n if (parentElement && parentElement === element.closest(COLUMN)[0]) {\n if (parentElement.style[dimensionLowercase] === \"\" && !inPercentages(that.element.style[dimensionLowercase])) {\n return Infinity;\n }\n else {\n return (parentDimension + parentScrollOffset);\n }\n }\n else {\n return (parentDimension + parentScrollOffset);\n }\n },\n\n showResizeHandles: function() {\n var that = this;\n\n that._initResizeHandles();\n that._showResizeHandles();\n },\n\n _initResizeHandles: function() {\n var that = this;\n var handles = that.handles;\n var options = that.options;\n var handleOptions = that.options.handles;\n var length = handleOptions.length;\n var i;\n\n if (handles && handles.length > 0) {\n return;\n }\n\n for (i = 0; i < length; i++) {\n that.handles.push(new ElementResizeHandle(extend({\n appendTo: options.appendHandlesTo,\n resizableElement: that.element,\n rootElement: options.rootElement,\n rtl: options.rtl\n }, handleOptions[i])));\n }\n\n that._bindToResizeHandlesEvents();\n },\n\n _destroyResizeHandles: function() {\n var that = this;\n var length = that.handles ? that.handles.length : 0;\n\n for (var i = 0; i < length; i++) {\n that.handles[i].destroy();\n }\n\n that.handles = [];\n },\n\n _showResizeHandles: function() {\n var that = this;\n var handles = that.handles || [];\n var length = handles.length;\n var i;\n\n for (i = 0; i < length; i++) {\n that.handles[i].show();\n }\n },\n\n _bindToResizeHandlesEvents: function() {\n return false;\n },\n\n _onResizeHandleDragStart: function() {\n var that = this;\n var element = $(that.element);\n\n element.addClass(ELEMENT_RESIZING_CLASS);\n\n that._initialElementHeight = outerHeight(element);\n that._initialElementWidth = outerWidth(element);\n that._disableKeyboard();\n },\n\n _onResizeHandleDrag: function(e) {\n this.resize(e);\n },\n\n _onResizeHandleDragEnd: function() {\n var that = this;\n $(that.element).removeClass(ELEMENT_RESIZING_CLASS);\n that._enableKeyboard();\n },\n\n _enableKeyboard: function() {\n $(this.options.rootElement).off(KEY_DOWN + NS);\n },\n\n _disableKeyboard: function() {\n $(this.options.rootElement).on(KEY_DOWN + NS, function(e) {\n e.preventDefault();\n });\n }\n });\n\n var TableResizing = ElementResizing.extend({\n _bindToResizeHandlesEvents: function() {\n var that = this;\n var handles = that.handles || [];\n var length = handles.length;\n var i;\n var handle;\n\n for (i = 0; i < length; i++) {\n handle = handles[i];\n handle.bind(DRAG_START, that._onResizeHandleDragStart.bind(that));\n handle.bind(DRAG, that._onResizeHandleDrag.bind(that));\n handle.bind(DRAG_END, that._onResizeHandleDragEnd.bind(that));\n }\n },\n\n _hasRowsInPixels: function() {\n var that = this;\n var rows = $(that.element).children(THEAD + COMMA + TBODY).children(ROW);\n\n for (var i = 0; i < rows.length; i++) {\n if (rows[i].style.height === \"\" || inPixels(rows[i].style.height)) {\n return true;\n }\n }\n\n return false;\n },\n\n _resizeWidth: function(delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var styleWidth = element[0].style[WIDTH];\n var currentWidth = outerWidth(element);\n var parentWidth = element.parent().width();\n var maxWidth = that._getMaxDimensionValue(WIDTH);\n var newWidth;\n var ratioValue;\n var ratioTotalValue;\n var constrainedWidth;\n\n if (delta === 0) {\n return;\n }\n\n if (isUndefined(that._initialElementWidth)) {\n that._initialElementWidth = currentWidth;\n }\n\n //use initial delta instead of delta as changing the width with a small value (e.g. 1px)\n //on each drag does not work due to browser calculation of computed styles\n constrainedWidth = constrain({\n value: that._initialElementWidth + initialDelta,\n min: that.options.minWidth,\n max: maxWidth\n });\n\n if (inPercentages(styleWidth)) {\n //detect resizing greater than 100%\n if (currentWidth + delta > parentWidth) {\n ratioValue = max(constrainedWidth, parentWidth);\n ratioTotalValue = min(constrainedWidth, parentWidth);\n }\n else {\n ratioValue = min(constrainedWidth, parentWidth);\n ratioTotalValue = max(constrainedWidth, parentWidth);\n }\n\n newWidth = toPercentages(calculatePercentageRatio(ratioValue, ratioTotalValue));\n }\n else {\n newWidth = toPixels(constrainedWidth);\n }\n\n that._setColumnsWidth();\n\n element[0].style[WIDTH] = newWidth;\n },\n\n _resizeHeight: function(delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var styleHeight = element[0].style[HEIGHT];\n var currentHeight = outerHeight(element);\n var parent = element.parent();\n var parentHeight = parent.height();\n var maxHeight = that._getMaxDimensionValue(HEIGHT);\n var newHeight;\n var ratioValue;\n var ratioTotalValue;\n var constrainedHeight;\n var minHeight = that.options.minHeight;\n var hasRowsInPixels = that._hasRowsInPixels();\n\n if (delta === 0) {\n return;\n }\n\n if (isUndefined(that._initialElementHeight)) {\n that._initialElementHeight = currentHeight;\n }\n\n //use initial delta instead of delta as changing the height with a small value (e.g. 1px)\n //on each drag does not work due to browser calculation of computed styles\n constrainedHeight = constrain({\n value: that._initialElementHeight + initialDelta,\n min: minHeight,\n max: maxHeight\n });\n\n if (hasRowsInPixels && delta < 0) {\n //decreasing table height when rows are sized in pixels is not possible\n that._setRowsHeightInPercentages();\n }\n\n if (inPercentages(styleHeight)) {\n //detect resizing greater than 100%\n if (currentHeight + delta > parentHeight) {\n ratioValue = max(constrainedHeight, parentHeight);\n ratioTotalValue = min(constrainedHeight, parentHeight);\n }\n else {\n ratioValue = min(constrainedHeight, parentHeight);\n ratioTotalValue = max(constrainedHeight, parentHeight);\n }\n\n newHeight = toPercentages(calculatePercentageRatio(ratioValue, ratioTotalValue));\n }\n else {\n newHeight = toPixels(constrainedHeight);\n }\n\n element[0].style[HEIGHT] = newHeight;\n\n if (hasRowsInPixels && delta < 0) {\n //restore original rows height unit\n that._setRowsHeightInPixels();\n }\n },\n\n _setColumnsWidth: function() {\n var that = this;\n var element = $(that.element);\n var parentElement = element.parent()[0];\n var parentColumn = element.closest(COLUMN);\n var columns = parentColumn.closest(ROW).children();\n var columnsLength = columns.length;\n var i;\n\n function isWidthInPercentages(element) {\n var styleWidth = element.style.width;\n\n if (styleWidth !== \"\") {\n return inPercentages(styleWidth) ? true : false;\n }\n else {\n return $(element).hasClass(TABLE_CLASS) ? true : false;\n }\n }\n\n if (isWidthInPercentages(element[0]) && parentElement === parentColumn[0] && parentElement.style[WIDTH] === \"\") {\n for (i = 0; i < columnsLength; i++) {\n columns[i].style[WIDTH] = toPixels($(columns[i]).width());\n }\n }\n },\n\n _setRowsHeightInPercentages: function() {\n var that = this;\n var tableHead = $(that.element).children(THEAD);\n var tableHeadHeight = tableHead.length > 0 ? tableHead.height() : 0;\n var tableBody = $(that.element).children(TBODY);\n var tableBodyHeight = tableBody.height();\n var rows = $(that.element).children(THEAD + COMMA + TBODY).children(ROW);\n var length = rows.length;\n var currentRowsHeights = rows.map(function() {\n return outerHeight($(this));\n });\n var i;\n\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPercentages(calculatePercentageRatio(currentRowsHeights[i], tableHeadHeight + tableBodyHeight));\n }\n },\n\n _setRowsHeightInPixels: function() {\n var that = this;\n var rows = $(that.element).children(THEAD + COMMA + TBODY).children(ROW);\n var length = rows.length;\n var currentRowsHeights = rows.map(function() {\n return outerHeight($(this));\n });\n var i;\n\n for (i = 0; i < length; i++) {\n rows[i].style[HEIGHT] = toPixels(currentRowsHeights[i]);\n }\n }\n });\n\n var ImageResizing = ElementResizing.extend({\n _bindToResizeHandlesEvents: function() {\n var that = this;\n var handles = that.handles || [];\n var length = handles.length;\n var i;\n var handle;\n\n for (i = 0; i < length; i++) {\n handle = handles[i];\n handle.bind(DRAG_START, that._onResizeHandleDragStart.bind(that));\n\n if (handle.options.direction === \"north\" || handle.options.direction === \"south\") {\n handle.bind(DRAG, that._onResizeHandleDragVertical.bind(that));\n } else if (handle.options.direction === \"east\" || handle.options.direction === \"west\") {\n handle.bind(DRAG, that._onResizeHandleDragHorizontal.bind(that));\n } else {\n handle.bind(DRAG, that._onResizeHandleDragLocked.bind(that));\n }\n\n handle.bind(DRAG_END, that._onResizeHandleDragEnd.bind(that));\n }\n },\n\n _getDeltas: function(args) {\n return extend({}, {\n deltaX: 0,\n deltaY: 0,\n initialDeltaX: 0,\n initialDeltaY: 0\n }, args);\n },\n\n _onResizeHandleDragVertical: function(args) {\n var deltas = this._getDeltas(args);\n\n this._resizeHeight(deltas.deltaY, deltas.initialDeltaY);\n this.showResizeHandles();\n },\n\n _onResizeHandleDragHorizontal: function(args) {\n var deltas = this._getDeltas(args);\n\n this._resizeWidth(deltas.deltaX, deltas.initialDeltaX);\n this.showResizeHandles();\n },\n\n _onResizeHandleDragLocked: function(args) {\n var min = Math.min(Math.abs(args.initialDeltaX), Math.abs(args.initialDeltaY)),\n initialWidth = this._initialElementWidth,\n initialHeight = this._initialElementHeight,\n deltas;\n\n if (min === args.initialDeltaX || min === args.initialDeltaX * -1) {\n args.initialDeltaY = args.initialDeltaX * initialHeight / initialWidth;\n args.deltaY = args.deltaX;\n } else if (min === args.initialDeltaY || min === args.initialDeltaY * -1) {\n args.initialDeltaX = args.initialDeltaY * initialWidth / initialHeight;\n args.deltaX = args.deltaY;\n }\n\n deltas = this._getDeltas(args);\n\n this._resizeWidth(deltas.deltaX, deltas.initialDeltaX);\n this._resizeHeight(deltas.deltaY, deltas.initialDeltaY);\n\n this.showResizeHandles();\n },\n\n _resizeWidth: function(delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var currentWidth = outerWidth(element);\n var newWidth;\n var constrainedWidth;\n\n if (delta === 0) {\n return;\n }\n\n if (isUndefined(that._initialElementWidth)) {\n that._initialElementWidth = currentWidth;\n }\n\n //use initial delta instead of delta as changing the width with a small value (e.g. 1px)\n //on each drag does not work due to browser calculation of computed styles\n constrainedWidth = constrain({\n value: that._initialElementWidth + initialDelta,\n min: that.options.minWidth,\n max: that._getMaxDimensionValue(WIDTH)\n });\n\n newWidth = toPixels(constrainedWidth);\n element[0].style[WIDTH] = newWidth;\n element.attr(WIDTH, Math.floor(constrainedWidth));\n },\n\n _resizeHeight: function(delta, initialDelta) {\n var that = this;\n var element = $(that.element);\n var currentHeight = outerHeight(element);\n var newHeight;\n var constrainedHeight;\n\n if (delta === 0) {\n return;\n }\n\n if (isUndefined(that._initialElementHeight)) {\n that._initialElementHeight = currentHeight;\n }\n\n //use initial delta instead of delta as changing the height with a small value (e.g. 1px)\n //on each drag does not work due to browser calculation of computed styles\n constrainedHeight = constrain({\n value: that._initialElementHeight + initialDelta,\n min: that.options.minHeight,\n max: Number.MAX_SAFE_INTEGER\n });\n\n newHeight = toPixels(constrainedHeight);\n element[0].style[HEIGHT] = newHeight;\n element.attr(HEIGHT, Math.floor(constrainedHeight));\n }\n });\n\n var ElementResizingFactory = Class.extend({\n create: function(editor) {\n var factory = this;\n\n $(editor.body)\n .on(\"dragstart\" + NS, function() {\n var nodes = RangeUtils.nodes(editor.getRange()),\n hasImg = false;\n\n nodes.forEach(function(node) {\n if (node.nodeName === \"IMG\") {\n hasImg = true;\n }\n });\n\n if (hasImg && nodes.length > 1) {\n editor.elementResizing._destroyResizeHandles();\n }\n })\n .on(DROP + NS, function() {\n setTimeout(function() {\n var image = RangeUtils.image(editor.getRange());\n\n if (image) {\n editor.elementResizing._destroyResizeHandles();\n editor.elementResizing.element = image;\n editor.elementResizing.showResizeHandles();\n }\n });\n })\n .on(MOUSE_DOWN + NS, TABLE + COMMA + IMG, function(e) {\n var eventTarget = e.target;\n var eventCurrentTarget = e.currentTarget;\n var elementResizing = editor.elementResizing;\n var element = elementResizing ? elementResizing.element : null;\n\n if (elementResizing) {\n if (element && eventCurrentTarget !== element) {\n if (contains(eventCurrentTarget, element) && element !== eventTarget && contains(element, eventTarget)) {\n //prevent a parent table resizing init when clicking on a nested table when the event bubbles\n //instead of stopping event propagation\n return;\n }\n else {\n if (element !== eventTarget) {\n editor._destroyElementResizing();\n factory._initResizing(editor, eventCurrentTarget);\n }\n }\n }\n }\n else {\n factory._initResizing(editor, eventCurrentTarget);\n }\n\n editor._showElementResizeHandles();\n })\n .on(MOUSE_DOWN + NS, function(e) {\n var elementResizing = editor.elementResizing;\n var element = elementResizing ? elementResizing.element : null;\n var target = e.target;\n var isResizeHandleOrChild = $(target).hasClass(RESIZE_HANDLE_WRAPPER_CLASS) || $(target).parents(DOT + RESIZE_HANDLE_WRAPPER_CLASS).length > 0;\n\n if (elementResizing && element !== target && !contains(element, target) && !isResizeHandleOrChild) {\n editor._destroyElementResizing();\n }\n });\n },\n\n dispose: function(editor) {\n $(editor.body).off(NS);\n },\n\n _initResizing: function(editor, element) {\n // table and image resizing is natively supported in IE\n // https://stackoverflow.com/questions/53831846/resizing-images-in-contenteditable-div-stopped-working-in-firefox\n // Enable custom resize handlers for FF too\n if (!browser.msie) {\n if ($(element).is(TABLE)) {\n editor.elementResizing = editor.tableResizing = new TableResizing(element, {\n appendHandlesTo: editor.body,\n rtl: kendo.support.isRtl(editor.element),\n rootElement: editor.body\n });\n } else if ($(element).is(IMG)) {\n editor.elementResizing = new ImageResizing(element, {\n appendHandlesTo: editor.body,\n rtl: kendo.support.isRtl(editor.element),\n rootElement: editor.body\n });\n }\n\n if (editor._showElementResizeHandlesProxy) {\n editor.unbind(SELECT, editor._showElementResizeHandlesProxy);\n editor.bind(SELECT, editor._showElementResizeHandlesProxy);\n }\n }\n }\n });\n\n ElementResizingFactory.current = new ElementResizingFactory();\n\n extend(Editor, {\n TableResizing: TableResizing,\n ImageResizing: ImageResizing,\n ElementResizing: ElementResizing,\n ElementResizingFactory: ElementResizingFactory\n });\n\n })(window.kendo);\n\n (function($, undefined$1) {\n\n var kendo = window.kendo,\n Editor = kendo.ui.editor,\n EditorUtils = Editor.EditorUtils,\n RangeUtils = Editor.RangeUtils,\n dom = Editor.Dom,\n registerTool = EditorUtils.registerTool,\n Command = Editor.Command;\n\n var tableFormatFinder = new Editor.BlockFormatFinder([{ tags: [\"table\"] }]);\n var cellsFormatFinder = new Editor.BlockFormatFinder([{ tags: [\"td\",\"th\"] }]);\n var reUnit = /([a-z]+|%)$/i;\n\n var COL = \"col\";\n var ROW = \"row\";\n var COLGROUP = \"colgroup\";\n var SCOPE = \"scope\";\n var COL_INDEX = \"col-index\";\n var TH = \"th\";\n var TD = \"td\";\n var THEAD = \"thead\";\n var HEADERS = \"headers\";\n var TABLE = \"table\";\n\n var TableWizardCommand = Command.extend({\n exec: function() {\n var cmd = this;\n var editor = cmd.editor;\n var range = cmd.range = cmd.lockRange();\n var isTableCellWizard = cmd.options.tableCellWizard;\n var selectedTable = cmd._sourceTable = !cmd.options.insertNewTable ? cmd._selectedTable(range) : undefined$1;\n var selectedCells = cmd._selectedTableCells = selectedTable ? cmd._selectedCells(range) : undefined$1;\n var options = {\n visible: false,\n messages: editor.options.messages,\n closeCallback: cmd.onDialogClose.bind(cmd),\n table: cmd.parseTable(selectedTable, selectedCells),\n dialogOptions: editor.options.dialogOptions,\n isRtl: kendo.support.isRtl(editor.wrapper)\n };\n\n var dialog = new Editor.TableWizardDialog(options);\n dialog.open(isTableCellWizard);\n },\n\n onDialogClose: function(data) {\n var cmd = this;\n cmd.releaseRange(cmd.range);\n\n if (data) { //Ok button pressed\n if (cmd.options.insertNewTable) {\n cmd.insertTable(cmd.createNewTable(data));\n } else {\n cmd.updateTable(data, cmd._sourceTable, cmd._selectedTableCells);\n }\n }\n },\n releaseRange: function(range) {\n var cmd = this;\n var doc = cmd.editor.document;\n dom.windowFromDocument(doc).focus();\n Command.fn.releaseRange.call(cmd, range);\n },\n insertTable: function(table) {\n var range = this.range;\n\n range.insertNode(table);\n range.collapse(true);\n this.editor.selectRange(range);\n\n this._ensureFocusableAfterTable(table);\n },\n _ensureFocusableAfterTable: function(table) {\n var siblingNodes = $(table).parent().contents();\n var lastSiblingIndex = siblingNodes.length - 1;\n var lastSibling = siblingNodes.get(lastSiblingIndex);\n\n while (lastSibling.nodeValue !== null && (lastSibling.nodeValue === \" \" || lastSibling.nodeValue === \"\")) {\n lastSiblingIndex -= 1;\n lastSibling = siblingNodes.get(lastSiblingIndex);\n }\n\n if (lastSibling === table) {\n dom.insertAfter(dom.createEmptyNode(this.editor.document, \"p\"), table);\n }\n },\n updateTable: function(data, table, selectedCells) {\n var cmd = this;\n var tableRows = $(table.rows).toArray();\n var tableProp = data.tableProperties;\n var rows = tableProp.rows;\n var tHead = table.tHead;\n var last = cmd._lastInCollection;\n var lastSelectedRow, cellProp;\n\n //Leave only first selected cell\n while (selectedCells.length > 1) {\n selectedCells.pop();\n }\n\n lastSelectedRow = selectedCells.length ? last(selectedCells).parentNode : last(tableRows);\n\n cmd._deleteTableRows(tableRows, tableRows.length - rows);\n\n if (tableRows.length < rows) {\n cmd._addRows(lastSelectedRow, rows, tableRows);\n }\n\n dom.reMapTableColumns(table, COL_INDEX);\n cmd._updateColumns(tableRows, tableProp.columns, selectedCells, lastSelectedRow);\n cmd._updateTableProperties(table, tableProp);\n\n cellProp = data.cellProperties;\n if (selectedCells[0]) {\n dom.attr(selectedCells[0], { id: (cellProp || {}).id || null });\n }\n if (cellProp) {\n (cellProp.selectAllCells ? $(tableRows).children() : $(selectedCells)).each(function(i, cell) {\n cmd._updateCellProperties(cell, cellProp, tableProp);\n });\n }\n\n cmd._updateCaption(table, tableProp);\n\n if (tHead) {\n cmd._updateHeadersWithThead(table, data);\n } else {\n cmd._updateHeadersNoThead(table, data);\n }\n\n cmd._updateHeaderAssociates(table, tableProp);\n dom.clearTableMappings(table, COL_INDEX);\n },\n _isHeadingRow: function(row) {\n return dom.is(row.cells[0], TH) && dom.is(row.parentNode, THEAD);\n },\n _isHeadingCell: function(cell) {\n return dom.is(cell, TH);\n },\n cellsWithHeadersAssociated: function(table) {\n var cells = $(table.rows).children();\n var headingIds = [];\n var checkHeader = function(header) {\n return headingIds.indexOf(header) > -1;\n };\n\n cells.each(function(c, cell) {\n if (cell.id && dom.is(cell, TH)) {\n headingIds.push(cell.id);\n }\n });\n\n var associatedCells = cells.filter(function(c, cell) {\n var headersAttr = cell.getAttribute(HEADERS);\n var headersArray;\n\n if (headersAttr && !dom.is(cell, TH)) {\n headersArray = headersAttr.split(\" \");\n\n if (headersArray && headersArray.length > 0) {\n return headersArray.some(checkHeader);\n }\n }\n\n return false;\n });\n\n return !!associatedCells.length;\n },\n _insertCells: function(count, row, index) {\n index = isNaN(index) ? -1 : index;\n for (var i = 0, cell; i < count; i++) {\n cell = row.insertCell(index);\n cell.innerHTML = \" \";\n }\n },\n _deleteTableRows: function(rows, count) {\n for (var i = 0, row, rowParent; i < count; i++) {\n row = rows.pop();\n rowParent = row.parentNode;\n rowParent.removeChild(row);\n if (!rowParent.rows.length) {\n dom.remove(rowParent);\n }\n }\n },\n createNewTable: function(data) {\n var cmd = this;\n var doc = cmd.editor.document;\n var tableProp = data.tableProperties;\n var table = dom.create(doc, TABLE);\n var rowIndex = 0;\n var thead;\n\n cmd._updateTableProperties(table, tableProp);\n cmd._updateCaption(table, tableProp);\n\n if (tableProp.headerRows && tableProp.headerRows > 0) {\n thead = table.createTHead();\n cmd._createTableRows(data, thead, rowIndex, true);\n rowIndex += tableProp.headerRows;\n }\n\n var tbody = table.createTBody();\n cmd._createTableRows(data, tbody, rowIndex, false);\n\n dom.reMapTableColumns(table, COL_INDEX);\n\n if (tableProp.cellsWithHeaders === \"ids\") {\n dom.associateWithIds(table);\n } else if (tableProp.cellsWithHeaders === \"scope\") {\n cmd._addScopes(table, tableProp.headerRows, tableProp.headerColumns);\n }\n\n dom.clearTableMappings(table, COL_INDEX);\n\n return table;\n },\n _createTableRows: function(data, container, initialIndex, headerRows) {\n var cmd = this;\n var tableProp = data.tableProperties;\n var cellProp = data.cellProperties;\n var columns = tableProp.columns;\n var rows = headerRows ? tableProp.headerRows : tableProp.rows;\n var headerColumns = tableProp.headerColumns;\n\n for (var r = initialIndex, row; r < rows; r++) {\n row = container.insertRow();\n\n for (var c = 0, cell; c < columns; c++) {\n if (headerRows || headerColumns > c) {\n cell = document.createElement(TH);\n } else {\n cell = document.createElement(TD);\n }\n\n row.appendChild(cell);\n cell.innerHTML = \" \";\n if (cellProp && r === 0 && c === 0 && cellProp.id) {\n cell.id = cellProp.id;\n }\n\n cmd._updateCellProperties(cell, cellProp && (cellProp.selectAllCells || (r === 0 && c === 0)) ? cellProp : {}, tableProp);\n }\n }\n },\n _addRows: function(lastSelectedRow, rows, tableRows) {\n var cmd = this;\n var rowIndex = $(lastSelectedRow).index();\n var cellsLength = lastSelectedRow.cells.length;\n var newRowsCount = rows - tableRows.length;\n var parent = lastSelectedRow.parentNode;\n var row;\n\n while (newRowsCount) {\n row = parent.insertRow(rowIndex + 1);\n cmd._insertCells(cellsLength - row.cells.length, row);\n newRowsCount--;\n }\n },\n _updateColumns: function(tableRows, columns, selectedCells, lastSelectedRow) {\n var cmd = this;\n var last = cmd._lastInCollection;\n var firstRowLastCell = last(tableRows[0].cells);\n var numberOfColumns = Number(firstRowLastCell.getAttribute(COL_INDEX)) + firstRowLastCell.colSpan;\n\n if (numberOfColumns > columns) {\n $(tableRows).each(function(i, row) {\n var lastCurrentCell = last(row.cells);\n var rowColumns = Number(lastCurrentCell.getAttribute(COL_INDEX)) + lastCurrentCell.colSpan;\n\n while (rowColumns > columns) {\n if (lastCurrentCell.colSpan && lastCurrentCell.colSpan > 1) {\n lastCurrentCell.colSpan -= 1;\n } else {\n row.deleteCell(-1);\n }\n\n lastCurrentCell = last(row.cells);\n rowColumns = Number(lastCurrentCell.getAttribute(COL_INDEX)) + lastCurrentCell.colSpan;\n }\n });\n }\n\n if (numberOfColumns < columns) {\n var cellIndex = $(last(selectedCells) || last(lastSelectedRow.cells)).index();\n $(tableRows).each(function(i, row) {\n var lastCurrentCell = last(row.cells);\n cmd._insertCells(columns - Number(lastCurrentCell.getAttribute(COL_INDEX)) - lastCurrentCell.colSpan, row, cellIndex + 1);\n });\n }\n },\n _updateTableProperties: function(table, data) {\n var style = this._getStylesData(data);\n dom.attr(table, {\n cellSpacing: data.cellSpacing || null,\n topCellPadding: this._getNumericValue(data.topCellPadding) ?? '',\n leftCellPadding: this._getNumericValue(data.leftCellPadding) ?? '',\n bottomCellPadding: this._getNumericValue(data.bottomCellPadding) ?? '',\n rightCellPadding: this._getNumericValue(data.rightCellPadding) ?? '',\n className: data.className || null,\n id: data.id || null,\n summary: data.summary || null,\n style: style || null\n });\n $(table).addClass(\"k-table\");\n },\n _updateCellProperties: function(cell, data, tableData) {\n var style = this._getStylesData(data);\n style.paddingTop = this._getNumericValue(data.topCellPadding) ?? this._getNumericValue(tableData?.topCellPadding) ?? '';\n style.paddingLeft = this._getNumericValue(data.leftCellPadding) ?? this._getNumericValue(tableData?.leftCellPadding) ?? '';\n style.paddingBottom = this._getNumericValue(data.bottomCellPadding) ?? this._getNumericValue(tableData?.bottomCellPadding) ?? '';\n style.paddingRight = this._getNumericValue(data.rightCellPadding) ?? this._getNumericValue(tableData?.rightCellPadding) ?? '';\n style.margin = data.cellMargin || null;\n dom.attr(cell, {\n style: style || null,\n className: data.className || null\n });\n },\n _updateCaption: function(table, data) {\n if (table.caption && !data.captionContent) {\n table.deleteCaption();\n } else if (data.captionContent) {\n var caption = table.createCaption();\n caption.innerHTML = data.captionContent;\n var alignment = this._getAlignmentData(data.captionAlignment);\n dom.attr(caption, {\n style: {\n textAlign: alignment.textAlign,\n verticalAlign: alignment.verticalAlign\n }\n });\n }\n },\n _updateHeadersNoThead: function(table, data) {\n var cmd = this;\n var tableProp = data.tableProperties;\n var rows = table.rows;\n var row, cells, cell, i, j;\n\n for (i = 0; i < rows.length; i++) {\n row = rows[i];\n cells = row.cells;\n\n for (j = 0; j < cells.length; j++) {\n cell = cells[j];\n if (!cmd._isHeadingCell(cell) && (i < tableProp.headerRows || tableProp.headerColumns > cell.getAttribute(COL_INDEX))) {\n dom.changeTag(cell, TH, false);\n } else if (cmd._isHeadingCell(cell) && i >= tableProp.headerRows && tableProp.headerColumns <= cell.getAttribute(COL_INDEX)) {\n dom.changeTag(cell, TD, false);\n }\n }\n }\n },\n _updateHeadersWithThead: function(table, data) {\n var cmd = this;\n var tableProp = data.tableProperties;\n var thead = table.tHead;\n var rowIndex = 0;\n var tbody = table.tBodies[0];\n var row, cell, i;\n\n if (!tbody) {\n tbody = table.createTBody();\n }\n\n if (tableProp.headerRows && tableProp.headerRows > 0) {\n if (!thead) {\n thead = table.createTHead();\n }\n\n while (thead.rows.length < tableProp.headerRows) {\n thead.appendChild(tbody.rows[0]);\n }\n\n while (thead.rows.length > tableProp.headerRows) {\n tbody.appendChild(thead.rows[0]);\n }\n\n cmd._swapToHeaderCells(thead);\n } else if (thead) {\n while (thead.rows.length > 0) {\n tbody.appendChild(thead.rows[thead.rows.length - 1]);\n }\n\n table.deleteTHead();\n }\n\n while (tbody.rows.length > rowIndex) {\n row = tbody.rows[rowIndex];\n for (i = 0; i < row.cells.length; i++) {\n cell = row.cells[i];\n if (cmd._isHeadingCell(cell) && tableProp.headerColumns <= cell.getAttribute(COL_INDEX)) {\n dom.changeTag(cell, TD, false);\n } else if (!cmd._isHeadingCell(cell) && tableProp.headerColumns > cell.getAttribute(COL_INDEX)) {\n dom.changeTag(cell, TH, false);\n }\n }\n rowIndex += 1;\n }\n },\n _updateHeaderAssociates: function(table, tableProp) {\n var cmd = this;\n\n if (tableProp.cellsWithHeaders === \"ids\") {\n if (!cmd.cellsWithHeadersAssociated(table)) {\n cmd._removeScopes(table);\n }\n dom.associateWithIds(table);\n } else if (tableProp.cellsWithHeaders === \"scope\") {\n if (cmd.cellsWithHeadersAssociated(table)) {\n cmd._removeAssociates(table);\n }\n cmd._addScopes(table, tableProp.headerRows, tableProp.headerColumns);\n } else {\n if (cmd.cellsWithHeadersAssociated(table)) {\n cmd._removeAssociates(table);\n } else {\n cmd._removeScopes(table);\n }\n }\n },\n _addScopes: function(table, headerRows, headerCols) {\n var rows = table.rows;\n var i, j, row, cell;\n\n for (i = 0; i < rows.length; i++) {\n row = rows[i];\n\n for (j = 0; j < row.cells.length; j++) {\n cell = row.cells[j];\n\n if (i < headerRows) {\n cell.setAttribute(SCOPE, COL);\n } else if (cell.getAttribute(COL_INDEX) < headerCols) {\n cell.setAttribute(SCOPE, ROW);\n }\n }\n }\n },\n _removeScopes: function(table) {\n $(table).find(TH).removeAttr(SCOPE);\n $(table).find(COL).remove();\n $(table).find(COLGROUP).remove();\n },\n _removeAssociates: function(table) {\n $(table).find(\"th, td\").removeAttr(\"id headers\");\n },\n _swapToHeaderCells: function(thead) {\n var tds = $(thead).find(\"td\");\n var swapCell = function(index, cell) {\n dom.changeTag(cell, TH, false);\n };\n tds.each(swapCell);\n },\n _getStylesData: function(data) {\n var that = this;\n var alignment = this._getAlignmentData(data.alignment);\n var whiteSpace = \"wrapText\" in data ? (data.wrapText ? \"\" : \"nowrap\") : null;\n\n return $.extend({\n width: data.width ? data.width + data.widthUnit : null,\n height: data.height ? data.height + data.heightUnit : null,\n textAlign: alignment.textAlign,\n verticalAlign: alignment.verticalAlign,\n backgroundColor: data.bgColor || \"\",\n borderWidth: data.borderWidth,\n borderStyle: data.borderStyle,\n borderColor: data.borderColor || \"\",\n borderCollapse: data.collapseBorders ? \"collapse\" : null,\n whiteSpace: whiteSpace\n }, that._getTablePositionData(data.position));\n },\n _getAlignmentData: function(alignment) {\n var textAlign = \"\";\n var verticalAlign = textAlign;\n\n if (alignment) {\n if (alignment.indexOf(\" \") != -1) {\n var align = alignment.split(\" \");\n textAlign = align[0];\n verticalAlign = align[1];\n } else {\n textAlign = alignment;\n }\n }\n return { textAlign: textAlign, verticalAlign: verticalAlign };\n },\n _getTablePositionData: function(position) {\n if (!position) {\n return {};\n }\n\n return { marginLeft: position != \"left\" ? \"auto\" : \"\", marginRight: position != \"right\" ? \"auto\" : \"\" };\n },\n parseTable: function(table, selectedCells) {\n if (!table) {\n return { tableProperties: {}, selectedCells: [] };\n }\n\n var cmd = this;\n var tStyle = table.style;\n var rows = table.rows;\n var caption = table.caption;\n var captionClone = $(caption ? caption.cloneNode(true) : undefined$1);\n captionClone.find(\".k-marker\").remove();\n\n var cssClass = table.className;\n cssClass = cssClass.replace(/^k-table\\s|\\sk-table$/, \"\");\n cssClass = cssClass.replace(/\\sk-table\\s/, \" \");\n cssClass = cssClass.replace(/^k-table$/, \"\");\n\n var tableAlignment = cmd._getAlignment(table, true);\n var tablePosition = cmd._getTablePosition(table);\n var captionAlignment = caption ? cmd._getAlignment(caption) : undefined$1;\n var numberOfHeaderRows = dom._getNumberOfHeaderRows(table);\n\n var cellsWithHeaders;\n if (cmd.cellsWithHeadersAssociated(table)) {\n cellsWithHeaders = \"ids\";\n } else if ($(table).find(\"th[scope]\").length > 0) {\n cellsWithHeaders = \"scope\";\n } else {\n cellsWithHeaders = \"none\";\n }\n\n dom.reMapTableColumns(table, COL_INDEX);\n var numberOfColumns = dom._getNumberOfColumns(table);\n var numberOfHeaderColumns = dom._getNumberOfHeaderColumns(table, numberOfHeaderRows);\n dom.clearTableMappings(table, COL_INDEX);\n\n var tableJson = {\n tableProperties: {\n width: tStyle.width || table.width ? parseFloat(tStyle.width || table.width) : null,\n height: tStyle.height || table.height ? parseFloat(tStyle.height || table.height) : null,\n columns: numberOfColumns,\n rows: rows.length,\n widthUnit: cmd._getUnit(tStyle.width),\n heightUnit: cmd._getUnit(tStyle.height),\n cellSpacing: table.cellSpacing,\n topCellPadding: table.topCellPadding,\n leftCellPadding: table.leftCellPadding,\n bottomCellPadding: table.bottomCellPadding,\n rightCellPadding: table.rightCellPadding,\n alignment: tableAlignment.textAlign,\n position: tablePosition,\n bgColor: tStyle.backgroundColor || table.bgColor,\n className: cssClass,\n id: table.id,\n borderWidth: tStyle.borderWidth || table.border,\n borderColor: tStyle.borderColor,\n borderStyle: tStyle.borderStyle || \"\",\n collapseBorders: !!tStyle.borderCollapse,\n summary: table.summary,\n captionContent: caption ? captionClone.html() : \"\",\n captionAlignment: caption && captionAlignment.textAlign ? captionAlignment.textAlign + \" \" + captionAlignment.verticalAlign : \"\",\n headerRows: numberOfHeaderRows,\n headerColumns: numberOfHeaderColumns,\n cellsWithHeaders: cellsWithHeaders\n },\n selectedCells: []\n };\n\n tableJson.rows = cmd.parseTableRows(rows, selectedCells, tableJson);\n\n return tableJson;\n },\n parseTableRows: function(rows, selectedCells, tableJson) {\n var cmd = this;\n var data = [], row, rowData, cells, cell, cellData;\n for (var i = 0; i < rows.length; i++) {\n row = rows[i];\n rowData = { cells: [] };\n cells = row.cells;\n data.push(rowData);\n for (var j = 0; j < cells.length; j++) {\n cell = cells[j];\n cellData = cmd.parseCell(cell);\n if ($.inArray(cell, selectedCells) != -1) {\n tableJson.selectedCells.push(cellData);\n }\n rowData.cells.push(cellData);\n }\n }\n return data;\n },\n parseCell: function(cell) {\n var cmd = this;\n var cStyle = cell.style;\n var alignment = cmd._getAlignment(cell);\n alignment = alignment.textAlign ? alignment.textAlign + \" \" + alignment.verticalAlign : \"\";\n\n var data = {\n width: cStyle.width || cell.width ? parseFloat(cStyle.width || cell.width) : null,\n height: cStyle.height || cell.height ? parseFloat(cStyle.height || cell.height) : null,\n widthUnit: cmd._getUnit(cStyle.width),\n heightUnit: cmd._getUnit(cStyle.height),\n cellMargin: cStyle.margin,\n topCellPadding: cStyle.paddingTop,\n leftCellPadding: cStyle.paddingLeft,\n bottomCellPadding: cStyle.paddingBottom,\n rightCellPadding: cStyle.paddingRight,\n alignment: alignment,\n bgColor: cStyle.backgroundColor || cell.bgColor,\n className: cell.className,\n id: cell.id,\n borderWidth: cStyle.borderWidth || cell.border,\n borderColor: cStyle.borderColor,\n borderStyle: cStyle.borderStyle,\n wrapText: cStyle.whiteSpace != \"nowrap\"\n };\n\n return data;\n },\n _getTablePosition: function(element) {\n var style = element.style;\n if (style.marginLeft == \"auto\" && style.marginRight == \"auto\") {\n return \"center\";\n }\n\n if (style.marginLeft == \"auto\") {\n return \"right\";\n }\n\n return \"left\";\n },\n _getAlignment: function(element, horizontalOnly) {\n var style = element.style;\n var hAlign = style.textAlign || element.align || \"\";\n if (horizontalOnly) {\n return { textAlign: hAlign };\n }\n var vAlign = style.verticalAlign || element.vAlign || \"\";\n if (hAlign && vAlign) {\n return { textAlign: hAlign, verticalAlign: vAlign };\n }\n if (!hAlign && vAlign) {\n return { textAlign: \"left\", verticalAlign: vAlign };\n }\n if (hAlign && !vAlign) {\n return { textAlign: hAlign, verticalAlign: \"top\" };\n }\n return { textAlign: \"\", verticalAlign: \"\" };\n },\n _getUnit: function(value) {\n var unit = (value || \"\").match(reUnit);\n return unit ? unit[0] : \"px\";\n },\n _selectedTable: function(range) {\n var nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n return tableFormatFinder.findSuitable(nodes)[0];\n },\n _selectedCells: function(range) {\n var nodes = dom.filterBy(RangeUtils.nodes(range), dom.htmlIndentSpace, true);\n return cellsFormatFinder.findSuitable(nodes);\n },\n _lastInCollection: function(collection) {\n return collection[collection.length - 1];\n },\n _getNumericValue: function(value) {\n return !isNaN(value) || typeof value === \"string\" ? value : null;\n }\n });\n\n var TableWizardTool = Editor.Tool.extend({\n command: function(options) {\n options.insertNewTable = this.options.insertNewTable;\n options.tableCellWizard = !!this.options.tableCellWizard;\n return new TableWizardCommand(options);\n }\n });\n\n var TableWizardEditTool = TableWizardTool.extend({\n update: function(ui, nodes) {\n var isFormatted = !tableFormatFinder.isFormatted(nodes),\n toolbar = ui.closest(\".k-toolbar\").getKendoToolBar();\n\n if (isFormatted === true) {\n toolbar.hide(ui);\n } else {\n toolbar.show(ui);\n }\n }\n });\n\n var TableCellWizardEditTool = TableWizardTool.extend({\n update: function(ui, nodes) {\n var isFormatted = !tableFormatFinder.isFormatted(nodes),\n toolbar = ui.closest(\".k-toolbar\").getKendoToolBar();\n\n if (isFormatted === true) {\n toolbar.hide(ui);\n } else {\n toolbar.show(ui);\n }\n }\n });\n\n kendo.ui.editor.TableWizardTool = TableWizardTool;\n kendo.ui.editor.TableWizardCommand = TableWizardCommand;\n\n registerTool(\"tableProperties\", new TableWizardEditTool({ command: TableWizardCommand, insertNewTable: false, property: \"tableProperties\" }));\n registerTool(\"tableCellProperties\", new TableCellWizardEditTool({ command: TableWizardCommand, tableCellWizard: true, insertNewTable: false, property: \"tableCellProperties\" }));\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n const FORM_FIELD_CLASS = \"k-form-field\",\n INVISIBLE_CLASS = \"k-visibility-invisible\",\n DOT = \".\";\n\n var kendo = window.kendo,\n encode = kendo.htmlEncode,\n numericTextBoxSettings = { format: \"0\", min: 0 },\n units = [\"px\", \"em\"],\n borderStyles = [\"solid\", \"dotted\", \"dashed\", \"double\", \"groove\", \"ridge\", \"inset\", \"outset\", \"initial\", \"inherit\", \"none\", \"hidden\"];\n\n var DEFAULT_NUMBER_OF_COLS_AND_ROWS = 4;\n\n var textWrapDropDownSettings = {\n dataSource: [{\n className: \"text-wrap\",\n value: \"wrap\"\n }, {\n className: \"parameter-string\",\n value: \"nowrap\"\n }],\n dataTextField: \"className\",\n dataValueField: \"value\",\n template: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className) }) + encode(tooltip),\n valueTemplate: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className), iconClass: \"k-text-wrap\" }) + encode(tooltip)\n };\n\n var tablePositionDropDownSettings = {\n dataSource: [{\n className: \"table-position-start\",\n value: \"left\"\n }, {\n className: \"table-position-center\",\n value: \"center\"\n }, {\n className: \"table-position-end\",\n value: \"right\"\n }],\n dataTextField: \"className\",\n dataValueField: \"value\",\n template: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className) }) + encode(tooltip),\n valueTemplate: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className), iconClass: \"k-align-group\" }) + encode(tooltip)\n };\n\n var tableAlignmentDropDownSettings = {\n dataSource: [{\n className: \"table-align-middle-left\",\n value: \"left\"\n }, {\n className: \"table-align-middle-center\",\n value: \"center\"\n }, {\n className: \"table-align-middle-right\",\n value: \"right\"\n }, {\n className: \"align-remove\",\n value: \"\"\n }],\n dataTextField: \"className\",\n dataValueField: \"value\",\n template: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className) }) + encode(tooltip),\n valueTemplate: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className), iconClass: \"k-align-group\" }) + encode(tooltip)\n };\n\n var cellAlignmentDropDownSettings = {\n dataSource: [{\n className: \"table-align-top-left\",\n value: \"left top\"\n }, {\n className: \"table-align-top-center\",\n value: \"center top\"\n }, {\n className: \"table-align-top-right\",\n value: \"right top\"\n }, {\n className: \"table-align-middle-left\",\n value: \"left middle\"\n }, {\n className: \"table-align-middle-center\",\n value: \"center middle\"\n }, {\n className: \"table-align-middle-right\",\n value: \"right middle\"\n }, {\n className: \"table-align-bottom-left\",\n value: \"left bottom\"\n }, {\n className: \"table-align-bottom-center\",\n value: \"center bottom\"\n }, {\n className: \"table-align-bottom-right\",\n value: \"right bottom\"\n }, {\n className: \"align-remove\",\n value: \"\"\n }],\n dataTextField: \"className\",\n dataValueField: \"value\",\n template: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className) }) + encode(tooltip),\n valueTemplate: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className), iconClass: \"k-align-group\" }) + encode(tooltip)\n };\n\n var accessibilityAlignmentDropDownSettings = {\n dataSource: [{\n className: \"table-align-top-left\",\n value: \"left top\"\n }, {\n className: \"table-align-top-center\",\n value: \"center top\"\n }, {\n className: \"table-align-top-right\",\n value: \"right top\"\n }, {\n className: \"table-align-bottom-left\",\n value: \"left bottom\"\n }, {\n className: \"table-align-bottom-center\",\n value: \"center bottom\"\n }, {\n className: \"table-align-bottom-right\",\n value: \"right bottom\"\n }, {\n className: \"align-remove\",\n value: \"\"\n }],\n dataTextField: \"className\",\n dataValueField: \"value\",\n template: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className) }),\n valueTemplate: ({ className, tooltip }) => kendo.ui.icon($(``), { icon: encode(className), iconClass: \"k-align-group\" })\n };\n\n var tablePropertiesDialogTemplate = ({ messages }) =>\n '
    ' +\n '
    ' +\n '
      ' +\n `
    • ${ messages.tableTab }
    • ` +\n `
    • ${ messages.accessibilityTab }
    • ` +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n '
    ' +\n kendo.html.renderButton(``, {\n icon: 'check',\n themeColor: \"primary\"\n }) +\n kendo.html.renderButton(``, {\n icon: 'cancel-outline'\n }) +\n '
    ' +\n '
    ';\n var cellPropertiesDialogTemplate = ({ messages }) =>\n '
    ' +\n '
    ' +\n '
    ' +\n kendo.html.renderButton(``, {\n icon: 'check',\n themeColor: \"primary\"\n }) +\n kendo.html.renderButton(``, {\n icon: 'cancel-outline'\n }) +\n '
    ' +\n '
    ';\n\n var TableWizardDialog = kendo.Class.extend({\n init: function(options) {\n this.options = options;\n },\n _openTablePropertiesDialog: function() {\n var that = this,\n options = that.options,\n dialogOptions = options.dialogOptions,\n tableData = options.table,\n dialog,\n messages = options.messages,\n isIE = kendo.support.browser.msie;\n\n function close(e) {\n e.preventDefault();\n that.destroy();\n dialog.destroy();\n }\n\n function okHandler(e) {\n that.collectTableDialogValues(tableData);\n\n close(e);\n\n if (that.change) {\n that.change();\n }\n\n options.closeCallback(tableData);\n }\n\n function closeHandler(e) {\n close(e);\n options.closeCallback();\n }\n\n dialogOptions.close = closeHandler;\n dialogOptions.minWidth = 700;\n dialogOptions.width = 700;\n dialogOptions.title = messages.tableProperties;\n dialogOptions.visible = options.visible;\n\n dialog = $(that._dialogTemplate(messages)).appendTo(document.body)\n .kendoWindow(dialogOptions)\n .addClass(\"k-editor-window\")\n .closest(\".k-window\").toggleClass(\"k-rtl\", options.isRtl).end()\n .find(\".k-dialog-ok\").on(\"click\", okHandler).end()\n .find(\".k-dialog-close\").on(\"click\", closeHandler).end()\n .data(\"kendoWindow\");\n\n var element = dialog.element;\n this.components = {};\n that._initTabStripComponent(element);\n that._tablePropertiesForm = that._createTablePropertiesForm(dialog, messages);\n that._accessibilityPropertiesForm = that._createAccessibilityPropertiesForm(dialog, messages);\n\n dialog.center();\n dialog.open();\n\n if (isIE) {\n var dialogHeight = element.closest(\".k-window\").height();\n element.css(\"max-height\", dialogHeight);\n }\n },\n _openCellPropertiesDialog: function() {\n var that = this,\n options = that.options,\n dialogOptions = options.dialogOptions,\n tableData = options.table,\n dialog,\n messages = options.messages,\n isIE = kendo.support.browser.msie;\n\n function close(e) {\n e.preventDefault();\n that.destroy();\n dialog.destroy();\n }\n\n function okHandler(e) {\n that.collectCellDialogValues(tableData);\n\n close(e);\n\n if (that.change) {\n that.change();\n }\n\n options.closeCallback(tableData);\n }\n\n function closeHandler(e) {\n close(e);\n options.closeCallback();\n }\n\n dialogOptions.close = closeHandler;\n dialogOptions.minWidth = 400;\n dialogOptions.title = messages.tableCellProperties;\n dialogOptions.visible = options.visible;\n\n dialog = $(that._dialogTemplate(messages, cellPropertiesDialogTemplate)).appendTo(document.body)\n .kendoWindow(dialogOptions)\n .addClass(\"k-editor-window\")\n .closest(\".k-window\").toggleClass(\"k-rtl\", options.isRtl).end()\n .find(\".k-dialog-ok\").on(\"click\", okHandler).end()\n .find(\".k-dialog-close\").on(\"click\", closeHandler).end()\n .data(\"kendoWindow\");\n\n var element = dialog.element;\n that._cellPropertiesForm = that._createCellPropertiesForm(dialog, messages);\n\n dialog.center();\n dialog.open();\n\n if (isIE) {\n var dialogHeight = element.closest(\".k-window\").height();\n element.css(\"max-height\", dialogHeight);\n }\n },\n open: function(isCellProperties) {\n if (!isCellProperties) {\n this._openTablePropertiesDialog();\n } else {\n this._openCellPropertiesDialog();\n }\n },\n\n _initTabStripComponent: function(element) {\n var components = this.components = {};\n components.tabStrip = element.find(\"#k-table-wizard-tabs\").kendoTabStrip({\n animation: false\n }).data(\"kendoTabStrip\");\n },\n\n collectTableDialogValues: function() {\n var that = this;\n var data = that.options.table;\n that._collectTableViewValues(data);\n that._collectAccessibilityViewValues(data);\n },\n\n collectCellDialogValues: function() {\n var that = this;\n var data = that.options.table;\n that._collectCellViewValues(data);\n },\n\n _collectTableViewValues: function(tableData) {\n var tableView = this.components.tableView;\n var tableProperties = tableData.tableProperties;\n var cellData = tableData.cellProperties = tableData.cellProperties || {};\n tableProperties.width = tableView.width.value();\n tableProperties.widthUnit = tableView.widthUnit.value();\n tableProperties.height = tableView.height.value();\n tableProperties.columns = tableView.columns.value();\n tableProperties.rows = tableView.rows.value();\n tableProperties.heightUnit = tableView.heightUnit.value();\n tableProperties.cellSpacing = tableView.cellSpacing.value();\n tableProperties.topCellPadding = tableView.topCellPadding.value();\n tableProperties.leftCellPadding = tableView.leftCellPadding.value();\n tableProperties.bottomCellPadding = tableView.bottomCellPadding.value();\n tableProperties.rightCellPadding = tableView.rightCellPadding.value();\n tableProperties.alignment = tableView.alignment.value();\n tableProperties.position = tableView.position.value();\n tableProperties.bgColor = tableView.bgColor.value();\n tableProperties.borderWidth = tableView.borderWidth.value();\n tableProperties.borderColor = tableView.borderColor.value();\n tableProperties.borderStyle = tableView.borderStyle.value();\n tableProperties.collapseBorders = tableView.collapseBorders.check();\n\n if (!cellData.width) {\n cellData.selectAllCells = true;\n cellData.width = 100 / tableData.tableProperties.columns;\n cellData.widthUnit = \"%\";\n }\n },\n\n _collectCellViewValues: function(table) {\n var cellData = table.cellProperties = table.cellProperties || {};\n var cellView = this.components.cellView;\n\n cellData.selectAllCells = cellView.selectAllCells.check();\n cellData.width = cellView.width.value();\n cellData.widthUnit = cellView.widthUnit.value();\n cellData.height = cellView.height.value();\n cellData.heightUnit = cellView.heightUnit.value();\n cellData.independentCellPaddings = cellView.independentCellPaddings.check();\n cellData.topCellPadding = cellView.topCellPadding.value();\n cellData.leftCellPadding = cellView.leftCellPadding.value();\n cellData.bottomCellPadding = cellView.bottomCellPadding.value();\n cellData.rightCellPadding = cellView.rightCellPadding.value();\n cellData.cellMargin = cellView.cellMargin.value();\n cellData.alignment = cellView.alignment.value();\n cellData.bgColor = cellView.bgColor.value();\n cellData.className = cellView.className.value();\n cellData.id = cellView.id.value();\n cellData.borderWidth = cellView.borderWidth.value();\n cellData.borderColor = cellView.borderColor.value();\n cellData.borderStyle = cellView.borderStyle.value();\n cellData.wrapText = cellView.wrapTextValue.value() == \"wrap\";\n\n if (!cellData.width) {\n cellData.selectAllCells = true;\n cellData.width = 100 / table.tableProperties.columns;\n cellData.widthUnit = \"%\";\n }\n },\n\n _collectAccessibilityViewValues: function(table) {\n var tableProperties = table.tableProperties;\n var accessibilityView = this.components.accessibilityView;\n tableProperties.captionContent = accessibilityView.captionContent.value();\n tableProperties.captionAlignment = accessibilityView.captionAlignment.value();\n tableProperties.summary = accessibilityView.summary.value();\n tableProperties.cellsWithHeaders = accessibilityView.cellsWithHeaders.value();\n tableProperties.className = accessibilityView.className.value();\n tableProperties.id = accessibilityView.id.value();\n tableProperties.headerRows = accessibilityView.headerRows.value();\n tableProperties.headerColumns = accessibilityView.headerColumns.value();\n },\n _addUnit: function(units, value) {\n if (value && $.inArray(value, units) == -1) {\n units.push(value);\n }\n },\n\n _initNumericTextbox: function(element, property, data, storage, settings) {\n var component = storage[property] = element.kendoNumericTextBox(\n settings ? $.extend({}, numericTextBoxSettings, settings) : numericTextBoxSettings\n ).data(\"kendoNumericTextBox\");\n if (property in data) {\n component.value(parseInt(data[property], 10));\n }\n },\n\n _initDropDownList: function(element, property, data, storage, dataSource) {\n var component = storage[property] = element.kendoDropDownList({\n dataSource: dataSource\n }).data(\"kendoDropDownList\");\n this._setComponentValue(component, data, property);\n },\n\n _initBorderStyleDropDown: function(element, property, data, storage, dataSource) {\n var component = storage[property] = element.kendoDropDownList({\n dataSource: dataSource,\n optionLabel: this.options.messages.borderNone\n }).data(\"kendoDropDownList\");\n this._setComponentValue(component, data, property);\n },\n\n _initTablePositionDropDown: function(element, data) {\n var messages = this.options.messages;\n var tableView = this.components.tableView;\n var dataSource = tablePositionDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.tableAlignLeft;\n dataSource[1].tooltip = messages.tableAlignCenter;\n dataSource[2].tooltip = messages.tableAlignRight;\n\n this._initPositionDropDown(element, tablePositionDropDownSettings, \"position\", data, tableView);\n },\n\n _initTableAlignmentDropDown: function(element, data) {\n var messages = this.options.messages;\n var tableView = this.components.tableView;\n var dataSource = tableAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeft;\n dataSource[1].tooltip = messages.alignCenter;\n dataSource[2].tooltip = messages.alignRight;\n dataSource[3].tooltip = messages.alignRemove;\n\n this._initAlignmentDropDown(element, tableAlignmentDropDownSettings, \"alignment\", data, tableView);\n },\n\n _initCellAlignmentDropDown: function(element, data) {\n var messages = this.options.messages;\n var cellView = this.components.cellView;\n var dataSource = cellAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeftTop;\n dataSource[1].tooltip = messages.alignCenterTop;\n dataSource[2].tooltip = messages.alignRightTop;\n dataSource[3].tooltip = messages.alignLeftMiddle;\n dataSource[4].tooltip = messages.alignCenterMiddle;\n dataSource[5].tooltip = messages.alignRightMiddle;\n dataSource[6].tooltip = messages.alignLeftBottom;\n dataSource[7].tooltip = messages.alignCenterBottom;\n dataSource[8].tooltip = messages.alignRightBottom;\n dataSource[9].tooltip = messages.alignRemove;\n\n this._initAlignmentDropDown(element, cellAlignmentDropDownSettings, \"alignment\", data, cellView);\n },\n\n _initAccessibilityAlignmentDropDown: function(element, data) {\n var messages = this.options.messages;\n var accessibilityView = this.components.accessibilityView;\n var dataSource = accessibilityAlignmentDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.alignLeftTop;\n dataSource[1].tooltip = messages.alignCenterTop;\n dataSource[2].tooltip = messages.alignRightTop;\n dataSource[3].tooltip = messages.alignLeftBottom;\n dataSource[4].tooltip = messages.alignCenterBottom;\n dataSource[5].tooltip = messages.alignRightBottom;\n dataSource[6].tooltip = messages.alignRemove;\n\n this._initAlignmentDropDown(element, accessibilityAlignmentDropDownSettings, \"captionAlignment\", data, accessibilityView);\n },\n _initTextWrapDropDown: function(element, data) {\n var messages = this.options.messages;\n var name = \"wrapTextValue\";\n data.wrapTextValue = data.wrapText ? \"wrap\" : \"nowrap\";\n\n var cellView = this.components.cellView;\n var dataSource = textWrapDropDownSettings.dataSource;\n dataSource[0].tooltip = messages.wrapText;\n dataSource[1].tooltip = messages.fitToCell;\n var component = cellView[name] =\n element.kendoDropDownList(textWrapDropDownSettings).data(\"kendoDropDownList\");\n\n component.list.addClass('k-text-wrap');\n this._setComponentValue(component, data, name);\n },\n _initPositionDropDown: function(element, settings, name, data, storage) {\n var component = storage[name] =\n element.kendoDropDownList(settings).data(\"kendoDropDownList\");\n\n component.list.addClass('k-position');\n this._setComponentValue(component, data, name);\n },\n _initAlignmentDropDown: function(element, settings, name, data, storage) {\n var component = storage[name] =\n element.kendoDropDownList(settings).data(\"kendoDropDownList\");\n\n component.list.addClass('k-align');\n this._setComponentValue(component, data, name);\n },\n _initAssociationDropDown: function(element, name, settings, data, storage) {\n var component = storage[name] =\n element.kendoDropDownList(settings).data(\"kendoDropDownList\");\n\n this._setComponentValue(component, data, name);\n },\n _setComponentValue: function(component, data, property) {\n if (property in data) {\n component.value(data[property]);\n }\n },\n\n _initColorPicker: function(element, property, data, storage) {\n var component = storage[property] =\n element.kendoColorPicker({ buttons: false, clearButton: true }).data(\"kendoColorPicker\");\n\n if (data[property]) {\n component.value(data[property]);\n }\n },\n _initInput: function(element, property, data, storage, settings) {\n var component = storage[property] = element.kendoTextBox(settings || {}).data(\"kendoTextBox\");\n if (property in data) {\n component.value(data[property]);\n }\n },\n\n _initCheckbox: function(element, property, data, storage, settings) {\n var component = storage[property] = element.kendoCheckBox(settings || {}).data(\"kendoCheckBox\");\n if (property in data) {\n component.check(data[property]);\n }\n },\n\n _initTextArea: function(element, property, data, storage, settings) {\n var component = storage[property] = element.kendoTextArea(settings || {}).data(\"kendoTextArea\");\n if (property in data) {\n component.value(data[property]);\n }\n },\n\n destroy: function() {\n var that = this;\n that._destroyComponents(this.components);\n\n delete that.components;\n },\n _destroyComponents: function(components) {\n for (var widget in components) {\n if (components[widget].destroy) {\n components[widget].destroy();\n }\n delete components[widget];\n }\n },\n\n _dialogTemplate: function(messages, dialogTemplate) {\n return kendo.template(dialogTemplate || tablePropertiesDialogTemplate)({ messages: messages });\n },\n\n _onPaddingTopChange: function(e) {\n let viewType = this.components.tableView ? \"tableView\" : \"cellView\",\n view = this.components[viewType],\n independentCellPaddings = !view.independentCellPaddings.check(),\n topCellPaddingNumeric = view.topCellPadding,\n topCellPaddingValue = topCellPaddingNumeric.value(),\n leftCellPaddingNumeric = view.leftCellPadding,\n bottomCellPaddingNumeric = view.bottomCellPadding,\n rightCellPaddingNumeric = view.rightCellPadding;\n\n if (independentCellPaddings) {\n leftCellPaddingNumeric.value(topCellPaddingValue);\n bottomCellPaddingNumeric.value(topCellPaddingValue);\n rightCellPaddingNumeric.value(topCellPaddingValue);\n }\n\n topCellPaddingNumeric._cachedPadding = topCellPaddingValue;\n },\n\n _onPaddingCheckChange: function(e) {\n let viewType = this.components.tableView ? \"tableView\" : \"cellView\",\n messages = this.options.messages,\n checked = e.sender.check(),\n view = this.components[viewType],\n topCellPaddingNumeric = view.topCellPadding,\n leftCellPaddingNumeric = view.leftCellPadding,\n bottomCellPaddingNumeric = view.bottomCellPadding,\n rightCellPaddingNumeric = view.rightCellPadding,\n topCellPaddingValue = topCellPaddingNumeric.value(),\n bottomCellPaddingValue = bottomCellPaddingNumeric.value(),\n leftCellPaddingValue = leftCellPaddingNumeric.value(),\n rightCellPaddingValue = rightCellPaddingNumeric.value();\n\n if (!checked) {\n if (topCellPaddingValue === bottomCellPaddingValue &&\n topCellPaddingValue === leftCellPaddingValue &&\n topCellPaddingValue === rightCellPaddingValue) {\n leftCellPaddingNumeric.value(topCellPaddingValue);\n bottomCellPaddingNumeric.value(topCellPaddingValue);\n rightCellPaddingNumeric.value(topCellPaddingValue);\n } else {\n topCellPaddingNumeric.value(null);\n }\n\n leftCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).addClass(INVISIBLE_CLASS);\n bottomCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).addClass(INVISIBLE_CLASS);\n rightCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).addClass(INVISIBLE_CLASS);\n\n topCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).find(\".k-form-label\").text(messages.cellPadding);\n } else {\n if (!isNaN(topCellPaddingNumeric._cachedPadding)) {\n topCellPaddingNumeric.value(topCellPaddingNumeric._cachedPadding);\n }\n\n leftCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).removeClass(INVISIBLE_CLASS);\n bottomCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).removeClass(INVISIBLE_CLASS);\n rightCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).removeClass(INVISIBLE_CLASS);\n\n topCellPaddingNumeric.wrapper.closest(DOT + FORM_FIELD_CLASS).find(\".k-form-label\").text(messages.topPadding);\n }\n },\n\n _onColumnsNumberChange: function(args) {\n var that = this;\n var accessibilityView = that.components.accessibilityView;\n var headerColumnsNumeric = accessibilityView.headerColumns;\n var currentNumberOfColumnsHeaders = headerColumnsNumeric.value();\n var numberOfColumns = args.sender.value();\n\n if (numberOfColumns < currentNumberOfColumnsHeaders) {\n headerColumnsNumeric.value(numberOfColumns);\n }\n\n headerColumnsNumeric.max(numberOfColumns);\n },\n\n _onRowsNumberChange: function(args) {\n var that = this;\n var accessibilityView = that.components.accessibilityView;\n var headerRowsNumeric = accessibilityView.headerRows;\n var currentNumberOfRowHeaders = headerRowsNumeric.value();\n var numberOfRows = args.sender.value();\n\n if (numberOfRows < currentNumberOfRowHeaders) {\n headerRowsNumeric.value(numberOfRows);\n }\n\n headerRowsNumeric.max(numberOfRows);\n },\n\n _createTablePropertiesForm: function(dialog, messages) {\n var that = this;\n var table = that.options.table;\n var formElement = dialog.element.find(\"#k-table-properties\");\n var components = that.components;\n var tableView = components.tableView = {};\n var tableProperties = table.tableProperties = table.tableProperties || {};\n var form;\n\n that._addUnit(units, tableProperties.widthUnit);\n that._addUnit(units, tableProperties.heightUnit);\n tableProperties.borderStyle = tableProperties.borderStyle || \"\";\n form = formElement.kendoForm({\n renderButtons: false,\n layout: \"grid\",\n grid: {\n cols: 4\n },\n items: [\n {\n colSpan: 2,\n field: \"k-editor-table-columns\",\n label: encode(messages.columns),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container),\n \"columns\",\n tableProperties,\n tableView,\n {\n min: 1,\n value: DEFAULT_NUMBER_OF_COLS_AND_ROWS,\n change: that._onColumnsNumberChange.bind(that)\n });\n }\n },{\n colSpan: 2,\n field: \"k-editor-table-rows\",\n label: encode(messages.rows),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container),\n \"rows\",\n tableProperties,\n tableView,\n {\n min: 1,\n value: DEFAULT_NUMBER_OF_COLS_AND_ROWS,\n change: that._onRowsNumberChange.bind(that)\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-width\",\n label: encode(messages.width),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"width\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-width-type\",\n label: {\n encoded: false,\n text: ' '\n },\n editor: function(container, options) {\n that._initDropDownList($(``).appendTo(container),\n \"widthUnit\",\n tableProperties,\n tableView,\n units);\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-height\",\n label: encode(messages.height),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"height\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-height-type\",\n label: {\n encoded: false,\n text: ' '\n },\n editor: function(container, options) {\n that._initDropDownList($(``).appendTo(container),\n \"heightUnit\",\n tableProperties,\n tableView,\n units);\n }\n },{\n colSpan: 2,\n field: \"k-editor-table-position\",\n label: encode(messages.position),\n editor: function(container, options) {\n that._initTablePositionDropDown($('').appendTo(container), tableProperties);\n }\n },\n {\n colSpan: 2,\n field: \"k-editor-table-alignment\",\n label: encode(messages.alignment),\n editor: function(container, options) {\n that._initTableAlignmentDropDown($('').appendTo(container), tableProperties);\n }\n },{\n colSpan: 2,\n field: \"k-editor-table-cell-spacing\",\n label: encode(messages.cellSpacing),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"cellSpacing\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n },{\n type: \"group\",\n label: \"Cell Paddings\",\n layout: \"grid\",\n colSpan: 4,\n grid: {\n cols: 4,\n gutter: 20\n },\n items: [\n {\n colSpan: \"full\",\n field: \"k-editor-padding-all-sides\",\n label: \"\",\n editor: function(container, options) {\n that._initCheckbox($('').appendTo(container), \"independentCellPaddings\", tableProperties, tableView,\n {\n checked: true,\n label: encode(messages.independentCellPaddings),\n change: that._onPaddingCheckChange.bind(that)\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cell-padding-top\",\n label: encode(messages.topPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"topCellPadding\", tableProperties, tableView,\n {\n placeholder: encode(messages.auto),\n change: that._onPaddingTopChange.bind(that)\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cell-padding-right\",\n label: encode(messages.rightPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"rightCellPadding\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cells-padding-bottom\",\n label: encode(messages.bottomPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"bottomCellPadding\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cell-padding-left\",\n label: encode(messages.leftPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"leftCellPadding\", tableProperties, tableView, { placeholder: encode(messages.auto) });\n }\n }\n ]\n }, {\n type: \"group\",\n label: \"Borders\",\n layout: \"grid\",\n colSpan: 4,\n grid: {\n cols: 4,\n gutter: 10\n },\n items: [{\n colSpan: \"full\",\n field: \"k-editor-table-bg\",\n label: encode(messages.tableBackground),\n editor: function(container, options) {\n that._initColorPicker($('').appendTo(container), \"bgColor\", tableProperties, tableView);\n }\n },{\n colSpan: 1,\n field: \"k-editor-border-width\",\n label: encode(messages.borderWidth),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"borderWidth\", tableProperties, tableView);\n }\n },{\n colSpan: 1,\n field: \"k-editor-border-color\",\n label: encode(messages.borderColor),\n editor: function(container, options) {\n that._initColorPicker($('').appendTo(container), \"borderColor\", tableProperties, tableView);\n }\n },{\n colSpan: 2,\n field: \"k-editor-border-style\",\n label: encode(messages.borderStyle),\n editor: function(container, options) {\n that._initBorderStyleDropDown($('').appendTo(container),\n \"borderStyle\",\n tableProperties,\n tableView,\n borderStyles);\n }\n },{\n colSpan: \"full\",\n field: \"k-editor-collapse-borders\",\n label: \"\",\n editor: function(container, options) {\n that._initCheckbox($('').appendTo(container), \"collapseBorders\", tableProperties, tableView, { label: encode(messages.collapseBorders) });\n }\n }]\n }\n ]\n }).data(\"kendoForm\");\n form.layoutWrapper.addClass(\"k-gap-x-4\");\n\n return form;\n },\n\n _createCellPropertiesForm: function(dialog, messages) {\n var that = this;\n var table = that.options.table;\n var formElement = dialog.element.find(\"#k-cell-properties\");\n var components = that.components = that.components || {};\n var cellView = components.cellView = {};\n var cellProperties = (table.selectedCells && table.selectedCells[0]) || { borderStyle: \"\", wrapText: true };\n var form;\n\n that._addUnit(units, cellProperties.widthUnit);\n that._addUnit(units, cellProperties.heightUnit);\n form = formElement.kendoForm({\n renderButtons: false,\n layout: \"grid\",\n grid: {\n cols: 4\n },\n items: [\n {\n colSpan: \"full\",\n field: \"k-editor-selectAllCells\",\n label: \"\",\n editor: function(container, options) {\n that._initCheckbox($('').appendTo(container), \"selectAllCells\", table.tableProperties, cellView, { label: encode(messages.selectAllCells) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-cell-width\",\n label: encode(messages.width),\n hint: encode(messages.applyToColumn),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"width\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-cell-width-type\",\n label: {\n encoded: false,\n text: ' '\n },\n editor: function(container, options) {\n that._initDropDownList($(``).appendTo(container),\n \"widthUnit\",\n cellProperties,\n cellView,\n units);\n }\n },{\n colSpan: 1,\n field: \"k-editor-cell-height\",\n label: encode(messages.height),\n hint: encode(messages.applyToRow),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"height\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-cell-height-type\",\n label: {\n encoded: false,\n text: ' '\n },\n editor: function(container, options) {\n that._initDropDownList($(``).appendTo(container),\n \"heightUnit\",\n cellProperties,\n cellView,\n units);\n }\n },{\n colSpan: 2,\n field: \"k-editor-cell-alignment\",\n label: encode(messages.alignment),\n editor: function(container, options) {\n that._initCellAlignmentDropDown($('').appendTo(container), cellProperties);\n }\n },{\n colSpan: 2,\n field: \"k-editor-wrap-text\",\n label: \"Text control\",\n editor: function(container, options) {\n that._initTextWrapDropDown($('').appendTo(container),\n cellProperties);\n }\n },{\n colSpan: \"full\",\n field: \"k-editor-cell-bg\",\n label: encode(messages.background),\n editor: function(container, options) {\n that._initColorPicker($('').appendTo(container), \"bgColor\", cellProperties, cellView);\n }\n },{\n colSpan: 2,\n field: \"k-editor-table-cell-margin\",\n label: encode(messages.cellMargin),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"cellMargin\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n type: \"group\",\n label: \"Cell Paddings\",\n layout: \"grid\",\n colSpan: 4,\n grid: {\n cols: 4,\n gutter: 20\n },\n items: [\n {\n colSpan: \"full\",\n field: \"k-editor-padding-all-sides\",\n label: \"\",\n editor: function(container, options) {\n that._initCheckbox($('').appendTo(container), \"independentCellPaddings\", table.tableProperties, cellView,\n {\n checked: true,\n label: encode(messages.independentCellPaddings),\n change: that._onPaddingCheckChange.bind(that)\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cells-padding-top\",\n label: encode(messages.topPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"topCellPadding\", cellProperties, cellView,\n {\n placeholder: encode(messages.auto),\n change: that._onPaddingTopChange.bind(that)\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cells-padding-right\",\n label: encode(messages.rightPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"rightCellPadding\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cells-padding-bottom\",\n label: encode(messages.bottomPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"bottomCellPadding\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-cells-padding-left\",\n label: encode(messages.leftPadding),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"leftCellPadding\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n }\n ]\n },{\n type: \"group\",\n label: \"Borders\",\n layout: \"grid\",\n colSpan: 4,\n grid: {\n cols: 4,\n gutter: 10\n },\n items: [{\n colSpan: 1,\n field: \"k-editor-cell-border-width\",\n label: encode(messages.borderWidth),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container), \"borderWidth\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 1,\n field: \"k-editor-cell-border-color\",\n label: encode(messages.borderColor),\n editor: function(container, options) {\n that._initColorPicker($('').appendTo(container), \"borderColor\", cellProperties, cellView, { placeholder: encode(messages.auto) });\n }\n },{\n colSpan: 2,\n field: \"k-editor-cell-border-style\",\n label: encode(messages.borderStyle),\n editor: function(container, options) {\n that._initBorderStyleDropDown($('').appendTo(container),\n \"borderStyle\",\n cellProperties,\n cellView,\n borderStyles);\n }\n }]\n },{\n colSpan: \"full\",\n field: \"k-editor-cell-id\",\n label: {\n text: encode(messages.id),\n optional: true\n },\n editor: function(container, options) {\n that._initInput($('').appendTo(container), \"id\", cellProperties, cellView);\n }\n },{\n colSpan: \"full\",\n field: \"k-editor-cell-css-class\",\n label: {\n text: encode(messages.cssClass),\n optional: true\n },\n editor: function(container, options) {\n that._initInput($('').appendTo(container), \"className\", cellProperties, cellView);\n }\n }\n ]\n }).data(\"kendoForm\");\n form.layoutWrapper.addClass(\"k-gap-x-4\");\n\n return form;\n },\n\n _createAccessibilityPropertiesForm: function(dialog, messages) {\n var that = this;\n var table = that.options.table;\n var formElement = dialog.element.find(\"#k-accessibility-properties\");\n var components = that.components;\n var accessibilityView = components.accessibilityView = {};\n var tableProperties = table.tableProperties;\n var form;\n\n form = formElement.kendoForm({\n renderButtons: false,\n layout: \"grid\",\n grid: {\n cols: 4\n },\n items: [\n {\n colSpan: \"full\",\n field: \"k-editor-id\",\n label: {\n text: encode(messages.id),\n optional: true\n },\n editor: function(container, options) {\n that._initInput($('').appendTo(container), \"id\", tableProperties, accessibilityView);\n }\n },{\n colSpan: \"full\",\n field: \"k-editor-css-class\",\n label: {\n text: encode(messages.cssClass),\n optional: true\n },\n editor: function(container, options) {\n that._initInput($('').appendTo(container), \"className\", tableProperties, accessibilityView);\n }\n },\n {\n layout: \"grid\",\n grid: {\n cols: 4,\n gutter: 16\n },\n colSpan: \"full\",\n type: \"group\",\n label: \"Accessibility\",\n items: [\n {\n colSpan: 2,\n field: \"k-editor-table-caption\",\n label: {\n text: encode(messages.caption),\n optional: true\n },\n editor: function(container, options) {\n that._initInput($('').appendTo(container), \"captionContent\", tableProperties, accessibilityView);\n }\n },{\n colSpan: 2,\n field: \"k-editor-accessibility-alignment\",\n label: encode(messages.captionAlignment),\n editor: function(container, options) {\n that._initAccessibilityAlignmentDropDown($('').appendTo(container), tableProperties);\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-header-rows\",\n label: encode(messages.headerRows),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container),\n \"headerRows\",\n tableProperties,\n accessibilityView,\n {\n max: tableProperties.rows || DEFAULT_NUMBER_OF_COLS_AND_ROWS\n });\n }\n },{\n colSpan: 1,\n field: \"k-editor-table-header-columns\",\n label: encode(messages.headerColumns),\n editor: function(container, options) {\n that._initNumericTextbox($('').appendTo(container),\n \"headerColumns\",\n tableProperties,\n accessibilityView,\n {\n max: tableProperties.columns || DEFAULT_NUMBER_OF_COLS_AND_ROWS\n });\n }\n },{\n colSpan: 2,\n field: \"k-editor-cells-headers\",\n label: encode(messages.associateCellsWithHeaders),\n editor: function(container, options) {\n var element = $(``).appendTo(container);\n\n that._initAssociationDropDown(element, \"cellsWithHeaders\", { valuePrimitive: true }, tableProperties, accessibilityView);\n }\n },{\n colSpan: \"full\",\n field: \"k-editor-accessibility-summary\",\n label: {\n text: encode(messages.summary),\n optional: true\n },\n editor: function(container, options) {\n that._initTextArea($('').appendTo(container), \"summary\", tableProperties, accessibilityView, {\n rows: 5,\n placeholder: messages.tableSummaryPlaceholder\n });\n }\n }\n ]\n }\n ]\n }).data(\"kendoForm\");\n\n form.layoutWrapper.addClass(\"k-gap-x-4\");\n\n return form;\n }\n });\n\n kendo.ui.editor.TableWizardDialog = TableWizardDialog;\n\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"editor\",\n name: \"Editor\",\n category: \"web\",\n description: \"Rich text editor component\",\n depends: [ \"combobox\", \"dropdownlist\", \"window\", \"colorpicker\", \"toolbar\", \"icons\" ],\n features: [ {\n id: \"editor-imagebrowser\",\n name: \"Image Browser\",\n description: \"Support for uploading and inserting images\",\n depends: [ \"imagebrowser\" ]\n }, {\n id: \"editor-resizable\",\n name: \"Resize handle\",\n description: \"Support for resizing the content area via a resize handle\",\n depends: [ \"resizable\" ]\n }, {\n id: \"editor-tablewizard\",\n name: \"Table wizard dialog\",\n description: \"Support for table properties configuration\",\n depends: [ \"tabstrip\", \"button\", \"numerictextbox\", \"textarea\" ]\n }, {\n id: \"editor-pdf-export\",\n name: \"PDF export\",\n description: \"Export Editor content as PDF\",\n depends: [ \"pdf\", \"drawing\" ]\n }]\n };\n var kendo$1 = kendo;\n\n return kendo$1;\n\n}));\n"]}