{"version":3,"sources":["webpack:///./src/components/tinymce/plugins/linktools/plugin.js","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./src/components/tinymce/plugins/floatingtoolbar/index.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/textcolor/plugin.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/TinyMCE.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/tinymce/plugins/searchreplace/plugin.js","webpack:///./node_modules/tinymce/plugins/hr/index.js","webpack:///./node_modules/tinymce/plugins/colorpicker/index.js","webpack:///./node_modules/tinymce/plugins/autolink/index.js","webpack:///./node_modules/tinymce/plugins/colorpicker/plugin.js","webpack:///./node_modules/tinymce/plugins/textcolor/index.js","webpack:///./node_modules/tinymce/plugins/visualchars/index.js","webpack:///./node_modules/tinymce/plugins/media/plugin.js","webpack:///./node_modules/tinymce/plugins/textpattern/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./src/components/tinymce/plugins/tabletools/index.js","webpack:///./node_modules/tinymce/plugins/contextmenu/plugin.js","webpack:///./node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/tinymce/plugins/save/index.js","webpack:///./node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/tinymce/plugins/autoresize/index.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/tinymce/plugins/save/plugin.js","webpack:///./node_modules/tinymce/plugins/textpattern/index.js","webpack:///./node_modules/tinymce/themes/modern/theme.js","webpack:///./node_modules/tinymce/plugins/paste/plugin.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./src/components/tinymce/plugins/linktools/index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/tinymce/plugins/autoresize/plugin.js","webpack:///./src/components/tinymce/plugins/tabletools/plugin.js","webpack:///./src/components/Editor.vue?7950","webpack:///./node_modules/tinymce/plugins/paste/index.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./src/components/Editor.vue?90db","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/Utils.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/ScriptLoader.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/components/EditorPropTypes.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/components/Editor.js","webpack:///./node_modules/@tinymce/tinymce-vue/lib/es2015/index.js","webpack:///src/components/Editor.vue","webpack:///./src/components/Editor.vue?145f","webpack:///./src/components/Editor.vue?7a29","webpack:///./node_modules/tinymce/plugins/visualchars/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/tinymce/plugins/directionality/plugin.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/index.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/tinymce/plugins/contextmenu/index.js","webpack:///./src/components/tinymce/plugins/floatingtoolbar/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/index.js"],"names":["tinymce","PluginManager","add","editor","gotoLink","url","$","selection","getNode","attr","indexOf","settings","document_base_url","window","open","addButtons","addButton","title","onclick","isEditableLink","each","contextToolbars","toolbar","panel","find","element","parent","$el","removeClass","hide","selectorMatched","dom","is","addToolbars","toolbarItems","linktools_toolbar","addContextToolbar","require","global","util","Tools","resolve","getCurrentColor","format","color","getParents","getStart","elm","value","style","mapColors","colorMap","i","colors","length","push","text","applyFormat","undoManager","transact","focus","formatter","apply","nodeChanged","removeFormat","remove","TextColor","register","addCommand","Commands","global$1","global$2","defaultColorMap","getTextColorMap","getParam","getForeColorMap","getBackColorMap","getTextColorRows","getTextColorCols","getForeColorRows","getBackColorRows","getForeColorCols","getBackColorCols","getColorPickerCallback","hasColorPicker","Settings","global$3","getHtml","cols","rows","html","last","x","y","count","id","DOM","uniqueId","getColorCellHtml","isNoColor","translate","ColorPickerHtml","setDivColor","div","background","setAttribute","onButtonClick","e","ctrl","control","_color","execCommand","onPanelClick","buttonCtrl","this","currentColor","selectColor","hidePanel","resetColor","getParent","target","colorPickerCallback","call","customColorCells","tableElm","getEl","getElementsByTagName","map","childNodes","firstChild","getAttribute","lastId","get","renderColorPicker","foreColor","register$1","type","tooltip","role","ariaRemember","Buttons","Plugin","ctx","IObject","toObject","toLength","asc","module","exports","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","$this","callbackfn","that","val","res","O","self","f","index","result","undefined","curry","fn","initialArgs","_i","arguments","restArgs","all","concat","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getTemplateReplaceValues","getTemplates","editorSettings","templates","getCdateFormat","getLang","getMdateFormat","getDialogWidth","getDialogHeight","Math","min","getViewPort","h","addZeros","len","getDateTime","fmt","date","daysShort","split","daysLong","monthsShort","monthsLong","Date","replace","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","DateTimeHelper","createTemplateList","callback","templateList","send","success","JSON","parse","replaceTemplateValues","templateValues","v","k","RegExp","replaceVals","vl","select","hasClass","n","c","test","className","insertTemplate","ui","el","sel","getContent","appendChild","cloneNode","innerHTML","addVisual","Templates","setup","on","o","dateFormat","node","FilterContent","insertIframeHtml","win","contentCssLinks_1","contentCSS","documentBaseURI","toAbsolute","bodyClass","body_class","doc","contentWindow","document","write","close","templateHtml","values","template","selected","content","description","onSelectTemplate","windowManager","layout","direction","align","padding","spacing","items","flex","label","name","onselect","border","onsubmit","minWidth","minHeight","fire","message","notificationManager","Dialog","showDialog","addMenuItem","icon","context","cof","Array","isArray","arg","isValidId","getId","selectedNode","isAnchor","tagName","getAttrib","insert","removeAttribute","collapse","createHTML","Anchor","insertAnchor","newId","alert","currentId","body","size","data","preventDefault","isAnchorNode","setContentEditable","state","nodes","parser","addNodeFilter","serializer","cmd","stateSelector","fireInsertCustomChar","chr","Events","insertChar","evtChr","Actions","getCharMap","charmap","getCharMapAppend","charmap_append","getDefaultCharMap","charmapFilter","grep","item","getCharsFromSetting","settingValue","extendCharMap","userCharMap","userCharMapAppend","getCharMap$1","CharMap","Api","gridHtml","width","height","ceil","charCode","parseInt","chrText","String","fromCharCode","GridHtml","getParentTd","nodeName","parentNode","charMapPanel","charDiv","hasAttribute","charCodeString","isNaN","ctrlKey","onmouseover","td","buttons","getGlobal","getTinymce","domGlobals","global$4","global$5","global$6","isTextNode","nodeType","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","lastChild","isTextBlock","schema","getTextBlockElements","isBlock","blockElements","isBogusBr","nextSibling","previousSibling","isEmpty","keepBookmarks","empty","isChildOfBody","isChildOf","getRoot","NodeType","getNormalizedPoint","container","offset","normalizeRange","rng","outRng","cloneRange","rangeStart","startContainer","startOffset","setStart","rangeEnd","endContainer","endOffset","setEnd","Range","createBookmark","bookmark","setupEndPoint","start","offsetNode","hasChildNodes","insertBefore","insertAfter","collapsed","resolveBookmark","restoreEndPoint","nodeIndex","idx","createRng","Bookmark","noop","constant","not","args","never","always","none","NONE","eq","isNone","thunk","me","fold","s","isSome","getOr","getOrThunk","getOrDie","msg","Error","getOrNull","getOrUndefined","or","orThunk","bind","exists","forall","filter","equals","equals_","toArray","toString","Object","freeze","some","a","constant_a","elementEq","b","from","Option","typeOf","t","prototype","isPrototypeOf","constructor","isType","isString","isBoolean","isFunction","isNumber","nativeSlice","slice","nativePush","xs","r","pred","groupBy","wasType","group","foldl","acc","flatten","output","reverse","head","Global","Function","path","parts","scope","p","unsafe","actual","Global$1","htmlElement","HTMLElement","global$7","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","querySelectorAll","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","elms","listItemsElms","parentLi","unique","getSelectedListItems","block","getSelectedDlItems","parentTableCell","root","getBody","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","list","isList","Selection","fromHtml","createElement","console","error","fromDom","fromTag","tag","fromText","createTextNode","fromPoint","docElm","elementFromPoint","Element","lift2","oa","ob","fromElements","elements","fragment","createDocumentFragment","Immutable","fields","struct","keys","each$1","obj","props","compareDocumentPosition","match","documentPositionPreceding","DOCUMENT_POSITION_PRECEDING","documentPositionContainedBy","DOCUMENT_POSITION_CONTAINED_BY","Node","cached","called","firstMatch","regexes","find$1","agent","major","minor","Number","nu","detect","versionRegexes","cleanedAgent","toLowerCase","unknown","Version","edge","chrome","ie","opera","firefox","safari","isBrowser","current","unknown$1","nu$1","version","info","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","isOS","unknown$2","nu$2","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","OperatingSystem","DeviceType","os","browser","userAgent","isiPad","isiPhone","isAndroid3","isAndroid4","isTablet","isTouch","isPhone","iOSwebview","isWebView","detect$1","candidates","candidate","search","detectBrowser","browsers","detectOs","oses","UaString","contains","str","substr","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","detect$3","navigator","PlatformDetection$1","ELEMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","ELEMENT$1","TEXT_NODE","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","selector","elem","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","e1","e2","regularContains","d1","d2","ieContains","contains$1","is$1","children","child","cs","before","marker","parent$1","append","before$1","append$1","removeChild","isType$1","isElement","rawSet","key","setAll","attrs","clone","attributes","isSupported","getPropertyValue","internalSet","property","setProperty","set","clone$1","original","isDeep","deep","shallowAs","mutate","children$1","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","segment","createSegments","entry","populateSegments","listAttributes","itemAttributes","normalizeSegment","createItem","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList$1","hasFirstChildList","hasLastChildList","isIndented","isSelected","cloneItemContent","li","createEntry","indentEntry","indentation","hasOwnProperty","shallow","old","baseMerge","merger","objects","ret","j","curObject","merge","cloneListProperties","source","previousSiblingEntry","normalizeEntries","matchingEntry","Cell","initial","parseItem","itemSelection","selectionState","currentItemEntry","end","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","global$8","createTextBlock","contentNode","textBlock","blockName","hasContentNode","getBlockElements","createFragment","forced_root_block","setAttribs","forced_root_block_attrs","outdentedComposer","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listsIndentation","entrySets","entrySet","DOM$1","splitList","ul","tmpRng","bookmarks","newBlock","removeAndKeepBookmarks","targetNode","setStartAfter","setEndAfter","extractContents","SplitList","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","selectionIndentation","isHandled","getBookmark","moveToBookmark","setRng","getRng","indentListSelection","outdentListSelection","flattenListSelection","updateListStyle","detail","setStyle","updateListAttrs","updateListWithDetails","removeStyles","styles","_a","getEndPointNode","getSelectedTextBlocks","textBlocks","startNode","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","getStyle","detailStyle","applyList","listName","listItemName","getContentEditable","toUpperCase","listBlock","sibling","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","ToggleList","DOM$2","normalizeList","normalizeLists","NormalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","walker","getNonEmptyElements","next","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","targetElm","mergeLiElements","listNode","nestedLists","mergeIntoEmptyLi","fromLi","toLi","setCursorLocation","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","otherLi","selectionStartElm","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_1","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","isCollapsed","keyCode","BACKSPACE","DELETE","Delete","queryListCommandState","command","addQueryStateHandler","shouldIndentOnTab","setupTabKey","TAB","metaKeyPressed","shiftKey","setup$1","Keyboard","findIndex","predicate","listState","tableCellIndex","parents","active","hasPlugin","plugin","plugins","inArray","onPostRender","getAutoLinkPattern","getDefaultLinkTarget","rangeEqualsDelimiterOrSpace","rangeString","delimiter","charCodeAt","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","setStartBefore","prev","rngText","autoLinkPattern","defaultLinkTarget","nodeValue","charAt","trim","setAttrib","autoUrlDetectState","ex","Keys","isContentEditableFalse","contentEditable","findAndReplaceDOMText","regex","replacementNode","captureGroup","m","blockElementsMap","hiddenTextElementsMap","shortEndedElementsMap","getMatchIndexes","cg","getText","txt","stepThroughMatches","replaceFn","startNodeIndex","endNodeIndex","innerNodes","atIndex","curNode","matchLocation","shift","matchIndex","out","genReplacer","makeReplacementNode","stencilNode_1","fill","range","after","node_1","substring","elA","l","innerNode","innerEl","replaceChild","elB","ownerDocument","getWhiteSpaceElements","getShortEndedElements","exec","FindReplaceText","getElmIndex","markAllMatches","currentIndexState","done","unwrap","findSpansByIndex","spans","moveSelection","forward","testIndex","addClass","scrollIntoView","removeNode","matchCase","wholeWord","isMatchSpan","currentMatchIndex","hasMore","nextIndex","hasNext","hasPrev","keepEditorSelection","selectedText","updateButtonStates","statusbar","disabled","notFoundAlert","pack","onClose","onSubmit","caseState","checked","subtype","submit","labelGap","shortcut","separator","shortcuts","showPreview","hexColor","setColor","rgb","toRgb","fromJSON","g","hex","toHex","onchange","defaults","spellcheck","colorPickerCtrl","autofocus","toJSON","color_picker_callback","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","has","getVideoScriptMatch","prefixes","src","VideoScript","trimPx","getEphoxEmbedData","parseStyle","source1","source2","poster","htmlToData","isEphoxEmbed","validate","allow_conditional_comments","special","movie","extend","videoScript","HtmlToData","guess","mimes","mp3","wav","mp4","webm","ogg","swf","fileEnd","pop","mime","Mime","addPx","setAttributes","updatedAttrs","splice","updateEphoxEmbed","styleMap","serializeStyle","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","raw","imgAttrs","UpdateHtml","urlPatterns","w","allowFullscreen","getUrl","pattern","newUrl","_loop_1","matchPattern","getIframeHtml","getFlashHtml","getAudioHtml","audioTemplateCallback","source2mime","getVideoHtml","videoTemplateCallback","source1mime","getScriptHtml","dataToHtml","dataIn","embed","convertURL","encode","DataToHtml","cache","embedPromise","handler","rej","wrappedResolve","response","defaultPromise","loadedData","getEmbedHtml","embedHandler","isCached","Service","trimPx$1","addPx$1","getSize","setSize","Size","getMaxWidth","getMaxHeight","setMaxWidth","setMaxHeight","doSyncSize","widthCtrl","heightCtrl","doSizeControls","constrained","doUpdateSize","isContrained","oldWidth","oldHeight","newWidth","newHeight","round","syncSize","updateSize","createUi","onChange","recalcSize","maxLength","ariaLabel","SizeManager","embedChange","handleError","errorMessage","getData","dataEmbed","serialize","getSource","addEmbedHtml","selectPlaceholder","beforeObjects","afterObjects","handleInsert","insertContent","submitForm","then","catch","populateMeta","meta","generalFormItems","filetype","onpaste","setTimeout","onbeforecall","advancedFormItems","reserialise","update","embedTextBox","multiline","updateValueOnChange","forId","bodyType","get$1","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","transparentSrc","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","class","frameborder","sourceNode","attrValue","attribs","ai","innerHtml","escape","isWithinEphoxEmbed","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","realElmName","unescape","$elm","ResolveName","setup$2","objectType","prependToContext","__spreadArrays","il","jl","sort","comparator","copy","isInlinePattern","isBlockPattern","isReplacementPattern","sortPatterns","patterns","createPatternSet","inlinePatterns","blockPatterns","replacementPatterns","patternsState","setPatterns","newPatterns","getPatterns","defaultPatterns","getPatternSet","findPattern","lastIndexOf","isMatchingPattern","delta","textEnd","hasContent","findEndPattern","findInlinePattern","space","endPattern","patternRng","createRange","startPattern","findReplacementPattern","startSearch","isText","setSelection","textNode","newRng","splitContainer","splitText","deleteData","splitAndApply","found","inline","formatArray","validFormats","formatName","forEach","applyInlinePattern","foundPattern","applyInlinePatternSpace","wrappedTextNode","lastChar","lastCharNode","applyInlinePatternEnter","applyBlockPattern","firstTextNode","textBlockElm","max","selectionInsertText","string","insertData","newNode","insertNode","applyReplacement","replacement","extractChar","char","applyReplacementPattern","ch","applyReplacementPatternSpace","applyReplacementPatternEnter","patternSet","handleInlineKey","checkKeyEvent","codes","event","checkKeyCode","code","modifierPressed","checkCharCode","chars","KeyHandler","charCodes","keyCodes","setEditorTimeout","fireVisualBlocks","isEnabledByDefault","getContentCss","visualblocks_content_css","cssId","load","linkElements","matchingLinkElms","linkElm","rel","href","LoadCss","toggleVisualBlocks","pluginUrl","enabledState","contentCss","getDoc","toggleClass","VisualBlocks","Bindings","toggleActiveState","selectable","visibleState","isContextMenuVisible","shouldNeverUseNative","contextmenu_never_use_native","getContextMenu","getUiContainer","ui_container","transpose","pos","dx","dy","fromPageXY","pageX","pageY","fromClientXY","clientX","clientY","transposeUiContainer","containerPos","getPos","scrollLeft","scrollTop","transposeContentAreaContainer","iframePos","getContentAreaContainer","Coords","renderMenu","menu","contextmenu","menuItems","classes","uiContainer","renderTo","show","moveTo","ContextMenu","isNativeOverrideKeyEvent","Bind","$export","$find","KEY","forced","P","F","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","save","formObj","isDirty","execCallback","setDirty","cancel","startContent","setContent","clear","stateToggle","addShortcut","isBrandingEnabled","hasMenubar","getMenubar","hasStatusbar","getToolbarSize","isReadOnly","getFixedToolbarContainer","getInlineToolbarPositionHandler","getMenu","getRemovedMenuItems","getMinWidth","getMinHeight","isSkinDisabled","skin","isInline","getResize","resize","getSkinUrl","skinUrl","skin_url","skinName","baseURL","getIndexedToolbars","defaultToolbar","toolbars","mainToolbar","getToolbars","fireSkinLoaded","fireResizeEditor","fireBeforeRenderUI","addKeys","A11y","getUiContainerDelta","setUiContainer","inheritUiContainer","fromCtrl","toCtrl","UiContainer","createToolbar","buttonGroup","itemName","bindSelectorChanged","selectorChanged","disabledStateSelector","initialized","createToolbars","addToolbar","ariaRoot","Toolbar","toClientRect","geomRect","left","top","right","bottom","hideAllFloatingPanels","movePanelTo","togglePositionClass","relPos","cls","toggle","userConstrain","elementRect","contentAreaRect","panelRect","addContextualToolbars","scrollContainer","getContextToolbars","getElementRect","targetRect","getRect","documentElement","reposition","shouldShow","relRect","testPositions","smallElementWidthThreshold","removed","clientRect","getBoundingClientRect","offsetWidth","controlSelection","isResizable","inflate","findBestRelativePosition","clamp","relativePosition","intersect","pos1","pos2","repositionHandler","execute","findFrontMostMatch","requestAnimationFrame","bindScrollEvent","reposition_1","uiContainer_1","getScrollContainer","getWin","unbind","showContextToolbar","autohide","autofix","fixed","oncancel","reflow","hideAllContextToolbars","parentsAndSelf","ContextToolbars","nativeIndexOf","rawIndexOf","ts","defaultMenus","file","edit","view","tools","table","help","delimiterMenuNamePair","createMenuNameItemPair","menuItem","hasItemName","namedMenuItems","namedMenuItem","isSeparator","cleanupMenu","removedMenuItems","menuItemsPass1","menuItemsPass2","createMenu","editorMenuItems","menus","menuButton","isUserDefined","unshift","getDefaultMenubar","defaultMenuBar","createMenuButtons","menuButtons","makeMap","menubar","enabledMenuNames","Menubar","clientWidth","clientHeight","resizeTo","containerElm","iframeElm","containerSize","iframeSize","getContainer","resizeBy","dw","dh","Resize","api","trigger","sidebar","callbackName","hidePanels","sidebars","visible","deactivateButtons","findSidebar","showPanel","btnCtrl","prepend","isModernBrowser","hasSidebar","createSidebar","image","Sidebar","fireSkinLoaded$1","_skinLoaded","SkinLoaded","switchMode","mode","editArea","editAreaContainer","render","theme","resizeHandleCtrl","startSize","skinUiCss","styleSheetLoader","onResizeStart","onResize","deltaX","deltaY","linkHtml","brandingLabel","renderBefore","setMode","iframeContainer","editorContainer","Iframe","global$9","funcs","getWindowSize","rect","offsetHeight","getElementById","css","getRuntimeStyle","off","setHTML","isStatic","isFixed","calculateRelativePosition","ctrlElm","selfW","selfH","targetW","targetH","viewport","getWindowViewPort","getUiContainerViewPort","customUiContainer","scrollWidth","scrollHeight","pageXOffset","pageYOffset","innerWidth","innerHeight","getViewPortRect","Movable","testMoveRel","rels","viewPortRect","moveRel","moveBy","layoutRect","constrain","constrainToViewport","repaint","global$a","global$b","BoxUtils","parseBox","radix","measureBox","prefix","defaultView","computedStyle","getComputedStyle","currentStyle","getSide","parseFloat","noop$1","ClassList","_map","array","uniqueItems","__checked","_change","curState","clsValue","Collection","Collection$1","proto","expression","chunker","whiteSpace","Selector","init","compileNameFilter","compileIdFilter","_name","compileClassesFilter","compileAttrFilter","cmp","check","compilePsuedoFilter","notSelectors","parseChunks","compile","filters","direct","pseudo","selectors","extra","_selectors","si","sl","fi","fl","collect","prop","Collection$2","Binding","model","otherModel","otherName","bindings","fromSelfToOther","fromOtherToSelf","_bindings","global$c","isNode","isEqual","animationFrameRequested","Control","ObservableObject","Mixins","oldValue","destroy","dirtyCtrls","ReflowQueue","_layout","isNative","_id","hasMouseWheelEventSupport","hasWheelEventSupport","classPrefix","idCounter","proto$1","Statics","isRtl","rtl","defaultClasses","applyClasses","Defaults","_aria","_elmCache","borderBox","paddingBox","marginBox","margin","hidden","Properties","getContainerElm","getParentCtrl","lookup","controlIdLookup","initLayoutRect","autoResize","startMinWidth","startMinHeight","initialSize","deltaW","deltaH","maxW","maxWidth","maxH","maxHeight","_layoutRect","contentW","contentH","innerW","innerH","minW","minH","scrollW","_lastLayoutRect","newRect","lastLayoutRect","deltaWidth","deltaHeight","repaintControls","curRect","bodyStyle","bodyElm","borderW","borderH","lastRepaintRect","_lastRepaintRect","_hasBody","updateLayoutRect","_lastRect","resolveCallbackName","callbacks","action","getEventDispatcher","bubble","isPropagationStopped","hasEventListeners","parentControls","suffix","blur","aria","ariaTarget","newItems","controls","_eventsRoot","renderHtml","postRender","preRender","box","parentEventsRoot","_nativeEvents","bindPendingEvents","cssText","display","bindStates","parentCtrl","getOffset","rootElm","offsetLeft","offsetTop","offsetParent","parentWidth","parentHeight","parentElm","rootControl","_eventDispatcher","toggleEvent","eventCtrl","eventRootCtrl","nativeEvents","delegate","mouseLeaveHandler","_lastHoverCtrl","mouseEnterHandler","lastParents","lastCtrl","fixWheelEvent","wheelDelta","wheelDeltaX","eventRootDelegates","_delegates","_hasMouseEnter","Control$1","hasTabstopData","KeyboardNavigation","focusedElement","focusedControl","activeElement","getRole","getParentRole","getAriaProp","isTextInputElement","canFocus","getFocusElements","getNavigationRoot","targetControl","navigationRoot","focusFirst","focusElements","moveFocusToIndex","lastAriaIndex","moveFocus","dir","parentRole","submenu","enter","up","down","tab","handleNonTabOrEscEvent","isDefaultPrevented","selectorCache","Container","_super","_items","bodyClasses","containerCls","keyboard","focusCtrl","keyboardNav","oldItem","newItem","ctrlItems","defaultType","renderNew","curItems","beforeItems","afterItems","recalc","lastRect","getDocumentSize","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","stop","drag","startX","startY","handleElement","handle","handleElm","cursor","docSize","button","screenX","screenY","runtimeStyle","position","zIndex","opacity","appendTo","documentClickHandler","documentScrollHandler","windowResizeHandler","hasModal","Scrollable","renderScroll","repaintScroll","hasScrollH","hasScrollV","repaintAxis","axisName","posName","sizeName","contentSizeName","hasScroll","ax","scrollBarElm","scrollThumbElm","scrollSize","ratio","posNameLower","sizeNameLower","addScroll","addScrollAxis","deltaPosName","scrollStart","axisId","draghelper","autoScroll","_hasScroll","bodyEl","Panel","_preBodyHtml","Resizable","resizeToContent","visiblePanels","zOrder","skipOrHidePanels","clickCtrl","bindDocumentClickHandler","bindDocumentScrollHandler","repositionPanel","bindWindowResizeHandler","docElm_1","clientWidth_1","clientHeight_1","FloatPanel","hideAll","scrollY","toggleFixedChildPanels","_autoFixY","addRemove","topModal","modal","modalBlockEl","currentZIndex","$modalBlockEl_1","prefix_1","popover","describedBy","removeVisiblePanel","bodyRole","isFixed$1","inlineToolbarContainer","render$1","fixedToolbarContainer","_fixed","bodyPos","scrollContainerPos","content_editable","Inline","Throbber","timer","time","clearTimeout","throbber","ProgressState","renderUI","Render","Tooltip","Widget","tooltips","_tooltip","disable","Progress","setValue","updateLiveRegion","textContent","progressBar","Notification","timeout","closeButton","notificationStyle","NotificationManagerImpl","getEditorContainer","getElement","getContainerWidth","prePositionNotifications","notifications","notification","positionNotifications","firstItem","closeCallback","extendedArgs","notif","getArgs","oldMetaValue","toggleFullScreenState","contentValue","noScaleMetaValue","overrideViewPort","toggleBodyFullScreenClasses","checkFullscreenWindows","_fullscreen","handleWindowResize","desktop","lastSize_1","setInterval","Window","closeClass","needsRecalc","headerW","headEl","headerH","headerHtml","footerHtml","fullscreen","slowRendering","_timer","getTime","_initial","startPos","dragHelper","getContentWindow","ifr","MessageBox","OK","OK_CANCEL","YES_NO","YES_NO_CANCEL","msgBox","createButton","status","primary","onClick","onCancel","confirm","WindowManagerImpl","params","commands","features","choiceCallback","getParams","setParams","getNotificationManagerImpl","getWindowManagerImpl","ThemeApi","Layout","firstControlClass","lastControlClass","containerClass","firstClass","lastClass","lastItem","controlClass","AbsoluteLayout","Button","btnStyle","btnElm","ariaPressed","textHtml","getSelection","textCls","setButtonText","$span","iconElm","BrowseButton","multiple","accept","input","files","stopPropagation","click","ButtonGroup","Checkbox","global$d","ComboBox","subinput","showMenu","newValue","statusLevel","statusMessage","lineHeight","openElm","innerPadding","inputElm","documentMode","openBtnHtml","extraAttrs","statusHtml","placeholder","showAutoComplete","term","previewUrl","hideMenu","statusIconElm","focusIdx","DOWN","UP","ColorBox","onaction","repaintColor","PanelButton","panelSettings","rtlRels","ltrRels","popoverAlign","isTop","DOM$3","ColorButton","backgroundColor","onClickHandler","stopImmediatePropagation","global$e","ColorPicker","hsv","hueRootElm","huePointElm","svRootElm","svPointElm","updateColor","hueUpdate","hue","updateSaturationAndValue","updateHue","toHsv","_repaint","_svdraghelper","_hdraghelper","_rendered","hueHtml","stops","getOldIeFallbackHtml","gradientPrefix","stopsList","gradientCssText","DropZone","cfg","hidefocus","outerHTML","toggleDragClass","re","join","dataTransfer","Path","row","_getDataPathHtml","ElementPath","isHidden","elementpath","outParents","FormItem","Form","formItemDefaults","formItem","recalcLabels","maxLabelWidth","labels","labelGapCalc","labelCtrl","labelWidth","FieldSet","unique$1","generate","random","floor","DOCUMENT","windows$1","DOCUMENT$1","bypassSelector","childElementCount","base","one","querySelector","descendants","hasContentEditableState","isContentEditableTrue","level","attach","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","getAnchorTargets","getTargetElements","hasTitle","find$2","LinkTargets","getActiveEditor","activeEditor","history","HISTORY_LENGTH","clearHistory","toMenuItem","toMenuItems","targets","staticMenuItem","isUniqueUrl","foundTarget","getSetting","defaultValue","createMenuItems","fileType","fromHistoryMenuItems","historyItems","uniqueHistory","fromMenuItems","filteredTargets","anchorMenuItems","topAnchor","bottomAchor","bothEmpty","typeahead_urls","filterByQuery","addToHistory","lowerCaseTerm","getTitle","linkDetails","setupAutoCompleteHandler","autocomplete","linkTargets","alt","statusToUiState","setupLinkValidatorHandler","validatorHandler","filepicker_validator_handler","validateUrl_1","uiState","FilePicker","actionCallback","fileBrowserCallback","fileBrowserCallbackTypes","file_picker_types","file_browser_callback_types","file_picker_callback","file_browser_callback","FitLayout","contLayoutRect","FlexLayout","contPaddingBox","contSettings","totalFlex","availableSpace","ctrlLayoutRect","ctrlSettings","maxSize","maxAlignEndPos","minSizeName","maxSizeName","beforeName","innerSizeName","deltaSizeName","alignAxisName","alignInnerSizeName","alignSizeName","alignMinSizeName","alignBeforeName","alignAfterName","alignDeltaSizeName","alignContentSizeName","maxSizeItems","maxFlexSize","FlowLayout","endClass","descendant","toggleFormat","addFormatChangedListener","changed","formatChanged","postRenderFormatToggle","alignFormats","defaultAlign","alignMenuItems","onShowMenu","alignleft","aligncenter","alignright","alignjustify","alignnone","Align","getFirstFont","fontFamily","findMatchingValue","font","createFontNameListBoxChangeHandler","queryCommandValue","createFormats","formats","getFontItems","defaultFontsFormats","fonts","font_formats","textStyle","registerButtons","fixedWidth","FontSelect","number","precision","factor","pow","toPt","fontSize","findMatchingValue$1","pt","px","createFontSizeListBoxChangeHandler","getFontSizeItems","defaultFontsizeFormats","fontsizeFormats","fontsize_formats","registerButtons$1","register$2","FontSizeSelect","hideMenuObjects","canApply","hideFormatMenuItems","createFormatMenu","newFormats","defaultStyleFormats","createStylesMenu","style_formats_merge","style_formats","itemDefaults","preview","getCssText","queryCommandState","registerMenuItems","formatMenu","registerButtons$2","style_formats_autohide","register$3","Formats","defaultBlocks","createFormats$1","createListBoxChangeHandler","matchNode","lazyFormatSelectBoxItems","blocks","buildMenuItems","register$4","block_formats","FormatSelect","createCustomMenuItems","names","nameList","isSeparator$1","trimMenuItems","menuItems2","createContextMenuItems","outputMenuItems","createInsertMenu","insertButtonItems","insert_button_items","registerButtons$3","oncreatemenu","register$5","InsertButton","registerFormatButtons","bold","italic","underline","strikethrough","subscript","superscript","registerCommandButtons","outdent","indent","cut","paste","selectall","visualaid","newdocument","removeformat","registerCommandToggleButtons","blockquote","registerButtons$4","registerMenuItems$1","register$6","SimpleControls","toggleUndoRedoState","checkState","typeFn","readonly","registerMenuItems$2","registerButtons$5","register$7","UndoRedo","toggleVisualAidState","hasVisual","registerMenuItems$3","register$8","VisualAid","setupEnvironment","iOS","setupUiContainer","setupRtlMode","setupHideFloatPanels","FormatControls","GridLayout","posX","posY","spacingH","spacingV","alignH","alignV","maxX","maxY","ctrlMinWidth","ctrlMinHeight","availableWidth","availableHeight","reverseRows","colWidths","rowHeights","columns","sqrt","flexV","packV","flexWidths","Iframe$1","InfoBox","severity","Label","strong","startMinH","targetCtrl","forName","Toolbar$1","MenuBar","isChildOf$1","MenuButton","_renderOpen","animate","activeMenu","menuLayoutRect","selfBottom","hasVisibleSiblingMenu","overCtrl","Menu","itemsFactory","factory","hideThrobber","requestTime","_hasIcons","ListBox","lastItemCtrl","setSelected","menuValues","_values","lastControl","valueExists","activateMenuItemsByValue","hasMenus","getSelectedItem","selectedItem","toggleTextStyle","_textStyle","textElm","MenuItem","ariaHideMenu","_parentMenu","_lastRel","iconHtml","convertShortcut","mac","escapeRegExp","markMatches","boldMatches","hover","Radio","ResizeHandle","resizeDragHelper","createOptions","options","strOptions","SelectBox","_options","minVal","maxVal","setAriaProp","updateSliderHandle","maxHandlePos","shortSizeName","stylePosName","styleValue","handleEl","orientation","_minValue","_maxValue","previewFilter","Slider","minValue","maxValue","_initValue","reset","screenCordName","toFraction","fromFraction","handleKeyboard","alter","handleDrag","startHandlePos","handlePos","_dragHelper","Spacer","SplitButton","mainButtonElm","menuButtonElm","_menuBtnText","StackLayout","TabPanel","activateTab","activeTabElm","activeTabId","tabsHtml","activeTab","targetParent","headH","TextBox","getApi","Factory","ref","registerToFactory","Theme","hasProPlugin","log","DetectProPlugin","clipboard","quirks","firePastePreProcess","internal","isWordHtml","wordContent","firePastePostProcess","firePastePlainTextToggle","firePaste","ieFake","shouldPlainTextInform","shouldBlockDrop","shouldPasteDataImages","shouldFilterDrop","getPreProcess","getPostProcess","getWebkitStyles","shouldRemoveWebKitStyles","shouldMergeFormats","isSmartPasteEnabled","isPasteAsTextEnabled","getRetainStyleProps","getWordValidElements","defaultValidElements","shouldConvertWordFakeLists","shouldUseDefaultFilters","shouldInformUserAboutPlainText","userIsInformedState","displayNotification","togglePlainTextPaste","pasteFormat","pasteHtml","pasteText","internalMimeType","internalMark","mark","unmark","isMarked","InternalHtml","internalHtmlMime","isPlainText","toBRs","openContainer","rootTag","rootAttrs","encodeAllRaw","toBlockElements","tagOpen","tagClose","paragraphs","stitch","convert","Newlines","domParser","shortEndedElements","ignoreElements","walk","currentNode","trimHtml","trimSpaces","s1","s2","createIdGenerator","isMsEdge","Utils","isWordContent","isNumericList","isBulletList","convertFakeListsToProperLists","currentListNode","prevListNode","lastLevel","trimListStart","regExp","removeIgnoredNodes","_listIgnore","convertParagraphToLi","paragraphNode","_listLevel","wrap","nodeText","filterStyles","validStyles","outputStyles","filterWordContent","retainStyleProperties","spaces","validElements","valid_elements","valid_children","rule","attributesOrder","rootNode","preProcess","WordFilter","preProcess$1","isRootContent","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","process","ProcessFilters","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","SmartPaste","filter$1","from$1","exports$1","define","amd","EphoxContactWrapper","u","1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","Item","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","2","setImmediate","setTimeoutFunc","thisArg","Promise","TypeError","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","reject","promise","finale","_unhandledRejectionFn","Handler","reason","prom","arr","remaining","race","err","warn","_setImmediateFn","_setUnhandledRejectionFn","3","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_clearFn","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","4","promisePolyfill","boltExport","baseFn","nCallback","isReady","cbs","pure","LazyValue","errorReporter","make","fab","aFutureB","toPromise","anonBind","futureB","toLazy","toCached","pure$1","Future","par","asyncValues","asyncValue","par$1","futures","traverse","mapM","subject","isSet","pasteHtml$1","internalFlag","getDataTransferItems","mceInternalUrlPrefix","legacyText","types","contentType","getClipboardContent","clipboardEvent","clipboardData","hasContentType","clipboardContent","mimeType","hasHtmlOrText","getBase64FromUri","uri","isValidDataUriImage","imgElm","images_dataimg_filter","extractFilename","pasteImage","imageItem","base64","images_reuse_filename","blob","img","Image","blobCache","editorUpload","blobInfo","existingBlobInfo","findFirst","cachedBlobInfo","blobUri","isClipboardEvent","readBlobsAsDataUris","getAsFile","reader","FileReader","onload","readAsDataURL","getImagesFromDataTransfer","images","pasteImageData","paste_data_images","blobResults","isBrokenAndroidClipboardEvent","isKeyboardPasteEvent","registerEventHandlers","pasteBin","keyboardPastePlainTextState","keyboardPasteEvent","insertClipboardContent","isKeyBoardPaste","plainTextMode","isPlainTextHtml","isDefaultContent","removePasteBinOnKeyUp","webkit","getLastRng","registerEventsAndFilters","isPasteInsert","isWebKitFakeUrl","isDataUri","allow_html_data_urls","getPasteBinParent","isExternalPasteBin","delegatePasteEvents","pasteBinElm","pasteBinDefaultContent","isDefault","lastRngCell","gecko","pasteBinClone","lastRng","pasteBinClones","dirtyWrappers","cleanWrapper","copyAndRemove","isPasteBin","PasteBin","Clipboard","hasWorkingClipboardApi","setData","setHtml5Clipboard","clearData","setClipboardData","evt","fallback","markedHtml","outer","inner","contenteditable","setStyles","overflow","offscreenRange","selectNodeContents","contextual","isTableSelection","hasSelectedContent","CutCopy","getCaretRangeFromEvent","getCaretRangeFromPoint","isPlainTextFileUrl","plainTextContent","setFocusedRange","draggingInternallyState","dropContent","content_1","DragDrop","postProcess","PrePostProcess","addPreProcessFilter","filterFunc","addPostProcessFilter","removeExplorerBrElementsAfterBlocks","explorerBlocksRegExp","removeWebKitStyles","webKitStyles","webKitStylesSetting","dom_1","inputStyles","decode","inputValue","currentValue","removeUnderlineAndFontInAnchor","Quirks","stateChange","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","ListStyles","updateSelection","listStyleType","addSplitButton","onshow","addControl","fireRestoreDraft","fireStoreDraft","fireRemoveDraft","timeString","defaultTime","multiples","toParse","parsedTime","shouldAskBeforeUnload","getAutoSavePrefix","location","pathname","hash","shouldRestoreWhenEmpty","getAutoSaveInterval","autosave_interval","getAutoSaveRetention","autosave_retention","forcedRootBlockName","hasDraft","getItem","removeDraft","removeItem","storeDraft","setItem","no_events","restoreDraft","startStoreDraft","started","interval","restoreLastDraft","_beforeUnloadHandler","autosave","onbeforeunload","ownKeys","toIObject","gOPD","createProperty","S","getOwnPropertyDescriptors","object","desc","getDesc","compose","fa","fb","identity","die","eachr","foldr","map$1","tupleMap","tuple","reqMessage","required","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","dupe","d","MixedBag","optional","keys$1","allReqd","req","opt","COMMENT","TEXT","isComment","checkRange","endsWith","inBody","internalRemove","removeProperty","set$1","setAll$1","getUnsafeProperty","getRaw","remove$1","sourceDom","targetDom","contains$2","owner","isRoot","rawParent","prevSibling","firstChild$1","wrapper","after$1","rogue","remove$2","grid","address","detailnew","extended","rowdata","elementnew","rowdatanew","rowcells","rowdetails","bounds","ancestors","ancestors$1","children$2","descendants$1","ClosestOrAncestor","ancestor","closest","child$1","descend","child_1","ancestor$1","child$2","descendant$1","closest$1","firstLayer","filterFirstLayer","LayerSelector","tags","isRootOrUpperTable","cell","cells","notCell","neighbours","neighbourCells","neighbourRows","firstCell","grid$1","rowProp","colProp","rowsCount","TableLookup","fromTable","parentSection","parentName","rowspan","colspan","fromPastedRows","example","section","DetailsList","column","getAt","warehouse","access","findItem","filtered","filterItems","maxRows","maxColumns","details","currentRow","cr","cc","newpos","justCells","Warehouse","statsStruct","findSelectedStats","house","totalColumns","totalRows","minRow","minCol","maxRow","maxCol","startRow","endRow","startCol","endCol","makeCell","seenSelected","rowIndex","fillInGaps","stats","needCell","clean","emptyRows","extract","selectedSelector","unselectedCells","CopySelected","NodeValue","getOption","get$2","set$2","getEnd","NBSP","isTextNodeWithCursorPosition","elementsWithCursorPosition","isCursorPosition","hasCursorPosition","first","last$1","descendantRtl","copy$1","cloneChildren","createCell","replica","pasteReplace","newRow","cloneFormats","oldCell","newCell","first$1","firstText","formatSelector","clonedFormat","cellOperations","formatsToClone","docu","lastNode","gap","TableFill","fromHtml$1","inSelection","leftEdge","rightEdge","topEdge","bottomEdge","finishCol","finishRow","isWithin","isRectangular","isRect","detailIsWithin","CellBounds","getBounds","detailA","detailB","getAnyBox","startCell","finishCell","startCoords","finishCoords","sc","fc","getBox","CellGroup","dest","intercepts","finish","inside","parentCell","innerCell","isContainedBy","c1","c2","CellFinder","moveBy$1","deltaRow","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TablePositions","TagBoundaries","DomUniverse","isBoundary","isEmptyTag","comparePosition","other","copyAttributesTo","destination","as","copyTo","afterAll","appendAll","query","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","second","breakToLeft","prior","breakPath","breaker","splits","breakage","nextChild","all$1","look","oneAll","unsafeOne","commonElement","eq$1","unsafeSubset","common","ps1","ps2","finder","ps","topDown","startIndex","endIndex","sIndex","eIndex","ancestors$2","prune","pruned1","pruned2","shared","firstpath","secondpath","subset","ancs","SubsetFn","sharedOne","subset$1","ancestors$3","breakToLeft$1","breakToRight$1","breakPath$1","Parent","sharedOne$1","_universe","subset$2","ancestors$4","breakToLeft$2","breakToRight$2","breakPath$2","DomParent","Identified","lookupTable","identify","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","getLast","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","identified","shiftSelection","CellSelection","retrieve$1","retrieveBox","edges","firstAncestor","lastAncestor","fA","lA","TableSelection","attributeSelector","firstSelected","lastSelected","Ephemera","generate$1","cases","constructors","adt","acase","argLength","branches","branchKeys","reqKey","Adt","type$1","single","cata","onNone","onMultiple","onSingle","SelectionTypes","selections","unmergable","hasSpan","mergable","_env","CellOperations","noMenu","forMenu","notCell$1","paste$1","pasteRows","generators","TableTargets","extractSelected","serializeElements","getTextContent","registerEvents","actions","cellSelection","multiCellContext","cellOpt","domCell","pasteCells","Dimension","getOuter","aggregate","properties","cumulativeInclusions","absoluteMax","api$1","get$3","api$2","get$4","getOuter$1","platform","needManualCalc","toNumber","num","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","getWidth","getHeight","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","setHeight","getHeightValue","getter","setter","newSize","total","normalizePixelSize","getTotalHeight","get$5","span","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getHeight$1","getGenericWidth","unit","setGenericWidth","Sizes","halve","main","CellMutations","Position","boxPosition","firstDefinedOrZero","absolute","clientTop","clientLeft","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","step","positions","optElements","ltr","BarPositions","ResizeDirection","TableDirection","directionAt","auto","getGridSize","TableGridSize","__assign","assign","cat","findMap","setIfNot","ignore","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","tr","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","read","remove$3","supports","classList","get$6","add$1","clazz","remove$4","add$2","cleanClass","remove$5","has$1","repeat","repititions","deduce","rest","aa","extras","abs","rowsArr","col","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","rows$1","Blocks","namespace","dashNamespace","Styles","blocker","row$1","Bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","wire","previous","drawBar","origin","cpOption","cp","bar","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","hdirection","vdirection","refresh","each$2","bars","isRowBar","isColBar","Bars","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","GridRow","getColumn","getRow","findDiff","comp","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","TableGrid","toDetails","seen","ri","ci","updateSeen","toGrid","rowCells","Transitions","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","operation","adjustment","postAction","genWrappers","newElements","onCell","onPaste","onPasteRows","lc","onMergable","_warehouse","onUnmergable","onCells","mapError","_","onValue","toOption","isValue","isError","onError","fromOption","Result","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","generator","rowFill","_row","colFill","tailor","fillCols","fillRows","modifiedCols","tailoredGrid","Fitment","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitRows","rowPrevCells","_loop_2","sub","MergingOperations","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","merge$1","fittedGrid","fittedNewGrid","secondDelta","fittedOldGrid","TableMerge","insertRowAt","between","withinSpan","insertColumnAt","splitCellIntoColumns","exampleRow","exampleCol","isTargetCell","splitCellIntoRows","deleteColumnsAt","deleteRowsAt","ModificationOperations","replaceIn","isTarget","notStartRow","colIndex","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","TransformOperations","only","middle","ColumnContext","neighbours$1","determine","zero","onOnly","singleColumnWidth","newNext","minCellWidth","newThis","diffx","onLeft","onMiddle","_prev","onRight","Deltas","getSpan$1","hasColspan","hasRowspan","getInt","CellUtils","getRaw$1","getRawW","getRawH","getWidthFrom","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","ColumnSizes","measures","recalculateWidth","widths","recalculateHeight","heights","matchRowHeight","Recalculations","percentageSize","getCellDelta","_delta","setTableWidth","_newWidths","change","getWidths","setElementWidth","pixelSize","newWidths","chooseSize","fallbackWidth","getTableSize","TableSize","getWarehouse$1","sumUp","getTableWarehouse","adjustWidth","deltas","newSizes","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustWidthTo","Adjustments","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","verifyGenerators","elementToData","modification","toData","nuFrom","recent","getOrInit","transform","makeNew","replaceOrInit","merging","combine","Generators","blockList","isFormatting","isHeading","isContainer","isFrame","Structure","universe$1","isBlock$1","isFormatting$1","isHeading$1","isContainer$1","isEmptyTag$1","isFrame$1","isInline$1","DomStructure","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","contents","TableContent","outcome","elementFromGrid","findIn","bundle","uniqueRows","currentDetail","uniqueColumns","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","makeRowHeader","makeColumnHeader","unmakeRowHeader","unmakeColumnHeader","splitCellIntoColumns$1","splitCellIntoRows$1","eraseColumns","_comparator","_genWrappers","eraseRows","mergeCells","unmergeCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","pasteRowsBefore","pasteRowsAfter","TableOperations","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addSizeSuffix","removeDataStyle","dataStyleCells","getDirection","ltr$1","rtl$1","Direction","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPixelsForced","getCloneElements","cloneElements","hasObjectResizing","objectResizing","getToolbar","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","TableActions","lazyWire","isTableBody","lastRowGuard","lastColumnGuard","guard","deleteRow","deleteColumn","copyRows","selectedCells","slicedGrid","slicedDetails","CopyRows","getTDTHOverallStyle","firstChildStyle","checkChildren","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","Styles$1","buildListItems","inputList","itemCallback","startItems","appendItems","styleFieldHasFocus","isEqualNode","syncAdvancedStyleFields","updateAdvancedFields","updateStyleField","borderStyle","borderColor","extractAdvancedStyles","createStyleForm","createColorPickAction","Helpers","updateStyles","dataset","mceStyle","extractDataFromElement","valign","onSubmitCellForm","cellElm","classListCtrl","generalCellForm","CellDialog","extractDataFromElement$1","switchRowType","rowElm","toType","oldParentElm","onSubmitRowForm","oldData","open$1","generalRowForm","RowDialog","DefaultRenderOptions","percentages","makeTable","tableBody","tableRow","tableHeaderCell","tableCell","rowHeaders","columnHeaders","renderOpts","tbody","trs","get$7","getOuter$2","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","insert$1","InsertTable","styleTDTH","extractDataFromElement$2","cellspacing","cellpadding","caption","applyDataToElement","onSubmitTableForm","captionElm","open$2","isProps","colsCtrl","rowsCtrl","generalTableForm","TableDialog","each$3","registerCommands","clipboardRows","eraseTable","getSelectionStartCell","getSelectionStartCaption","cellOrCaption","getSelectionStartFromSelector","getTableFromCell","resizeChange","oldSize","actOnSelection","beforeSize","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","func","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","detached","editable","body$1","ResizeWire","Event","handlers","create$1","typeDefs","registry","mkEvent","prevent","kill","rawEvent","binder","useCapture","wrapped","addEventListener","bind$1","removeEventListener","bind$2","shallow$1","merge$3","styles$1","Styles$2","Blocker","layerClass","DragMode","DragSink","DragApi","compare","extract$1","mutation","sink","dragApi","mdown","forceDrop","mup","drop","mmove","move","mout","delayDrop","MouseDrag","last$2","rate","throttle","InDrag","onEvent","dataOption","events","NoDrag","Movement","noDragState","inDragState","dragState","isOn","movement","throttledDrop","go","mousemove","runIfActive","Dragging","transform$1","Dragger","Mutation","BarMutation","xDelta","yDelta","findClosestContentEditable","resizeBarDragging","BarManager","resizing","hoverTable","getResizer","_dataRow","_dataCol","currentCol","getDelta","newX","oldX","startAdjust","mousedown","findClosestEditableTable","mouseover","hideBars","showBars","create$2","manager","beforeResize","afterResize","startDrag","TableResize","createContainer","get$8","remove$6","TableWire","ResizeHandler","startW","startRawW","selectionRng","isTable","lazyResize","sz","rawWire","rawTable","percentW","targetPercentW","newCellSizes_1","newCellSize","adt$1","none$1","CellLocation","detect$4","detection","CellNavigation","create$3","SimRange","adt$2","cata$1","onBefore","onOn","onAfter","situ","before$2","after$2","Situ","adt$3","domRange","relative","exact","exactFromRange","simRange","soffset","foffset","getStart$1","startSitu","finishSitu","range$1","selectNodeContentsUsing","setFinish","setEndBefore","relativeToNative","exactToNative","toRect","getFirstRect","rects","getClientRects","adt$4","fromRange","getRanges","doDiagnose","ranges","reversed","rev","diagnose","asLtrRange","diagnosis","searchForPoint","rectForOffset","curDeltaX","inRect","locateOffset","textnode","rangeForOffset","locate","selectNode","foundRect","searchInChildren","locateNode","locate$1","boundedX","boundedY","COLLAPSE_TO_LEFT","COLLAPSE_TO_RIGHT","getCollapseDirection","createCollapsedNode","collapseDirection","locateInElement","cursorRange","locateInEmpty","caretPositionFromPoint","caretRangeFromPoint","searchTextNodes","searchFromPoint","availableSearch","fromPoint$1","beforeSpecial","name$1","preprocessRelative","preprocessExact","preprocess","makeRange","after$3","same","doSetNativeRange","removeAllRanges","addRange","doSetRange","setLegacyRtlRange","setRangeFromRelative","setBaseAndExtent","setExact","setRelative","toNative","getDomRange","readRange","rangeCount","firstRng","getRangeAt","doGetExact","anchor","anchorNode","focusNode","anchorOffset","focusOffset","setToElement","getExact","get$9","getFirstRect$1","getAtPoint","backward","getCellFirstCursorPosition","getNewRowCursorPosition","rootElements","handle$1","body_1","isRoot_1","navigation","TabContext","create$4","Response","create$5","Situs","convertToRange","makeSitus","Util","sync","selectRange","detect$5","cellSel","annotations","newSels","KeySelection","backtrack","_direction","transition","sidestep","advance","successors","go$1","rules","ruleOpt","succ","Walkers","hone","left$1","right$1","isLeaf","before$3","seekLeft","after$4","seekRight","universe$2","before$4","after$5","seekLeft$1","seekRight$1","ancestor$2","point","adt$5","failedUp","failedDown","isOverlapping","bridge","beforeBounds","afterBounds","isRow","verify","beforeOffset","afterOffset","failure","afterCell","beforeCell","_sharedRow","cata$2","onSuccess","onFailedUp","onFailedDown","BeforeAfter","inParent","indexInParent","gatherer","cand","gather","handleBr","findBr","handleParent","br","adjacent","tryBr","tgt","analysis","BrTags","nu$3","moveDown","caret","moveUp","moveBottomTo","moveTopTo","getTop$1","getBottom","Carets","getPartialBox","getRangedRect","toCaret","getElemBox","getBoxAt","getEntireBox","Rectangles","JUMP_SIZE","NUM_RETRIES","adt$6","retry","isOutside","inOutsideBlock","adjustDown","guessBox","lowerCaret","adjustUp","higherCaret","upMovement","adjuster","downMovement","isAtTable","adjustForTable","numRetries","adjustTil","situsFromPoint","newCaret","ieTryDown","ieTryUp","checkScroll","adjusted","getInnerHeight","moved","scrollBy","Retries","tryUp","tryDown","getJumpSize","MAX_RETRIES","platform$1","findSpot","brNeighbour","fromSitus","scan","tryCursor","situs","tryAgain","tryAt","otherRetry","ieRetry","handle$2","spot","TableKeys","inSameTable","simulate","navigate","precheck","firstUpCheck","lastOffset","lastDownCheck","VerticalMovement","findCell","MouseSelection","clearState","selectContents","mouseup","_event","KeyDirection","isKey","keycode","isUp","isDown","isNavigation","SelectionKeys","isBackward","toRaw","sr","Rect","get$a","_DOC","by","WindowBridge","exactAdt","clearSelection","setRelativeSelection","getScrollY","rc","mouse","clearToNavigate","keydown","realEvent","which","attempts","keyup","InputHandlers","remove$7","removeClasses","byClass","ephemera","addSelectionClass","removeSelectionClasses","byAttr","removeSelectionAttributes","addSelectionAttribute","SelectionAnnotation","hasInternalTarget","CellSelection$1","handlerStruct","syncSelection","mouseHandlers","keyHandlers","hasShiftKey","handleResponse","ns","wrappedEvent","wrapEvent","isMouseEvent","isLeftMouse","isLeftButtonPressed","mouseDown","mouseOver","mouseUp","Selections","each$4","addMenuItems","tableCtrls","cellCtrls","mergeCtrls","unmergeCtrls","noTargetDisable","ctrlEnable","pushTable","pushCell","pushMerge","pushUnmerge","setDisabledCtrls","mergeCtrl","unmergeCtrl","cellDom","generateTableGrid","selectGrid","tx","ty","focusCell","insertTable","onhide","lastX","lastY","onmousemove","tableProperties","deleteTable","MenuItems","getClipboardRows","setClipboardRows","sugarRows","resizeHandler","addTempAttr","Plugin$1","gOPN","gOPS","anObject","Reflect","it","getSymbols","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","lastFormatState","lastFormat","_defineProperty","defineProperty","enumerable","configurable","writable","getAutoResizeMinHeight","getAutoResizeMaxHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","shouldAutoResizeOnInit","isFullscreen","wait","times","toggleScrolling","overflowY","deltaSize","resizeHeight","myHeight","marginTop","marginBottom","iframeElement","overflowPadding","bottomMargin","paddingLeft","paddingRight","tableprops","inserttable","assumeExternalTargets","link_assume_external_targets","hasContextToolbar","link_context_toolbar","getLinkList","link_list","hasDefaultLinkTarget","default_link_target","getTargetList","target_list","setTargetList","shouldShowTargetList","getRelList","rel_list","hasRelList","getLinkClassList","link_class_list","hasLinkClassList","shouldShowLinkTitle","link_title","allowUnsafeLinkTarget","allow_unsafe_link_target","appendClickRemove","link","dispatchEvent","createEvent","initMouseEvent","opener","OpenUrl","toggleTargetRules","isUnsafe","newRel","addTargetRules","removeTargetRules","trimCaretContainers","getAnchorElement","selectedElm","isImageFigure","getAnchorText","anchorElm","isLink","hasLinks","isOnlyTextSelected","attachState","linkAttrs","linkImageFigure","unlink","unlinkImageFigure","fig","createLinkList","linkList","delayedConfirm","initialText","onlyText","textListCtrl","linkListCtrl","relListCtrl","targetListCtrl","linkTitleCtrl","linkListChangeHandler","textCtrl","buildAnchorListControl","anchorList","updateText","urlChange","inp","onBeforeCall","onkeyup","insertLink","removeLink","resultData","getLink","getSelectedLink","getHref","hasOnlyAltModifier","altKey","metaKey","targetEl","openDialog","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleViewLinkState","toggleVisibility","setupButtons","onpostrender","setupMenuItems","setupContextToolbars","Controls","stringRepeat","repeats","isVisualCharsEnabled","visualchars","isEnabled","insertNbsp","nbsp","getKeyboardSpaces","speciesConstructor","image_dimensions","hasAdvTab","image_advtab","getPrependUrl","getClassList","hasDescription","image_description","hasImageTitle","image_title","hasImageCaption","image_caption","getImageList","hasUploadUrl","hasUploadHandler","getUploadUrl","getUploadHandler","getUploadBasePath","getUploadCredentials","parseIntAndGetMax","val1","val2","getImageSize","onerror","visibility","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","selectImage","blobToDataUri","getHspace","marginLeft","marginRight","getVspace","getBorder","borderWidth","hasCaption","wrapInFigure","figureElm","removeFigure","toggleCaption","normalizeStyle","normalizeCss","setHspace","pxValue","setVspace","setBorder","setBorderStyle","getBorderStyle","isFigure","defaultData","hspace","vspace","getStyleValue","figure","updateProp","newData","normalized","mergedCss","compressed","getSelectedImage","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","updateVSpaceHSpaceBorder","updateStyle","makeTab","AdvTab","onSrcChange","srcURL","prependURL","absoluteURLPattern","imageListCtrl","getGeneralItems","makeTab$1","MainTab","createObjectURL","revokeObjectURL","URL","XMLHttpRequest","pathJoin","path1","path2","Uploader","defaultHandler","progress","xhr","formData","withCredentials","credentials","upload","onprogress","loaded","json","responseText","basePath","FormData","filename","uploadBlob","isDefaultHandler","onFileInput","uploader","finalize","dataUrl","acceptExts","makeTab$2","UploadTab","uploadImagesAuto","altCtrl","hasImageClass","toggleContentEditableState","toggleContentEditable","getAll","_vm","_h","$createElement","_c","_self","staticClass","media","_e","staticRenderFns","validEvents","isValidKey","bindHandlers","initEvent","bindModelHandlers","currentContent","modelEvents","$props","normalizedEvents","$watch","prevVal","$emit","initEditor","initialValue","$listeners","uuid","now","isTextarea","normalizePluginArray","mergePlugins","initPlugins","inputPlugins","injectScriptTag","scriptId","scriptTag","scriptLoaded","editorProps","apiKey","cloudChannel","Boolean","scriptState","renderInline","renderIframe","initialise","finalInit","elementId","inlineEditor","Editor","created","watch","mounted","channel","beforeDestroy","component","toggleState","fireVisualChars","charMap","charMapToRegExp","charMapToSelector","Data","regExpGlobal","wrapCharWithSpan","Html","isMatch","value$1","filterDescendants","findParentElm","replaceWithSpans","nodeList","withSpans","VisualChars","toggleVisualChars","debouncedToggle","debounce","valueForToggling","emoticons","emoticonsHtml","emoticonUrl","PanelHtml","insertEmoticon","panelHtml","setDir","curDir","generateSelector","ie11","ie12","iDevice","fileApi","phone","tablet","windowsPhone","isObject","isNull","partition","pass","fail","difference","a1","a2","mapToObject","nav","matchMediaQuery","matchMedia","appName","requestAnimationFramePromise","Env","caretAfter","cacheSuffix","experimentalShadowDom","canHaveCSP","asap","immediateFn","promiseObj","requestAnimationFrameFunc","vendors","featurefill","wrappedSetTimeout","wrappedSetInterval","wrappedClearTimeout","wrappedClearInterval","Delay","setEditorInterval","eventExpandoPrefix","mouseEventRe","deprecated","keyLocation","layerX","layerY","returnValue","webkitMovementX","webkitMovementY","keyIdentifier","hasIsDefaultPrevented","returnTrue","returnFalse","addEvent","capture","attachEvent","removeEvent","detachEvent","getTargetFromShadowDom","defaultTarget","composedPath","fix","originalEvent","srcElement","eventDoc","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyState","readyHandler","waitForDomLoaded","tryScroll","doScroll","EventUtils","expando","hasFocusIn","hasMouseEnterLeave","mouseEnterLeave","mouseenter","mouseleave","executeHandlers","callbackList","fakeName","nativeHandler","defaultNativeHandler","related","currentTarget","relatedTarget","eventMap","parentWindow","support","Expr","isXML","tokenize","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","hasOwn","push_native","indexOf$1","booleans","whitespace","identifier","pseudos","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","results","seed","groups","nid","newContext","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","cur","diff","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","hasCompare","getById","attrId","tmp","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","operator","what","simple","ofType","xml","outerCache","useCache","setFilters","matched","matcher","unmatched","lang","elemLang","hasFocus","tabIndex","enabled","selectedIndex","header","even","odd","lt","gt","nth","radio","checkbox","password","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","parseOnly","soFar","preFilters","token","compiled","isArray$1","indexOf$2","reduce","collection","iteratee","accumulator","findIndex$1","ArrUtils","whiteSpaceRegExp","delim","sp","cn","scn","de","createNS","onCreate","static","ext","resolve$1","explode","_addCacheSuffix","push$1","slice$1","rquickExpr$1","skipUniques","isDefined","isString$1","isWindow","fragDoc","frag","domManipulate","targetNodes","sourceItem","getElementDocument","DomQuery","makeArray","lastParent","newWrapper","numericCssMap","booleanMap","propFix","for","cssFix","float","attrHooks","cssHooks","whiteSpaceRegExp$1","trim$1","hook","removeAttr","camel","dashed","host","prependTo","replaceWith","wrapAll","wrapInner","existingClassName","classState","until","siblingName","firstSibling","parentsUntil","nextUntil","prevUntil","overrideDefaults","appendHooks","targetHooks","hooks","maxlength","zoom","ie$1","opera$1","android$1","trim$2","lTrim","rTrim","hasOwnProperty$1","map$2","bifilter","branch","getAllRaw","ruleName","toArray$1","recurse","Recurse","contains$3","prevSiblings","nextSiblings","childNodesCount","browser$1","firstElement","getTableCaptionDeltaY","bodyTop","captionTop","captionHeight","module$1","nu$4","StyleSheetLoader","maxLoadTime","idCount","loadedStates","appendToHead","loadedCallback","errorCallback","startTime","passed","failed","isOldWebKit","webKitChunks","testCallback","waitCallback","waitForWebKitLinkLoaded","styleSheet","styleSheets","ownerNode","owningElement","waitForGeckoLinkLoaded","cssRules","sheet","async","defer","contentCssCors","crossOrigin","loadF","unbox","loadAll","urls","TreeWalker","findSibling","startName","findPreviousNode","prev2","namedEntities","baseEntities","reverseEntities","voids","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isRestrictedNode","getPrototypeOf","isElement$1","matchNodeNames","matchStyleValues","cssValue","computed","hasPropValue","propName","propValue","hasAttributeValue","isBogus","isBogusAll","isText$1","isDocument","isDocumentFragment","isBr$1","surroundedBySpans","previousIsSpan","nextIsSpan","trimNode","trimmedLength","TrimNode","makeMap$1","attrsCharsRegExp","textCharsRegExp","rawCharsRegExp","entityRegExp","asciiMap","128","130","131","132","133","134","135","136","137","138","139","140","142","145","146","147","148","149","150","151","152","153","154","155","156","158","159","'","nativeDecode","buildEntitiesLookup","entity","encodeRaw","encodeNumeric","encodeNamed","entities","getEncodeFunc","entitiesMap","encodeNamedAndNumeric","encodeCustomNamed","nameMap","named","numeric","Entities","mapCache","dummyObj","makeMap$2","extend$1","explode$1","inArray$1","compileSchema","globalAttributes","blockContent","phrasingContent","flowContent","html4BlockContent","html4PhrasingContent","ni","arrayToMap","addAttrs","schemaItem","script","compileElementMap","Schema","invalidStyles","schemaItems","whiteSpaceElementsMap","selfClosingElementsMap","boolAttrMap","validClasses","nonEmptyElementsMap","moveCaretBeforeOnEnterElementsMap","textBlockElementsMap","textInlineElementsMap","patternElements","customElementsMap","createLookupTable","option","extendWith","verify_html","valid_styles","invalid_styles","valid_classes","patternToRegExp","addValidElements","ei","al","attrData","elementName","attrType","outputName","globalAttributesOrder","elementRuleRegExp","attrRuleRegExp","hasPatternsRegExp","paddEmpty","removeEmpty","removeEmptyAttrs","attributesRequired","attributesDefault","attributesForced","forcedValue","validValues","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","getElementRule","custom_elements","extended_valid_elements","dd","dt","th","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","isValid","attrPatterns","getCustomElements","encodingItems","rgbRegExp","urlOrStrRegExp","styleRegExp","trimRightRegExp","encodingLookup","invisibleChar","isEncoded","urlConverter","url_converter","urlConverterScope","url_converter_scope","compress","noJoin","canCompress","compress2","keepSlashes","decodeSingleHexSequence","escSeq","decodeHexSequences","processUrl","url2","url3","str2","allow_script_urls","scriptUrl","allow_svg_data_urls","lastIndex","serializeStyles","styleList","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","setupAttrHooks","getContext","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","rawValue","findNodeIndex","lastNodeType","DOMUtils","_this","addedStyles","counter","stdMode","boxModel","boundEvents","ownEvents","proxy","getElementsByName","$$","defaultVal","getAttribs","originalValue","onSetAttrib","attrElm","clone_1","root_element","argWin","actWin","update_styles","stylesArg","selectorVal","_findSib","getNext","getPrev","canHaveHTML","newElm","outHtml","keepChildren","$node","removeAllAttribs","removeAttributeNode","addStyle","styleElm","loadCSS","getOuterHTML","setOuterHTML","reference","referenceNode","oldElm","attrNode","findCommonAncestor","pe","rgbVal","brCount","bogusVal","splitElm","replacementElm","bef","aft","pa","getContentEditableParent","dumpRng","DOMUtils$1","each$6","grep$2","isFunction$1","ScriptLoader","QUEUED","LOADING","LOADED","FAILED","states","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","onreadystatechange","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","notifyCallbacks","each$7","AddOnManager","_listeners","instance","dependencies","requireLangPack","languages","language","languageLoad","addOn","listener","createUrl","baseUrl","dep","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","waitFor","ThemeManager","wrap$1","has$2","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","getAttr","uid","findMarkers","isAnnotation","findAll","markers","directory","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","onNodeChange","identifyParserNode","optAnnotation","persistent","__rest","getOwnPropertySymbols","propertyIsEnumerable","add$3","owner$1","docDom","contentElements","ZWSP","isZwsp","trim$3","Zwsp","isElement$2","isText$2","isCaretContainerBlock","isCaretContainerInline","isCaretContainer","insertInline","endsWithCaretContainer","startsWithCaretContainer","isBeforeInline","isAtStart","isAfterInline","isAtEnd","createBogusBr","insertBlock","blockNode","trimBogusBr","brs","lastBr","showCaretContainerBlock","caretContainer","isRangeInCaretContainerBlock","isContentEditableTrue$1","isContentEditableFalse$1","isBr$2","isText$3","isInvalidTextElement","isAtomicInline","isTable$1","isCaretContainer$1","isCaretCandidate","isNonUiContentEditableFalse","isUnselectable","isInEditable","isAtomicContentEditableFalse","isAtomic","isEditableCaretCandidate","toStart","rect1","rect2","isValidOverflow","isAbove","halfHeight","isBelow","containsXY","overflowX","getOverflow","getSelectedNode","extendingChars","isExtendingChar","lift3","oc","slice$2","and","Predicate","isElement$3","isCaretCandidate$1","isFloated","isValidElementCaretCandidate","isNotPre","isText$4","isBr$3","resolveIndex","isWhiteSpace","isRange","isHiddenWhiteSpaceRange","getBrClientRect","brNode","getBoundingClientRectWebKitText","ec","so","eo","isZeroRect","clientRects","collapseAndInflateWidth","newClientRect","getCaretPositionClientRects","caretPosition","beforeNode","addUniqueAndValidRect","addCharacterOffset","CaretPosition","toRange","isVisible","fromRangeStart","fromRangeEnd","isTextPosition","isElementPosition","HDirection","CaretPosition$1","isText$5","isBogus$1","nodeIndex$1","normalizedParent","getChildNodes","normalizedTextOffset","equal","normalizedNodeIndex","numTextFragments","createPathItem","outputOffset","resolvePathItem","findTextPosition","dataLen","targetOffset","resolve$2","trimEmptyTextNode","insertFragment","rangeInsertNode","isContentEditableFalse$2","getNormalizedTextOffset","trimmedOffset","getPoint","getLocation","findIndex$2","moveEndPoint","normalizeTableCellSelection","findAdjacentContentEditableFalseElm","getOffsetBookmark","getCaretBookmark","getRangeBookmark","createBookmarkSpan","filled","getPersistentBookmark","rng2","endBookmarkNode","startBookmarkNode","keep","GetBookmark","getUndoBookmark","CARET_ID","isCaretNode","getParentCaretContainer","isElement$4","isText$6","getNodeValue","setNodeValue","trimCount","trimmedText","removeUnchanged","removeTextAndReposition","removeElementAndReposition","newPosition","removeTextCaretContainer","removeElementCaretContainer","removeAndReposition","caretContainerNode","CaretContainerRemove","browser$2","isContentEditableFalse$3","isTableCell$1","getAbsoluteClientRect","scrollX","rootRect","trimInlineCaretContainers","contentEditableFalseNodes","FakeCaret","cursorInterval","lastVisualCaret","caretState","startBlink","getCss","isFakeCaretTableBrowser","isFakeCaretTarget","isContentEditableFalse$4","isBlockLike","isCaretContainer$2","isCaretContainerBlock$1","isElement$5","isCaretCandidate$2","isForwards","isBackwards","skipCaretContainers","findNode","predicateFn","getParentBlock","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","to","inSameBlock","isContentEditableFalse$5","isText$7","isElement$6","isBr$4","isCaretCandidate$3","isAtomic$1","isEditableCaretCandidate$1","nodeAtIndex","getCaretCandidatePosition","moveForwardFromBr","nextNode","findCaretPosition","Forwards","rootContentEditableFalseElm","CaretWalker","Backwards","walkToPositionIn","fromPosition","afterElement","isBeforeOrStart","isAfterOrEnd","isBeforeAfterSameElement","isAtBr","shouldSkipPosition","navigateIgnore","ignoreFilter","positionIn","nextPosition","prevPosition","CaretFinder","firstPositionIn","lastPositionIn","isStringPathBookmark","isRangeBookmark","isIdBookmark","isIndexBookmark","isPathBookmark","addBogus","resolveCaretPositionBookmark","insertZwsp","tryFindRangePosition","padEmptyCaretContainer","setEndPoint","isValidTextNode","appendData","o1","o2","resolvePaths","resolveId","endPos","spos","epos","resolveIndex$1","resolve$3","ResolveBookmark","getBookmark$1","isBookmarkNode$1","Bookmarks","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","isTextBlock$1","ed","replaceVars","vars","isEq","str1","normalizeStyleValue","getTextDecoration","decoration","getParents$1","FormatUtils","isBookmarkNode$2","getParents$2","isWhiteSpaceNode$1","isTextBlock$2","findLeaf","excludeTrailingWhitespace","leaf","findParentContentEditable","findSpace","findWordEndPoint","lastTextNode","findSelectorEndPoint","curFormat","findBlockEndPoint","scopeRoot","findParentContainer","block_expand","expandRng","endPoint","expand","ExpandRange","each$8","getEndChild","walk$1","startPoint","exclude","collectSiblings","findEndPoint","walkBoundary","RangeWalk","zeroWidth","isZeroWidth","wrapName","shouldApplyToTrailingSpaces","applyWordGrab","makeAnnotation","eDoc","decorate","_b","master","_d","annotate","newWrappers","finishWrapper","getOrOpenWrapper","processElements","processElement","processNodes","annotateWithBookmark","initialRng","Annotator","changes","annotationChanged","hasOnlyOneChild","isPaddingNode","isPaddedEmptyBlock","isEmptyFragmentElement","nonEmptyElements","isListFragment","cleanupDomFragment","domFragment","toDomFragment","listItems$1","isPadding","isListItemPadded","isEmptyOrPadded","trimListItems","getParentLi","isParentBlockLi","getSplit","beforeRng","afterRng","cloneContents","findFirstIn","caretPos","caretWalker","newCaretPos","findLastOf","insertMiddle","insertAtCaret","liTarget","liElms","BEGINNING","END","isAt","newPos","InsertList","each$9","ElementUtils","compareObjects","obj1","obj2","getLastChildren","rawNode","removeTrailingBr","allBrs","fillWithPaddingBr","isPaddingContents","isPaddedElement","trimBlockTrailingBr","lastChildPrevSibling","PaddingBr","makeMap$3","Writer","indentBefore","indentAfter","htmlOutput","indent_before","indent_after","entity_encoding","element_format","pi","doctype","HtmlSerializer","8","7","10","11","sortedAttrs","elementRule","createRange$1","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","normalize","RangeNormalizer","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$2","selectionSetContent","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","testNode","markFragmentElements","umarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","parentEditableFalseElm","nextRng","getContentEditableFalseParent","findNextCaretRng","insertHtmlAtCaret","bookmarkHtml","caretElement","parentElement","parserArgs","_selectionOverrides","showBlockCaretContainer","invalid","processValue","insertAtCaret$1","InsertContent","strongRtl","hasStrongRtl","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getForcedRootBlock","getForcedRootBlockAttrs","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getInlineBoundarySelector","isInlineTarget","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","fromPos","firstPos","lastPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","prevPos","DeleteUtils","hasWhitespacePreserveParent","rootElement","isWhitespace","isNamedAnchor","isContent","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","isEmpty$1","Empty","BlockPosition","BlockBoundary","getBlockPosition","isDifferentBlocks","blockBoundary","hasSameParent","parent1","parent2","skipLastBr","blockPosition","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","BlockMergeBoundary","dropLast","parentsUntil$1","parents$1","Parents","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","MergeBlocks","BlockBoundaryDelete","deleteRangeMergeBlocks","deleteContents","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange","backspaceDelete$1","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","is$2","expected","isNbsp","isWhiteSpace$1","isContent$1","isChar","isBeforeSpace","isAfterSpace","isEmptyText","isNextToContentEditableFalse","isBeforeContentEditableFalse","isAfterContentEditableFalse","isNextToTable","isBeforeTable","isAfterTable","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","deleteAction","getContentEditableAction","read$2","isCollapsibleWhitespace","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","whitespaceOffset","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","DeleteElement","deleteElement$1","hideFakeCaret","deleteOffscreenSelection","selectedElement","getContentEditableRoot","paddEmptyElement","ceRoot","backspaceDelete$2","CefDelete","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertBefore$1","insertAfter$1","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","BoundaryCaret","evaluateUntil","fns","LazyEvaluator","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","isValidLocation","readLocation","getName","outside","isEq$1","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","BoundaryLocation","prevLocation","nextLocation","hasSelectionModifyApi","getSel","modify","moveByWord","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","renderCaretLocation","findLocation$1","toggleInlines","selectedInlines","targetInlines","safeRemoveCaretContainer","composing","renderInsideInlineCaret","inlines","moveWord","setupSelectedState","moveNextWord","movePrevWord","BoundarySelection","isFeatureEnabled$1","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$3","InlineBoundaryDelete","tableCellRng","tableSelection","removeTable","emptyCells","isRootFromElement","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","getCellRangeFromStartTable","endCell","partialSelection","isWithinSameTable","getCellRng","getTableSelectionFromCellRng","getTableSelectionFromRng","getCellIndex","getSelectedCells","getAction","getActionFromCells","getActionFromRange","TableDeleteAction","getSelectedNodes","hasMultipleRanges","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","getCellsFromEditor","TableCellSelection","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","startElm","getParentCaption","deleteRange$1","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","deleteCaret","backspaceDelete$4","TableDelete","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","matchAll","startElement","matchedFormatNames","checkedMap","defaultBlock","MatchFormat","split$1","SplitRange","ZWSP$1","CARET_ID$1","importNode","getEmptyCaretContainers","isCaretContainerEmpty","findFirstTextNode","createCaretContainer","trimZwspFromCaretContainer","removeCaretContainerNode","removeCaretContainer","insertCaretContainerNode","formatNode","appendNode","insertFormatNodesIntoCaretContainer","formatNodes","innerMostFormatNode","applyCaretFormat","wordcharRegex","removeCaretFormat","hasContentAfter","expandedRng","newCaretContainer","disableCaretContainer","replaceWithCaretFormat","innerMost","isFormatElement","inlineElements","isEmptyCaretFormatElement","getParentInlines","hasOnlyOneChild$1","deleteLastPosition","parentInlines","isFormatElement$1","deleteCaret$1","backspaceDelete$5","InlineFormatDelete","getPos$1","fireScrollIntoViewEvent","alignToTop","scrollEvent","scrollElementIntoView","viewPort","viewPortY","viewPortH","offsetY","scrollTo","scrollRangeIntoView","rngRect","bodyRect","ScrollIntoView","isContentEditableTrue$2","isContentEditableFalse$6","showCaret","getNodeRange","renderCaretAtRange","caretPositionNode","caretPositionBeforeNode","renderRangeCaret","caretRange","moveToRange","trimEmptyTextNode$1","deleteContentAndShowCaret","peekCaretPosition","deleteCefBoundaryText","getNextVisualCaretPosition","getPrevVisualCaretPosition","getNextPosFn","isBeforeContentEditableFalseFn","nextCaretPosition","backspaceDelete$6","CefBoundaryDelete","nativeCommand","deleteCommand","forwardDeleteCommand","DeleteCommands","getSpecifiedFontProp","getProperty","round$1","normalizeFontFamily","getComputedFontProp","getFontProp","FontInfo","getFontSize","getFontFamily","findFirstCaretElement","isRangeAtStartOfNode","getCaretElement","fromFontSizeNumber","fontSizeNumber","fontSizes","fontClasses","fontNameAction","fontNameQuery","fontSizeAction","fontSizeQuery","isEq$3","rng1","RangeCompare","findParent","hasParent","hasParentWithName","isTable$2","isTableCell$3","isCeFalseCaretContainer","hasBrBeforeAfter","isPrevNode","hasContentEditableFalseParent","findTextNodeRelative","isAfterNode","lastInlineElement","parentBlockContainer","normalizeEndPoint","directionLeft","normalize$2","normRng","NormalizeRange","hasRightSideContent","scrollToBr","brElm","moveSelectionToBr","extraBr","insertBrAtCaret","isAfterLastNodeInContainer","containerBlock","containerBlockName","isControlKey","insertBrBefore","insertBrAfter","hasBrAfter","isBeforeBr$1","isAnchorLink","isInsideAnchor","readInlineAnchorLocation","insertBrOutsideAnchor","anchorLocation","InsertBr","browser$3","normalizeRng","isOrContains","isRngInRoot","shouldStore","nativeRangeToSelectionRange","getBookmark$2","bookmarkToNativeRng","store","newBookmark","storeNative","restore","SelectionBookmark","indentElement","useMargin","indentStyleName","isListComponent","parentIsListComponent","getBlocksToIndent","indentUnit","indentValue","each$a","extend$2","map$3","inArray$2","EditorCommands","customCommand","skip_focus","addCommands","commandList","queryCommandSupported","addQueryValueHandler","hasCustomCommand","execNativeCommand","isFormatMatch","storeSelection","restoreSelection","queryCommandEnabled","listParent","editingHost","alignStates","inline_styles","Undo","undo","Redo","redo","Dispatcher","beforeFire","bindingName","hi","customEventRootDelegates","toggleNativeEvent","Observable","firePreProcess","firePostProcess","fireRemove","fireDetach","fireSwitchMode","setEditorCommandState","toggleReadOnly","hideResizeRect","getMode","getEventTarget","eventName","event_root","eventRoot","isListening","fireEvent","bindEventDelegate","eventRootElm","delegates","editorManager","editors","EditorObservable","bindPendingEventDelegates","_pendingNativeEvents","unbindAllNativeEvents","EditorObservable$1","sectionResult","mobilePlugins","defaultMobileSettings","normalizePlugins","pluginNames","trimmedPlugins","filterMobilePlugins","extractSections","getSection","sections","sectionSettings","hasSection","getDefaultSettings","documentBaseUrl","delta_width","delta_height","popup_css","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","object_resizing","visual","font_size_style_values","font_size_legacy_values","hidden_input","render_ui","convert_fonts_to_spans","ie7_compat","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","processPlugins","isTouchDevice","defaultOverrideSettings","forced_plugins","platformPlugins","combinedPlugins","isOnMobile","combineSettings","defaultSettings","extendedSettings","getEditorSettings","getFiltered","getParamObject","isArrayOf","each$b","explode$2","keyCodeLookup","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","modifierNames","Shortcuts","pendingPatterns","parseShortcut","createShortcut","cmdFunc","subpatterns","hasModifier","isFunctionKey","matchShortcut","executeShortcutAction","_doc","getContentEditableHost","getCollapsedNode","getFocusInElement","normalizeSelection","focusBody","setActive","hasElementFocus","hasIframeFocus","hasInlineFocus","rawBody","hasFocus$1","focusEditor","refreshContentEditable","contentEditableHost","activateEditor","bookmarkRng","skipFocus","EditorFocus","rawElm","getComputedSizeProp","getClientWidth","getClientHeight","getMarginTop","getMarginLeft","getBoundingClientRect$1","isInsideElementContentArea","isXYInContentArea","transposedPoint","fromDomSafe","isEditorAttachedToDom","rawContainer","EditorView","unimplemented","NotificationManager","getImplementation","getTopNotification","addNotification","closeNotification","otherNotification","getNotifications","serviceMessage","service_message","WindowManager","funcBind","fireOpenEvent","fireCloseEvent","addWindow","closeWindow","otherWindow","getTopWindow","getWindows","I18n","setCode","newCode","_dir","getCode","langData","getLangData","values_1","$1","$2","resolvePluginName","targetUrl","matchUrl","pluginUrlToMessage","displayError","uploadError","pluginLoadError","pluginInitError","initError","ErrorReporter","PluginManager$1","uploadStatus","pendingPromises","noUpload","handlerSuccess","handlerFailure","resolvePending","uploadBlobInfo","openNotification","markPending","closeNotification_1","markUploaded","removeFailed","percent","pendingUploadBlobInfo","uploadBlobs","blobInfos","isUploaded","isPending","Uint8Array","requestAnimationFrame$1","atob","blobUriToBlob","rejectWithError","responseType","parseDataUri","uriParts","decodeURIComponent","dataUriToBlob","Blob","uriToBlob","onloadend","Conversions","imageToBlobInfo","getByUri","dataUri","getAllImages","ImageScanner","cachedPromises","promises","imageInfo","newPromise","count$1","rnd","Uuid","BlobCache","mimeToExt","toBlobInfo","removeByUri","UploadStatus","PENDING","UPLOADED","blobUriStatuses","createStatus","resultUri","hasBlobUri","getResultUri","EditorUpload","imageScanner","urlFilters","aliveGuard","cacheInvalidator","replaceString","replaceImageUrl","replacementUrl","replaceUrlInUndoStack","fragments","replaceImageUri","uploadImages","scanForImages","imageInfos","filteredResult","uploadInfo","dataImgFilter","addFilter","resultItem","replaceBlobUris","source_view","isBlockElement","isValidTarget","hasBlockParent","shouldRemoveTextNode","addRootBlocks","rootBlockNode","tempNode","rootNodeName","forcedRootBlock","setup$3","ForceBlocks","getStartNode","getEndNode","getFirstChildren","getLastChildren$1","hasAllContentsSelected","moveEndPoint$1","hasAnyRanges","NodeChange","lastPath","isSameElementPath","currentPath","nativeRng","fakeRng","selectionChange","disable_nodechange","VDirection","VK","ENTER","LEFT","RIGHT","SPACEBAR","HOME","getNodeClientRects","toArrayWithNode","findUntil","walkUntil","isAboveFn","isBeflowFn","targetClientRect","line","aboveLineNumber","lineNumber","isLineNumber","upUntil","Up","downUntil","Down","positionsUntil","isBelowFn","getClientRect","isAboveLine","isLine","isContentEditableFalse$7","findNode$1","distanceToRectLeft","distanceToRectRight","isInside","findClosestClientRect","oldClientRect","oldDistance","newDistance","walkUntil$1","findLineNodeRects","targetNodeRect","checkPosFn","lineRects","getFakeCaretTargets","caretInfo","closestCaret","closestNodeRect","contentEditableFalseNodeRects","targetNodeRects","isXYWithinRange","RangePoint","getAbsolutePosition","getBodyPosition","getScrollPosition","getBodyScroll","inlineScroll","iframeScroll","getMousePosition","iframePosition","scrollPosition","calculatePosition","bodyPosition","mousePosition","calc","MousePosition","isContentEditableFalse$8","isContentEditableTrue$3","isDraggable","isValidDropTarget","targetElement","dragElement","cloneElement","cloneElm","createGhost","clonedElm","ghostElm","appendGhostToBody","moveGhost","removeElement","isLeftMouseButtonPressed","hasDraggableElement","applyRelPos","relX","start$1","ceElm","elmPos","relY","ghost","move$1","throttledPlaceCaretAt","placeCaretAt","dragging","targetPos","getRawTarget","targetClone_1","targetClone","removeDragState","bindFakeDragEvents","pageDom","dragStartHandler","dragHandler","dropHandler","dragEndHandler","rootDocument","blockIeDrop","realTarget","DragDropOverrides","setup$4","renderFocusCaret","CefFocus","isContentEditableTrue$4","isContentEditableFalse$9","getContentEditableRoot$1","SelectionOverrides","selectedContentEditableNode","fakeCaret","realSelectionId","isFakeSelectionElement","getRealSelectionElement","setRange","getRange","blockCaretContainer","contentEditableRoot","removeContentEditableSelection","handleTouchSelect","setContentEditableSelection","hasNormalCaretPosition","hasBetterMouseTarget","targetBlock","caretBlock","normalizeShortEndedElementSelection","isRangeInCaretContainer","realSelectionElement","outerText","addCss","contentStyles","rootClass","isWithinCaretContainer","$realSelectionContainer","origTargetClone","isValidPrefixAttrName","trimComments","sanitizedText","isInvalidUri","findEndTagIndex","tokenRegExp","checkBogusAttribute","attrString","SaxParser","fix_self_closing","endRegExp","attrList","textData","isInternalElement","removeInternalElements","fillAttrsMap","isShortEnded","isValidElement","attribsValue","validAttributesMap","validAttributePatterns","processHtml","anyAttributesRequired","selfClosing","attrRegExp","fixSelfClosing","stack","filteredUrlAttrs","scriptUriRegExp","processEndTag","valid","parseAttribute","val3","attrRule","trimRegExp","self_closing_elements","remove_internals","bogusValue","findEndTag","SaxParser$1","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","matchLength","bogusAllRegExp","getTempAttrs","trimExternal","TrimHtml","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","sum","Diff","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","read$3","currentFragments","Fragments","undoLevelDocument","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","Levels","UndoManager","isFirstTypedCharacter","locks","isUnlocked","setTyping","typing","addNonTypingUndoLevel","endTyping","beforeChange","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","currentLevel","custom_undo_redo_levels","hasUndo","hasRedo","callback1","callback2","postProcessHooks","filter$2","each$c","addPostProcessHook","isPre","hasPreSibling","pre","joinPre","pre1","pre2","Hooks","MCE_ATTR_RE","each$d","isEq$5","isTableCell$4","isChildOfInlineParent","lastIdx","wrap$2","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","links","find$3","removeNode$1","rootBlockElm","list_block","compareNode","stylesModified","remove_similar","valueOut","findFormatRoot","formatRoot","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","textDecoration","ceFalseOverride","RemoveFormat","each$e","isElementNode","findElementSibling","mergeSiblingsNodes","tmpSibling","elementUtils","processChildElements","hasStyle","applyStyle","unwrapEmptySpan","processUnderlineAndColor","mergeUnderlineAndColor","mergeBackgroundColorAndFontSize","mergeSubSup","mergeSiblings","merge_siblings","clearChildStyles","clear_child_styles","mergeWithChildren","mergeWithParents","merge_with_parents","MergeFormats","each$f","isElementNode$1","setElementFormat","onformat","styleVal","applyNodeStyle","applyRngStyle","nodeSpecific","wrapElm","currentWrapElm","childCount","getChildCount","getChildElementNode","mergeStyles","curSelNode","ApplyFormat","each$g","setup$5","formatChangeData","currentFormats","matchedFormats","addListeners","formatChangeItems","formatChangeState","FormatChanged","valigntop","verticalAlign","valignmiddle","valignbottom","textAlign","fontWeight","fontStyle","forecolor","hilitecolor","fontname","fontsize","fontsize_class","DefaultFormats","FormatRegistry","unregister","each$h","parsedSelectorToHtml","ancestry","sItem","getRequiredParent","elmRule","wrapInHtml","parentCandidate","parentRequired","ancestorName","siblingElm","selectorToHtml","parseSelector","parseSelectorItem","$0","$3","$4","previewFrag","previewElm","parentFontSize","previewStyles","previewCss","preview_styles","removeVars","numValue","Preview","ToggleFormat","setup$6","FormatShortcuts","Formatter","hasOwnProperty$2","htmlParser","internalName","cleanup","hasChildren","trimTrailingBr","brNode1","brNode2","DomSerializerFilters","impl","oldDoc","shouldFireEvent","DomSerializerPreProcess","removeAttrs","addFontToSpansFilter","face","addStrikeToSpanFilter","addFilters","LegacyFilter","whiteSpaceRegExp$3","typeLookup","walk$2","Node$1","selfAttrs","selfAttr","cloneAttrs","refNode","paddEmptyNode","brPreferred","padd_empty_with_br","isPaddedWithNbsp","hasOnlyChild","isPadded","isEmpty$2","whitespaceElements","isLineBreakNode","remove_trailing_brs","prevName","whiteSpaceElements","appendRel","addNoOpener","allow_html_in_named_anchor","fix_list_elements","classValue","validClassesMap","makeMap$4","each$i","explode$3","extend$3","DomParser","nodeFilters","attributeFilters","matchedNodes","matchedAttributes","root_name","fixInvalidChildren","newParent","childNode","nonSplitableElements","textBlockElements","filterNode","getNodeFilters","getAttributeFilters","isInWhiteSpacePreservedElement","invalidChildren","rootBlockName","startWhiteSpaceRegExp","endWhiteSpaceRegExp","allWhiteSpaceRegExp","isAllWhiteSpaceRegExp","createNode","removeWhitespaceBefore","textNodeNext","textVal","cloneAndExcludeBlocks","attrFiltersLen","postProcess$1","outArgs","getHtmlFromNode","getInner","parseHtml","serializeNode","htmlSerializer","toHtml","DomSerializer","addRules","setRules","DomSerializer$1","domSerializer","BookmarkManager","BreakType","BookmarkManager$1","isContentEditableFalse$a","isContentEditableTrue$5","getContentEditableRoot$2","ControlSelection","selectedElmGhost","resizeHelper","resizeHandles","selectedHandle","selectedElmX","selectedElmY","startH","resizeStarted","startScrollWidth","startScrollHeight","editableDoc","nw","ne","se","sw","isImage","isEventOnImageOutsideRange","contextMenuSelectImage","getResizeTarget","resizeGhostElement","proportional","resizeHelperX","resizeHelperY","resize_img_proportional","endGhostResize","setSizeProp","showResizeRect","targetWidth","targetHeight","unbindResizeHandleEvents","unSelectabe","updateResizeRect","controlElm","isChildOrEqual","disableGeckoResize","isWithinContentEditableFalse","delayedSelect","throttledUpdateResizeRect","hasCeProperty","findParent$1","findClosestIeRange","createTextRange","moveToElementText","moveToPoint","moveOutOfContentEditableFalse","pointDoc","CaretRangeFromPoint","processRanges","EventProcessRanges","tableModel","cellPosition","fillout","y2","x2","cellExists","skipCellsX","findElementPos","extractRows","sx","sy","ey","subTable","createDomTable","tableElement","modelRowsToDomRows","fromDom$1","toDom","subsection","endElement","SimpleTableModel","findParentListContainer","getFullySelectedListWrappers","listCont","wrap$3","innerElm","directListWrappers","commonAnchorContainer","getWrapElements","wrapElements","listWrappers","allWrappers","emptyFragment","getFragmentFromRange","getParentTable","getTableFragment","selectedTableCells","fullTableModel","sectionedTableModel","getSelectionFragment","read$4","FragmentReader","bin","getHtmlContent","tmpElm","GetSelectionContent","setupArgs","cleanContent","contentArgs","createContextualFragment","anyRng","pasteHTML","SetSelectionContent","getEndpointElement","real","getStart$2","skipEmptyTextNodes","forwards","orig","getNode$1","endElm","select$1","each$j","isNativeIeSelection","isAttachedToDom","isValidRange","Selection$1","bookmarkManager","selectedRange","explicitRange","selectorChangedData","getEnd$1","compareEndPoints","tryCompareBoundaryPoints","how","sourceRange","destinationRange","compareBoundaryPoints","START_TO_START","END_TO_END","ieRange","setNode","getSelectedBlocks$1","anchorRange","focusRange","currentSelectors","matchedSelectors","flip","walk$3","getBreakType","currentPos","Br","Block","Wrap","getPositionsUntil","breakType","breakAt","Eol","getAdjacentLinePositions","getPositionsUntilBreak","findClosestHorizontalPositionFromPoint","lastDist","newDist","findClosestHorizontalPosition","getPositionsUntilPreviousLine","getPositionsUntilNextLine","isAtFirstLine","isAtLastLine","getPositionsAbove","getPositionsBelow","getFirstLinePositions","getLastLinePositions","isContentEditableFalse$b","getSelectedNode$1","moveToCeFalseHorizontally","rangeIsInContainerBlock","moveToCeFalseVertically","walkerFn","linePositions","nextLinePositions","closestNextLineRect","caretClientRect","dist1","dist2","contentEditableFalseNode","caretPositions","exitPreBlock","getHorizontalRange","newRange","getVerticalRange","moveH","moveV","isCefPosition","moveToLineEndPoint","deflate","getCorners","getYAxisValue","tds","findClosestCorner","corners","newCorner","oldCorner","oldDist","getClosestCell$1","isTargetCorner","corner","getBottomValue","getTopValue","isAbove$1","isBelow$1","getClosestCellAbove","getClosestCellBelow","findClosestPositionInAboveCell","findClosestPositionInBelowCell","hasNextBreak","lineInfo","breakPos","startsWithWrapBreak","startsWithBrBreak","isAtTableCellLine","isAtFirstTableCellLine","isAtLastTableCellLine","isCaretAtStartOrEndOfTable","navigateHorizontally","getClosestAbovePosition","getClosestBelowPosition","getTable","renderBlock","navigateVertically","moveH$1","moveV$1","rangeBefore","insertElement","insertBr","insertBlock$1","insertEmptyLine","getClosestTargetBlock","isAtFirstOrLastLine","moveCaretToNewEmptyLine","rootBlock","rootBlockAttrs","moveV$2","matchesEvent","match$1","MatchKeys","executeKeydownOverride","setup$7","ArrowKeys","executeKeydownOverride$1","executeKeyupOverride","setup$8","DeleteBackspaceKeys","firstNonWhiteSpaceNodeSibling","moveToCaretPosition","tempElm","getEditableRoot","editableRoot","getParentBlock$2","getParentBlockName","isListItemParentBlock","NewLineUtils","hasFirstChild","hasParent$1","isListBlock","isNestedList","getContainerBlock","containerBlockParent","isFirstOrLastLi","createNewBlock","newBlockName","InsertLi","trimZwsp","isEmptyAnchor","isTableCell$5","emptyBlock","containerAndSiblingName","canSplitBlock","trimInlineElementsOnLeftSideOfBlock","firstChilds","normalizeZwspOffset","includeZwspInRange","trimLeadingLineBreaks","getEditableRoot$1","applyAttributes","forcedRootBlockAttrs","attrStyles","currentStyles","newStyles","attrClassesOpt","attrClasses","currentClassesOpt","currentClasses","filteredClasses","newClasses","appliedAttrs","remainingAttrs","setForcedBlockAttrs","wrapSelfAndSiblingsInDefaultBlock","addBrToBlockIfNeeded","insert$2","parentBlockName","clonedNode","isCaretAtStartOrEndOfBlock","normalizedOffset","insertNewBlockAfter","InsertBlock","shouldInsertBr","shouldBlockNewLine","ContextSelectors","newLineAction","shouldBlockNewLine$1","isBrMode","requiredState","brMode","inListBlock","inPreBlock","inSummaryBlock","shouldPutBrInPre$1","inBrContext","canInsertIntoEditableRoot","rootEditable","match$2","predicates","getAction$1","NewLineAction","insert$3","InsertNewLine","endTypingLevel","handleEnterKeyEvent","setup$9","EnterKey","insertTextAtPosition","insertNbspAtPosition","insertSpaceAtPosition","navigateIgnoreEmptyTextNodes","getClosestBlock","isAtBeforeAfterBlockBoundary","isAtBlockBoundary","isAtStartOfBlock","isAtEndOfBlock","isBeforeBlock","isAfterBlock","isInMiddleOfText","getClosestBlock$1","hasSpaceBefore","hasSpaceAfter","isPreValue","isInPre","isAtBeginningOfBody","isAtEndOfBody","isAtLineBoundary","needsToHaveNbsp","needsToBeNbspLeft","needsToBeNbspRight","afterPos","needsToBeNbsp","isNbspAt","hasNbsp","normalizeNbspMiddle","normalizeNbspAtStart","normalizeNbspInMiddleOfTextNode","newText","normalizeNbspAtEnd","normalizeNbsps","normalizeNbspsInEditor","locationToCaretPosition","insertInlineBoundarySpaceOrNbsp","checkPos","setSelection$1","insertSpaceOrNbspAtSelection","executeKeydownOverride$2","setup$a","SpaceKey","findBlockCaretContainer","removeIeControlRect","handleBlockContainer","setup$b","CaretContainerInput","browser$4","setupIeInput","keypressThrotter","setup$c","isComposing","executeKeydownOverride$3","setup$d","HomeEndKeys","setup$e","KeyboardOverrides","isGecko","isWebKit","mceInternalDataType","setMceInternalContent","selectionHtml","internalContent","getMceInternalContent","insertClipboardContents","emptyEditorWhenDeleting","serializeRng","allContentsSelected","allRng","allSelection","selectAll","inputMethodFocus","removeHrOnBackspace","selectControlElements","removeStylesWhenDeletingAcrossBlockElements","getAttributeApplyFunction","setAttributeNode","isSelectionAcrossElements","disableBackspaceIntoATable","removeBlockQuoteOnBackSpace","setGeckoEditingOptions","setOpts","addBrAfterLastLinks","fixLinks","setDefaultBlockType","showBrokenImageIcon","restoreFocusOnKeyDown","bodyHeight","blockCmdArrowNavigation","disableAutoUrlDetect","tapLinksAndImages","blockFormSubmitInsideEditor","removeAppleInterchangeBrs","ieInternalDragAndDrop","isTextBlockNode","normalizeSelection$1","setup$f","preventSummaryToggle","filterDetails","setup$g","appendStyle","createParser","autoFocus","auto_focus","destroyed","getStyleSheetLoader","initContentBody","skipWrite","contentCssText","orgVisibility","iframeHTML","content_document","content_window","bodyElement","hex_colors","force_hex_style_colors","class_filter","annotator","_nodeChangeDispatcher","browser_spellcheck","gecko_spellcheck","directionality","nowrap","protect","content_style","InitContentBody","relaxDomain","domain","hostname","bodyUuid","domainRelaxUrl","normalizeHeight","normalizedHeight","createIframeElement","customAttrs","iframe","frameBorder","allowTransparency","bodyId","getURI","createIframe","isDomainRelaxed","contentAreaContainer","init$1","boxInfo","orgDisplay","InitIframe","DOM$4","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initTheme","renderFromLoadedTheme","min_height","iframeHeight","renderFromThemeFunc","createThemeFalseResult","renderThemeFalseIframe","renderThemeFalse","renderThemeUi","init$2","rtl_ui","i18n","aria_label","content_css","Init","DOM$5","hasSkipLoadPrefix","loadLanguage","scriptLoader","language_url","loadTheme","themeUrl","theme_url","loadPlugins","form","formElement","hasHiddenInput","formEventDelegate","_mceOldSubmit","triggerSave","encoding","_beforeUnload","set_dirty","add$4","each$k","trim$4","queryParts","DEFAULT_PORTS","ftp","http","https","mailto","URI","baseUri","base_uri","isProtocolRelative","protocol","toAbsPath","part","userInfo","port","setPath","toRelative","tu","uu","toRelPath","noHost","isSameOrigin","defaultPort","breakPoint","outPath","nb","noProtoHost","loc","defaultFormat","trimEmptyContents","emptyRegExp","getContentFromBody","getContent$1","findMatchingNodes","nodeMatches","attrMatches","filter$3","defaultFormat$1","isTreeNode","setEditorHtml","setContentString","padd","setContentTree","setContent$1","DOM$6","restoreOriginalStyles","safeDestroy","clearDomReferences","restoreForm","is_removing","automatic","DOM$7","extend$4","each$l","resolve$4","ie$2","documentBaseURL","baseURI","language_load","loadedCSS","editorCommands","cache_suffix","override_viewport","callbackLookup","lang_1","i18n_1","addSidebar","focusedEditor","setProgressState","isNotDirty","oldState","urlconverter_callback","visual_table_class","visual_anchor_class","_scanForImages","documentFocusInHandler","beforeUnloadDelegate","EditorManager","isEditorUIElement","FocusManager","isManualNodeChange","registerPageMouseUp","throttledStore","mouseUpPage","registerFocusOut","registerMouseUp","registerEditorEvents","SelectionRestore","DOM$8","isEditorUIElement$1","isUIElement","customSelector","custom_ui_selector","getActiveElement","blurredEditor","unregisterDocumentEvents","setup$h","FocusController","DOM$9","explode$4","each$m","extend$5","instanceCounter","boundGlobalEvents","legacyEditors","isValidLegacyKey","globalEventDelegate","toggleGlobalEvents","removeEditorFromList","targetEditor","oldEditors","purgeDestroyedEditor","majorVersion","minorVersion","releaseDate","preInit","tinyMCEPreInit","srcScript","currentScript","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","createId","findTargets","forms","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","EditorManager$1","RangeUtils","normalizedRng","compareRanges","extendClass","initializing","RangeUtils$1","round$2","constrainRect","cropRect","x1","y1","clamp$1","clampRect","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","typeClass","lctype","controlType","ControlType","each$n","extend$6","Class","member","mixins","mixin","dummy","createMethod","name_1","Methods","fieldName","min$1","max$1","round$3","Color","rgb2hsv","minRGB","maxRGB","hsvToRgb","saturation","brightness","side","chroma","quote","JSON$1","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","setRequestHeader","requestheaders","extend$7","JSONRequest","sendRPC","ecb","scb","method","localStorage","storage","LocalStorage","publicApi","geom","EventDispatcher","Serializer","isMac","Tinymce","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","SPECIES","C","regExps","aletter","midnumlet","midletter","midnum","lf","newline","katakana","extendnumlet","punctuation","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","UnicodeData","SETS$1","getType","setsLength","memoize","classify","memoized","StringMapper","isWordBoundary","prevType","nextNextType","nextType","WordBoundary","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","word","findWordEnd","extractUrl","peakedWord","doGetWords","includePunctuation","includeWhitespace","words","ignoreCase","getWords","WordGetter","treeWalker","getCount","WordCount","wordsToText","debouncedUpdate","Statusbar","Content","$defineProperty","createDesc","checkToolbars","minwidth","floatingtoolbar_minwidth","minheight","floatingtoolbar_minheight","floatingtoolbar_top","floatingtoolbar_bottom","$editor","$toolbar","$placeholder","outerHeight","scroll","outerWidth","floatingtoolbar_selectors"],"mappings":"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CACE,MACA,aAEF,CACE,OACA,aAEF,CACE,MACA,cAEF,CACE,MACA,YAEF,CACE,MACA,kBAEF,CACE,MACA,mBAEF,CACE,OACA,mBAEF,CACE,OACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,cAEF,CACE,OACA,UAEF,CACE,OACA,oBAEF,CACE,OACA,kBAEF,CACE,OACA,oBAEF,CACE,MACA,gBAEF,CACE,MACA,kBAEF,CACE,MACA,qBAEF,CACE,OACA,6CAEF,CACE,OACA,8CAEF,CACE,MACA,2BAEF,CACE,MACA,4BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,8BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,OACA,+BAEF,CACE,KACA,kBAEF,CACE,KACA,qBAEF,CACE,OACA,yBAEF,CACE,OACA,4BAEF,CACE,OACA,WAEF,CACE,OACA,WAEF,CACE,MACA,UAEF,CACE,OACA,YAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,6BAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,OACA,cAEF,CACE,MACA,mBAEF,CACE,MACA,iBAEF,CACE,OACA,kBAEF,CACE,MACA,uBAEF,CACE,MACA,mBAEF,CACE,MACA,mBAEF,CACE,MACA,qBAEF,CACE,MACA,wBAEF,CACE,MACA,qBAEF,CACE,MACA,2BAEF,CACE,MACA,qBAEF,CACE,OACA,YAEF,CACE,OACA,kBAEF,CACE,OACA,YAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,OACA,0BAEF,CACE,OACA,mBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,cAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,iBAEF,CACE,OACA,eAEF,CACE,OACA,cAEF,CACE,MACA,YAEF,CACE,OACA,gBAEF,CACE,OACA,SAEF,CACE,OACA,wBAEF,CACE,OACA,WAEF,CACE,OACA,gBAEF,CACE,OACA,YAEF,CACE,OACA,uBAEF,CACE,OACA,qBAEF,CACE,OACA,mBAEF,CACE,OACA,SAEF,CACE,MACA,gBAEF,CACE,MACA,WAEF,CACE,MACA,8BAEF,CACE,MACA,+BAEF,CACE,OACA,UAEF,CACE,OACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,aAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,kBAEF,CACE,MACA,cAEF,CACE,MACA,eAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,OAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,aAEF,CACE,MACA,iBAEF,CACE,MACA,WAEF,CACE,MACA,YAEF,CACE,MACA,eAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,aAEF,CACE,MACA,kBAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,aAEF,CACE,MACA,SAEF,CACE,MACA,iBAEF,CACE,MACA,cAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,SAEF,CACE,MACA,WAEF,CACE,MACA,QAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,MACA,QAEF,CACE,MACA,SAEF,CACE,MACA,UAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,MAEF,CACE,MACA,WAEF,CACE,MACA,MAEF,CACE,MACA,OAEF,CACE,MACA,eAEF,CACE,MACA,SAEF,CACE,MACA,OAEF,CACE,MACA,WAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,OAEF,CACE,MACA,SAEF,CACE,OACA,eAEF,CACE,MACA,aAEF,CACE,OACA,oBAEF,CACE,MACA,yBAEF,CACE,OACA,iBAEF,CACE,OACA,kBAEF,CACE,OACA,mBAEF,CACE,OACA,iBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,0BAEF,CACE,OACA,wBAEF,CACE,OACA,2BAEF,CACE,OACA,0BAEF,CACE,OACA,2BAEF,CACE,OACA,aAEF,CACE,OACA,aAEF,CACE,OACA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","file":"static/js/editor.a3a7847a.js","sourcesContent":["/* global tinymce:true */\r\n/* global $:true */\r\n\r\n/* eslint-disable */\r\n\r\ntinymce.PluginManager.add('linktools', function(editor)\r\n{\r\n function gotoLink()\r\n {\r\n return function()\r\n {\r\n var url = $(editor.selection.getNode()).attr('href');\r\n\r\n if (url)\r\n {\r\n if (url.indexOf('http://') == -1 && url.indexOf('https://') == -1)\r\n {\r\n url = editor.settings.document_base_url + url;\r\n }\r\n\r\n window.open(url);\r\n }\r\n\r\n return '';\r\n };\r\n }\r\n\r\n function addButtons()\r\n {\r\n editor.addButton('gotolink', {\r\n title: 'Preview',\r\n onclick: gotoLink()\r\n });\r\n }\r\n\r\n function isEditableLink(url)\r\n {\r\n // Fix for multiple toolbar visible\r\n tinymce.each(editor.contextToolbars || [], function(toolbar)\r\n {\r\n if (toolbar.panel)\r\n {\r\n // Fix for wrong mce-active behavior on toolbar\r\n tinymce.each(toolbar.panel.find('button'), function(element)\r\n {\r\n element.parent().$el.find('.mce-active').removeClass('mce-active');\r\n });\r\n\r\n toolbar.panel.hide();\r\n }\r\n });\r\n\r\n var selectorMatched = editor.dom.is(url, 'a:not([data-mce-object],[data-mce-placeholder])');\r\n\r\n return selectorMatched;\r\n }\r\n\r\n function addToolbars()\r\n {\r\n var toolbarItems = editor.settings.linktools_toolbar;\r\n\r\n if (!toolbarItems)\r\n {\r\n toolbarItems = 'gotolink unlink | link';\r\n }\r\n\r\n editor.addContextToolbar(\r\n isEditableLink,\r\n toolbarItems\r\n );\r\n }\r\n\r\n addButtons();\r\n addToolbars();\r\n});\r\n","// Exports the \"template\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/template')\n// ES2015:\n// import 'tinymce/plugins/template'\nrequire('./plugin.js');","// Exports the \"floatingtoolbar\" plugin for usage with module loaders\r\n// Usage:\r\n// CommonJS:\r\n// require('tinymce/plugins/floatingtoolbar')\r\n// ES2015:\r\n// import 'tinymce/plugins/floatingtoolbar'\r\nrequire('./plugin.js');\r\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// Exports the \"advlist\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/advlist')\n// ES2015:\n// import 'tinymce/plugins/advlist'\nrequire('./plugin.js');","(function () {\nvar textcolor = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getCurrentColor = function (editor, format) {\n var color;\n editor.dom.getParents(editor.selection.getStart(), function (elm) {\n var value;\n if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {\n color = color ? color : value;\n }\n });\n return color;\n };\n var mapColors = function (colorMap) {\n var i;\n var colors = [];\n for (i = 0; i < colorMap.length; i += 2) {\n colors.push({\n text: colorMap[i + 1],\n color: '#' + colorMap[i]\n });\n }\n return colors;\n };\n var applyFormat = function (editor, format, value) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.apply(format, { value: value });\n editor.nodeChanged();\n });\n };\n var removeFormat = function (editor, format) {\n editor.undoManager.transact(function () {\n editor.focus();\n editor.formatter.remove(format, { value: null }, null, true);\n editor.nodeChanged();\n });\n };\n var TextColor = {\n getCurrentColor: getCurrentColor,\n mapColors: mapColors,\n applyFormat: applyFormat,\n removeFormat: removeFormat\n };\n\n var register = function (editor) {\n editor.addCommand('mceApplyTextcolor', function (format, value) {\n TextColor.applyFormat(editor, format, value);\n });\n editor.addCommand('mceRemoveTextcolor', function (format) {\n TextColor.removeFormat(editor, format);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var defaultColorMap = [\n '000000',\n 'Black',\n '993300',\n 'Burnt orange',\n '333300',\n 'Dark olive',\n '003300',\n 'Dark green',\n '003366',\n 'Dark azure',\n '000080',\n 'Navy Blue',\n '333399',\n 'Indigo',\n '333333',\n 'Very dark gray',\n '800000',\n 'Maroon',\n 'FF6600',\n 'Orange',\n '808000',\n 'Olive',\n '008000',\n 'Green',\n '008080',\n 'Teal',\n '0000FF',\n 'Blue',\n '666699',\n 'Grayish blue',\n '808080',\n 'Gray',\n 'FF0000',\n 'Red',\n 'FF9900',\n 'Amber',\n '99CC00',\n 'Yellow green',\n '339966',\n 'Sea green',\n '33CCCC',\n 'Turquoise',\n '3366FF',\n 'Royal blue',\n '800080',\n 'Purple',\n '999999',\n 'Medium gray',\n 'FF00FF',\n 'Magenta',\n 'FFCC00',\n 'Gold',\n 'FFFF00',\n 'Yellow',\n '00FF00',\n 'Lime',\n '00FFFF',\n 'Aqua',\n '00CCFF',\n 'Sky blue',\n '993366',\n 'Red violet',\n 'FFFFFF',\n 'White',\n 'FF99CC',\n 'Pink',\n 'FFCC99',\n 'Peach',\n 'FFFF99',\n 'Light yellow',\n 'CCFFCC',\n 'Pale green',\n 'CCFFFF',\n 'Pale cyan',\n '99CCFF',\n 'Light sky blue',\n 'CC99FF',\n 'Plum'\n ];\n var getTextColorMap = function (editor) {\n return editor.getParam('textcolor_map', defaultColorMap);\n };\n var getForeColorMap = function (editor) {\n return editor.getParam('forecolor_map', getTextColorMap(editor));\n };\n var getBackColorMap = function (editor) {\n return editor.getParam('backcolor_map', getTextColorMap(editor));\n };\n var getTextColorRows = function (editor) {\n return editor.getParam('textcolor_rows', 5);\n };\n var getTextColorCols = function (editor) {\n return editor.getParam('textcolor_cols', 8);\n };\n var getForeColorRows = function (editor) {\n return editor.getParam('forecolor_rows', getTextColorRows(editor));\n };\n var getBackColorRows = function (editor) {\n return editor.getParam('backcolor_rows', getTextColorRows(editor));\n };\n var getForeColorCols = function (editor) {\n return editor.getParam('forecolor_cols', getTextColorCols(editor));\n };\n var getBackColorCols = function (editor) {\n return editor.getParam('backcolor_cols', getTextColorCols(editor));\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback', null);\n };\n var hasColorPicker = function (editor) {\n return typeof getColorPickerCallback(editor) === 'function';\n };\n var Settings = {\n getForeColorMap: getForeColorMap,\n getBackColorMap: getBackColorMap,\n getForeColorRows: getForeColorRows,\n getBackColorRows: getBackColorRows,\n getForeColorCols: getForeColorCols,\n getBackColorCols: getBackColorCols,\n getColorPickerCallback: getColorPickerCallback,\n hasColorPicker: hasColorPicker\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var getHtml = function (cols, rows, colorMap, hasColorPicker) {\n var colors, color, html, last, x, y, i, count = 0;\n var id = global$1.DOM.uniqueId('mcearia');\n var getColorCellHtml = function (color, title) {\n var isNoColor = color === 'transparent';\n return '' + '
' + (isNoColor ? '×' : '') + '
' + '';\n };\n colors = TextColor.mapColors(colorMap);\n colors.push({\n text: global$3.translate('No color'),\n color: 'transparent'\n });\n html = '';\n last = colors.length - 1;\n for (y = 0; y < rows; y++) {\n html += '';\n for (x = 0; x < cols; x++) {\n i = y * cols + x;\n if (i > last) {\n html += '';\n } else {\n color = colors[i];\n html += getColorCellHtml(color.color, color.text);\n }\n }\n html += '';\n }\n if (hasColorPicker) {\n html += '' + '' + '';\n html += '';\n for (x = 0; x < cols; x++) {\n html += getColorCellHtml('', 'Custom color');\n }\n html += '';\n }\n html += '
' + '
' + '' + '
' + '
';\n return html;\n };\n var ColorPickerHtml = { getHtml: getHtml };\n\n var setDivColor = function setDivColor(div, value) {\n div.style.background = value;\n div.setAttribute('data-mce-color', value);\n };\n var onButtonClick = function (editor) {\n return function (e) {\n var ctrl = e.control;\n if (ctrl._color) {\n editor.execCommand('mceApplyTextcolor', ctrl.settings.format, ctrl._color);\n } else {\n editor.execCommand('mceRemoveTextcolor', ctrl.settings.format);\n }\n };\n };\n var onPanelClick = function (editor, cols) {\n return function (e) {\n var buttonCtrl = this.parent();\n var value;\n var currentColor = TextColor.getCurrentColor(editor, buttonCtrl.settings.format);\n var selectColor = function (value) {\n editor.execCommand('mceApplyTextcolor', buttonCtrl.settings.format, value);\n buttonCtrl.hidePanel();\n buttonCtrl.color(value);\n };\n var resetColor = function () {\n editor.execCommand('mceRemoveTextcolor', buttonCtrl.settings.format);\n buttonCtrl.hidePanel();\n buttonCtrl.resetColor();\n };\n if (global$1.DOM.getParent(e.target, '.mce-custom-color-btn')) {\n buttonCtrl.hidePanel();\n var colorPickerCallback = Settings.getColorPickerCallback(editor);\n colorPickerCallback.call(editor, function (value) {\n var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];\n var customColorCells, div, i;\n customColorCells = global$2.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {\n return elm.firstChild;\n });\n for (i = 0; i < customColorCells.length; i++) {\n div = customColorCells[i];\n if (!div.getAttribute('data-mce-color')) {\n break;\n }\n }\n if (i === cols) {\n for (i = 0; i < cols - 1; i++) {\n setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));\n }\n }\n setDivColor(div, value);\n selectColor(value);\n }, currentColor);\n }\n value = e.target.getAttribute('data-mce-color');\n if (value) {\n if (this.lastId) {\n global$1.DOM.get(this.lastId).setAttribute('aria-selected', 'false');\n }\n e.target.setAttribute('aria-selected', true);\n this.lastId = e.target.id;\n if (value === 'transparent') {\n resetColor();\n } else {\n selectColor(value);\n }\n } else if (value !== null) {\n buttonCtrl.hidePanel();\n }\n };\n };\n var renderColorPicker = function (editor, foreColor) {\n return function () {\n var cols = foreColor ? Settings.getForeColorCols(editor) : Settings.getBackColorCols(editor);\n var rows = foreColor ? Settings.getForeColorRows(editor) : Settings.getBackColorRows(editor);\n var colorMap = foreColor ? Settings.getForeColorMap(editor) : Settings.getBackColorMap(editor);\n var hasColorPicker = Settings.hasColorPicker(editor);\n return ColorPickerHtml.getHtml(cols, rows, colorMap, hasColorPicker);\n };\n };\n var register$1 = function (editor) {\n editor.addButton('forecolor', {\n type: 'colorbutton',\n tooltip: 'Text color',\n format: 'forecolor',\n panel: {\n role: 'application',\n ariaRemember: true,\n html: renderColorPicker(editor, true),\n onclick: onPanelClick(editor, Settings.getForeColorCols(editor))\n },\n onclick: onButtonClick(editor)\n });\n editor.addButton('backcolor', {\n type: 'colorbutton',\n tooltip: 'Background color',\n format: 'hilitecolor',\n panel: {\n role: 'application',\n ariaRemember: true,\n html: renderColorPicker(editor, false),\n onclick: onPanelClick(editor, Settings.getBackColorCols(editor))\n },\n onclick: onButtonClick(editor)\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('textcolor', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","(function () {\nvar template = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getCreationDateClasses = function (editor) {\n return editor.getParam('template_cdate_classes', 'cdate');\n };\n var getModificationDateClasses = function (editor) {\n return editor.getParam('template_mdate_classes', 'mdate');\n };\n var getSelectedContentClasses = function (editor) {\n return editor.getParam('template_selected_content_classes', 'selcontent');\n };\n var getPreviewReplaceValues = function (editor) {\n return editor.getParam('template_preview_replace_values');\n };\n var getTemplateReplaceValues = function (editor) {\n return editor.getParam('template_replace_values');\n };\n var getTemplates = function (editorSettings) {\n return editorSettings.templates;\n };\n var getCdateFormat = function (editor) {\n return editor.getParam('template_cdate_format', editor.getLang('template.cdate_format'));\n };\n var getMdateFormat = function (editor) {\n return editor.getParam('template_mdate_format', editor.getLang('template.mdate_format'));\n };\n var getDialogWidth = function (editor) {\n return editor.getParam('template_popup_width', 600);\n };\n var getDialogHeight = function (editor) {\n return Math.min(global$3.DOM.getViewPort().h, editor.getParam('template_popup_height', 500));\n };\n var Settings = {\n getCreationDateClasses: getCreationDateClasses,\n getModificationDateClasses: getModificationDateClasses,\n getSelectedContentClasses: getSelectedContentClasses,\n getPreviewReplaceValues: getPreviewReplaceValues,\n getTemplateReplaceValues: getTemplateReplaceValues,\n getTemplates: getTemplates,\n getCdateFormat: getCdateFormat,\n getMdateFormat: getMdateFormat,\n getDialogWidth: getDialogWidth,\n getDialogHeight: getDialogHeight\n };\n\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n date = date || new Date();\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n var DateTimeHelper = { getDateTime: getDateTime };\n\n var createTemplateList = function (editorSettings, callback) {\n return function () {\n var templateList = Settings.getTemplates(editorSettings);\n if (typeof templateList === 'function') {\n templateList(callback);\n return;\n }\n if (typeof templateList === 'string') {\n global$2.send({\n url: templateList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else {\n callback(templateList);\n }\n };\n };\n var replaceTemplateValues = function (editor, html, templateValues) {\n global$1.each(templateValues, function (v, k) {\n if (typeof v === 'function') {\n v = v(k);\n }\n html = html.replace(new RegExp('\\\\{\\\\$' + k + '\\\\}', 'g'), v);\n });\n return html;\n };\n var replaceVals = function (editor, e) {\n var dom = editor.dom, vl = Settings.getTemplateReplaceValues(editor);\n global$1.each(dom.select('*', e), function (e) {\n global$1.each(vl, function (v, k) {\n if (dom.hasClass(e, k)) {\n if (typeof vl[k] === 'function') {\n vl[k](e);\n }\n }\n });\n });\n };\n var hasClass = function (n, c) {\n return new RegExp('\\\\b' + c + '\\\\b', 'g').test(n.className);\n };\n var insertTemplate = function (editor, ui, html) {\n var el;\n var n;\n var dom = editor.dom;\n var sel = editor.selection.getContent();\n html = replaceTemplateValues(editor, html, Settings.getTemplateReplaceValues(editor));\n el = dom.create('div', null, html);\n n = dom.select('.mceTmpl', el);\n if (n && n.length > 0) {\n el = dom.create('div', null);\n el.appendChild(n[0].cloneNode(true));\n }\n global$1.each(dom.select('*', el), function (n) {\n if (hasClass(n, Settings.getCreationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = DateTimeHelper.getDateTime(editor, Settings.getCdateFormat(editor));\n }\n if (hasClass(n, Settings.getModificationDateClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = DateTimeHelper.getDateTime(editor, Settings.getMdateFormat(editor));\n }\n if (hasClass(n, Settings.getSelectedContentClasses(editor).replace(/\\s+/g, '|'))) {\n n.innerHTML = sel;\n }\n });\n replaceVals(editor, el);\n editor.execCommand('mceInsertContent', false, el.innerHTML);\n editor.addVisual();\n };\n var Templates = {\n createTemplateList: createTemplateList,\n replaceTemplateValues: replaceTemplateValues,\n replaceVals: replaceVals,\n insertTemplate: insertTemplate\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertTemplate', curry(Templates.insertTemplate, editor));\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.on('PreProcess', function (o) {\n var dom = editor.dom, dateFormat = Settings.getMdateFormat(editor);\n global$1.each(dom.select('div', o.node), function (e) {\n if (dom.hasClass(e, 'mceTmpl')) {\n global$1.each(dom.select('*', e), function (e) {\n if (dom.hasClass(e, editor.getParam('template_mdate_classes', 'mdate').replace(/\\s+/g, '|'))) {\n e.innerHTML = DateTimeHelper.getDateTime(editor, dateFormat);\n }\n });\n Templates.replaceVals(editor, e);\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n var insertIframeHtml = function (editor, win, html) {\n if (html.indexOf('') === -1) {\n var contentCssLinks_1 = '';\n global$1.each(editor.contentCSS, function (url) {\n contentCssLinks_1 += '';\n });\n var bodyClass = editor.settings.body_class || '';\n if (bodyClass.indexOf('=') !== -1) {\n bodyClass = editor.getParam('body_class', '', 'hash');\n bodyClass = bodyClass[editor.id] || '';\n }\n html = '' + '' + '' + contentCssLinks_1 + '' + '' + html + '' + '';\n }\n html = Templates.replaceTemplateValues(editor, html, Settings.getPreviewReplaceValues(editor));\n var doc = win.find('iframe')[0].getEl().contentWindow.document;\n doc.open();\n doc.write(html);\n doc.close();\n };\n var open = function (editor, templateList) {\n var win;\n var values = [];\n var templateHtml;\n if (!templateList || templateList.length === 0) {\n var message = editor.translate('No templates defined.');\n editor.notificationManager.open({\n text: message,\n type: 'info'\n });\n return;\n }\n global$1.each(templateList, function (template) {\n values.push({\n selected: !values.length,\n text: template.title,\n value: {\n url: template.url,\n content: template.content,\n description: template.description\n }\n });\n });\n var onSelectTemplate = function (e) {\n var value = e.control.value();\n if (value.url) {\n global$2.send({\n url: value.url,\n success: function (html) {\n templateHtml = html;\n insertIframeHtml(editor, win, templateHtml);\n }\n });\n } else {\n templateHtml = value.content;\n insertIframeHtml(editor, win, templateHtml);\n }\n win.find('#description')[0].text(e.control.value().description);\n };\n win = editor.windowManager.open({\n title: 'Insert template',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: 15,\n spacing: 10,\n items: [\n {\n type: 'form',\n flex: 0,\n padding: 0,\n items: [{\n type: 'container',\n label: 'Templates',\n items: {\n type: 'listbox',\n label: 'Templates',\n name: 'template',\n values: values,\n onselect: onSelectTemplate\n }\n }]\n },\n {\n type: 'label',\n name: 'description',\n label: 'Description',\n text: '\\xA0'\n },\n {\n type: 'iframe',\n flex: 1,\n border: 1\n }\n ],\n onsubmit: function () {\n Templates.insertTemplate(editor, false, templateHtml);\n },\n minWidth: Settings.getDialogWidth(editor),\n minHeight: Settings.getDialogHeight(editor)\n });\n win.find('listbox')[0].fire('select');\n };\n var Dialog = { open: open };\n\n var showDialog = function (editor) {\n return function (templates) {\n Dialog.open(editor, templates);\n };\n };\n var register$1 = function (editor) {\n editor.addButton('template', {\n title: 'Insert template',\n onclick: Templates.createTemplateList(editor.settings, showDialog(editor))\n });\n editor.addMenuItem('template', {\n text: 'Template',\n onclick: Templates.createTemplateList(editor.settings, showDialog(editor)),\n icon: 'template',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('template', function (editor) {\n Buttons.register(editor);\n Commands.register(editor);\n FilterContent.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","(function () {\nvar anchor = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var isValidId = function (id) {\n return /^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(id);\n };\n var getId = function (editor) {\n var selectedNode = editor.selection.getNode();\n var isAnchor = selectedNode.tagName === 'A' && editor.dom.getAttrib(selectedNode, 'href') === '';\n return isAnchor ? selectedNode.id || selectedNode.name : '';\n };\n var insert = function (editor, id) {\n var selectedNode = editor.selection.getNode();\n var isAnchor = selectedNode.tagName === 'A' && editor.dom.getAttrib(selectedNode, 'href') === '';\n if (isAnchor) {\n selectedNode.removeAttribute('name');\n selectedNode.id = id;\n editor.undoManager.add();\n } else {\n editor.focus();\n editor.selection.collapse(true);\n editor.execCommand('mceInsertContent', false, editor.dom.createHTML('a', { id: id }));\n }\n };\n var Anchor = {\n isValidId: isValidId,\n getId: getId,\n insert: insert\n };\n\n var insertAnchor = function (editor, newId) {\n if (!Anchor.isValidId(newId)) {\n editor.windowManager.alert('Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.');\n return true;\n } else {\n Anchor.insert(editor, newId);\n return false;\n }\n };\n var open = function (editor) {\n var currentId = Anchor.getId(editor);\n editor.windowManager.open({\n title: 'Anchor',\n body: {\n type: 'textbox',\n name: 'id',\n size: 40,\n label: 'Id',\n value: currentId\n },\n onsubmit: function (e) {\n var newId = e.data.id;\n if (insertAnchor(editor, newId)) {\n e.preventDefault();\n }\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceAnchor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var isAnchorNode = function (node) {\n return !node.attr('href') && (node.attr('id') || node.attr('name')) && !node.firstChild;\n };\n var setContentEditable = function (state) {\n return function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (isAnchorNode(nodes[i])) {\n nodes[i].attr('contenteditable', state);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('PreInit', function () {\n editor.parser.addNodeFilter('a', setContentEditable('false'));\n editor.serializer.addNodeFilter('a', setContentEditable(null));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('anchor', {\n icon: 'anchor',\n tooltip: 'Anchor',\n cmd: 'mceAnchor',\n stateSelector: 'a:not([href])'\n });\n editor.addMenuItem('anchor', {\n icon: 'anchor',\n text: 'Anchor',\n context: 'insert',\n cmd: 'mceAnchor'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('anchor', function (editor) {\n FilterContent.setup(editor);\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar charmap = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireInsertCustomChar = function (editor, chr) {\n return editor.fire('insertCustomChar', { chr: chr });\n };\n var Events = { fireInsertCustomChar: fireInsertCustomChar };\n\n var insertChar = function (editor, chr) {\n var evtChr = Events.fireInsertCustomChar(editor, chr).chr;\n editor.execCommand('mceInsertContent', false, evtChr);\n };\n var Actions = { insertChar: insertChar };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getCharMap = function (editor) {\n return editor.settings.charmap;\n };\n var getCharMapAppend = function (editor) {\n return editor.settings.charmap_append;\n };\n var Settings = {\n getCharMap: getCharMap,\n getCharMapAppend: getCharMapAppend\n };\n\n var isArray = global$1.isArray;\n var getDefaultCharMap = function () {\n return [\n [\n '160',\n 'no-break space'\n ],\n [\n '173',\n 'soft hyphen'\n ],\n [\n '34',\n 'quotation mark'\n ],\n [\n '162',\n 'cent sign'\n ],\n [\n '8364',\n 'euro sign'\n ],\n [\n '163',\n 'pound sign'\n ],\n [\n '165',\n 'yen sign'\n ],\n [\n '169',\n 'copyright sign'\n ],\n [\n '174',\n 'registered sign'\n ],\n [\n '8482',\n 'trade mark sign'\n ],\n [\n '8240',\n 'per mille sign'\n ],\n [\n '181',\n 'micro sign'\n ],\n [\n '183',\n 'middle dot'\n ],\n [\n '8226',\n 'bullet'\n ],\n [\n '8230',\n 'three dot leader'\n ],\n [\n '8242',\n 'minutes / feet'\n ],\n [\n '8243',\n 'seconds / inches'\n ],\n [\n '167',\n 'section sign'\n ],\n [\n '182',\n 'paragraph sign'\n ],\n [\n '223',\n 'sharp s / ess-zed'\n ],\n [\n '8249',\n 'single left-pointing angle quotation mark'\n ],\n [\n '8250',\n 'single right-pointing angle quotation mark'\n ],\n [\n '171',\n 'left pointing guillemet'\n ],\n [\n '187',\n 'right pointing guillemet'\n ],\n [\n '8216',\n 'left single quotation mark'\n ],\n [\n '8217',\n 'right single quotation mark'\n ],\n [\n '8220',\n 'left double quotation mark'\n ],\n [\n '8221',\n 'right double quotation mark'\n ],\n [\n '8218',\n 'single low-9 quotation mark'\n ],\n [\n '8222',\n 'double low-9 quotation mark'\n ],\n [\n '60',\n 'less-than sign'\n ],\n [\n '62',\n 'greater-than sign'\n ],\n [\n '8804',\n 'less-than or equal to'\n ],\n [\n '8805',\n 'greater-than or equal to'\n ],\n [\n '8211',\n 'en dash'\n ],\n [\n '8212',\n 'em dash'\n ],\n [\n '175',\n 'macron'\n ],\n [\n '8254',\n 'overline'\n ],\n [\n '164',\n 'currency sign'\n ],\n [\n '166',\n 'broken bar'\n ],\n [\n '168',\n 'diaeresis'\n ],\n [\n '161',\n 'inverted exclamation mark'\n ],\n [\n '191',\n 'turned question mark'\n ],\n [\n '710',\n 'circumflex accent'\n ],\n [\n '732',\n 'small tilde'\n ],\n [\n '176',\n 'degree sign'\n ],\n [\n '8722',\n 'minus sign'\n ],\n [\n '177',\n 'plus-minus sign'\n ],\n [\n '247',\n 'division sign'\n ],\n [\n '8260',\n 'fraction slash'\n ],\n [\n '215',\n 'multiplication sign'\n ],\n [\n '185',\n 'superscript one'\n ],\n [\n '178',\n 'superscript two'\n ],\n [\n '179',\n 'superscript three'\n ],\n [\n '188',\n 'fraction one quarter'\n ],\n [\n '189',\n 'fraction one half'\n ],\n [\n '190',\n 'fraction three quarters'\n ],\n [\n '402',\n 'function / florin'\n ],\n [\n '8747',\n 'integral'\n ],\n [\n '8721',\n 'n-ary sumation'\n ],\n [\n '8734',\n 'infinity'\n ],\n [\n '8730',\n 'square root'\n ],\n [\n '8764',\n 'similar to'\n ],\n [\n '8773',\n 'approximately equal to'\n ],\n [\n '8776',\n 'almost equal to'\n ],\n [\n '8800',\n 'not equal to'\n ],\n [\n '8801',\n 'identical to'\n ],\n [\n '8712',\n 'element of'\n ],\n [\n '8713',\n 'not an element of'\n ],\n [\n '8715',\n 'contains as member'\n ],\n [\n '8719',\n 'n-ary product'\n ],\n [\n '8743',\n 'logical and'\n ],\n [\n '8744',\n 'logical or'\n ],\n [\n '172',\n 'not sign'\n ],\n [\n '8745',\n 'intersection'\n ],\n [\n '8746',\n 'union'\n ],\n [\n '8706',\n 'partial differential'\n ],\n [\n '8704',\n 'for all'\n ],\n [\n '8707',\n 'there exists'\n ],\n [\n '8709',\n 'diameter'\n ],\n [\n '8711',\n 'backward difference'\n ],\n [\n '8727',\n 'asterisk operator'\n ],\n [\n '8733',\n 'proportional to'\n ],\n [\n '8736',\n 'angle'\n ],\n [\n '180',\n 'acute accent'\n ],\n [\n '184',\n 'cedilla'\n ],\n [\n '170',\n 'feminine ordinal indicator'\n ],\n [\n '186',\n 'masculine ordinal indicator'\n ],\n [\n '8224',\n 'dagger'\n ],\n [\n '8225',\n 'double dagger'\n ],\n [\n '192',\n 'A - grave'\n ],\n [\n '193',\n 'A - acute'\n ],\n [\n '194',\n 'A - circumflex'\n ],\n [\n '195',\n 'A - tilde'\n ],\n [\n '196',\n 'A - diaeresis'\n ],\n [\n '197',\n 'A - ring above'\n ],\n [\n '256',\n 'A - macron'\n ],\n [\n '198',\n 'ligature AE'\n ],\n [\n '199',\n 'C - cedilla'\n ],\n [\n '200',\n 'E - grave'\n ],\n [\n '201',\n 'E - acute'\n ],\n [\n '202',\n 'E - circumflex'\n ],\n [\n '203',\n 'E - diaeresis'\n ],\n [\n '274',\n 'E - macron'\n ],\n [\n '204',\n 'I - grave'\n ],\n [\n '205',\n 'I - acute'\n ],\n [\n '206',\n 'I - circumflex'\n ],\n [\n '207',\n 'I - diaeresis'\n ],\n [\n '298',\n 'I - macron'\n ],\n [\n '208',\n 'ETH'\n ],\n [\n '209',\n 'N - tilde'\n ],\n [\n '210',\n 'O - grave'\n ],\n [\n '211',\n 'O - acute'\n ],\n [\n '212',\n 'O - circumflex'\n ],\n [\n '213',\n 'O - tilde'\n ],\n [\n '214',\n 'O - diaeresis'\n ],\n [\n '216',\n 'O - slash'\n ],\n [\n '332',\n 'O - macron'\n ],\n [\n '338',\n 'ligature OE'\n ],\n [\n '352',\n 'S - caron'\n ],\n [\n '217',\n 'U - grave'\n ],\n [\n '218',\n 'U - acute'\n ],\n [\n '219',\n 'U - circumflex'\n ],\n [\n '220',\n 'U - diaeresis'\n ],\n [\n '362',\n 'U - macron'\n ],\n [\n '221',\n 'Y - acute'\n ],\n [\n '376',\n 'Y - diaeresis'\n ],\n [\n '562',\n 'Y - macron'\n ],\n [\n '222',\n 'THORN'\n ],\n [\n '224',\n 'a - grave'\n ],\n [\n '225',\n 'a - acute'\n ],\n [\n '226',\n 'a - circumflex'\n ],\n [\n '227',\n 'a - tilde'\n ],\n [\n '228',\n 'a - diaeresis'\n ],\n [\n '229',\n 'a - ring above'\n ],\n [\n '257',\n 'a - macron'\n ],\n [\n '230',\n 'ligature ae'\n ],\n [\n '231',\n 'c - cedilla'\n ],\n [\n '232',\n 'e - grave'\n ],\n [\n '233',\n 'e - acute'\n ],\n [\n '234',\n 'e - circumflex'\n ],\n [\n '235',\n 'e - diaeresis'\n ],\n [\n '275',\n 'e - macron'\n ],\n [\n '236',\n 'i - grave'\n ],\n [\n '237',\n 'i - acute'\n ],\n [\n '238',\n 'i - circumflex'\n ],\n [\n '239',\n 'i - diaeresis'\n ],\n [\n '299',\n 'i - macron'\n ],\n [\n '240',\n 'eth'\n ],\n [\n '241',\n 'n - tilde'\n ],\n [\n '242',\n 'o - grave'\n ],\n [\n '243',\n 'o - acute'\n ],\n [\n '244',\n 'o - circumflex'\n ],\n [\n '245',\n 'o - tilde'\n ],\n [\n '246',\n 'o - diaeresis'\n ],\n [\n '248',\n 'o slash'\n ],\n [\n '333',\n 'o macron'\n ],\n [\n '339',\n 'ligature oe'\n ],\n [\n '353',\n 's - caron'\n ],\n [\n '249',\n 'u - grave'\n ],\n [\n '250',\n 'u - acute'\n ],\n [\n '251',\n 'u - circumflex'\n ],\n [\n '252',\n 'u - diaeresis'\n ],\n [\n '363',\n 'u - macron'\n ],\n [\n '253',\n 'y - acute'\n ],\n [\n '254',\n 'thorn'\n ],\n [\n '255',\n 'y - diaeresis'\n ],\n [\n '563',\n 'y - macron'\n ],\n [\n '913',\n 'Alpha'\n ],\n [\n '914',\n 'Beta'\n ],\n [\n '915',\n 'Gamma'\n ],\n [\n '916',\n 'Delta'\n ],\n [\n '917',\n 'Epsilon'\n ],\n [\n '918',\n 'Zeta'\n ],\n [\n '919',\n 'Eta'\n ],\n [\n '920',\n 'Theta'\n ],\n [\n '921',\n 'Iota'\n ],\n [\n '922',\n 'Kappa'\n ],\n [\n '923',\n 'Lambda'\n ],\n [\n '924',\n 'Mu'\n ],\n [\n '925',\n 'Nu'\n ],\n [\n '926',\n 'Xi'\n ],\n [\n '927',\n 'Omicron'\n ],\n [\n '928',\n 'Pi'\n ],\n [\n '929',\n 'Rho'\n ],\n [\n '931',\n 'Sigma'\n ],\n [\n '932',\n 'Tau'\n ],\n [\n '933',\n 'Upsilon'\n ],\n [\n '934',\n 'Phi'\n ],\n [\n '935',\n 'Chi'\n ],\n [\n '936',\n 'Psi'\n ],\n [\n '937',\n 'Omega'\n ],\n [\n '945',\n 'alpha'\n ],\n [\n '946',\n 'beta'\n ],\n [\n '947',\n 'gamma'\n ],\n [\n '948',\n 'delta'\n ],\n [\n '949',\n 'epsilon'\n ],\n [\n '950',\n 'zeta'\n ],\n [\n '951',\n 'eta'\n ],\n [\n '952',\n 'theta'\n ],\n [\n '953',\n 'iota'\n ],\n [\n '954',\n 'kappa'\n ],\n [\n '955',\n 'lambda'\n ],\n [\n '956',\n 'mu'\n ],\n [\n '957',\n 'nu'\n ],\n [\n '958',\n 'xi'\n ],\n [\n '959',\n 'omicron'\n ],\n [\n '960',\n 'pi'\n ],\n [\n '961',\n 'rho'\n ],\n [\n '962',\n 'final sigma'\n ],\n [\n '963',\n 'sigma'\n ],\n [\n '964',\n 'tau'\n ],\n [\n '965',\n 'upsilon'\n ],\n [\n '966',\n 'phi'\n ],\n [\n '967',\n 'chi'\n ],\n [\n '968',\n 'psi'\n ],\n [\n '969',\n 'omega'\n ],\n [\n '8501',\n 'alef symbol'\n ],\n [\n '982',\n 'pi symbol'\n ],\n [\n '8476',\n 'real part symbol'\n ],\n [\n '978',\n 'upsilon - hook symbol'\n ],\n [\n '8472',\n 'Weierstrass p'\n ],\n [\n '8465',\n 'imaginary part'\n ],\n [\n '8592',\n 'leftwards arrow'\n ],\n [\n '8593',\n 'upwards arrow'\n ],\n [\n '8594',\n 'rightwards arrow'\n ],\n [\n '8595',\n 'downwards arrow'\n ],\n [\n '8596',\n 'left right arrow'\n ],\n [\n '8629',\n 'carriage return'\n ],\n [\n '8656',\n 'leftwards double arrow'\n ],\n [\n '8657',\n 'upwards double arrow'\n ],\n [\n '8658',\n 'rightwards double arrow'\n ],\n [\n '8659',\n 'downwards double arrow'\n ],\n [\n '8660',\n 'left right double arrow'\n ],\n [\n '8756',\n 'therefore'\n ],\n [\n '8834',\n 'subset of'\n ],\n [\n '8835',\n 'superset of'\n ],\n [\n '8836',\n 'not a subset of'\n ],\n [\n '8838',\n 'subset of or equal to'\n ],\n [\n '8839',\n 'superset of or equal to'\n ],\n [\n '8853',\n 'circled plus'\n ],\n [\n '8855',\n 'circled times'\n ],\n [\n '8869',\n 'perpendicular'\n ],\n [\n '8901',\n 'dot operator'\n ],\n [\n '8968',\n 'left ceiling'\n ],\n [\n '8969',\n 'right ceiling'\n ],\n [\n '8970',\n 'left floor'\n ],\n [\n '8971',\n 'right floor'\n ],\n [\n '9001',\n 'left-pointing angle bracket'\n ],\n [\n '9002',\n 'right-pointing angle bracket'\n ],\n [\n '9674',\n 'lozenge'\n ],\n [\n '9824',\n 'black spade suit'\n ],\n [\n '9827',\n 'black club suit'\n ],\n [\n '9829',\n 'black heart suit'\n ],\n [\n '9830',\n 'black diamond suit'\n ],\n [\n '8194',\n 'en space'\n ],\n [\n '8195',\n 'em space'\n ],\n [\n '8201',\n 'thin space'\n ],\n [\n '8204',\n 'zero width non-joiner'\n ],\n [\n '8205',\n 'zero width joiner'\n ],\n [\n '8206',\n 'left-to-right mark'\n ],\n [\n '8207',\n 'right-to-left mark'\n ]\n ];\n };\n var charmapFilter = function (charmap) {\n return global$1.grep(charmap, function (item) {\n return isArray(item) && item.length === 2;\n });\n };\n var getCharsFromSetting = function (settingValue) {\n if (isArray(settingValue)) {\n return [].concat(charmapFilter(settingValue));\n }\n if (typeof settingValue === 'function') {\n return settingValue();\n }\n return [];\n };\n var extendCharMap = function (editor, charmap) {\n var userCharMap = Settings.getCharMap(editor);\n if (userCharMap) {\n charmap = getCharsFromSetting(userCharMap);\n }\n var userCharMapAppend = Settings.getCharMapAppend(editor);\n if (userCharMapAppend) {\n return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));\n }\n return charmap;\n };\n var getCharMap$1 = function (editor) {\n return extendCharMap(editor, getDefaultCharMap());\n };\n var CharMap = { getCharMap: getCharMap$1 };\n\n var get = function (editor) {\n var getCharMap = function () {\n return CharMap.getCharMap(editor);\n };\n var insertChar = function (chr) {\n Actions.insertChar(editor, chr);\n };\n return {\n getCharMap: getCharMap,\n insertChar: insertChar\n };\n };\n var Api = { get: get };\n\n var getHtml = function (charmap) {\n var gridHtml, x, y;\n var width = Math.min(charmap.length, 25);\n var height = Math.ceil(charmap.length / width);\n gridHtml = '';\n for (y = 0; y < height; y++) {\n gridHtml += '';\n for (x = 0; x < width; x++) {\n var index = y * width + x;\n if (index < charmap.length) {\n var chr = charmap[index];\n var charCode = parseInt(chr[0], 10);\n var chrText = chr ? String.fromCharCode(charCode) : ' ';\n gridHtml += '';\n } else {\n gridHtml += '';\n }\n gridHtml += '
' + '
' + chrText + '
' + '
';\n }\n }\n gridHtml += '
';\n return gridHtml;\n };\n var GridHtml = { getHtml: getHtml };\n\n var getParentTd = function (elm) {\n while (elm) {\n if (elm.nodeName === 'TD') {\n return elm;\n }\n elm = elm.parentNode;\n }\n };\n var open = function (editor) {\n var win;\n var charMapPanel = {\n type: 'container',\n html: GridHtml.getHtml(CharMap.getCharMap(editor)),\n onclick: function (e) {\n var target = e.target;\n if (/^(TD|DIV)$/.test(target.nodeName)) {\n var charDiv = getParentTd(target).firstChild;\n if (charDiv && charDiv.hasAttribute('data-chr')) {\n var charCodeString = charDiv.getAttribute('data-chr');\n var charCode = parseInt(charCodeString, 10);\n if (!isNaN(charCode)) {\n Actions.insertChar(editor, String.fromCharCode(charCode));\n }\n if (!e.ctrlKey) {\n win.close();\n }\n }\n }\n },\n onmouseover: function (e) {\n var td = getParentTd(e.target);\n if (td && td.firstChild) {\n win.find('#preview').text(td.firstChild.firstChild.data);\n win.find('#previewTitle').text(td.title);\n } else {\n win.find('#preview').text(' ');\n win.find('#previewTitle').text(' ');\n }\n }\n };\n win = editor.windowManager.open({\n title: 'Special character',\n spacing: 10,\n padding: 10,\n items: [\n charMapPanel,\n {\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'center',\n spacing: 5,\n minWidth: 160,\n minHeight: 160,\n items: [\n {\n type: 'label',\n name: 'preview',\n text: ' ',\n style: 'font-size: 40px; text-align: center',\n border: 1,\n minWidth: 140,\n minHeight: 80\n },\n {\n type: 'spacer',\n minHeight: 20\n },\n {\n type: 'label',\n name: 'previewTitle',\n text: ' ',\n style: 'white-space: pre-wrap;',\n border: 1,\n minWidth: 140\n }\n ]\n }\n ],\n buttons: [{\n text: 'Close',\n onclick: function () {\n win.close();\n }\n }]\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceShowCharmap', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('charmap', {\n icon: 'charmap',\n tooltip: 'Special character',\n cmd: 'mceShowCharmap'\n });\n editor.addMenuItem('charmap', {\n icon: 'charmap',\n text: 'Special character',\n cmd: 'mceShowCharmap',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('charmap', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar getGlobal = function () { return (typeof window !== 'undefined' ? window : global); };\nvar getTinymce = function () {\n var global = getGlobal();\n return global && global.tinymce ? global.tinymce : null;\n};\nexport { getTinymce };\n","(function () {\nvar lists = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName);\n };\n var isOlUlNode = function (node) {\n return node && /^(OL|UL)$/.test(node.nodeName);\n };\n var isListItemNode = function (node) {\n return node && /^(LI|DT|DD)$/.test(node.nodeName);\n };\n var isDlItemNode = function (node) {\n return node && /^(DT|DD)$/.test(node.nodeName);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isBr = function (node) {\n return node && node.nodeName === 'BR';\n };\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isLastChild = function (node) {\n return node.parentNode.lastChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {\n return true;\n }\n return false;\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n var NodeType = {\n isTextNode: isTextNode,\n isListNode: isListNode,\n isOlUlNode: isOlUlNode,\n isDlItemNode: isDlItemNode,\n isListItemNode: isListItemNode,\n isTableCellNode: isTableCellNode,\n isBr: isBr,\n isFirstChild: isFirstChild,\n isLastChild: isLastChild,\n isTextBlock: isTextBlock,\n isBlock: isBlock,\n isBogusBr: isBogusBr,\n isEmpty: isEmpty,\n isChildOfBody: isChildOfBody\n };\n\n var getNormalizedPoint = function (container, offset) {\n if (NodeType.isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.getNode(container, offset);\n if (NodeType.isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n var Range = {\n getNormalizedPoint: getNormalizedPoint,\n normalizeRange: normalizeRange\n };\n\n var DOM = global$6.DOM;\n var createBookmark = function (rng) {\n var bookmark = {};\n var setupEndPoint = function (start) {\n var offsetNode, container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n var resolveBookmark = function (bookmark) {\n function restoreEndPoint(start) {\n var container, offset, node;\n var nodeIndex = function (container) {\n var node = container.parentNode.firstChild, idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (container.nodeType === 1) {\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM.remove(node);\n if (!container.hasChildNodes() && DOM.isBlock(container)) {\n container.appendChild(DOM.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n }\n restoreEndPoint(true);\n restoreEndPoint();\n var rng = DOM.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return Range.normalizeRange(rng);\n };\n var Bookmark = {\n createBookmark: createBookmark,\n resolveBookmark: resolveBookmark\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var htmlElement = function (scope) {\n return Global$1.getOrDie('HTMLElement', scope);\n };\n var isPrototypeOf = function (x) {\n var scope = resolve('ownerDocument.defaultView', x);\n return htmlElement(scope).prototype.isPrototypeOf(x);\n };\n var HTMLElement = { isPrototypeOf: isPrototypeOf };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var getParentList = function (editor) {\n var selectionStart = editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n return NodeType.isListNode(elm);\n });\n };\n var getSelectedSubLists = function (editor) {\n var parentList = getParentList(editor);\n var selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return global$5.grep(selectedBlocks, function (elm) {\n return NodeType.isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$5.map(elms, function (elm) {\n var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return global$7.unique(listItemsElms);\n };\n var getSelectedListItems = function (editor) {\n var selectedBlocks = editor.selection.getSelectedBlocks();\n return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {\n return NodeType.isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), NodeType.isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n return root;\n };\n var findLastParentListNode = function (editor, elm) {\n var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n return last(parentLists);\n };\n var getSelectedLists = function (editor) {\n var firstList = findLastParentListNode(editor, editor.selection.getStart());\n var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n var getSelectedListRoots = function (editor) {\n var selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n var getUniqueListRoots = function (editor, lists) {\n var listRoots = map(lists, function (list) {\n return findLastParentListNode(editor, list).getOr(list);\n });\n return global$7.unique(listRoots);\n };\n var isList = function (editor) {\n var list = getParentList(editor);\n return HTMLElement.isPrototypeOf(list);\n };\n var Selection = {\n isList: isList,\n getParentList: getParentList,\n getSelectedSubLists: getSelectedSubLists,\n getSelectedListItems: getSelectedListItems,\n getClosestListRootElm: getClosestListRootElm,\n getSelectedDlItems: getSelectedDlItems,\n getSelectedListRoots: getSelectedListRoots\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var remove = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var set = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var mutate = function (original, tag) {\n var nu = shallowAs(original, tag);\n before(original, nu);\n var children$1 = children(original);\n append$1(nu, children$1);\n remove(original);\n return nu;\n };\n\n var joinSegment = function (parent, child) {\n append(parent.item, child.list);\n };\n var joinSegments = function (segments) {\n for (var i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n var appendSegments = function (head$1, tail) {\n lift2(last(head$1), head(tail), joinSegment);\n };\n var createSegment = function (scope, listType) {\n var segment = {\n list: Element.fromTag(listType, scope),\n item: Element.fromTag('li', scope)\n };\n append(segment.list, segment.item);\n return segment;\n };\n var createSegments = function (scope, entry, size) {\n var segments = [];\n for (var i = 0; i < size; i++) {\n segments.push(createSegment(scope, entry.listType));\n }\n return segments;\n };\n var populateSegments = function (segments, entry) {\n for (var i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(function (segment) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n append$1(segment.item, entry.content);\n });\n };\n var normalizeSegment = function (segment, entry) {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n var createItem = function (scope, attr, content) {\n var item = Element.fromTag('li', scope);\n setAll(item, attr);\n append$1(item, content);\n return item;\n };\n var appendItem = function (segment, item) {\n append(segment.list, item);\n segment.item = item;\n };\n var writeShallow = function (scope, cast, entry) {\n var newCast = cast.slice(0, entry.depth);\n last(newCast).each(function (segment) {\n var item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n });\n return newCast;\n };\n var writeDeep = function (scope, cast, entry) {\n var segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n var composeList = function (scope, entries) {\n var cast = foldl(entries, function (cast, entry) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n }, []);\n return head(cast).map(function (segment) {\n return segment.list;\n });\n };\n\n var isList$1 = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList$1).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList$1).getOr(false);\n };\n\n var isIndented = function (entry) {\n return entry.depth > 0;\n };\n var isSelected = function (entry) {\n return entry.isSelected;\n };\n var cloneItemContent = function (li) {\n var children$1 = children(li);\n var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n var createEntry = function (li, depth, isSelected) {\n return parent(li).filter(isElement).map(function (list) {\n return {\n depth: depth,\n isSelected: isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone(li),\n listAttributes: clone(list),\n listType: name(list)\n };\n });\n };\n\n var indentEntry = function (indentation, entry) {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = merge({}, source.listAttributes);\n };\n var previousSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n for (var i = start - 1; i >= 0; i--) {\n if (entries[i].depth === depth) {\n return Option.some(entries[i]);\n }\n if (entries[i].depth < depth) {\n break;\n }\n }\n return Option.none();\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n previousSiblingEntry(entries, i).each(function (matchingEntry) {\n cloneListProperties(entry, matchingEntry);\n });\n });\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList$1).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList$1).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList$1(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var node, textBlock, blockName, hasContentNode;\n if (editor.settings.forced_root_block) {\n blockName = editor.settings.forced_root_block;\n }\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === editor.settings.forced_root_block) {\n dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);\n }\n if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (NodeType.isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!editor.settings.forced_root_block) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var outdentedComposer = function (editor, entries) {\n return map(entries, function (entry) {\n var content = fromElements(entry.content);\n return Element.fromDom(createTextBlock(editor, content.dom()));\n });\n };\n var indentedComposer = function (editor, entries) {\n normalizeEntries(entries);\n return composeList(editor.contentDocument, entries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).map(isIndented).getOr(false);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each(filter(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {\n return {\n start: start,\n end: end\n };\n });\n };\n var listsIndentation = function (editor, lists, indentation) {\n var entrySets = parseLists(lists, getItemSelection(editor));\n each(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));\n remove(entrySet.sourceList);\n });\n };\n\n var DOM$1 = global$6.DOM;\n var splitList = function (editor, ul, li) {\n var tmpRng, fragment, bookmarks, node, newBlock;\n var removeAndKeepBookmarks = function (targetNode) {\n global$5.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM$1.remove(targetNode);\n };\n bookmarks = DOM$1.select('span[data-mce-type=\"bookmark\"]', ul);\n newBlock = createTextBlock(editor, li);\n tmpRng = DOM$1.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n fragment = tmpRng.extractContents();\n for (node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$1.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$1.insertAfter(fragment, ul);\n }\n DOM$1.insertAfter(newBlock, ul);\n if (NodeType.isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM$1.remove(li);\n if (NodeType.isEmpty(editor.dom, ul)) {\n DOM$1.remove(ul);\n }\n };\n var SplitList = { splitList: splitList };\n\n var outdentDlItem = function (editor, item) {\n if (is$1(item, 'dd')) {\n mutate(item, 'dt');\n } else if (is$1(item, 'dt')) {\n parent(item).each(function (dl) {\n return SplitList.splitList(editor, dl.dom(), item.dom());\n });\n }\n };\n var indentDlItem = function (item) {\n if (is$1(item, 'dt')) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each(dlItems, indentDlItem);\n } else {\n each(dlItems, function (item) {\n return outdentDlItem(editor, item);\n });\n }\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);\n var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);\n var isHandled = false;\n if (lists.length || dlItems.length) {\n var bookmark = editor.selection.getBookmark();\n listsIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n var indentListSelection = function (editor) {\n return selectionIndentation(editor, 'Indent');\n };\n var outdentListSelection = function (editor) {\n return selectionIndentation(editor, 'Outdent');\n };\n var flattenListSelection = function (editor) {\n return selectionIndentation(editor, 'Flatten');\n };\n\n var updateListStyle = function (dom, el, detail) {\n var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n var setAttribs = function (elm, attrs) {\n global$5.each(attrs, function (value, key) {\n elm.setAttribute(key, value);\n });\n };\n var updateListAttrs = function (dom, el, detail) {\n setAttribs(el, detail['list-attributes']);\n global$5.each(dom.select('li', el), function (li) {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n var updateListWithDetails = function (dom, el, detail) {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n var removeStyles = function (dom, element, styles) {\n global$5.each(styles, function (style) {\n var _a;\n return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n });\n };\n var getEndPointNode = function (editor, rng, start, root) {\n var container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && NodeType.isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n if (NodeType.isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n return container;\n }\n container = container.parentNode;\n }\n return container;\n };\n var getSelectedTextBlocks = function (editor, rng, root) {\n var textBlocks = [], dom = editor.dom;\n var startNode = getEndPointNode(editor, rng, true, root);\n var endNode = getEndPointNode(editor, rng, false, root);\n var block;\n var siblings = [];\n for (var node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$5.each(siblings, function (node) {\n if (NodeType.isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || NodeType.isBr(node)) {\n if (NodeType.isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n var nextSibling = node.nextSibling;\n if (global$4.isBookmarkNode(node)) {\n if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng(true);\n var bookmark;\n var listItemName = 'LI';\n var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));\n var dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n bookmark = Bookmark.createBookmark(rng);\n global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n var listBlock, sibling;\n sibling = block.previousSibling;\n if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n block.parentNode.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList = function (dom, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = dom.rename(list, listName);\n updateListWithDetails(dom, newList, detail);\n } else {\n updateListWithDetails(dom, list, detail);\n }\n };\n var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n global$5.each([parentList].concat(lists), function (elm) {\n updateList(editor.dom, elm, listName, detail);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var hasListStyleDetail = function (detail) {\n return 'list-style-type' in detail;\n };\n var toggleSingleList = function (editor, parentList, listName, detail) {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n } else {\n applyList(editor, listName, detail);\n }\n };\n var toggleList = function (editor, listName, detail) {\n var parentList = Selection.getParentList(editor);\n var selectedSubLists = Selection.getSelectedSubLists(editor);\n detail = detail ? detail : {};\n if (parentList && selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n var ToggleList = {\n toggleList: toggleList,\n mergeWithAdjacentLists: mergeWithAdjacentLists\n };\n\n var DOM$2 = global$6.DOM;\n var normalizeList = function (dom, ul) {\n var sibling;\n var parentNode = ul.parentNode;\n if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n if (NodeType.isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (NodeType.isListNode(parentNode)) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n normalizeList(dom, ul);\n });\n };\n var NormalizeLists = {\n normalizeList: normalizeList,\n normalizeLists: normalizeLists\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n var nonEmptyBlocks, walker;\n if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n walker = new global$2(node, root);\n if (isForward) {\n if (NodeType.isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n while (node = walker[isForward ? 'next' : 'prev2']()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (node.nodeType === 3 && node.data.length > 0) {\n return node;\n }\n }\n };\n var hasOnlyOneBlockChild = function (dom, elm) {\n var childNodes = elm.childNodes;\n return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n var unwrapSingleBlockChild = function (dom, elm) {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n var moveChildren = function (dom, fromElm, toElm) {\n var node, targetElm;\n targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!NodeType.isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var node, listNode;\n var ul = fromElm.parentNode;\n if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {\n return;\n }\n if (NodeType.isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (NodeType.isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n node = toElm.lastChild;\n if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (NodeType.isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = Bookmark.resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n var ul, rng, otherLi;\n if (li) {\n ul = li.parentNode;\n if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {\n return true;\n }\n rng = Range.normalizeRange(selection.getRng(true));\n otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi && otherLi !== li) {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n return true;\n } else if (!otherLi) {\n if (!isForward) {\n flattenListSelection(editor);\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = Range.normalizeRange(editor.selection.getRng(true));\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_1) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);\n editor.selection.select(otherLi_1, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || Selection.getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n NormalizeLists.normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$3.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$3.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n var Delete = {\n setup: setup,\n backspaceDelete: backspaceDelete\n };\n\n var get = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n Delete.backspaceDelete(editor, isForward);\n }\n };\n };\n var Api = { get: get };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n ToggleList.toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n var Commands = { register: register };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var Settings = { shouldIndentOnTab: shouldIndentOnTab };\n\n var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(function () {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n var setup$1 = function (editor) {\n if (Settings.shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n Delete.setup(editor);\n };\n var Keyboard = { setup: setup$1 };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var listState = function (editor, listName) {\n return function (e) {\n var ctrl = e.control;\n editor.on('NodeChange', function (e) {\n var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$5.grep(parents, NodeType.isListNode);\n ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n });\n };\n };\n var register$1 = function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (!hasPlugin(editor, 'advlist')) {\n editor.addButton('numlist', {\n active: false,\n title: 'Numbered list',\n cmd: 'InsertOrderedList',\n onPostRender: listState(editor, 'OL')\n });\n editor.addButton('bullist', {\n active: false,\n title: 'Bullet list',\n cmd: 'InsertUnorderedList',\n onPostRender: listState(editor, 'UL')\n });\n }\n editor.addButton('indent', {\n icon: 'indent',\n title: 'Increase indent',\n cmd: 'Indent'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('lists', function (editor) {\n Keyboard.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(function () {\nvar autolink = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var getAutoLinkPattern = function (editor) {\n return editor.getParam('autolink_pattern', /^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@)(.+)$/i);\n };\n var getDefaultLinkTarget = function (editor) {\n return editor.getParam('default_link_target', '');\n };\n var Settings = {\n getAutoLinkPattern: getAutoLinkPattern,\n getDefaultLinkTarget: getDefaultLinkTarget\n };\n\n var rangeEqualsDelimiterOrSpace = function (rangeString, delimiter) {\n return rangeString === delimiter || rangeString === ' ' || rangeString.charCodeAt(0) === 160;\n };\n var handleEclipse = function (editor) {\n parseCurrentLine(editor, -1, '(');\n };\n var handleSpacebar = function (editor) {\n parseCurrentLine(editor, 0, '');\n };\n var handleEnter = function (editor) {\n parseCurrentLine(editor, -1, '');\n };\n var scopeIndex = function (container, index) {\n if (index < 0) {\n index = 0;\n }\n if (container.nodeType === 3) {\n var len = container.data.length;\n if (index > len) {\n index = len;\n }\n }\n return index;\n };\n var setStart = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setStart(container, scopeIndex(container, offset));\n } else {\n rng.setStartBefore(container);\n }\n };\n var setEnd = function (rng, container, offset) {\n if (container.nodeType !== 1 || container.hasChildNodes()) {\n rng.setEnd(container, scopeIndex(container, offset));\n } else {\n rng.setEndAfter(container);\n }\n };\n var parseCurrentLine = function (editor, endOffset, delimiter) {\n var rng, end, start, endContainer, bookmark, text, matches, prev, len, rngText;\n var autoLinkPattern = Settings.getAutoLinkPattern(editor);\n var defaultLinkTarget = Settings.getDefaultLinkTarget(editor);\n if (editor.selection.getNode().tagName === 'A') {\n return;\n }\n rng = editor.selection.getRng(true).cloneRange();\n if (rng.startOffset < 5) {\n prev = rng.endContainer.previousSibling;\n if (!prev) {\n if (!rng.endContainer.firstChild || !rng.endContainer.firstChild.nextSibling) {\n return;\n }\n prev = rng.endContainer.firstChild.nextSibling;\n }\n len = prev.length;\n setStart(rng, prev, len);\n setEnd(rng, prev, len);\n if (rng.endOffset < 5) {\n return;\n }\n end = rng.endOffset;\n endContainer = prev;\n } else {\n endContainer = rng.endContainer;\n if (endContainer.nodeType !== 3 && endContainer.firstChild) {\n while (endContainer.nodeType !== 3 && endContainer.firstChild) {\n endContainer = endContainer.firstChild;\n }\n if (endContainer.nodeType === 3) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, endContainer.nodeValue.length);\n }\n }\n if (rng.endOffset === 1) {\n end = 2;\n } else {\n end = rng.endOffset - 1 - endOffset;\n }\n }\n start = end;\n do {\n setStart(rng, endContainer, end >= 2 ? end - 2 : 0);\n setEnd(rng, endContainer, end >= 1 ? end - 1 : 0);\n end -= 1;\n rngText = rng.toString();\n } while (rngText !== ' ' && rngText !== '' && rngText.charCodeAt(0) !== 160 && end - 2 >= 0 && rngText !== delimiter);\n if (rangeEqualsDelimiterOrSpace(rng.toString(), delimiter)) {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n end += 1;\n } else if (rng.startOffset === 0) {\n setStart(rng, endContainer, 0);\n setEnd(rng, endContainer, start);\n } else {\n setStart(rng, endContainer, end);\n setEnd(rng, endContainer, start);\n }\n text = rng.toString();\n if (text.charAt(text.length - 1) === '.') {\n setEnd(rng, endContainer, start - 1);\n }\n text = rng.toString().trim();\n matches = text.match(autoLinkPattern);\n if (matches) {\n if (matches[1] === 'www.') {\n matches[1] = 'http://www.';\n } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {\n matches[1] = 'mailto:' + matches[1];\n }\n bookmark = editor.selection.getBookmark();\n editor.selection.setRng(rng);\n editor.execCommand('createlink', false, matches[1] + matches[2]);\n if (defaultLinkTarget) {\n editor.dom.setAttrib(editor.selection.getNode(), 'target', defaultLinkTarget);\n }\n editor.selection.moveToBookmark(bookmark);\n editor.nodeChanged();\n }\n };\n var setup = function (editor) {\n var autoUrlDetectState;\n editor.on('keydown', function (e) {\n if (e.keyCode === 13) {\n return handleEnter(editor);\n }\n });\n if (global$1.ie) {\n editor.on('focus', function () {\n if (!autoUrlDetectState) {\n autoUrlDetectState = true;\n try {\n editor.execCommand('AutoUrlDetect', false, true);\n } catch (ex) {\n }\n }\n });\n return;\n }\n editor.on('keypress', function (e) {\n if (e.keyCode === 41) {\n return handleEclipse(editor);\n }\n });\n editor.on('keyup', function (e) {\n if (e.keyCode === 32) {\n return handleSpacebar(editor);\n }\n });\n };\n var Keys = { setup: setup };\n\n global.add('autolink', function (editor) {\n Keys.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar searchreplace = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n function isContentEditableFalse(node) {\n return node && node.nodeType === 1 && node.contentEditable === 'false';\n }\n function findAndReplaceDOMText(regex, node, replacementNode, captureGroup, schema) {\n var m;\n var matches = [];\n var text, count = 0, doc;\n var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;\n doc = node.ownerDocument;\n blockElementsMap = schema.getBlockElements();\n hiddenTextElementsMap = schema.getWhiteSpaceElements();\n shortEndedElementsMap = schema.getShortEndedElements();\n function getMatchIndexes(m, captureGroup) {\n captureGroup = captureGroup || 0;\n if (!m[0]) {\n throw new Error('findAndReplaceDOMText cannot handle zero-length matches');\n }\n var index = m.index;\n if (captureGroup > 0) {\n var cg = m[captureGroup];\n if (!cg) {\n throw new Error('Invalid capture group');\n }\n index += m[0].indexOf(cg);\n m[0] = cg;\n }\n return [\n index,\n index + m[0].length,\n [m[0]]\n ];\n }\n function getText(node) {\n var txt;\n if (node.nodeType === 3) {\n return node.data;\n }\n if (hiddenTextElementsMap[node.nodeName] && !blockElementsMap[node.nodeName]) {\n return '';\n }\n txt = '';\n if (isContentEditableFalse(node)) {\n return '\\n';\n }\n if (blockElementsMap[node.nodeName] || shortEndedElementsMap[node.nodeName]) {\n txt += '\\n';\n }\n if (node = node.firstChild) {\n do {\n txt += getText(node);\n } while (node = node.nextSibling);\n }\n return txt;\n }\n function stepThroughMatches(node, matches, replaceFn) {\n var startNode, endNode, startNodeIndex, endNodeIndex, innerNodes = [], atIndex = 0, curNode = node, matchLocation = matches.shift(), matchIndex = 0;\n out:\n while (true) {\n if (blockElementsMap[curNode.nodeName] || shortEndedElementsMap[curNode.nodeName] || isContentEditableFalse(curNode)) {\n atIndex++;\n }\n if (curNode.nodeType === 3) {\n if (!endNode && curNode.length + atIndex >= matchLocation[1]) {\n endNode = curNode;\n endNodeIndex = matchLocation[1] - atIndex;\n } else if (startNode) {\n innerNodes.push(curNode);\n }\n if (!startNode && curNode.length + atIndex > matchLocation[0]) {\n startNode = curNode;\n startNodeIndex = matchLocation[0] - atIndex;\n }\n atIndex += curNode.length;\n }\n if (startNode && endNode) {\n curNode = replaceFn({\n startNode: startNode,\n startNodeIndex: startNodeIndex,\n endNode: endNode,\n endNodeIndex: endNodeIndex,\n innerNodes: innerNodes,\n match: matchLocation[2],\n matchIndex: matchIndex\n });\n atIndex -= endNode.length - endNodeIndex;\n startNode = null;\n endNode = null;\n innerNodes = [];\n matchLocation = matches.shift();\n matchIndex++;\n if (!matchLocation) {\n break;\n }\n } else if ((!hiddenTextElementsMap[curNode.nodeName] || blockElementsMap[curNode.nodeName]) && curNode.firstChild) {\n if (!isContentEditableFalse(curNode)) {\n curNode = curNode.firstChild;\n continue;\n }\n } else if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n continue;\n }\n while (true) {\n if (curNode.nextSibling) {\n curNode = curNode.nextSibling;\n break;\n } else if (curNode.parentNode !== node) {\n curNode = curNode.parentNode;\n } else {\n break out;\n }\n }\n }\n }\n function genReplacer(nodeName) {\n var makeReplacementNode;\n if (typeof nodeName !== 'function') {\n var stencilNode_1 = nodeName.nodeType ? nodeName : doc.createElement(nodeName);\n makeReplacementNode = function (fill, matchIndex) {\n var clone = stencilNode_1.cloneNode(false);\n clone.setAttribute('data-mce-index', matchIndex);\n if (fill) {\n clone.appendChild(doc.createTextNode(fill));\n }\n return clone;\n };\n } else {\n makeReplacementNode = nodeName;\n }\n return function (range) {\n var before;\n var after;\n var parentNode;\n var startNode = range.startNode;\n var endNode = range.endNode;\n var matchIndex = range.matchIndex;\n if (startNode === endNode) {\n var node_1 = startNode;\n parentNode = node_1.parentNode;\n if (range.startNodeIndex > 0) {\n before = doc.createTextNode(node_1.data.substring(0, range.startNodeIndex));\n parentNode.insertBefore(before, node_1);\n }\n var el = makeReplacementNode(range.match[0], matchIndex);\n parentNode.insertBefore(el, node_1);\n if (range.endNodeIndex < node_1.length) {\n after = doc.createTextNode(node_1.data.substring(range.endNodeIndex));\n parentNode.insertBefore(after, node_1);\n }\n node_1.parentNode.removeChild(node_1);\n return el;\n }\n before = doc.createTextNode(startNode.data.substring(0, range.startNodeIndex));\n after = doc.createTextNode(endNode.data.substring(range.endNodeIndex));\n var elA = makeReplacementNode(startNode.data.substring(range.startNodeIndex), matchIndex);\n for (var i = 0, l = range.innerNodes.length; i < l; ++i) {\n var innerNode = range.innerNodes[i];\n var innerEl = makeReplacementNode(innerNode.data, matchIndex);\n innerNode.parentNode.replaceChild(innerEl, innerNode);\n }\n var elB = makeReplacementNode(endNode.data.substring(0, range.endNodeIndex), matchIndex);\n parentNode = startNode.parentNode;\n parentNode.insertBefore(before, startNode);\n parentNode.insertBefore(elA, startNode);\n parentNode.removeChild(startNode);\n parentNode = endNode.parentNode;\n parentNode.insertBefore(elB, endNode);\n parentNode.insertBefore(after, endNode);\n parentNode.removeChild(endNode);\n return elB;\n };\n }\n text = getText(node);\n if (!text) {\n return;\n }\n if (regex.global) {\n while (m = regex.exec(text)) {\n matches.push(getMatchIndexes(m, captureGroup));\n }\n } else {\n m = text.match(regex);\n matches.push(getMatchIndexes(m, captureGroup));\n }\n if (matches.length) {\n count = matches.length;\n stepThroughMatches(node, matches, genReplacer(replacementNode));\n }\n return count;\n }\n var FindReplaceText = { findAndReplaceDOMText: findAndReplaceDOMText };\n\n var getElmIndex = function (elm) {\n var value = elm.getAttribute('data-mce-index');\n if (typeof value === 'number') {\n return '' + value;\n }\n return value;\n };\n var markAllMatches = function (editor, currentIndexState, regex) {\n var node, marker;\n marker = editor.dom.create('span', { 'data-mce-bogus': 1 });\n marker.className = 'mce-match-marker';\n node = editor.getBody();\n done(editor, currentIndexState, false);\n return FindReplaceText.findAndReplaceDOMText(regex, node, marker, false, editor.schema);\n };\n var unwrap = function (node) {\n var parentNode = node.parentNode;\n if (node.firstChild) {\n parentNode.insertBefore(node.firstChild, node);\n }\n node.parentNode.removeChild(node);\n };\n var findSpansByIndex = function (editor, index) {\n var nodes;\n var spans = [];\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n if (nodes.length) {\n for (var i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex === null || !nodeIndex.length) {\n continue;\n }\n if (nodeIndex === index.toString()) {\n spans.push(nodes[i]);\n }\n }\n }\n return spans;\n };\n var moveSelection = function (editor, currentIndexState, forward) {\n var testIndex = currentIndexState.get();\n var dom = editor.dom;\n forward = forward !== false;\n if (forward) {\n testIndex++;\n } else {\n testIndex--;\n }\n dom.removeClass(findSpansByIndex(editor, currentIndexState.get()), 'mce-match-marker-selected');\n var spans = findSpansByIndex(editor, testIndex);\n if (spans.length) {\n dom.addClass(findSpansByIndex(editor, testIndex), 'mce-match-marker-selected');\n editor.selection.scrollIntoView(spans[0]);\n return testIndex;\n }\n return -1;\n };\n var removeNode = function (dom, node) {\n var parent = node.parentNode;\n dom.remove(node);\n if (dom.isEmpty(parent)) {\n dom.remove(parent);\n }\n };\n var find = function (editor, currentIndexState, text, matchCase, wholeWord) {\n text = text.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n text = text.replace(/\\s/g, '[^\\\\S\\\\r\\\\n]');\n text = wholeWord ? '\\\\b' + text + '\\\\b' : text;\n var count = markAllMatches(editor, currentIndexState, new RegExp(text, matchCase ? 'g' : 'gi'));\n if (count) {\n currentIndexState.set(-1);\n currentIndexState.set(moveSelection(editor, currentIndexState, true));\n }\n return count;\n };\n var next = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, true);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var prev = function (editor, currentIndexState) {\n var index = moveSelection(editor, currentIndexState, false);\n if (index !== -1) {\n currentIndexState.set(index);\n }\n };\n var isMatchSpan = function (node) {\n var matchIndex = getElmIndex(node);\n return matchIndex !== null && matchIndex.length > 0;\n };\n var replace = function (editor, currentIndexState, text, forward, all) {\n var i, nodes, node, matchIndex, currentMatchIndex, nextIndex = currentIndexState.get(), hasMore;\n forward = forward !== false;\n node = editor.getBody();\n nodes = global$1.grep(global$1.toArray(node.getElementsByTagName('span')), isMatchSpan);\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n matchIndex = currentMatchIndex = parseInt(nodeIndex, 10);\n if (all || matchIndex === currentIndexState.get()) {\n if (text.length) {\n nodes[i].firstChild.nodeValue = text;\n unwrap(nodes[i]);\n } else {\n removeNode(editor.dom, nodes[i]);\n }\n while (nodes[++i]) {\n matchIndex = parseInt(getElmIndex(nodes[i]), 10);\n if (matchIndex === currentMatchIndex) {\n removeNode(editor.dom, nodes[i]);\n } else {\n i--;\n break;\n }\n }\n if (forward) {\n nextIndex--;\n }\n } else if (currentMatchIndex > currentIndexState.get()) {\n nodes[i].setAttribute('data-mce-index', currentMatchIndex - 1);\n }\n }\n currentIndexState.set(nextIndex);\n if (forward) {\n hasMore = hasNext(editor, currentIndexState);\n next(editor, currentIndexState);\n } else {\n hasMore = hasPrev(editor, currentIndexState);\n prev(editor, currentIndexState);\n }\n return !all && hasMore;\n };\n var done = function (editor, currentIndexState, keepEditorSelection) {\n var i, nodes, startContainer, endContainer;\n nodes = global$1.toArray(editor.getBody().getElementsByTagName('span'));\n for (i = 0; i < nodes.length; i++) {\n var nodeIndex = getElmIndex(nodes[i]);\n if (nodeIndex !== null && nodeIndex.length) {\n if (nodeIndex === currentIndexState.get().toString()) {\n if (!startContainer) {\n startContainer = nodes[i].firstChild;\n }\n endContainer = nodes[i].firstChild;\n }\n unwrap(nodes[i]);\n }\n }\n if (startContainer && endContainer) {\n var rng = editor.dom.createRng();\n rng.setStart(startContainer, 0);\n rng.setEnd(endContainer, endContainer.data.length);\n if (keepEditorSelection !== false) {\n editor.selection.setRng(rng);\n }\n return rng;\n }\n };\n var hasNext = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() + 1).length > 0;\n };\n var hasPrev = function (editor, currentIndexState) {\n return findSpansByIndex(editor, currentIndexState.get() - 1).length > 0;\n };\n var Actions = {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace,\n hasNext: hasNext,\n hasPrev: hasPrev\n };\n\n var get = function (editor, currentIndexState) {\n var done = function (keepEditorSelection) {\n return Actions.done(editor, currentIndexState, keepEditorSelection);\n };\n var find = function (text, matchCase, wholeWord) {\n return Actions.find(editor, currentIndexState, text, matchCase, wholeWord);\n };\n var next = function () {\n return Actions.next(editor, currentIndexState);\n };\n var prev = function () {\n return Actions.prev(editor, currentIndexState);\n };\n var replace = function (text, forward, all) {\n return Actions.replace(editor, currentIndexState, text, forward, all);\n };\n return {\n done: done,\n find: find,\n next: next,\n prev: prev,\n replace: replace\n };\n };\n var Api = { get: get };\n\n var open = function (editor, currentIndexState) {\n var last = {}, selectedText;\n editor.undoManager.add();\n selectedText = global$1.trim(editor.selection.getContent({ format: 'text' }));\n function updateButtonStates() {\n win.statusbar.find('#next').disabled(Actions.hasNext(editor, currentIndexState) === false);\n win.statusbar.find('#prev').disabled(Actions.hasPrev(editor, currentIndexState) === false);\n }\n function notFoundAlert() {\n editor.windowManager.alert('Could not find the specified string.', function () {\n win.find('#find')[0].focus();\n });\n }\n var win = editor.windowManager.open({\n layout: 'flex',\n pack: 'center',\n align: 'center',\n onClose: function () {\n editor.focus();\n Actions.done(editor, currentIndexState);\n editor.undoManager.add();\n },\n onSubmit: function (e) {\n var count, caseState, text, wholeWord;\n e.preventDefault();\n caseState = win.find('#case').checked();\n wholeWord = win.find('#words').checked();\n text = win.find('#find').value();\n if (!text.length) {\n Actions.done(editor, currentIndexState, false);\n win.statusbar.items().slice(1).disabled(true);\n return;\n }\n if (last.text === text && last.caseState === caseState && last.wholeWord === wholeWord) {\n if (!Actions.hasNext(editor, currentIndexState)) {\n notFoundAlert();\n return;\n }\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n return;\n }\n count = Actions.find(editor, currentIndexState, text, caseState, wholeWord);\n if (!count) {\n notFoundAlert();\n }\n win.statusbar.items().slice(1).disabled(count === 0);\n updateButtonStates();\n last = {\n text: text,\n caseState: caseState,\n wholeWord: wholeWord\n };\n },\n buttons: [\n {\n text: 'Find',\n subtype: 'primary',\n onclick: function () {\n win.submit();\n }\n },\n {\n text: 'Replace',\n disabled: true,\n onclick: function () {\n if (!Actions.replace(editor, currentIndexState, win.find('#replace').value())) {\n win.statusbar.items().slice(1).disabled(true);\n currentIndexState.set(-1);\n last = {};\n }\n }\n },\n {\n text: 'Replace all',\n disabled: true,\n onclick: function () {\n Actions.replace(editor, currentIndexState, win.find('#replace').value(), true, true);\n win.statusbar.items().slice(1).disabled(true);\n last = {};\n }\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Prev',\n name: 'prev',\n disabled: true,\n onclick: function () {\n Actions.prev(editor, currentIndexState);\n updateButtonStates();\n }\n },\n {\n text: 'Next',\n name: 'next',\n disabled: true,\n onclick: function () {\n Actions.next(editor, currentIndexState);\n updateButtonStates();\n }\n }\n ],\n title: 'Find and replace',\n items: {\n type: 'form',\n padding: 20,\n labelGap: 30,\n spacing: 10,\n items: [\n {\n type: 'textbox',\n name: 'find',\n size: 40,\n label: 'Find',\n value: selectedText\n },\n {\n type: 'textbox',\n name: 'replace',\n size: 40,\n label: 'Replace with'\n },\n {\n type: 'checkbox',\n name: 'case',\n text: 'Match case',\n label: ' '\n },\n {\n type: 'checkbox',\n name: 'words',\n text: 'Whole words',\n label: ' '\n }\n ]\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor, currentIndexState) {\n editor.addCommand('SearchReplace', function () {\n Dialog.open(editor, currentIndexState);\n });\n };\n var Commands = { register: register };\n\n var showDialog = function (editor, currentIndexState) {\n return function () {\n Dialog.open(editor, currentIndexState);\n };\n };\n var register$1 = function (editor, currentIndexState) {\n editor.addMenuItem('searchreplace', {\n text: 'Find and replace',\n shortcut: 'Meta+F',\n onclick: showDialog(editor, currentIndexState),\n separator: 'before',\n context: 'edit'\n });\n editor.addButton('searchreplace', {\n tooltip: 'Find and replace',\n onclick: showDialog(editor, currentIndexState)\n });\n editor.shortcuts.add('Meta+F', '', showDialog(editor, currentIndexState));\n };\n var Buttons = { register: register$1 };\n\n global.add('searchreplace', function (editor) {\n var currentIndexState = Cell(-1);\n Commands.register(editor, currentIndexState);\n Buttons.register(editor, currentIndexState);\n return Api.get(editor, currentIndexState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","// Exports the \"colorpicker\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/colorpicker')\n// ES2015:\n// import 'tinymce/plugins/colorpicker'\nrequire('./plugin.js');","// Exports the \"autolink\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autolink')\n// ES2015:\n// import 'tinymce/plugins/autolink'\nrequire('./plugin.js');","(function () {\nvar colorpicker = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var showPreview = function (win, hexColor) {\n win.find('#preview')[0].getEl().style.background = hexColor;\n };\n var setColor = function (win, value) {\n var color = global$1(value), rgb = color.toRgb();\n win.fromJSON({\n r: rgb.r,\n g: rgb.g,\n b: rgb.b,\n hex: color.toHex().substr(1)\n });\n showPreview(win, color.toHex());\n };\n var open = function (editor, callback, value) {\n var win = editor.windowManager.open({\n title: 'Color',\n items: {\n type: 'container',\n layout: 'flex',\n direction: 'row',\n align: 'stretch',\n padding: 5,\n spacing: 10,\n items: [\n {\n type: 'colorpicker',\n value: value,\n onchange: function () {\n var rgb = this.rgb();\n if (win) {\n win.find('#r').value(rgb.r);\n win.find('#g').value(rgb.g);\n win.find('#b').value(rgb.b);\n win.find('#hex').value(this.value().substr(1));\n showPreview(win, this.value());\n }\n }\n },\n {\n type: 'form',\n padding: 0,\n labelGap: 5,\n defaults: {\n type: 'textbox',\n size: 7,\n value: '0',\n flex: 1,\n spellcheck: false,\n onchange: function () {\n var colorPickerCtrl = win.find('colorpicker')[0];\n var name, value;\n name = this.name();\n value = this.value();\n if (name === 'hex') {\n value = '#' + value;\n setColor(win, value);\n colorPickerCtrl.value(value);\n return;\n }\n value = {\n r: win.find('#r').value(),\n g: win.find('#g').value(),\n b: win.find('#b').value()\n };\n colorPickerCtrl.value(value);\n setColor(win, value);\n }\n },\n items: [\n {\n name: 'r',\n label: 'R',\n autofocus: 1\n },\n {\n name: 'g',\n label: 'G'\n },\n {\n name: 'b',\n label: 'B'\n },\n {\n name: 'hex',\n label: '#',\n value: '000000'\n },\n {\n name: 'preview',\n type: 'container',\n border: 1\n }\n ]\n }\n ]\n },\n onSubmit: function () {\n callback('#' + win.toJSON().hex);\n }\n });\n setColor(win, value);\n };\n var Dialog = { open: open };\n\n global.add('colorpicker', function (editor) {\n if (!editor.settings.color_picker_callback) {\n editor.settings.color_picker_callback = function (callback, value) {\n Dialog.open(editor, callback, value);\n };\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"textcolor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textcolor')\n// ES2015:\n// import 'tinymce/plugins/textcolor'\nrequire('./plugin.js');","// Exports the \"visualchars\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualchars')\n// ES2015:\n// import 'tinymce/plugins/visualchars'\nrequire('./plugin.js');","(function () {\nvar media = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getScripts = function (editor) {\n return editor.getParam('media_scripts');\n };\n var getAudioTemplateCallback = function (editor) {\n return editor.getParam('audio_template_callback');\n };\n var getVideoTemplateCallback = function (editor) {\n return editor.getParam('video_template_callback');\n };\n var hasLiveEmbeds = function (editor) {\n return editor.getParam('media_live_embeds', true);\n };\n var shouldFilterHtml = function (editor) {\n return editor.getParam('media_filter_html', true);\n };\n var getUrlResolver = function (editor) {\n return editor.getParam('media_url_resolver');\n };\n var hasAltSource = function (editor) {\n return editor.getParam('media_alt_source', true);\n };\n var hasPoster = function (editor) {\n return editor.getParam('media_poster', true);\n };\n var hasDimensions = function (editor) {\n return editor.getParam('media_dimensions', true);\n };\n var Settings = {\n getScripts: getScripts,\n getAudioTemplateCallback: getAudioTemplateCallback,\n getVideoTemplateCallback: getVideoTemplateCallback,\n hasLiveEmbeds: hasLiveEmbeds,\n shouldFilterHtml: shouldFilterHtml,\n getUrlResolver: getUrlResolver,\n hasAltSource: hasAltSource,\n hasPoster: hasPoster,\n hasDimensions: hasDimensions\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');\n\n var getVideoScriptMatch = function (prefixes, src) {\n if (prefixes) {\n for (var i = 0; i < prefixes.length; i++) {\n if (src.indexOf(prefixes[i].filter) !== -1) {\n return prefixes[i];\n }\n }\n }\n };\n var VideoScript = { getVideoScriptMatch: getVideoScriptMatch };\n\n var DOM = global$3.DOM;\n var trimPx = function (value) {\n return value.replace(/px$/, '');\n };\n var getEphoxEmbedData = function (attrs) {\n var style = attrs.map.style;\n var styles = style ? DOM.parseStyle(style) : {};\n return {\n type: 'ephox-embed-iri',\n source1: attrs.map['data-ephox-embed-iri'],\n source2: '',\n poster: '',\n width: get(styles, 'max-width').map(trimPx).getOr(''),\n height: get(styles, 'max-height').map(trimPx).getOr('')\n };\n };\n var htmlToData = function (prefixes, html) {\n var isEphoxEmbed = Cell(false);\n var data = {};\n global$4({\n validate: false,\n allow_conditional_comments: true,\n special: 'script,noscript',\n start: function (name, attrs) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n data = getEphoxEmbedData(attrs);\n } else {\n if (!data.source1 && name === 'param') {\n data.source1 = attrs.map.movie;\n }\n if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {\n if (!data.type) {\n data.type = name;\n }\n data = global$2.extend(attrs.map, data);\n }\n if (name === 'script') {\n var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src);\n if (!videoScript) {\n return;\n }\n data = {\n type: 'script',\n source1: attrs.map.src,\n width: videoScript.width,\n height: videoScript.height\n };\n }\n if (name === 'source') {\n if (!data.source1) {\n data.source1 = attrs.map.src;\n } else if (!data.source2) {\n data.source2 = attrs.map.src;\n }\n }\n if (name === 'img' && !data.poster) {\n data.poster = attrs.map.src;\n }\n }\n }\n }).parse(html);\n data.source1 = data.source1 || data.src || data.data;\n data.source2 = data.source2 || '';\n data.poster = data.poster || '';\n return data;\n };\n var HtmlToData = { htmlToData: htmlToData };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var guess = function (url) {\n var mimes = {\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n mp4: 'video/mp4',\n webm: 'video/webm',\n ogg: 'video/ogg',\n swf: 'application/x-shockwave-flash'\n };\n var fileEnd = url.toLowerCase().split('.').pop();\n var mime = mimes[fileEnd];\n return mime ? mime : '';\n };\n var Mime = { guess: guess };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.Writer');\n\n var DOM$1 = global$3.DOM;\n var addPx = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var setAttributes = function (attrs, updatedAttrs) {\n for (var name in updatedAttrs) {\n var value = '' + updatedAttrs[name];\n if (attrs.map[name]) {\n var i = attrs.length;\n while (i--) {\n var attr = attrs[i];\n if (attr.name === name) {\n if (value) {\n attrs.map[name] = value;\n attr.value = value;\n } else {\n delete attrs.map[name];\n attrs.splice(i, 1);\n }\n }\n }\n } else if (value) {\n attrs.push({\n name: name,\n value: value\n });\n attrs.map[name] = value;\n }\n }\n };\n var updateEphoxEmbed = function (data, attrs) {\n var style = attrs.map.style;\n var styleMap = style ? DOM$1.parseStyle(style) : {};\n styleMap['max-width'] = addPx(data.width);\n styleMap['max-height'] = addPx(data.height);\n setAttributes(attrs, { style: DOM$1.serializeStyle(styleMap) });\n };\n var updateHtml = function (html, data, updateAll) {\n var writer = global$7();\n var isEphoxEmbed = Cell(false);\n var sourceCount = 0;\n var hasImage;\n global$4({\n validate: false,\n allow_conditional_comments: true,\n special: 'script,noscript',\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n if (isEphoxEmbed.get()) ; else if (has(attrs.map, 'data-ephox-embed-iri')) {\n isEphoxEmbed.set(true);\n updateEphoxEmbed(data, attrs);\n } else {\n switch (name) {\n case 'video':\n case 'object':\n case 'embed':\n case 'img':\n case 'iframe':\n if (data.height !== undefined && data.width !== undefined) {\n setAttributes(attrs, {\n width: data.width,\n height: data.height\n });\n }\n break;\n }\n if (updateAll) {\n switch (name) {\n case 'video':\n setAttributes(attrs, {\n poster: data.poster,\n src: ''\n });\n if (data.source2) {\n setAttributes(attrs, { src: '' });\n }\n break;\n case 'iframe':\n setAttributes(attrs, { src: data.source1 });\n break;\n case 'source':\n sourceCount++;\n if (sourceCount <= 2) {\n setAttributes(attrs, {\n src: data['source' + sourceCount],\n type: data['source' + sourceCount + 'mime']\n });\n if (!data['source' + sourceCount]) {\n return;\n }\n }\n break;\n case 'img':\n if (!data.poster) {\n return;\n }\n hasImage = true;\n break;\n }\n }\n }\n writer.start(name, attrs, empty);\n },\n end: function (name) {\n if (!isEphoxEmbed.get()) {\n if (name === 'video' && updateAll) {\n for (var index = 1; index <= 2; index++) {\n if (data['source' + index]) {\n var attrs = [];\n attrs.map = {};\n if (sourceCount < index) {\n setAttributes(attrs, {\n src: data['source' + index],\n type: data['source' + index + 'mime']\n });\n writer.start('source', attrs, true);\n }\n }\n }\n }\n if (data.poster && name === 'object' && updateAll && !hasImage) {\n var imgAttrs = [];\n imgAttrs.map = {};\n setAttributes(imgAttrs, {\n src: data.poster,\n width: data.width,\n height: data.height\n });\n writer.start('img', imgAttrs, true);\n }\n }\n writer.end(name);\n }\n }, global$6({})).parse(html);\n return writer.getContent();\n };\n var UpdateHtml = { updateHtml: updateHtml };\n\n var urlPatterns = [\n {\n regex: /youtu\\.be\\/([\\w\\-_\\?&=.]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /youtube\\.com(.+)v=([^&]+)(&([a-z0-9&=\\-_]+))?/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$2?$4',\n allowFullscreen: true\n },\n {\n regex: /youtube.com\\/embed\\/([a-z0-9\\?&=\\-_]+)/i,\n type: 'iframe',\n w: 560,\n h: 314,\n url: '//www.youtube.com/embed/$1',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',\n allowFullscreen: true\n },\n {\n regex: /vimeo\\.com\\/(.*)\\/([0-9]+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//player.vimeo.com/video/$2?title=0&byline=0',\n allowFullscreen: true\n },\n {\n regex: /maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,\n type: 'iframe',\n w: 425,\n h: 350,\n url: '//maps.google.com/maps/ms?msid=$2&output=embed\"',\n allowFullscreen: false\n },\n {\n regex: /dailymotion\\.com\\/video\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: '//www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n },\n {\n regex: /dai\\.ly\\/([^_]+)/,\n type: 'iframe',\n w: 480,\n h: 270,\n url: '//www.dailymotion.com/embed/video/$1',\n allowFullscreen: true\n }\n ];\n var getUrl = function (pattern, url) {\n var match = pattern.regex.exec(url);\n var newUrl = pattern.url;\n var _loop_1 = function (i) {\n newUrl = newUrl.replace('$' + i, function () {\n return match[i] ? match[i] : '';\n });\n };\n for (var i = 0; i < match.length; i++) {\n _loop_1(i);\n }\n return newUrl.replace(/\\?$/, '');\n };\n var matchPattern = function (url) {\n var pattern = urlPatterns.filter(function (pattern) {\n return pattern.regex.test(url);\n });\n if (pattern.length > 0) {\n return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) });\n } else {\n return null;\n }\n };\n\n var getIframeHtml = function (data) {\n var allowFullscreen = data.allowFullscreen ? ' allowFullscreen=\"1\"' : '';\n return '';\n };\n var getFlashHtml = function (data) {\n var html = '';\n if (data.poster) {\n html += '';\n }\n html += '';\n return html;\n };\n var getAudioHtml = function (data, audioTemplateCallback) {\n if (audioTemplateCallback) {\n return audioTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getVideoHtml = function (data, videoTemplateCallback) {\n if (videoTemplateCallback) {\n return videoTemplateCallback(data);\n } else {\n return '';\n }\n };\n var getScriptHtml = function (data) {\n return '';\n };\n var dataToHtml = function (editor, dataIn) {\n var data = global$2.extend({}, dataIn);\n if (!data.source1) {\n global$2.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed));\n if (!data.source1) {\n return '';\n }\n }\n if (!data.source2) {\n data.source2 = '';\n }\n if (!data.poster) {\n data.poster = '';\n }\n data.source1 = editor.convertURL(data.source1, 'source');\n data.source2 = editor.convertURL(data.source2, 'source');\n data.source1mime = Mime.guess(data.source1);\n data.source2mime = Mime.guess(data.source2);\n data.poster = editor.convertURL(data.poster, 'poster');\n var pattern = matchPattern(data.source1);\n if (pattern) {\n data.source1 = pattern.url;\n data.type = pattern.type;\n data.allowFullscreen = pattern.allowFullscreen;\n data.width = data.width || pattern.w;\n data.height = data.height || pattern.h;\n }\n if (data.embed) {\n return UpdateHtml.updateHtml(data.embed, data, true);\n } else {\n var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1);\n if (videoScript) {\n data.type = 'script';\n data.width = videoScript.width;\n data.height = videoScript.height;\n }\n var audioTemplateCallback = Settings.getAudioTemplateCallback(editor);\n var videoTemplateCallback = Settings.getVideoTemplateCallback(editor);\n data.width = data.width || 300;\n data.height = data.height || 150;\n global$2.each(data, function (value, key) {\n data[key] = editor.dom.encode(value);\n });\n if (data.type === 'iframe') {\n return getIframeHtml(data);\n } else if (data.source1mime === 'application/x-shockwave-flash') {\n return getFlashHtml(data);\n } else if (data.source1mime.indexOf('audio') !== -1) {\n return getAudioHtml(data, audioTemplateCallback);\n } else if (data.type === 'script') {\n return getScriptHtml(data);\n } else {\n return getVideoHtml(data, videoTemplateCallback);\n }\n }\n };\n var DataToHtml = { dataToHtml: dataToHtml };\n\n var cache = {};\n var embedPromise = function (data, dataToHtml, handler) {\n return new global$5(function (res, rej) {\n var wrappedResolve = function (response) {\n if (response.html) {\n cache[data.source1] = response;\n }\n return res({\n url: data.source1,\n html: response.html ? response.html : dataToHtml(data)\n });\n };\n if (cache[data.source1]) {\n wrappedResolve(cache[data.source1]);\n } else {\n handler({ url: data.source1 }, wrappedResolve, rej);\n }\n });\n };\n var defaultPromise = function (data, dataToHtml) {\n return new global$5(function (res) {\n res({\n html: dataToHtml(data),\n url: data.source1\n });\n });\n };\n var loadedData = function (editor) {\n return function (data) {\n return DataToHtml.dataToHtml(editor, data);\n };\n };\n var getEmbedHtml = function (editor, data) {\n var embedHandler = Settings.getUrlResolver(editor);\n return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));\n };\n var isCached = function (url) {\n return cache.hasOwnProperty(url);\n };\n var Service = {\n getEmbedHtml: getEmbedHtml,\n isCached: isCached\n };\n\n var trimPx$1 = function (value) {\n return value.replace(/px$/, '');\n };\n var addPx$1 = function (value) {\n return /^[0-9.]+$/.test(value) ? value + 'px' : value;\n };\n var getSize = function (name) {\n return function (elm) {\n return elm ? trimPx$1(elm.style[name]) : '';\n };\n };\n var setSize = function (name) {\n return function (elm, value) {\n if (elm) {\n elm.style[name] = addPx$1(value);\n }\n };\n };\n var Size = {\n getMaxWidth: getSize('maxWidth'),\n getMaxHeight: getSize('maxHeight'),\n setMaxWidth: setSize('maxWidth'),\n setMaxHeight: setSize('maxHeight')\n };\n\n var doSyncSize = function (widthCtrl, heightCtrl) {\n widthCtrl.state.set('oldVal', widthCtrl.value());\n heightCtrl.state.set('oldVal', heightCtrl.value());\n };\n var doSizeControls = function (win, f) {\n var widthCtrl = win.find('#width')[0];\n var heightCtrl = win.find('#height')[0];\n var constrained = win.find('#constrain')[0];\n if (widthCtrl && heightCtrl && constrained) {\n f(widthCtrl, heightCtrl, constrained.checked());\n }\n };\n var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {\n var oldWidth = widthCtrl.state.get('oldVal');\n var oldHeight = heightCtrl.state.get('oldVal');\n var newWidth = widthCtrl.value();\n var newHeight = heightCtrl.value();\n if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {\n if (newWidth !== oldWidth) {\n newHeight = Math.round(newWidth / oldWidth * newHeight);\n if (!isNaN(newHeight)) {\n heightCtrl.value(newHeight);\n }\n } else {\n newWidth = Math.round(newHeight / oldHeight * newWidth);\n if (!isNaN(newWidth)) {\n widthCtrl.value(newWidth);\n }\n }\n }\n doSyncSize(widthCtrl, heightCtrl);\n };\n var syncSize = function (win) {\n doSizeControls(win, doSyncSize);\n };\n var updateSize = function (win) {\n doSizeControls(win, doUpdateSize);\n };\n var createUi = function (onChange) {\n var recalcSize = function () {\n onChange(function (win) {\n updateSize(win);\n });\n };\n return {\n type: 'container',\n label: 'Dimensions',\n layout: 'flex',\n align: 'center',\n spacing: 5,\n items: [\n {\n name: 'width',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Width'\n },\n {\n type: 'label',\n text: 'x'\n },\n {\n name: 'height',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Height'\n },\n {\n name: 'constrain',\n type: 'checkbox',\n checked: true,\n text: 'Constrain proportions'\n }\n ]\n };\n };\n var SizeManager = {\n createUi: createUi,\n syncSize: syncSize,\n updateSize: updateSize\n };\n\n var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput';\n var handleError = function (editor) {\n return function (error) {\n var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';\n editor.notificationManager.open({\n type: 'error',\n text: errorMessage\n });\n };\n };\n var getData = function (editor) {\n var element = editor.selection.getNode();\n var dataEmbed = element.getAttribute('data-ephox-embed-iri');\n if (dataEmbed) {\n return {\n 'source1': dataEmbed,\n 'data-ephox-embed-iri': dataEmbed,\n 'width': Size.getMaxWidth(element),\n 'height': Size.getMaxHeight(element)\n };\n }\n return element.getAttribute('data-mce-object') ? HtmlToData.htmlToData(Settings.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {};\n };\n var getSource = function (editor) {\n var elm = editor.selection.getNode();\n if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {\n return editor.selection.getContent();\n }\n };\n var addEmbedHtml = function (win, editor) {\n return function (response) {\n var html = response.html;\n var embed = win.find('#embed')[0];\n var data = global$2.extend(HtmlToData.htmlToData(Settings.getScripts(editor), html), { source1: response.url });\n win.fromJSON(data);\n if (embed) {\n embed.value(html);\n SizeManager.updateSize(win);\n }\n };\n };\n var selectPlaceholder = function (editor, beforeObjects) {\n var i;\n var y;\n var afterObjects = editor.dom.select('img[data-mce-object]');\n for (i = 0; i < beforeObjects.length; i++) {\n for (y = afterObjects.length - 1; y >= 0; y--) {\n if (beforeObjects[i] === afterObjects[y]) {\n afterObjects.splice(y, 1);\n }\n }\n }\n editor.selection.select(afterObjects[0]);\n };\n var handleInsert = function (editor, html) {\n var beforeObjects = editor.dom.select('img[data-mce-object]');\n editor.insertContent(html);\n selectPlaceholder(editor, beforeObjects);\n editor.nodeChanged();\n };\n var submitForm = function (win, editor) {\n var data = win.toJSON();\n data.embed = UpdateHtml.updateHtml(data.embed, data);\n if (data.embed && Service.isCached(data.source1)) {\n handleInsert(editor, data.embed);\n } else {\n Service.getEmbedHtml(editor, data).then(function (response) {\n handleInsert(editor, response.html);\n }).catch(handleError(editor));\n }\n };\n var populateMeta = function (win, meta) {\n global$2.each(meta, function (value, key) {\n win.find('#' + key).value(value);\n });\n };\n var showDialog = function (editor) {\n var win;\n var data;\n var generalFormItems = [{\n name: 'source1',\n type: 'filepicker',\n filetype: 'media',\n size: 40,\n autofocus: true,\n label: 'Source',\n onpaste: function () {\n setTimeout(function () {\n Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n }, 1);\n },\n onchange: function (e) {\n Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));\n populateMeta(win, e.meta);\n },\n onbeforecall: function (e) {\n e.meta = win.toJSON();\n }\n }];\n var advancedFormItems = [];\n var reserialise = function (update) {\n update(win);\n data = win.toJSON();\n win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data));\n };\n if (Settings.hasAltSource(editor)) {\n advancedFormItems.push({\n name: 'source2',\n type: 'filepicker',\n filetype: 'media',\n size: 40,\n label: 'Alternative source'\n });\n }\n if (Settings.hasPoster(editor)) {\n advancedFormItems.push({\n name: 'poster',\n type: 'filepicker',\n filetype: 'image',\n size: 40,\n label: 'Poster'\n });\n }\n if (Settings.hasDimensions(editor)) {\n var control = SizeManager.createUi(reserialise);\n generalFormItems.push(control);\n }\n data = getData(editor);\n var embedTextBox = {\n id: 'mcemediasource',\n type: 'textbox',\n flex: 1,\n name: 'embed',\n value: getSource(editor),\n multiline: true,\n rows: 5,\n label: 'Source'\n };\n var updateValueOnChange = function () {\n data = global$2.extend({}, HtmlToData.htmlToData(Settings.getScripts(editor), this.value()));\n this.parent().parent().fromJSON(data);\n };\n embedTextBox[embedChange] = updateValueOnChange;\n var body = [\n {\n title: 'General',\n type: 'form',\n items: generalFormItems\n },\n {\n title: 'Embed',\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: 10,\n spacing: 10,\n items: [\n {\n type: 'label',\n text: 'Paste your embed code below:',\n forId: 'mcemediasource'\n },\n embedTextBox\n ]\n }\n ];\n if (advancedFormItems.length > 0) {\n body.push({\n title: 'Advanced',\n type: 'form',\n items: advancedFormItems\n });\n }\n win = editor.windowManager.open({\n title: 'Insert/edit media',\n data: data,\n bodyType: 'tabpanel',\n body: body,\n onSubmit: function () {\n SizeManager.updateSize(win);\n submitForm(win, editor);\n }\n });\n SizeManager.syncSize(win);\n };\n var Dialog = { showDialog: showDialog };\n\n var get$1 = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n return { showDialog: showDialog };\n };\n var Api = { get: get$1 };\n\n var register = function (editor) {\n var showDialog = function () {\n Dialog.showDialog(editor);\n };\n editor.addCommand('mceMedia', showDialog);\n };\n var Commands = { register: register };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var sanitize = function (editor, html) {\n if (Settings.shouldFilterHtml(editor) === false) {\n return html;\n }\n var writer = global$7();\n var blocked;\n global$4({\n validate: false,\n allow_conditional_comments: false,\n special: 'script,noscript',\n comment: function (text) {\n writer.comment(text);\n },\n cdata: function (text) {\n writer.cdata(text);\n },\n text: function (text, raw) {\n writer.text(text, raw);\n },\n start: function (name, attrs, empty) {\n blocked = true;\n if (name === 'script' || name === 'noscript' || name === 'svg') {\n return;\n }\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n if (attrName.indexOf('on') === 0) {\n delete attrs.map[attrName];\n attrs.splice(i, 1);\n }\n if (attrName === 'style') {\n attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);\n }\n }\n writer.start(name, attrs, empty);\n blocked = false;\n },\n end: function (name) {\n if (blocked) {\n return;\n }\n writer.end(name);\n }\n }, global$6({})).parse(html);\n return writer.getContent();\n };\n var Sanitize = { sanitize: sanitize };\n\n var createPlaceholderNode = function (editor, node) {\n var placeHolder;\n var name = node.name;\n placeHolder = new global$8('img', 1);\n placeHolder.shortEnded = true;\n retainAttributesAndInnerHtml(editor, node, placeHolder);\n placeHolder.attr({\n 'width': node.attr('width') || '300',\n 'height': node.attr('height') || (name === 'audio' ? '30' : '150'),\n 'style': node.attr('style'),\n 'src': global$1.transparentSrc,\n 'data-mce-object': name,\n 'class': 'mce-object mce-object-' + name\n });\n return placeHolder;\n };\n var createPreviewIframeNode = function (editor, node) {\n var previewWrapper;\n var previewNode;\n var shimNode;\n var name = node.name;\n previewWrapper = new global$8('span', 1);\n previewWrapper.attr({\n 'contentEditable': 'false',\n 'style': node.attr('style'),\n 'data-mce-object': name,\n 'class': 'mce-preview-object mce-object-' + name\n });\n retainAttributesAndInnerHtml(editor, node, previewWrapper);\n previewNode = new global$8(name, 1);\n previewNode.attr({\n src: node.attr('src'),\n allowfullscreen: node.attr('allowfullscreen'),\n style: node.attr('style'),\n class: node.attr('class'),\n width: node.attr('width'),\n height: node.attr('height'),\n frameborder: '0'\n });\n shimNode = new global$8('span', 1);\n shimNode.attr('class', 'mce-shim');\n previewWrapper.append(previewNode);\n previewWrapper.append(shimNode);\n return previewWrapper;\n };\n var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {\n var attrName;\n var attrValue;\n var attribs;\n var ai;\n var innerHtml;\n attribs = sourceNode.attributes;\n ai = attribs.length;\n while (ai--) {\n attrName = attribs[ai].name;\n attrValue = attribs[ai].value;\n if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {\n if (attrName === 'data' || attrName === 'src') {\n attrValue = editor.convertURL(attrValue, attrName);\n }\n targetNode.attr('data-mce-p-' + attrName, attrValue);\n }\n }\n innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;\n if (innerHtml) {\n targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml)));\n targetNode.firstChild = null;\n }\n };\n var isWithinEphoxEmbed = function (node) {\n while (node = node.parent) {\n if (node.attr('data-ephox-embed-iri')) {\n return true;\n }\n }\n return false;\n };\n var placeHolderConverter = function (editor) {\n return function (nodes) {\n var i = nodes.length;\n var node;\n var videoScript;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n if (node.parent.attr('data-mce-object')) {\n continue;\n }\n if (node.name === 'script') {\n videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), node.attr('src'));\n if (!videoScript) {\n continue;\n }\n }\n if (videoScript) {\n if (videoScript.width) {\n node.attr('width', videoScript.width.toString());\n }\n if (videoScript.height) {\n node.attr('height', videoScript.height.toString());\n }\n }\n if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$1.ceFalse) {\n if (!isWithinEphoxEmbed(node)) {\n node.replace(createPreviewIframeNode(editor, node));\n }\n } else {\n if (!isWithinEphoxEmbed(node)) {\n node.replace(createPlaceholderNode(editor, node));\n }\n }\n }\n };\n };\n var Nodes = {\n createPreviewIframeNode: createPreviewIframeNode,\n createPlaceholderNode: createPlaceholderNode,\n placeHolderConverter: placeHolderConverter\n };\n\n var setup = function (editor) {\n editor.on('preInit', function () {\n var specialElements = editor.schema.getSpecialElements();\n global$2.each('video audio iframe object'.split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var boolAttrs = editor.schema.getBoolAttrs();\n global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {\n boolAttrs[name] = {};\n });\n editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor));\n editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {\n var i = nodes.length;\n var node;\n var realElm;\n var ai;\n var attribs;\n var innerHtml;\n var innerNode;\n var realElmName;\n var className;\n while (i--) {\n node = nodes[i];\n if (!node.parent) {\n continue;\n }\n realElmName = node.attr(name);\n realElm = new global$8(realElmName, 1);\n if (realElmName !== 'audio' && realElmName !== 'script') {\n className = node.attr('class');\n if (className && className.indexOf('mce-preview-object') !== -1) {\n realElm.attr({\n width: node.firstChild.attr('width'),\n height: node.firstChild.attr('height')\n });\n } else {\n realElm.attr({\n width: node.attr('width'),\n height: node.attr('height')\n });\n }\n }\n realElm.attr({ style: node.attr('style') });\n attribs = node.attributes;\n ai = attribs.length;\n while (ai--) {\n var attrName = attribs[ai].name;\n if (attrName.indexOf('data-mce-p-') === 0) {\n realElm.attr(attrName.substr(11), attribs[ai].value);\n }\n }\n if (realElmName === 'script') {\n realElm.attr('type', 'text/javascript');\n }\n innerHtml = node.attr('data-mce-html');\n if (innerHtml) {\n innerNode = new global$8('#text', 3);\n innerNode.raw = true;\n innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));\n realElm.append(innerNode);\n }\n node.replace(realElm);\n }\n });\n });\n editor.on('setContent', function () {\n editor.$('span.mce-preview-object').each(function (index, elm) {\n var $elm = editor.$(elm);\n if ($elm.find('span.mce-shim', elm).length === 0) {\n $elm.append('');\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n var name;\n if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {\n e.name = name;\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var setup$2 = function (editor) {\n editor.on('click keyup', function () {\n var selectedNode = editor.selection.getNode();\n if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {\n if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {\n selectedNode.setAttribute('data-mce-selected', '2');\n }\n }\n });\n editor.on('ObjectSelected', function (e) {\n var objectType = e.target.getAttribute('data-mce-object');\n if (objectType === 'audio' || objectType === 'script') {\n e.preventDefault();\n }\n });\n editor.on('objectResized', function (e) {\n var target = e.target;\n var html;\n if (target.getAttribute('data-mce-object')) {\n html = target.getAttribute('data-mce-html');\n if (html) {\n html = unescape(html);\n target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, {\n width: e.width,\n height: e.height\n })));\n }\n }\n });\n };\n var Selection = { setup: setup$2 };\n\n var register$1 = function (editor) {\n editor.addButton('media', {\n tooltip: 'Insert/edit media',\n cmd: 'mceMedia',\n stateSelector: [\n 'img[data-mce-object]',\n 'span[data-mce-object]',\n 'div[data-ephox-embed-iri]'\n ]\n });\n editor.addMenuItem('media', {\n icon: 'media',\n text: 'Media',\n cmd: 'mceMedia',\n context: 'insert',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('media', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n ResolveName.setup(editor);\n FilterContent.setup(editor);\n Selection.setup(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar textpattern = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var hasOwnProperty = Object.hasOwnProperty;\n var get = function (obj, key) {\n return has(obj, key) ? Option.from(obj[key]) : Option.none();\n };\n var has = function (obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n var isInlinePattern = function (pattern) {\n return has(pattern, 'start') && has(pattern, 'end');\n };\n var isBlockPattern = function (pattern) {\n return !has(pattern, 'end') && !has(pattern, 'replacement');\n };\n var isReplacementPattern = function (pattern) {\n return has(pattern, 'replacement');\n };\n var sortPatterns = function (patterns) {\n return sort(patterns, function (a, b) {\n if (a.start.length === b.start.length) {\n return 0;\n }\n return a.start.length > b.start.length ? -1 : 1;\n });\n };\n var createPatternSet = function (patterns) {\n return {\n inlinePatterns: sortPatterns(filter(patterns, isInlinePattern)),\n blockPatterns: sortPatterns(filter(patterns, isBlockPattern)),\n replacementPatterns: filter(patterns, isReplacementPattern)\n };\n };\n\n var get$1 = function (patternsState) {\n var setPatterns = function (newPatterns) {\n patternsState.set(createPatternSet(newPatterns));\n };\n var getPatterns = function () {\n return __spreadArrays(patternsState.get().inlinePatterns, patternsState.get().blockPatterns, patternsState.get().replacementPatterns);\n };\n return {\n setPatterns: setPatterns,\n getPatterns: getPatterns\n };\n };\n var Api = { get: get$1 };\n\n var defaultPatterns = [\n {\n start: '*',\n end: '*',\n format: 'italic'\n },\n {\n start: '**',\n end: '**',\n format: 'bold'\n },\n {\n start: '***',\n end: '***',\n format: [\n 'bold',\n 'italic'\n ]\n },\n {\n start: '#',\n format: 'h1'\n },\n {\n start: '##',\n format: 'h2'\n },\n {\n start: '###',\n format: 'h3'\n },\n {\n start: '####',\n format: 'h4'\n },\n {\n start: '#####',\n format: 'h5'\n },\n {\n start: '######',\n format: 'h6'\n },\n {\n start: '1. ',\n cmd: 'InsertOrderedList'\n },\n {\n start: '* ',\n cmd: 'InsertUnorderedList'\n },\n {\n start: '- ',\n cmd: 'InsertUnorderedList'\n }\n ];\n var getPatternSet = function (editorSettings) {\n var patterns = get(editorSettings, 'textpattern_patterns').getOr(defaultPatterns);\n return createPatternSet(patterns);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var findPattern = function (patterns, text) {\n for (var i = 0; i < patterns.length; i++) {\n var pattern = patterns[i];\n if (text.indexOf(pattern.start) !== 0) {\n continue;\n }\n if (pattern.end && text.lastIndexOf(pattern.end) !== text.length - pattern.end.length) {\n continue;\n }\n return pattern;\n }\n };\n var isMatchingPattern = function (pattern, text, offset, delta) {\n var textEnd = text.substr(offset - pattern.end.length - delta, pattern.end.length);\n return textEnd === pattern.end;\n };\n var hasContent = function (offset, delta, pattern) {\n return offset - delta - pattern.end.length - pattern.start.length > 0;\n };\n var findEndPattern = function (patterns, text, offset, delta) {\n var pattern, i;\n for (i = 0; i < patterns.length; i++) {\n pattern = patterns[i];\n if (pattern.end !== undefined && isMatchingPattern(pattern, text, offset, delta) && hasContent(offset, delta, pattern)) {\n return pattern;\n }\n }\n };\n var findInlinePattern = function (patterns, rng, space) {\n if (rng.collapsed === false) {\n return;\n }\n var container = rng.startContainer;\n var text = container.data;\n var delta = space === true ? 1 : 0;\n if (container.nodeType !== 3) {\n return;\n }\n var endPattern = findEndPattern(patterns, text, rng.startOffset, delta);\n if (endPattern === undefined) {\n return;\n }\n var endOffset = text.lastIndexOf(endPattern.end, rng.startOffset - delta);\n var startOffset = text.lastIndexOf(endPattern.start, endOffset - endPattern.end.length);\n endOffset = text.indexOf(endPattern.end, startOffset + endPattern.start.length);\n if (startOffset === -1) {\n return;\n }\n var patternRng = domGlobals.document.createRange();\n patternRng.setStart(container, startOffset);\n patternRng.setEnd(container, endOffset + endPattern.end.length);\n var startPattern = findPattern(patterns, patternRng.toString());\n if (endPattern === undefined || startPattern !== endPattern || container.data.length <= endPattern.start.length + endPattern.end.length) {\n return;\n }\n return {\n pattern: endPattern,\n startOffset: startOffset,\n endOffset: endOffset\n };\n };\n var findReplacementPattern = function (patterns, startSearch, text) {\n for (var i = 0; i < patterns.length; i++) {\n var index = text.lastIndexOf(patterns[i].start, startSearch);\n if (index !== -1) {\n return Option.some({\n pattern: patterns[i],\n startOffset: index\n });\n }\n }\n return Option.none();\n };\n\n var isText = function (node) {\n return node && node.nodeType === 3;\n };\n var setSelection = function (editor, textNode, offset) {\n var newRng = editor.dom.createRng();\n newRng.setStart(textNode, offset);\n newRng.setEnd(textNode, offset);\n editor.selection.setRng(newRng);\n };\n var splitContainer = function (container, pattern, endOffset, startOffset) {\n container = startOffset > 0 ? container.splitText(startOffset) : container;\n container.splitText(endOffset - startOffset + pattern.end.length);\n container.deleteData(0, pattern.start.length);\n container.deleteData(container.data.length - pattern.end.length, pattern.end.length);\n return container;\n };\n var splitAndApply = function (editor, container, found, inline) {\n var formatArray = global$4.isArray(found.pattern.format) ? found.pattern.format : [found.pattern.format];\n var validFormats = global$4.grep(formatArray, function (formatName) {\n var format = editor.formatter.get(formatName);\n return format && format[0].inline;\n });\n if (validFormats.length !== 0) {\n editor.undoManager.transact(function () {\n container = splitContainer(container, found.pattern, found.endOffset, found.startOffset);\n if (inline) {\n editor.selection.setCursorLocation(container.nextSibling, 1);\n }\n formatArray.forEach(function (format) {\n editor.formatter.apply(format, {}, container);\n });\n });\n return container;\n }\n };\n var applyInlinePattern = function (editor, patterns, inline) {\n var rng = editor.selection.getRng();\n return Option.from(findInlinePattern(patterns, rng, inline)).map(function (foundPattern) {\n return splitAndApply(editor, rng.startContainer, foundPattern, inline);\n });\n };\n var applyInlinePatternSpace = function (editor, patterns) {\n applyInlinePattern(editor, patterns, true).each(function (wrappedTextNode) {\n var lastChar = wrappedTextNode.data.slice(-1);\n if (/[\\u00a0 ]/.test(lastChar)) {\n wrappedTextNode.deleteData(wrappedTextNode.data.length - 1, 1);\n var lastCharNode = editor.dom.doc.createTextNode(lastChar);\n editor.dom.insertAfter(lastCharNode, wrappedTextNode.parentNode);\n setSelection(editor, lastCharNode, 1);\n }\n });\n };\n var applyInlinePatternEnter = function (editor, patterns) {\n applyInlinePattern(editor, patterns, false).each(function (wrappedTextNode) {\n setSelection(editor, wrappedTextNode, wrappedTextNode.data.length);\n });\n };\n var applyBlockPattern = function (editor, patterns) {\n var selection, dom, container, firstTextNode, node, format, textBlockElm, pattern, walker, rng, offset;\n selection = editor.selection;\n dom = editor.dom;\n if (!selection.isCollapsed()) {\n return;\n }\n textBlockElm = dom.getParent(selection.getStart(), 'p');\n if (textBlockElm) {\n walker = new global$3(textBlockElm, textBlockElm);\n while (node = walker.next()) {\n if (isText(node)) {\n firstTextNode = node;\n break;\n }\n }\n if (firstTextNode) {\n pattern = findPattern(patterns, firstTextNode.data);\n if (!pattern) {\n return;\n }\n rng = selection.getRng(true);\n container = rng.startContainer;\n offset = rng.startOffset;\n if (firstTextNode === container) {\n offset = Math.max(0, offset - pattern.start.length);\n }\n if (global$4.trim(firstTextNode.data).length === pattern.start.length) {\n return;\n }\n if (pattern.format) {\n format = editor.formatter.get(pattern.format);\n if (format && format[0].block) {\n firstTextNode.deleteData(0, pattern.start.length);\n editor.formatter.apply(pattern.format, {}, firstTextNode);\n rng.setStart(container, offset);\n rng.collapse(true);\n selection.setRng(rng);\n }\n }\n if (pattern.cmd) {\n editor.undoManager.transact(function () {\n firstTextNode.deleteData(0, pattern.start.length);\n editor.execCommand(pattern.cmd);\n });\n }\n }\n }\n };\n var selectionInsertText = function (editor, string) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n if (isText(container)) {\n var offset = rng.startOffset;\n container.insertData(offset, string);\n setSelection(editor, container, offset + string.length);\n } else {\n var newNode = editor.dom.doc.createTextNode(string);\n rng.insertNode(newNode);\n setSelection(editor, newNode, newNode.length);\n }\n };\n var applyReplacement = function (editor, target, match) {\n target.deleteData(match.startOffset, match.pattern.start.length);\n editor.insertContent(match.pattern.replacement);\n Option.from(target.nextSibling).filter(isText).each(function (nextSibling) {\n nextSibling.insertData(0, target.data);\n editor.dom.remove(target);\n });\n };\n var extractChar = function (node, match) {\n var offset = match.startOffset + match.pattern.start.length;\n var char = node.data.slice(offset, offset + 1);\n node.deleteData(offset, 1);\n return char;\n };\n var applyReplacementPattern = function (editor, patterns, inline) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n if (rng.collapsed && isText(container)) {\n findReplacementPattern(patterns, rng.startOffset, container.data).each(function (match) {\n var char = inline ? Option.some(extractChar(container, match)) : Option.none();\n applyReplacement(editor, container, match);\n char.each(function (ch) {\n return selectionInsertText(editor, ch);\n });\n });\n }\n };\n var applyReplacementPatternSpace = function (editor, patterns) {\n applyReplacementPattern(editor, patterns, true);\n };\n var applyReplacementPatternEnter = function (editor, patterns) {\n applyReplacementPattern(editor, patterns, false);\n };\n\n var handleEnter = function (editor, patternSet) {\n applyReplacementPatternEnter(editor, patternSet.replacementPatterns);\n applyInlinePatternEnter(editor, patternSet.inlinePatterns);\n applyBlockPattern(editor, patternSet.blockPatterns);\n };\n var handleInlineKey = function (editor, patternSet) {\n applyReplacementPatternSpace(editor, patternSet.replacementPatterns);\n applyInlinePatternSpace(editor, patternSet.inlinePatterns);\n };\n var checkKeyEvent = function (codes, event, predicate) {\n for (var i = 0; i < codes.length; i++) {\n if (predicate(codes[i], event)) {\n return true;\n }\n }\n };\n var checkKeyCode = function (codes, event) {\n return checkKeyEvent(codes, event, function (code, event) {\n return code === event.keyCode && global$2.modifierPressed(event) === false;\n });\n };\n var checkCharCode = function (chars, event) {\n return checkKeyEvent(chars, event, function (chr, event) {\n return chr.charCodeAt(0) === event.charCode;\n });\n };\n var KeyHandler = {\n handleEnter: handleEnter,\n handleInlineKey: handleInlineKey,\n checkCharCode: checkCharCode,\n checkKeyCode: checkKeyCode\n };\n\n var setup = function (editor, patternsState) {\n var charCodes = [\n ',',\n '.',\n ';',\n ':',\n '!',\n '?'\n ];\n var keyCodes = [32];\n editor.on('keydown', function (e) {\n if (e.keyCode === 13 && !global$2.modifierPressed(e)) {\n KeyHandler.handleEnter(editor, patternsState.get());\n }\n }, true);\n editor.on('keyup', function (e) {\n if (KeyHandler.checkKeyCode(keyCodes, e)) {\n KeyHandler.handleInlineKey(editor, patternsState.get());\n }\n });\n editor.on('keypress', function (e) {\n if (KeyHandler.checkCharCode(charCodes, e)) {\n global$1.setEditorTimeout(editor, function () {\n KeyHandler.handleInlineKey(editor, patternsState.get());\n });\n }\n });\n };\n var Keyboard = { setup: setup };\n\n global.add('textpattern', function (editor) {\n var patternsState = Cell(getPatternSet(editor.settings));\n Keyboard.setup(editor, patternsState);\n return Api.get(patternsState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"media\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/media')\n// ES2015:\n// import 'tinymce/plugins/media'\nrequire('./plugin.js');","// Exports the \"link\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/link')\n// ES2015:\n// import 'tinymce/plugins/link'\nrequire('./plugin.js');","// Exports the \"insertdatetime\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/insertdatetime')\n// ES2015:\n// import 'tinymce/plugins/insertdatetime'\nrequire('./plugin.js');","(function () {\nvar visualblocks = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var fireVisualBlocks = function (editor, state) {\n editor.fire('VisualBlocks', { state: state });\n };\n var Events = { fireVisualBlocks: fireVisualBlocks };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualblocks_default_state', false);\n };\n var getContentCss = function (editor) {\n return editor.settings.visualblocks_content_css;\n };\n var Settings = {\n isEnabledByDefault: isEnabledByDefault,\n getContentCss: getContentCss\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var cssId = global$1.DOM.uniqueId();\n var load = function (doc, url) {\n var linkElements = global$2.toArray(doc.getElementsByTagName('link'));\n var matchingLinkElms = global$2.grep(linkElements, function (head) {\n return head.id === cssId;\n });\n if (matchingLinkElms.length === 0) {\n var linkElm = global$1.DOM.create('link', {\n id: cssId,\n rel: 'stylesheet',\n href: url\n });\n doc.getElementsByTagName('head')[0].appendChild(linkElm);\n }\n };\n var LoadCss = { load: load };\n\n var toggleVisualBlocks = function (editor, pluginUrl, enabledState) {\n var dom = editor.dom;\n var contentCss = Settings.getContentCss(editor);\n LoadCss.load(editor.getDoc(), contentCss ? contentCss : pluginUrl + '/css/visualblocks.css');\n dom.toggleClass(editor.getBody(), 'mce-visualblocks');\n enabledState.set(!enabledState.get());\n Events.fireVisualBlocks(editor, enabledState.get());\n };\n var VisualBlocks = { toggleVisualBlocks: toggleVisualBlocks };\n\n var register = function (editor, pluginUrl, enabledState) {\n editor.addCommand('mceVisualBlocks', function () {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor, pluginUrl, enabledState) {\n editor.on('PreviewFormats AfterPreviewFormats', function (e) {\n if (enabledState.get()) {\n editor.dom.toggleClass(editor.getBody(), 'mce-visualblocks', e.type === 'afterpreviewformats');\n }\n });\n editor.on('init', function () {\n if (Settings.isEnabledByDefault(editor)) {\n VisualBlocks.toggleVisualBlocks(editor, pluginUrl, enabledState);\n }\n });\n editor.on('remove', function () {\n editor.dom.removeClass(editor.getBody(), 'mce-visualblocks');\n });\n };\n var Bindings = { setup: setup };\n\n var toggleActiveState = function (editor, enabledState) {\n return function (e) {\n var ctrl = e.control;\n ctrl.active(enabledState.get());\n editor.on('VisualBlocks', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor, enabledState) {\n editor.addButton('visualblocks', {\n active: false,\n title: 'Show blocks',\n cmd: 'mceVisualBlocks',\n onPostRender: toggleActiveState(editor, enabledState)\n });\n editor.addMenuItem('visualblocks', {\n text: 'Show blocks',\n cmd: 'mceVisualBlocks',\n onPostRender: toggleActiveState(editor, enabledState),\n selectable: true,\n context: 'view',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('visualblocks', function (editor, pluginUrl) {\n var enabledState = Cell(false);\n Commands.register(editor, pluginUrl, enabledState);\n Buttons.register(editor, enabledState);\n Bindings.setup(editor, pluginUrl, enabledState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"image\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/image')\n// ES2015:\n// import 'tinymce/plugins/image'\nrequire('./plugin.js');","// Exports the \"tabletools\" plugin for usage with module loaders\r\n// Usage:\r\n// CommonJS:\r\n// require('tinymce/plugins/tabletools')\r\n// ES2015:\r\n// import 'tinymce/plugins/tabletools'\r\nrequire('./plugin.js');\r\n","(function () {\nvar contextmenu = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (visibleState) {\n var isContextMenuVisible = function () {\n return visibleState.get();\n };\n return { isContextMenuVisible: isContextMenuVisible };\n };\n var Api = { get: get };\n\n var shouldNeverUseNative = function (editor) {\n return editor.settings.contextmenu_never_use_native;\n };\n var getContextMenu = function (editor) {\n return editor.getParam('contextmenu', 'link openlink image inserttable | cell row column deletetable');\n };\n var Settings = {\n shouldNeverUseNative: shouldNeverUseNative,\n getContextMenu: getContextMenu\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getUiContainer = function (editor) {\n return global$1.DOM.select(editor.settings.ui_container)[0];\n };\n\n var nu = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var transpose = function (pos, dx, dy) {\n return nu(pos.x + dx, pos.y + dy);\n };\n var fromPageXY = function (e) {\n return nu(e.pageX, e.pageY);\n };\n var fromClientXY = function (e) {\n return nu(e.clientX, e.clientY);\n };\n var transposeUiContainer = function (element, pos) {\n if (element && global$1.DOM.getStyle(element, 'position', true) !== 'static') {\n var containerPos = global$1.DOM.getPos(element);\n var dx = containerPos.x - element.scrollLeft;\n var dy = containerPos.y - element.scrollTop;\n return transpose(pos, -dx, -dy);\n } else {\n return transpose(pos, 0, 0);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$1.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n var getPos = function (editor, e) {\n if (editor.inline) {\n return transposeUiContainer(getUiContainer(editor), fromPageXY(e));\n } else {\n var iframePos = transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n return transposeUiContainer(getUiContainer(editor), iframePos);\n }\n };\n var Coords = { getPos: getPos };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var renderMenu = function (editor, visibleState) {\n var menu, contextmenu;\n var items = [];\n contextmenu = Settings.getContextMenu(editor);\n global$3.each(contextmenu.split(/[ ,]/), function (name) {\n var item = editor.menuItems[name];\n if (name === '|') {\n item = { text: name };\n }\n if (item) {\n item.shortcut = '';\n items.push(item);\n }\n });\n for (var i = 0; i < items.length; i++) {\n if (items[i].text === '|') {\n if (i === 0 || i === items.length - 1) {\n items.splice(i, 1);\n }\n }\n }\n menu = global$2.create('menu', {\n items: items,\n context: 'contextmenu',\n classes: 'contextmenu'\n });\n menu.uiContainer = getUiContainer(editor);\n menu.renderTo(getUiContainer(editor));\n menu.on('hide', function (e) {\n if (e.control === this) {\n visibleState.set(false);\n }\n });\n editor.on('remove', function () {\n menu.remove();\n menu = null;\n });\n return menu;\n };\n var show = function (editor, pos, visibleState, menu) {\n if (menu.get() === null) {\n menu.set(renderMenu(editor, visibleState));\n } else {\n menu.get().show();\n }\n menu.get().moveTo(pos.x, pos.y);\n visibleState.set(true);\n };\n var ContextMenu = { show: show };\n\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !Settings.shouldNeverUseNative(editor);\n };\n var setup = function (editor, visibleState, menu) {\n editor.on('contextmenu', function (e) {\n if (isNativeOverrideKeyEvent(editor, e)) {\n return;\n }\n e.preventDefault();\n ContextMenu.show(editor, Coords.getPos(editor, e), visibleState, menu);\n });\n };\n var Bind = { setup: setup };\n\n global.add('contextmenu', function (editor) {\n var menu = Cell(null), visibleState = Cell(false);\n Bind.setup(editor, visibleState, menu);\n return Api.get(visibleState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"searchreplace\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/searchreplace')\n// ES2015:\n// import 'tinymce/plugins/searchreplace'\nrequire('./plugin.js');","// Exports the \"code\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/code')\n// ES2015:\n// import 'tinymce/plugins/code'\nrequire('./plugin.js');","// Exports the \"save\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/save')\n// ES2015:\n// import 'tinymce/plugins/save'\nrequire('./plugin.js');","// Exports the \"emoticons\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/emoticons')\n// ES2015:\n// import 'tinymce/plugins/emoticons'\nrequire('./plugin.js');","// Exports the \"autoresize\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autoresize')\n// ES2015:\n// import 'tinymce/plugins/autoresize'\nrequire('./plugin.js');","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","(function () {\nvar save = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var enableWhenDirty = function (editor) {\n return editor.getParam('save_enablewhendirty', true);\n };\n var hasOnSaveCallback = function (editor) {\n return !!editor.getParam('save_onsavecallback');\n };\n var hasOnCancelCallback = function (editor) {\n return !!editor.getParam('save_oncancelcallback');\n };\n var Settings = {\n enableWhenDirty: enableWhenDirty,\n hasOnSaveCallback: hasOnSaveCallback,\n hasOnCancelCallback: hasOnCancelCallback\n };\n\n var displayErrorMessage = function (editor, message) {\n editor.notificationManager.open({\n text: editor.translate(message),\n type: 'error'\n });\n };\n var save = function (editor) {\n var formObj;\n formObj = global$1.DOM.getParent(editor.id, 'form');\n if (Settings.enableWhenDirty(editor) && !editor.isDirty()) {\n return;\n }\n editor.save();\n if (Settings.hasOnSaveCallback(editor)) {\n editor.execCallback('save_onsavecallback', editor);\n editor.nodeChanged();\n return;\n }\n if (formObj) {\n editor.setDirty(false);\n if (!formObj.onsubmit || formObj.onsubmit()) {\n if (typeof formObj.submit === 'function') {\n formObj.submit();\n } else {\n displayErrorMessage(editor, 'Error: Form submit field collision.');\n }\n }\n editor.nodeChanged();\n } else {\n displayErrorMessage(editor, 'Error: No form element found.');\n }\n };\n var cancel = function (editor) {\n var h = global$2.trim(editor.startContent);\n if (Settings.hasOnCancelCallback(editor)) {\n editor.execCallback('save_oncancelcallback', editor);\n return;\n }\n editor.setContent(h);\n editor.undoManager.clear();\n editor.nodeChanged();\n };\n var Actions = {\n save: save,\n cancel: cancel\n };\n\n var register = function (editor) {\n editor.addCommand('mceSave', function () {\n Actions.save(editor);\n });\n editor.addCommand('mceCancel', function () {\n Actions.cancel(editor);\n });\n };\n var Commands = { register: register };\n\n var stateToggle = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('nodeChange dirty', function () {\n ctrl.disabled(Settings.enableWhenDirty(editor) && !editor.isDirty());\n });\n };\n };\n var register$1 = function (editor) {\n editor.addButton('save', {\n icon: 'save',\n text: 'Save',\n cmd: 'mceSave',\n disabled: true,\n onPostRender: stateToggle(editor)\n });\n editor.addButton('cancel', {\n text: 'Cancel',\n icon: false,\n cmd: 'mceCancel',\n disabled: true,\n onPostRender: stateToggle(editor)\n });\n editor.addShortcut('Meta+S', '', 'mceSave');\n };\n var Buttons = { register: register$1 };\n\n global.add('save', function (editor) {\n Buttons.register(editor);\n Commands.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"textpattern\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textpattern')\n// ES2015:\n// import 'tinymce/plugins/textpattern'\nrequire('./plugin.js');","(function () {\nvar modern = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var isBrandingEnabled = function (editor) {\n return editor.getParam('branding', true, 'boolean');\n };\n var hasMenubar = function (editor) {\n return getMenubar(editor) !== false;\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var hasStatusbar = function (editor) {\n return editor.getParam('statusbar', true, 'boolean');\n };\n var getToolbarSize = function (editor) {\n return editor.getParam('toolbar_items_size');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var getFixedToolbarContainer = function (editor) {\n return editor.getParam('fixed_toolbar_container');\n };\n var getInlineToolbarPositionHandler = function (editor) {\n return editor.getParam('inline_toolbar_position_handler');\n };\n var getMenu = function (editor) {\n return editor.getParam('menu');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var getMinWidth = function (editor) {\n return editor.getParam('min_width', 100, 'number');\n };\n var getMinHeight = function (editor) {\n return editor.getParam('min_height', 100, 'number');\n };\n var getMaxWidth = function (editor) {\n return editor.getParam('max_width', 65535, 'number');\n };\n var getMaxHeight = function (editor) {\n return editor.getParam('max_height', 65535, 'number');\n };\n var isSkinDisabled = function (editor) {\n return editor.settings.skin === false;\n };\n var isInline = function (editor) {\n return editor.getParam('inline', false, 'boolean');\n };\n var getResize = function (editor) {\n var resize = editor.getParam('resize', 'vertical');\n if (resize === false) {\n return 'none';\n } else if (resize === 'both') {\n return 'both';\n } else {\n return 'vertical';\n }\n };\n var getSkinUrl = function (editor) {\n var settings = editor.settings;\n var skin = settings.skin;\n var skinUrl = settings.skin_url;\n if (skin !== false) {\n var skinName = skin ? skin : 'lightgray';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$1.baseURL + '/skins/' + skinName;\n }\n }\n return skinUrl;\n };\n var getIndexedToolbars = function (settings, defaultToolbar) {\n var toolbars = [];\n for (var i = 1; i < 10; i++) {\n var toolbar = settings['toolbar' + i];\n if (!toolbar) {\n break;\n }\n toolbars.push(toolbar);\n }\n var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\n return toolbars.length > 0 ? toolbars : mainToolbar;\n };\n var getToolbars = function (editor) {\n var toolbar = editor.getParam('toolbar');\n var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\n if (toolbar === false) {\n return [];\n } else if (global$2.isArray(toolbar)) {\n return global$2.grep(toolbar, function (toolbar) {\n return toolbar.length > 0;\n });\n } else {\n return getIndexedToolbars(editor.settings, defaultToolbar);\n }\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireBeforeRenderUI = function (editor) {\n return editor.fire('BeforeRenderUI');\n };\n var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireResizeEditor: fireResizeEditor,\n fireBeforeRenderUI: fireBeforeRenderUI\n };\n\n var focus = function (panel, type) {\n return function () {\n var item = panel.find(type)[0];\n if (item) {\n item.focus(true);\n }\n };\n };\n var addKeys = function (editor, panel) {\n editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\n editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\n editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\n panel.on('cancel', function () {\n editor.focus();\n });\n };\n var A11y = { addKeys: addKeys };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var getUiContainerDelta = function (ctrl) {\n var uiContainer = getUiContainer(ctrl);\n if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\n var containerPos = global$3.DOM.getPos(uiContainer);\n var dx = uiContainer.scrollLeft - containerPos.x;\n var dy = uiContainer.scrollTop - containerPos.y;\n return Option.some({\n x: dx,\n y: dy\n });\n } else {\n return Option.none();\n }\n };\n var setUiContainer = function (editor, ctrl) {\n var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\n ctrl.getRoot().uiContainer = uiContainer;\n };\n var getUiContainer = function (ctrl) {\n return ctrl ? ctrl.getRoot().uiContainer : null;\n };\n var inheritUiContainer = function (fromCtrl, toCtrl) {\n return toCtrl.uiContainer = getUiContainer(fromCtrl);\n };\n var UiContainer = {\n getUiContainerDelta: getUiContainerDelta,\n setUiContainer: setUiContainer,\n getUiContainer: getUiContainer,\n inheritUiContainer: inheritUiContainer\n };\n\n var createToolbar = function (editor, items, size) {\n var toolbarItems = [];\n var buttonGroup;\n if (!items) {\n return;\n }\n global$2.each(items.split(/[ ,]/), function (item) {\n var itemName;\n var bindSelectorChanged = function () {\n var selection = editor.selection;\n if (item.settings.stateSelector) {\n selection.selectorChanged(item.settings.stateSelector, function (state) {\n item.active(state);\n }, true);\n }\n if (item.settings.disabledStateSelector) {\n selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\n item.disabled(state);\n });\n }\n };\n if (item === '|') {\n buttonGroup = null;\n } else {\n if (!buttonGroup) {\n buttonGroup = {\n type: 'buttongroup',\n items: []\n };\n toolbarItems.push(buttonGroup);\n }\n if (editor.buttons[item]) {\n itemName = item;\n item = editor.buttons[itemName];\n if (typeof item === 'function') {\n item = item();\n }\n item.type = item.type || 'button';\n item.size = size;\n item = global$4.create(item);\n buttonGroup.items.push(item);\n if (editor.initialized) {\n bindSelectorChanged();\n } else {\n editor.on('init', bindSelectorChanged);\n }\n }\n }\n });\n return {\n type: 'toolbar',\n layout: 'flow',\n items: toolbarItems\n };\n };\n var createToolbars = function (editor, size) {\n var toolbars = [];\n var addToolbar = function (items) {\n if (items) {\n toolbars.push(createToolbar(editor, items, size));\n }\n };\n global$2.each(getToolbars(editor), function (toolbar) {\n addToolbar(toolbar);\n });\n if (toolbars.length) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'toolbar-grp',\n ariaRoot: true,\n ariaRemember: true,\n items: toolbars\n };\n }\n };\n var Toolbar = {\n createToolbar: createToolbar,\n createToolbars: createToolbars\n };\n\n var DOM = global$3.DOM;\n var toClientRect = function (geomRect) {\n return {\n left: geomRect.x,\n top: geomRect.y,\n width: geomRect.w,\n height: geomRect.h,\n right: geomRect.x + geomRect.w,\n bottom: geomRect.y + geomRect.h\n };\n };\n var hideAllFloatingPanels = function (editor) {\n global$2.each(editor.contextToolbars, function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var movePanelTo = function (panel, pos) {\n panel.moveTo(pos.left, pos.top);\n };\n var togglePositionClass = function (panel, relPos, predicate) {\n relPos = relPos ? relPos.substr(0, 2) : '';\n global$2.each({\n t: 'down',\n b: 'up'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\n });\n global$2.each({\n l: 'left',\n r: 'right'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\n });\n };\n var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\n panelRect = toClientRect({\n x: x,\n y: y,\n w: panelRect.w,\n h: panelRect.h\n });\n if (handler) {\n panelRect = handler({\n elementRect: toClientRect(elementRect),\n contentAreaRect: toClientRect(contentAreaRect),\n panelRect: panelRect\n });\n }\n return panelRect;\n };\n var addContextualToolbars = function (editor) {\n var scrollContainer;\n var getContextToolbars = function () {\n return editor.contextToolbars || [];\n };\n var getElementRect = function (elm) {\n var pos, targetRect, root;\n pos = DOM.getPos(editor.getContentAreaContainer());\n targetRect = editor.dom.getRect(elm);\n root = editor.dom.getRoot();\n if (root.nodeName === 'BODY') {\n targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n }\n targetRect.x += pos.x;\n targetRect.y += pos.y;\n return targetRect;\n };\n var reposition = function (match, shouldShow) {\n var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\n var handler = getInlineToolbarPositionHandler(editor);\n if (editor.removed) {\n return;\n }\n if (!match || !match.toolbar.panel) {\n hideAllFloatingPanels(editor);\n return;\n }\n testPositions = [\n 'bc-tc',\n 'tc-bc',\n 'tl-bl',\n 'bl-tl',\n 'tr-br',\n 'br-tr'\n ];\n panel = match.toolbar.panel;\n if (shouldShow) {\n panel.show();\n }\n elementRect = getElementRect(match.element);\n panelRect = DOM.getRect(panel.getEl());\n contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\n var delta = UiContainer.getUiContainerDelta(panel).getOr({\n x: 0,\n y: 0\n });\n elementRect.x += delta.x;\n elementRect.y += delta.y;\n panelRect.x += delta.x;\n panelRect.y += delta.y;\n contentAreaRect.x += delta.x;\n contentAreaRect.y += delta.y;\n smallElementWidthThreshold = 25;\n if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\n var clientRect = match.element.getBoundingClientRect();\n elementRect.w = clientRect.width;\n elementRect.h = clientRect.height;\n }\n if (!editor.inline) {\n contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\n }\n if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\n elementRect = global$6.inflate(elementRect, 0, 8);\n }\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\n elementRect = global$6.clamp(elementRect, contentAreaRect);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n contentAreaRect.h += panelRect.h;\n elementRect = global$6.intersect(contentAreaRect, elementRect);\n if (elementRect) {\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\n 'bc-tc',\n 'bl-tl',\n 'br-tr'\n ]);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\n }\n } else {\n panel.hide();\n }\n }\n togglePositionClass(panel, relPos, function (pos1, pos2) {\n return pos1 === pos2;\n });\n };\n var repositionHandler = function (show) {\n return function () {\n var execute = function () {\n if (editor.selection) {\n reposition(findFrontMostMatch(editor.selection.getNode()), show);\n }\n };\n global$7.requestAnimationFrame(execute);\n };\n };\n var bindScrollEvent = function (panel) {\n if (!scrollContainer) {\n var reposition_1 = repositionHandler(true);\n var uiContainer_1 = UiContainer.getUiContainer(panel);\n scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\n DOM.bind(scrollContainer, 'scroll', reposition_1);\n DOM.bind(uiContainer_1, 'scroll', reposition_1);\n editor.on('remove', function () {\n DOM.unbind(scrollContainer, 'scroll', reposition_1);\n DOM.unbind(uiContainer_1, 'scroll', reposition_1);\n });\n }\n };\n var showContextToolbar = function (match) {\n var panel;\n if (match.toolbar.panel) {\n match.toolbar.panel.show();\n reposition(match);\n return;\n }\n panel = global$4.create({\n type: 'floatpanel',\n role: 'dialog',\n classes: 'tinymce tinymce-inline arrow',\n ariaLabel: 'Inline toolbar',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: true,\n border: 1,\n items: Toolbar.createToolbar(editor, match.toolbar.items),\n oncancel: function () {\n editor.focus();\n }\n });\n UiContainer.setUiContainer(editor, panel);\n bindScrollEvent(panel);\n match.toolbar.panel = panel;\n panel.renderTo().reflow();\n reposition(match);\n };\n var hideAllContextToolbars = function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var findFrontMostMatch = function (targetElm) {\n var i, y, parentsAndSelf;\n var toolbars = getContextToolbars();\n parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\n for (i = parentsAndSelf.length - 1; i >= 0; i--) {\n for (y = toolbars.length - 1; y >= 0; y--) {\n if (toolbars[y].predicate(parentsAndSelf[i])) {\n return {\n toolbar: toolbars[y],\n element: parentsAndSelf[i]\n };\n }\n }\n }\n return null;\n };\n editor.on('click keyup setContent ObjectResized', function (e) {\n if (e.type === 'setcontent' && !e.selection) {\n return;\n }\n global$7.setEditorTimeout(editor, function () {\n var match;\n match = findFrontMostMatch(editor.selection.getNode());\n if (match) {\n hideAllContextToolbars();\n showContextToolbar(match);\n } else {\n hideAllContextToolbars();\n }\n });\n });\n editor.on('blur hide contextmenu', hideAllContextToolbars);\n editor.on('ObjectResizeStart', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.hide();\n }\n });\n editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\n editor.on('nodeChange', repositionHandler(false));\n editor.on('remove', function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.remove();\n }\n });\n editor.contextToolbars = {};\n });\n editor.shortcuts.add('ctrl+F9', '', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.items()[0].focus();\n }\n });\n };\n var ContextToolbars = { addContextualToolbars: addContextualToolbars };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isArray = isType('array');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | print'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\n },\n insert: {\n title: 'Insert',\n items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code'\n },\n table: { title: 'Table' },\n help: { title: 'Help' }\n };\n var delimiterMenuNamePair = function () {\n return {\n name: '|',\n item: { text: '|' }\n };\n };\n var createMenuNameItemPair = function (name, item) {\n var menuItem = item ? {\n name: name,\n item: item\n } : null;\n return name === '|' ? delimiterMenuNamePair() : menuItem;\n };\n var hasItemName = function (namedMenuItems, name) {\n return findIndex(namedMenuItems, function (namedMenuItem) {\n return namedMenuItem.name === name;\n }).isSome();\n };\n var isSeparator = function (namedMenuItem) {\n return namedMenuItem && namedMenuItem.item.text === '|';\n };\n var cleanupMenu = function (namedMenuItems, removedMenuItems) {\n var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\n return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\n });\n var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\n });\n return filter(menuItemsPass2, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\n });\n };\n var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\n var menuButton, menu, namedMenuItems, isUserDefined;\n if (menus) {\n menu = menus[context];\n isUserDefined = true;\n } else {\n menu = defaultMenus[context];\n }\n if (menu) {\n menuButton = { text: menu.title };\n namedMenuItems = [];\n global$2.each((menu.items || '').split(/[ ,]/), function (name) {\n var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\n if (namedMenuItem) {\n namedMenuItems.push(namedMenuItem);\n }\n });\n if (!isUserDefined) {\n global$2.each(editorMenuItems, function (item, name) {\n if (item.context === context && !hasItemName(namedMenuItems, name)) {\n if (item.separator === 'before') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n if (item.prependToContext) {\n namedMenuItems.unshift(createMenuNameItemPair(name, item));\n } else {\n namedMenuItems.push(createMenuNameItemPair(name, item));\n }\n if (item.separator === 'after') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n }\n });\n }\n menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\n return menuItem.item;\n });\n if (!menuButton.menu.length) {\n return null;\n }\n }\n return menuButton;\n };\n var getDefaultMenubar = function (editor) {\n var name;\n var defaultMenuBar = [];\n var menu = getMenu(editor);\n if (menu) {\n for (name in menu) {\n defaultMenuBar.push(name);\n }\n } else {\n for (name in defaultMenus) {\n defaultMenuBar.push(name);\n }\n }\n return defaultMenuBar;\n };\n var createMenuButtons = function (editor) {\n var menuButtons = [];\n var defaultMenuBar = getDefaultMenubar(editor);\n var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\n var menubar = getMenubar(editor);\n var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\n for (var i = 0; i < enabledMenuNames.length; i++) {\n var menuItems = enabledMenuNames[i];\n var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\n if (menu) {\n menuButtons.push(menu);\n }\n }\n return menuButtons;\n };\n var Menubar = { createMenuButtons: createMenuButtons };\n\n var DOM$1 = global$3.DOM;\n var getSize = function (elm) {\n return {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n };\n var resizeTo = function (editor, width, height) {\n var containerElm, iframeElm, containerSize, iframeSize;\n containerElm = editor.getContainer();\n iframeElm = editor.getContentAreaContainer().firstChild;\n containerSize = getSize(containerElm);\n iframeSize = getSize(iframeElm);\n if (width !== null) {\n width = Math.max(getMinWidth(editor), width);\n width = Math.min(getMaxWidth(editor), width);\n DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\n DOM$1.setStyle(iframeElm, 'width', width);\n }\n height = Math.max(getMinHeight(editor), height);\n height = Math.min(getMaxHeight(editor), height);\n DOM$1.setStyle(iframeElm, 'height', height);\n Events.fireResizeEditor(editor);\n };\n var resizeBy = function (editor, dw, dh) {\n var elm = editor.getContentAreaContainer();\n resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\n };\n var Resize = {\n resizeTo: resizeTo,\n resizeBy: resizeBy\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var api = function (elm) {\n return {\n element: function () {\n return elm;\n }\n };\n };\n var trigger = function (sidebar, panel, callbackName) {\n var callback = sidebar.settings[callbackName];\n if (callback) {\n callback(api(panel.getEl('body')));\n }\n };\n var hidePanels = function (name, container, sidebars) {\n global$2.each(sidebars, function (sidebar) {\n var panel = container.items().filter('#' + sidebar.name)[0];\n if (panel && panel.visible() && sidebar.name !== name) {\n trigger(sidebar, panel, 'onhide');\n panel.visible(false);\n }\n });\n };\n var deactivateButtons = function (toolbar) {\n toolbar.items().each(function (ctrl) {\n ctrl.active(false);\n });\n };\n var findSidebar = function (sidebars, name) {\n return global$2.grep(sidebars, function (sidebar) {\n return sidebar.name === name;\n })[0];\n };\n var showPanel = function (editor, name, sidebars) {\n return function (e) {\n var btnCtrl = e.control;\n var container = btnCtrl.parents().filter('panel')[0];\n var panel = container.find('#' + name)[0];\n var sidebar = findSidebar(sidebars, name);\n hidePanels(name, container, sidebars);\n deactivateButtons(btnCtrl.parent());\n if (panel && panel.visible()) {\n trigger(sidebar, panel, 'onhide');\n panel.hide();\n btnCtrl.active(false);\n } else {\n if (panel) {\n panel.show();\n trigger(sidebar, panel, 'onshow');\n } else {\n panel = global$4.create({\n type: 'container',\n name: name,\n layout: 'stack',\n classes: 'sidebar-panel',\n html: ''\n });\n container.prepend(panel);\n trigger(sidebar, panel, 'onrender');\n trigger(sidebar, panel, 'onshow');\n }\n btnCtrl.active(true);\n }\n Events.fireResizeEditor(editor);\n };\n };\n var isModernBrowser = function () {\n return !global$8.ie || global$8.ie >= 11;\n };\n var hasSidebar = function (editor) {\n return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\n };\n var createSidebar = function (editor) {\n var buttons = global$2.map(editor.sidebars, function (sidebar) {\n var settings = sidebar.settings;\n return {\n type: 'button',\n icon: settings.icon,\n image: settings.image,\n tooltip: settings.tooltip,\n onclick: showPanel(editor, sidebar.name, editor.sidebars)\n };\n });\n return {\n type: 'panel',\n name: 'sidebar',\n layout: 'stack',\n classes: 'sidebar',\n items: [{\n type: 'toolbar',\n layout: 'stack',\n classes: 'sidebar-toolbar',\n items: buttons\n }]\n };\n };\n var Sidebar = {\n hasSidebar: hasSidebar,\n createSidebar: createSidebar\n };\n\n var fireSkinLoaded$1 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n Events.fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\n\n var DOM$2 = global$3.DOM;\n var switchMode = function (panel) {\n return function (e) {\n panel.find('*').disabled(e.mode === 'readonly');\n };\n };\n var editArea = function (border) {\n return {\n type: 'panel',\n name: 'iframe',\n layout: 'stack',\n classes: 'edit-area',\n border: border,\n html: ''\n };\n };\n var editAreaContainer = function (editor) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'edit-aria-container',\n border: '1 0 0 0',\n items: [\n editArea('0'),\n Sidebar.createSidebar(editor)\n ]\n };\n };\n var render = function (editor, theme, args) {\n var panel, resizeHandleCtrl, startSize;\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n panel = theme.panel = global$4.create({\n type: 'panel',\n role: 'application',\n classes: 'tinymce',\n style: 'visibility: hidden',\n layout: 'stack',\n border: 1,\n items: [\n {\n type: 'container',\n classes: 'top-part',\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n },\n Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n if (getResize(editor) !== 'none') {\n resizeHandleCtrl = {\n type: 'resizehandle',\n direction: getResize(editor),\n onResizeStart: function () {\n var elm = editor.getContentAreaContainer().firstChild;\n startSize = {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n },\n onResize: function (e) {\n if (getResize(editor) === 'both') {\n Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\n } else {\n Resize.resizeTo(editor, null, startSize.height + e.deltaY);\n }\n }\n };\n }\n if (hasStatusbar(editor)) {\n var linkHtml = 'Tiny';\n var html = global$5.translate([\n 'Powered by {0}',\n linkHtml\n ]);\n var brandingLabel = isBrandingEnabled(editor) ? {\n type: 'label',\n classes: 'branding',\n html: ' ' + html\n } : null;\n panel.add({\n type: 'panel',\n name: 'statusbar',\n classes: 'statusbar',\n layout: 'flow',\n border: '1 0 0 0',\n ariaRoot: true,\n items: [\n {\n type: 'elementpath',\n editor: editor\n },\n resizeHandleCtrl,\n brandingLabel\n ]\n });\n }\n Events.fireBeforeRenderUI(editor);\n editor.on('SwitchMode', switchMode(panel));\n panel.renderBefore(args.targetNode).reflow();\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n if (args.width) {\n DOM$2.setStyle(panel.getEl(), 'width', args.width);\n }\n editor.on('remove', function () {\n panel.remove();\n panel = null;\n });\n A11y.addKeys(editor, panel);\n ContextToolbars.addContextualToolbars(editor);\n return {\n iframeContainer: panel.find('#iframe')[0].getEl(),\n editorContainer: panel.getEl()\n };\n };\n var Iframe = { render: render };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var count = 0;\n var funcs = {\n id: function () {\n return 'mceu_' + count++;\n },\n create: function (name, attrs, children) {\n var elm = domGlobals.document.createElement(name);\n global$3.DOM.setAttribs(elm, attrs);\n if (typeof children === 'string') {\n elm.innerHTML = children;\n } else {\n global$2.each(children, function (child) {\n if (child.nodeType) {\n elm.appendChild(child);\n }\n });\n }\n return elm;\n },\n createFragment: function (html) {\n return global$3.DOM.createFragment(html);\n },\n getWindowSize: function () {\n return global$3.DOM.getViewPort();\n },\n getSize: function (elm) {\n var width, height;\n if (elm.getBoundingClientRect) {\n var rect = elm.getBoundingClientRect();\n width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\n height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\n } else {\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n }\n return {\n width: width,\n height: height\n };\n },\n getPos: function (elm, root) {\n return global$3.DOM.getPos(elm, root || funcs.getContainer());\n },\n getContainer: function () {\n return global$8.container ? global$8.container : domGlobals.document.body;\n },\n getViewPort: function (win) {\n return global$3.DOM.getViewPort(win);\n },\n get: function (id) {\n return domGlobals.document.getElementById(id);\n },\n addClass: function (elm, cls) {\n return global$3.DOM.addClass(elm, cls);\n },\n removeClass: function (elm, cls) {\n return global$3.DOM.removeClass(elm, cls);\n },\n hasClass: function (elm, cls) {\n return global$3.DOM.hasClass(elm, cls);\n },\n toggleClass: function (elm, cls, state) {\n return global$3.DOM.toggleClass(elm, cls, state);\n },\n css: function (elm, name, value) {\n return global$3.DOM.setStyle(elm, name, value);\n },\n getRuntimeStyle: function (elm, name) {\n return global$3.DOM.getStyle(elm, name, true);\n },\n on: function (target, name, callback, scope) {\n return global$3.DOM.bind(target, name, callback, scope);\n },\n off: function (target, name, callback) {\n return global$3.DOM.unbind(target, name, callback);\n },\n fire: function (target, name, args) {\n return global$3.DOM.fire(target, name, args);\n },\n innerHtml: function (elm, html) {\n global$3.DOM.setHTML(elm, html);\n }\n };\n\n var isStatic = function (elm) {\n return funcs.getRuntimeStyle(elm, 'position') === 'static';\n };\n var isFixed = function (ctrl) {\n return ctrl.state.get('fixed');\n };\n function calculateRelativePosition(ctrl, targetElm, rel) {\n var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\n viewport = getWindowViewPort();\n pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\n x = pos.x;\n y = pos.y;\n if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\n x -= viewport.x;\n y -= viewport.y;\n }\n ctrlElm = ctrl.getEl();\n size = funcs.getSize(ctrlElm);\n selfW = size.width;\n selfH = size.height;\n size = funcs.getSize(targetElm);\n targetW = size.width;\n targetH = size.height;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += Math.round(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += Math.round(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= selfH;\n }\n if (rel[4] === 'r') {\n x -= selfW;\n }\n if (rel[3] === 'c') {\n y -= Math.round(selfH / 2);\n }\n if (rel[4] === 'c') {\n x -= Math.round(selfW / 2);\n }\n return {\n x: x,\n y: y,\n w: selfW,\n h: selfH\n };\n }\n var getUiContainerViewPort = function (customUiContainer) {\n return {\n x: 0,\n y: 0,\n w: customUiContainer.scrollWidth - 1,\n h: customUiContainer.scrollHeight - 1\n };\n };\n var getWindowViewPort = function () {\n var win = domGlobals.window;\n var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\n var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\n var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\n var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var getViewPortRect = function (ctrl) {\n var customUiContainer = UiContainer.getUiContainer(ctrl);\n return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\n };\n var Movable = {\n testMoveRel: function (elm, rels) {\n var viewPortRect = getViewPortRect(this);\n for (var i = 0; i < rels.length; i++) {\n var pos = calculateRelativePosition(this, elm, rels[i]);\n if (isFixed(this)) {\n if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\n return rels[i];\n }\n } else {\n if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) {\n return rels[i];\n }\n }\n }\n return rels[0];\n },\n moveRel: function (elm, rel) {\n if (typeof rel !== 'string') {\n rel = this.testMoveRel(elm, rel);\n }\n var pos = calculateRelativePosition(this, elm, rel);\n return this.moveTo(pos.x, pos.y);\n },\n moveBy: function (dx, dy) {\n var self = this, rect = self.layoutRect();\n self.moveTo(rect.x + dx, rect.y + dy);\n return self;\n },\n moveTo: function (x, y) {\n var self = this;\n function constrain(value, max, size) {\n if (value < 0) {\n return 0;\n }\n if (value + size > max) {\n value = max - size;\n return value < 0 ? 0 : value;\n }\n return value;\n }\n if (self.settings.constrainToViewport) {\n var viewPortRect = getViewPortRect(this);\n var layoutRect = self.layoutRect();\n x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\n y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\n }\n var uiContainer = UiContainer.getUiContainer(self);\n if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\n x -= uiContainer.scrollLeft;\n y -= uiContainer.scrollTop;\n }\n if (uiContainer) {\n x += 1;\n y += 1;\n }\n if (self.state.get('rendered')) {\n self.layoutRect({\n x: x,\n y: y\n }).repaint();\n } else {\n self.settings.x = x;\n self.settings.y = y;\n }\n self.fire('move', {\n x: x,\n y: y\n });\n return self;\n }\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\n\n var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\n\n var BoxUtils = {\n parseBox: function (value) {\n var len;\n var radix = 10;\n if (!value) {\n return;\n }\n if (typeof value === 'number') {\n value = value || 0;\n return {\n top: value,\n left: value,\n bottom: value,\n right: value\n };\n }\n value = value.split(' ');\n len = value.length;\n if (len === 1) {\n value[1] = value[2] = value[3] = value[0];\n } else if (len === 2) {\n value[2] = value[0];\n value[3] = value[1];\n } else if (len === 3) {\n value[3] = value[1];\n }\n return {\n top: parseInt(value[0], radix) || 0,\n right: parseInt(value[1], radix) || 0,\n bottom: parseInt(value[2], radix) || 0,\n left: parseInt(value[3], radix) || 0\n };\n },\n measureBox: function (elm, prefix) {\n function getStyle(name) {\n var defaultView = elm.ownerDocument.defaultView;\n if (defaultView) {\n var computedStyle = defaultView.getComputedStyle(elm, null);\n if (computedStyle) {\n name = name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n return computedStyle.getPropertyValue(name);\n } else {\n return null;\n }\n }\n return elm.currentStyle[name];\n }\n function getSide(name) {\n var val = parseFloat(getStyle(name));\n return isNaN(val) ? 0 : val;\n }\n return {\n top: getSide(prefix + 'TopWidth'),\n right: getSide(prefix + 'RightWidth'),\n bottom: getSide(prefix + 'BottomWidth'),\n left: getSide(prefix + 'LeftWidth')\n };\n }\n };\n\n function noop$1() {\n }\n function ClassList(onchange) {\n this.cls = [];\n this.cls._map = {};\n this.onchange = onchange || noop$1;\n this.prefix = '';\n }\n global$2.extend(ClassList.prototype, {\n add: function (cls) {\n if (cls && !this.contains(cls)) {\n this.cls._map[cls] = true;\n this.cls.push(cls);\n this._change();\n }\n return this;\n },\n remove: function (cls) {\n if (this.contains(cls)) {\n var i = void 0;\n for (i = 0; i < this.cls.length; i++) {\n if (this.cls[i] === cls) {\n break;\n }\n }\n this.cls.splice(i, 1);\n delete this.cls._map[cls];\n this._change();\n }\n return this;\n },\n toggle: function (cls, state) {\n var curState = this.contains(cls);\n if (curState !== state) {\n if (curState) {\n this.remove(cls);\n } else {\n this.add(cls);\n }\n this._change();\n }\n return this;\n },\n contains: function (cls) {\n return !!this.cls._map[cls];\n },\n _change: function () {\n delete this.clsValue;\n this.onchange.call(this);\n }\n });\n ClassList.prototype.toString = function () {\n var value;\n if (this.clsValue) {\n return this.clsValue;\n }\n value = '';\n for (var i = 0; i < this.cls.length; i++) {\n if (i > 0) {\n value += ' ';\n }\n value += this.prefix + this.cls[i];\n }\n return value;\n };\n\n function unique(array) {\n var uniqueItems = [];\n var i = array.length, item;\n while (i--) {\n item = array[i];\n if (!item.__checked) {\n uniqueItems.push(item);\n item.__checked = 1;\n }\n }\n i = uniqueItems.length;\n while (i--) {\n delete uniqueItems[i].__checked;\n }\n return uniqueItems;\n }\n var expression = /^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i;\n var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n var whiteSpace = /^\\s*|\\s*$/g;\n var Collection;\n var Selector = global$a.extend({\n init: function (selector) {\n var match = this.match;\n function compileNameFilter(name) {\n if (name) {\n name = name.toLowerCase();\n return function (item) {\n return name === '*' || item.type === name;\n };\n }\n }\n function compileIdFilter(id) {\n if (id) {\n return function (item) {\n return item._name === id;\n };\n }\n }\n function compileClassesFilter(classes) {\n if (classes) {\n classes = classes.split('.');\n return function (item) {\n var i = classes.length;\n while (i--) {\n if (!item.classes.contains(classes[i])) {\n return false;\n }\n }\n return true;\n };\n }\n }\n function compileAttrFilter(name, cmp, check) {\n if (name) {\n return function (item) {\n var value = item[name] ? item[name]() : '';\n return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;\n };\n }\n }\n function compilePsuedoFilter(name) {\n var notSelectors;\n if (name) {\n name = /(?:not\\((.+)\\))|(.+)/i.exec(name);\n if (!name[1]) {\n name = name[2];\n return function (item, index, length) {\n return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;\n };\n }\n notSelectors = parseChunks(name[1], []);\n return function (item) {\n return !match(item, notSelectors);\n };\n }\n }\n function compile(selector, filters, direct) {\n var parts;\n function add(filter) {\n if (filter) {\n filters.push(filter);\n }\n }\n parts = expression.exec(selector.replace(whiteSpace, ''));\n add(compileNameFilter(parts[1]));\n add(compileIdFilter(parts[2]));\n add(compileClassesFilter(parts[3]));\n add(compileAttrFilter(parts[4], parts[5], parts[6]));\n add(compilePsuedoFilter(parts[7]));\n filters.pseudo = !!parts[7];\n filters.direct = direct;\n return filters;\n }\n function parseChunks(selector, selectors) {\n var parts = [];\n var extra, matches, i;\n do {\n chunker.exec('');\n matches = chunker.exec(selector);\n if (matches) {\n selector = matches[3];\n parts.push(matches[1]);\n if (matches[2]) {\n extra = matches[3];\n break;\n }\n }\n } while (matches);\n if (extra) {\n parseChunks(extra, selectors);\n }\n selector = [];\n for (i = 0; i < parts.length; i++) {\n if (parts[i] !== '>') {\n selector.push(compile(parts[i], [], parts[i - 1] === '>'));\n }\n }\n selectors.push(selector);\n return selectors;\n }\n this._selectors = parseChunks(selector, []);\n },\n match: function (control, selectors) {\n var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\n selectors = selectors || this._selectors;\n for (i = 0, l = selectors.length; i < l; i++) {\n selector = selectors[i];\n sl = selector.length;\n item = control;\n count = 0;\n for (si = sl - 1; si >= 0; si--) {\n filters = selector[si];\n while (item) {\n if (filters.pseudo) {\n siblings = item.parent().items();\n index = length = siblings.length;\n while (index--) {\n if (siblings[index] === item) {\n break;\n }\n }\n }\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, index, length)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n count++;\n break;\n } else {\n if (si === sl - 1) {\n break;\n }\n }\n item = item.parent();\n }\n }\n if (count === sl) {\n return true;\n }\n }\n return false;\n },\n find: function (container) {\n var matches = [], i, l;\n var selectors = this._selectors;\n function collect(items, selector, index) {\n var i, l, fi, fl, item;\n var filters = selector[index];\n for (i = 0, l = items.length; i < l; i++) {\n item = items[i];\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, i, l)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n if (index === selector.length - 1) {\n matches.push(item);\n } else {\n if (item.items) {\n collect(item.items(), selector, index + 1);\n }\n }\n } else if (filters.direct) {\n return;\n }\n if (item.items) {\n collect(item.items(), selector, index);\n }\n }\n }\n if (container.items) {\n for (i = 0, l = selectors.length; i < l; i++) {\n collect(container.items(), selectors[i], 0);\n }\n if (l > 1) {\n matches = unique(matches);\n }\n }\n if (!Collection) {\n Collection = Selector.Collection;\n }\n return new Collection(matches);\n }\n });\n\n var Collection$1, proto;\n var push = Array.prototype.push, slice = Array.prototype.slice;\n proto = {\n length: 0,\n init: function (items) {\n if (items) {\n this.add(items);\n }\n },\n add: function (items) {\n var self = this;\n if (!global$2.isArray(items)) {\n if (items instanceof Collection$1) {\n self.add(items.toArray());\n } else {\n push.call(self, items);\n }\n } else {\n push.apply(self, items);\n }\n return self;\n },\n set: function (items) {\n var self = this;\n var len = self.length;\n var i;\n self.length = 0;\n self.add(items);\n for (i = self.length; i < len; i++) {\n delete self[i];\n }\n return self;\n },\n filter: function (selector) {\n var self = this;\n var i, l;\n var matches = [];\n var item, match;\n if (typeof selector === 'string') {\n selector = new Selector(selector);\n match = function (item) {\n return selector.match(item);\n };\n } else {\n match = selector;\n }\n for (i = 0, l = self.length; i < l; i++) {\n item = self[i];\n if (match(item)) {\n matches.push(item);\n }\n }\n return new Collection$1(matches);\n },\n slice: function () {\n return new Collection$1(slice.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n each: function (callback) {\n global$2.each(this, callback);\n return this;\n },\n toArray: function () {\n return global$2.toArray(this);\n },\n indexOf: function (ctrl) {\n var self = this;\n var i = self.length;\n while (i--) {\n if (self[i] === ctrl) {\n break;\n }\n }\n return i;\n },\n reverse: function () {\n return new Collection$1(global$2.toArray(this).reverse());\n },\n hasClass: function (cls) {\n return this[0] ? this[0].classes.contains(cls) : false;\n },\n prop: function (name, value) {\n var self = this;\n var item;\n if (value !== undefined) {\n self.each(function (item) {\n if (item[name]) {\n item[name](value);\n }\n });\n return self;\n }\n item = self[0];\n if (item && item[name]) {\n return item[name]();\n }\n },\n exec: function (name) {\n var self = this, args = global$2.toArray(arguments).slice(1);\n self.each(function (item) {\n if (item[name]) {\n item[name].apply(item, args);\n }\n });\n return self;\n },\n remove: function () {\n var i = this.length;\n while (i--) {\n this[i].remove();\n }\n return this;\n },\n addClass: function (cls) {\n return this.each(function (item) {\n item.classes.add(cls);\n });\n },\n removeClass: function (cls) {\n return this.each(function (item) {\n item.classes.remove(cls);\n });\n }\n };\n global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\n proto[name] = function () {\n var args = global$2.toArray(arguments);\n this.each(function (ctrl) {\n if (name in ctrl) {\n ctrl[name].apply(ctrl, args);\n }\n });\n return this;\n };\n });\n global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\n proto[name] = function (value) {\n return this.prop(name, value);\n };\n });\n Collection$1 = global$a.extend(proto);\n Selector.Collection = Collection$1;\n var Collection$2 = Collection$1;\n\n var Binding = function (settings) {\n this.create = settings.create;\n };\n Binding.create = function (model, name) {\n return new Binding({\n create: function (otherModel, otherName) {\n var bindings;\n var fromSelfToOther = function (e) {\n otherModel.set(otherName, e.value);\n };\n var fromOtherToSelf = function (e) {\n model.set(name, e.value);\n };\n otherModel.on('change:' + otherName, fromOtherToSelf);\n model.on('change:' + name, fromSelfToOther);\n bindings = otherModel._bindings;\n if (!bindings) {\n bindings = otherModel._bindings = [];\n otherModel.on('destroy', function () {\n var i = bindings.length;\n while (i--) {\n bindings[i]();\n }\n });\n }\n bindings.push(function () {\n model.off('change:' + name, fromSelfToOther);\n });\n return model.get(name);\n }\n });\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n function isNode(node) {\n return node.nodeType > 0;\n }\n function isEqual(a, b) {\n var k, checked;\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return a === b;\n }\n if (typeof a !== 'object' || typeof b !== 'object') {\n return a === b;\n }\n if (global$2.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n k = a.length;\n while (k--) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n }\n }\n if (isNode(a) || isNode(b)) {\n return a === b;\n }\n checked = {};\n for (k in b) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n checked[k] = true;\n }\n for (k in a) {\n if (!checked[k] && !isEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n var ObservableObject = global$a.extend({\n Mixins: [global$c],\n init: function (data) {\n var name, value;\n data = data || {};\n for (name in data) {\n value = data[name];\n if (value instanceof Binding) {\n data[name] = value.create(this, name);\n }\n }\n this.data = data;\n },\n set: function (name, value) {\n var key, args;\n var oldValue = this.data[name];\n if (value instanceof Binding) {\n value = value.create(this, name);\n }\n if (typeof name === 'object') {\n for (key in name) {\n this.set(key, name[key]);\n }\n return this;\n }\n if (!isEqual(oldValue, value)) {\n this.data[name] = value;\n args = {\n target: this,\n name: name,\n value: value,\n oldValue: oldValue\n };\n this.fire('change:' + name, args);\n this.fire('change', args);\n }\n return this;\n },\n get: function (name) {\n return this.data[name];\n },\n has: function (name) {\n return name in this.data;\n },\n bind: function (name) {\n return Binding.create(this, name);\n },\n destroy: function () {\n this.fire('destroy');\n }\n });\n\n var dirtyCtrls = {}, animationFrameRequested;\n var ReflowQueue = {\n add: function (ctrl) {\n var parent = ctrl.parent();\n if (parent) {\n if (!parent._layout || parent._layout.isNative()) {\n return;\n }\n if (!dirtyCtrls[parent._id]) {\n dirtyCtrls[parent._id] = parent;\n }\n if (!animationFrameRequested) {\n animationFrameRequested = true;\n global$7.requestAnimationFrame(function () {\n var id, ctrl;\n animationFrameRequested = false;\n for (id in dirtyCtrls) {\n ctrl = dirtyCtrls[id];\n if (ctrl.state.get('rendered')) {\n ctrl.reflow();\n }\n }\n dirtyCtrls = {};\n }, domGlobals.document.body);\n }\n }\n },\n remove: function (ctrl) {\n if (dirtyCtrls[ctrl._id]) {\n delete dirtyCtrls[ctrl._id];\n }\n }\n };\n\n var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\n var hasWheelEventSupport = false;\n var classPrefix = 'mce-';\n var Control, idCounter = 0;\n var proto$1 = {\n Statics: { classPrefix: classPrefix },\n isRtl: function () {\n return Control.rtl;\n },\n classPrefix: classPrefix,\n init: function (settings) {\n var self = this;\n var classes, defaultClasses;\n function applyClasses(classes) {\n var i;\n classes = classes.split(' ');\n for (i = 0; i < classes.length; i++) {\n self.classes.add(classes[i]);\n }\n }\n self.settings = settings = global$2.extend({}, self.Defaults, settings);\n self._id = settings.id || 'mceu_' + idCounter++;\n self._aria = { role: settings.role };\n self._elmCache = {};\n self.$ = global$9;\n self.state = new ObservableObject({\n visible: true,\n active: false,\n disabled: false,\n value: ''\n });\n self.data = new ObservableObject(settings.data);\n self.classes = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl().className = this.toString();\n }\n });\n self.classes.prefix = self.classPrefix;\n classes = settings.classes;\n if (classes) {\n if (self.Defaults) {\n defaultClasses = self.Defaults.classes;\n if (defaultClasses && classes !== defaultClasses) {\n applyClasses(defaultClasses);\n }\n }\n applyClasses(classes);\n }\n global$2.each('title text name visible disabled active value'.split(' '), function (name) {\n if (name in settings) {\n self[name](settings[name]);\n }\n });\n self.on('click', function () {\n if (self.disabled()) {\n return false;\n }\n });\n self.settings = settings;\n self.borderBox = BoxUtils.parseBox(settings.border);\n self.paddingBox = BoxUtils.parseBox(settings.padding);\n self.marginBox = BoxUtils.parseBox(settings.margin);\n if (settings.hidden) {\n self.hide();\n }\n },\n Properties: 'parent,name',\n getContainerElm: function () {\n var uiContainer = UiContainer.getUiContainer(this);\n return uiContainer ? uiContainer : funcs.getContainer();\n },\n getParentCtrl: function (elm) {\n var ctrl;\n var lookup = this.getRoot().controlIdLookup;\n while (elm && lookup) {\n ctrl = lookup[elm.id];\n if (ctrl) {\n break;\n }\n elm = elm.parentNode;\n }\n return ctrl;\n },\n initLayoutRect: function () {\n var self = this;\n var settings = self.settings;\n var borderBox, layoutRect;\n var elm = self.getEl();\n var width, height, minWidth, minHeight, autoResize;\n var startMinWidth, startMinHeight, initialSize;\n borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\n self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\n self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\n initialSize = funcs.getSize(elm);\n startMinWidth = settings.minWidth;\n startMinHeight = settings.minHeight;\n minWidth = startMinWidth || initialSize.width;\n minHeight = startMinHeight || initialSize.height;\n width = settings.width;\n height = settings.height;\n autoResize = settings.autoResize;\n autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\n width = width || minWidth;\n height = height || minHeight;\n var deltaW = borderBox.left + borderBox.right;\n var deltaH = borderBox.top + borderBox.bottom;\n var maxW = settings.maxWidth || 65535;\n var maxH = settings.maxHeight || 65535;\n self._layoutRect = layoutRect = {\n x: settings.x || 0,\n y: settings.y || 0,\n w: width,\n h: height,\n deltaW: deltaW,\n deltaH: deltaH,\n contentW: width - deltaW,\n contentH: height - deltaH,\n innerW: width - deltaW,\n innerH: height - deltaH,\n startMinWidth: startMinWidth || 0,\n startMinHeight: startMinHeight || 0,\n minW: Math.min(minWidth, maxW),\n minH: Math.min(minHeight, maxH),\n maxW: maxW,\n maxH: maxH,\n autoResize: autoResize,\n scrollW: 0\n };\n self._lastLayoutRect = {};\n return layoutRect;\n },\n layoutRect: function (newRect) {\n var self = this;\n var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\n if (!curRect) {\n curRect = self.initLayoutRect();\n }\n if (newRect) {\n deltaWidth = curRect.deltaW;\n deltaHeight = curRect.deltaH;\n if (newRect.x !== undefined) {\n curRect.x = newRect.x;\n }\n if (newRect.y !== undefined) {\n curRect.y = newRect.y;\n }\n if (newRect.minW !== undefined) {\n curRect.minW = newRect.minW;\n }\n if (newRect.minH !== undefined) {\n curRect.minH = newRect.minH;\n }\n size = newRect.w;\n if (size !== undefined) {\n size = size < curRect.minW ? curRect.minW : size;\n size = size > curRect.maxW ? curRect.maxW : size;\n curRect.w = size;\n curRect.innerW = size - deltaWidth;\n }\n size = newRect.h;\n if (size !== undefined) {\n size = size < curRect.minH ? curRect.minH : size;\n size = size > curRect.maxH ? curRect.maxH : size;\n curRect.h = size;\n curRect.innerH = size - deltaHeight;\n }\n size = newRect.innerW;\n if (size !== undefined) {\n size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\n size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\n curRect.innerW = size;\n curRect.w = size + deltaWidth;\n }\n size = newRect.innerH;\n if (size !== undefined) {\n size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\n size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\n curRect.innerH = size;\n curRect.h = size + deltaHeight;\n }\n if (newRect.contentW !== undefined) {\n curRect.contentW = newRect.contentW;\n }\n if (newRect.contentH !== undefined) {\n curRect.contentH = newRect.contentH;\n }\n lastLayoutRect = self._lastLayoutRect;\n if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\n repaintControls = Control.repaintControls;\n if (repaintControls) {\n if (repaintControls.map && !repaintControls.map[self._id]) {\n repaintControls.push(self);\n repaintControls.map[self._id] = true;\n }\n }\n lastLayoutRect.x = curRect.x;\n lastLayoutRect.y = curRect.y;\n lastLayoutRect.w = curRect.w;\n lastLayoutRect.h = curRect.h;\n }\n return self;\n }\n return curRect;\n },\n repaint: function () {\n var self = this;\n var style, bodyStyle, bodyElm, rect, borderBox;\n var borderW, borderH, lastRepaintRect, round, value;\n round = !domGlobals.document.createRange ? Math.round : function (value) {\n return value;\n };\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right;\n borderH = borderBox.top + borderBox.bottom;\n if (rect.x !== lastRepaintRect.x) {\n style.left = round(rect.x) + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = round(rect.y) + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n value = round(rect.w - borderW);\n style.width = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n value = round(rect.h - borderH);\n style.height = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.h = rect.h;\n }\n if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\n value = round(rect.innerW);\n bodyElm = self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyElm.style;\n bodyStyle.width = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerW = rect.innerW;\n }\n if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\n value = round(rect.innerH);\n bodyElm = bodyElm || self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyStyle || bodyElm.style;\n bodyStyle.height = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerH = rect.innerH;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n },\n updateLayoutRect: function () {\n var self = this;\n self.parent()._lastRect = null;\n funcs.css(self.getEl(), {\n width: '',\n height: ''\n });\n self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\n self.initLayoutRect();\n },\n on: function (name, callback) {\n var self = this;\n function resolveCallbackName(name) {\n var callback, scope;\n if (typeof name !== 'string') {\n return name;\n }\n return function (e) {\n if (!callback) {\n self.parentsAndSelf().each(function (ctrl) {\n var callbacks = ctrl.settings.callbacks;\n if (callbacks && (callback = callbacks[name])) {\n scope = ctrl;\n return false;\n }\n });\n }\n if (!callback) {\n e.action = name;\n this.fire('execute', e);\n return;\n }\n return callback.call(scope, e);\n };\n }\n getEventDispatcher(self).on(name, resolveCallbackName(callback));\n return self;\n },\n off: function (name, callback) {\n getEventDispatcher(this).off(name, callback);\n return this;\n },\n fire: function (name, args, bubble) {\n var self = this;\n args = args || {};\n if (!args.control) {\n args.control = self;\n }\n args = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n },\n parents: function (selector) {\n var self = this;\n var ctrl, parents = new Collection$2();\n for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\n parents.add(ctrl);\n }\n if (selector) {\n parents = parents.filter(selector);\n }\n return parents;\n },\n parentsAndSelf: function (selector) {\n return new Collection$2(this).add(this.parents(selector));\n },\n next: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) + 1];\n },\n prev: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) - 1];\n },\n innerHtml: function (html) {\n this.$el.html(html);\n return this;\n },\n getEl: function (suffix) {\n var id = suffix ? this._id + '-' + suffix : this._id;\n if (!this._elmCache[id]) {\n this._elmCache[id] = global$9('#' + id)[0];\n }\n return this._elmCache[id];\n },\n show: function () {\n return this.visible(true);\n },\n hide: function () {\n return this.visible(false);\n },\n focus: function () {\n try {\n this.getEl().focus();\n } catch (ex) {\n }\n return this;\n },\n blur: function () {\n this.getEl().blur();\n return this;\n },\n aria: function (name, value) {\n var self = this, elm = self.getEl(self.ariaTarget);\n if (typeof value === 'undefined') {\n return self._aria[name];\n }\n self._aria[name] = value;\n if (self.state.get('rendered')) {\n elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\n }\n return self;\n },\n encode: function (text, translate) {\n if (translate !== false) {\n text = this.translate(text);\n }\n return (text || '').replace(/[&<>\"]/g, function (match) {\n return '&#' + match.charCodeAt(0) + ';';\n });\n },\n translate: function (text) {\n return Control.translate ? Control.translate(text) : text;\n },\n before: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self), true);\n }\n return self;\n },\n after: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self));\n }\n return self;\n },\n remove: function () {\n var self = this;\n var elm = self.getEl();\n var parent = self.parent();\n var newItems, i;\n if (self.items) {\n var controls = self.items().toArray();\n i = controls.length;\n while (i--) {\n controls[i].remove();\n }\n }\n if (parent && parent.items) {\n newItems = [];\n parent.items().each(function (item) {\n if (item !== self) {\n newItems.push(item);\n }\n });\n parent.items().set(newItems);\n parent._lastRect = null;\n }\n if (self._eventsRoot && self._eventsRoot === self) {\n global$9(elm).off();\n }\n var lookup = self.getRoot().controlIdLookup;\n if (lookup) {\n delete lookup[self._id];\n }\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n self.state.set('rendered', false);\n self.state.destroy();\n self.fire('remove');\n return self;\n },\n renderBefore: function (elm) {\n global$9(elm).before(this.renderHtml());\n this.postRender();\n return this;\n },\n renderTo: function (elm) {\n global$9(elm || this.getContainerElm()).append(this.renderHtml());\n this.postRender();\n return this;\n },\n preRender: function () {\n },\n render: function () {\n },\n renderHtml: function () {\n return '
';\n },\n postRender: function () {\n var self = this;\n var settings = self.settings;\n var elm, box, parent, name, parentEventsRoot;\n self.$el = global$9(self.getEl());\n self.state.set('rendered', true);\n for (name in settings) {\n if (name.indexOf('on') === 0) {\n self.on(name.substr(2), settings[name]);\n }\n }\n if (self._eventsRoot) {\n for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\n parentEventsRoot = parent._eventsRoot;\n }\n if (parentEventsRoot) {\n for (name in parentEventsRoot._nativeEvents) {\n self._nativeEvents[name] = true;\n }\n }\n }\n bindPendingEvents(self);\n if (settings.style) {\n elm = self.getEl();\n if (elm) {\n elm.setAttribute('style', settings.style);\n elm.style.cssText = settings.style;\n }\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n var root = self.getRoot();\n if (!root.controlIdLookup) {\n root.controlIdLookup = {};\n }\n root.controlIdLookup[self._id] = self;\n for (var key in self._aria) {\n self.aria(key, self._aria[key]);\n }\n if (self.state.get('visible') === false) {\n self.getEl().style.display = 'none';\n }\n self.bindStates();\n self.state.on('change:visible', function (e) {\n var state = e.value;\n var parentCtrl;\n if (self.state.get('rendered')) {\n self.getEl().style.display = state === false ? 'none' : '';\n self.getEl().getBoundingClientRect();\n }\n parentCtrl = self.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n }\n self.fire(state ? 'show' : 'hide');\n ReflowQueue.add(self);\n });\n self.fire('postrender', {}, false);\n },\n bindStates: function () {\n },\n scrollIntoView: function (align) {\n function getOffset(elm, rootElm) {\n var x, y, parent = elm;\n x = y = 0;\n while (parent && parent !== rootElm && parent.nodeType) {\n x += parent.offsetLeft || 0;\n y += parent.offsetTop || 0;\n parent = parent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n }\n var elm = this.getEl(), parentElm = elm.parentNode;\n var x, y, width, height, parentWidth, parentHeight;\n var pos = getOffset(elm, parentElm);\n x = pos.x;\n y = pos.y;\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n parentWidth = parentElm.clientWidth;\n parentHeight = parentElm.clientHeight;\n if (align === 'end') {\n x -= parentWidth - width;\n y -= parentHeight - height;\n } else if (align === 'center') {\n x -= parentWidth / 2 - width / 2;\n y -= parentHeight / 2 - height / 2;\n }\n parentElm.scrollLeft = x;\n parentElm.scrollTop = y;\n return this;\n },\n getRoot: function () {\n var ctrl = this, rootControl;\n var parents = [];\n while (ctrl) {\n if (ctrl.rootControl) {\n rootControl = ctrl.rootControl;\n break;\n }\n parents.push(ctrl);\n rootControl = ctrl;\n ctrl = ctrl.parent();\n }\n if (!rootControl) {\n rootControl = this;\n }\n var i = parents.length;\n while (i--) {\n parents[i].rootControl = rootControl;\n }\n return rootControl;\n },\n reflow: function () {\n ReflowQueue.remove(this);\n var parent = this.parent();\n if (parent && parent._layout && !parent._layout.isNative()) {\n parent.reflow();\n }\n return this;\n }\n };\n global$2.each('text title visible disabled active value'.split(' '), function (name) {\n proto$1[name] = function (value) {\n if (arguments.length === 0) {\n return this.state.get(name);\n }\n if (typeof value !== 'undefined') {\n this.state.set(name, value);\n }\n return this;\n };\n });\n Control = global$a.extend(proto$1);\n function getEventDispatcher(obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new global$b({\n scope: obj,\n toggleEvent: function (name, state) {\n if (state && global$b.isNative(name)) {\n if (!obj._nativeEvents) {\n obj._nativeEvents = {};\n }\n obj._nativeEvents[name] = true;\n if (obj.state.get('rendered')) {\n bindPendingEvents(obj);\n }\n }\n }\n });\n }\n return obj._eventDispatcher;\n }\n function bindPendingEvents(eventCtrl) {\n var i, l, parents, eventRootCtrl, nativeEvents, name;\n function delegate(e) {\n var control = eventCtrl.getParentCtrl(e.target);\n if (control) {\n control.fire(e.type, e);\n }\n }\n function mouseLeaveHandler() {\n var ctrl = eventRootCtrl._lastHoverCtrl;\n if (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n ctrl.parents().each(function (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n });\n eventRootCtrl._lastHoverCtrl = null;\n }\n }\n function mouseEnterHandler(e) {\n var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\n if (ctrl !== lastCtrl) {\n eventRootCtrl._lastHoverCtrl = ctrl;\n parents = ctrl.parents().toArray().reverse();\n parents.push(ctrl);\n if (lastCtrl) {\n lastParents = lastCtrl.parents().toArray().reverse();\n lastParents.push(lastCtrl);\n for (idx = 0; idx < lastParents.length; idx++) {\n if (parents[idx] !== lastParents[idx]) {\n break;\n }\n }\n for (i = lastParents.length - 1; i >= idx; i--) {\n lastCtrl = lastParents[i];\n lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\n }\n }\n for (i = idx; i < parents.length; i++) {\n ctrl = parents[i];\n ctrl.fire('mouseenter', { target: ctrl.getEl() });\n }\n }\n }\n function fixWheelEvent(e) {\n e.preventDefault();\n if (e.type === 'mousewheel') {\n e.deltaY = -1 / 40 * e.wheelDelta;\n if (e.wheelDeltaX) {\n e.deltaX = -1 / 40 * e.wheelDeltaX;\n }\n } else {\n e.deltaX = 0;\n e.deltaY = e.detail;\n }\n e = eventCtrl.fire('wheel', e);\n }\n nativeEvents = eventCtrl._nativeEvents;\n if (nativeEvents) {\n parents = eventCtrl.parents().toArray();\n parents.unshift(eventCtrl);\n for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\n eventRootCtrl = parents[i]._eventsRoot;\n }\n if (!eventRootCtrl) {\n eventRootCtrl = parents[parents.length - 1] || eventCtrl;\n }\n eventCtrl._eventsRoot = eventRootCtrl;\n for (l = i, i = 0; i < l; i++) {\n parents[i]._eventsRoot = eventRootCtrl;\n }\n var eventRootDelegates = eventRootCtrl._delegates;\n if (!eventRootDelegates) {\n eventRootDelegates = eventRootCtrl._delegates = {};\n }\n for (name in nativeEvents) {\n if (!nativeEvents) {\n return false;\n }\n if (name === 'wheel' && !hasWheelEventSupport) {\n if (hasMouseWheelEventSupport) {\n global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\n } else {\n global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\n }\n continue;\n }\n if (name === 'mouseenter' || name === 'mouseleave') {\n if (!eventRootCtrl._hasMouseEnter) {\n global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\n eventRootCtrl._hasMouseEnter = 1;\n }\n } else if (!eventRootDelegates[name]) {\n global$9(eventRootCtrl.getEl()).on(name, delegate);\n eventRootDelegates[name] = true;\n }\n nativeEvents[name] = false;\n }\n }\n }\n var Control$1 = Control;\n\n var hasTabstopData = function (elm) {\n return elm.getAttribute('data-mce-tabstop') ? true : false;\n };\n function KeyboardNavigation (settings) {\n var root = settings.root;\n var focusedElement, focusedControl;\n function isElement(node) {\n return node && node.nodeType === 1;\n }\n try {\n focusedElement = domGlobals.document.activeElement;\n } catch (ex) {\n focusedElement = domGlobals.document.body;\n }\n focusedControl = root.getParentCtrl(focusedElement);\n function getRole(elm) {\n elm = elm || focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('role');\n }\n return null;\n }\n function getParentRole(elm) {\n var role, parent = elm || focusedElement;\n while (parent = parent.parentNode) {\n if (role = getRole(parent)) {\n return role;\n }\n }\n }\n function getAriaProp(name) {\n var elm = focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('aria-' + name);\n }\n }\n function isTextInputElement(elm) {\n var tagName = elm.tagName.toUpperCase();\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\n }\n function canFocus(elm) {\n if (isTextInputElement(elm) && !elm.hidden) {\n return true;\n }\n if (hasTabstopData(elm)) {\n return true;\n }\n if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\n return true;\n }\n return false;\n }\n function getFocusElements(elm) {\n var elements = [];\n function collect(elm) {\n if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\n return;\n }\n if (canFocus(elm)) {\n elements.push(elm);\n }\n for (var i = 0; i < elm.childNodes.length; i++) {\n collect(elm.childNodes[i]);\n }\n }\n collect(elm || root.getEl());\n return elements;\n }\n function getNavigationRoot(targetControl) {\n var navigationRoot, controls;\n targetControl = targetControl || focusedControl;\n controls = targetControl.parents().toArray();\n controls.unshift(targetControl);\n for (var i = 0; i < controls.length; i++) {\n navigationRoot = controls[i];\n if (navigationRoot.settings.ariaRoot) {\n break;\n }\n }\n return navigationRoot;\n }\n function focusFirst(targetControl) {\n var navigationRoot = getNavigationRoot(targetControl);\n var focusElements = getFocusElements(navigationRoot.getEl());\n if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\n moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\n } else {\n moveFocusToIndex(0, focusElements);\n }\n }\n function moveFocusToIndex(idx, elements) {\n if (idx < 0) {\n idx = elements.length - 1;\n } else if (idx >= elements.length) {\n idx = 0;\n }\n if (elements[idx]) {\n elements[idx].focus();\n }\n return idx;\n }\n function moveFocus(dir, elements) {\n var idx = -1;\n var navigationRoot = getNavigationRoot();\n elements = elements || getFocusElements(navigationRoot.getEl());\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === focusedElement) {\n idx = i;\n }\n }\n idx += dir;\n navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\n }\n function left() {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(-1, getFocusElements(focusedElement.parentNode));\n } else if (focusedControl.parent().submenu) {\n cancel();\n } else {\n moveFocus(-1);\n }\n }\n function right() {\n var role = getRole(), parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(1, getFocusElements(focusedElement.parentNode));\n } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\n enter();\n } else {\n moveFocus(1);\n }\n }\n function up() {\n moveFocus(-1);\n }\n function down() {\n var role = getRole(), parentRole = getParentRole();\n if (role === 'menuitem' && parentRole === 'menubar') {\n enter();\n } else if (role === 'button' && getAriaProp('haspopup')) {\n enter({ key: 'down' });\n } else {\n moveFocus(1);\n }\n }\n function tab(e) {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n var elm = getFocusElements(focusedControl.getEl('body'))[0];\n if (elm) {\n elm.focus();\n }\n } else {\n moveFocus(e.shiftKey ? -1 : 1);\n }\n }\n function cancel() {\n focusedControl.fire('cancel');\n }\n function enter(aria) {\n aria = aria || {};\n focusedControl.fire('click', {\n target: focusedElement,\n aria: aria\n });\n }\n root.on('keydown', function (e) {\n function handleNonTabOrEscEvent(e, handler) {\n if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\n return;\n }\n if (getRole(focusedElement) === 'slider') {\n return;\n }\n if (handler(e) !== false) {\n e.preventDefault();\n }\n }\n if (e.isDefaultPrevented()) {\n return;\n }\n switch (e.keyCode) {\n case 37:\n handleNonTabOrEscEvent(e, left);\n break;\n case 39:\n handleNonTabOrEscEvent(e, right);\n break;\n case 38:\n handleNonTabOrEscEvent(e, up);\n break;\n case 40:\n handleNonTabOrEscEvent(e, down);\n break;\n case 27:\n cancel();\n break;\n case 14:\n case 13:\n case 32:\n handleNonTabOrEscEvent(e, enter);\n break;\n case 9:\n tab(e);\n e.preventDefault();\n break;\n }\n });\n root.on('focusin', function (e) {\n focusedElement = e.target;\n focusedControl = e.control;\n });\n return { focusFirst: focusFirst };\n }\n\n var selectorCache = {};\n var Container = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n if (settings.fixed) {\n self.state.set('fixed', true);\n }\n self._items = new Collection$2();\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.bodyClasses = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl('body').className = this.toString();\n }\n });\n self.bodyClasses.prefix = self.classPrefix;\n self.classes.add('container');\n self.bodyClasses.add('container-body');\n if (settings.containerCls) {\n self.classes.add(settings.containerCls);\n }\n self._layout = global$4.create((settings.layout || '') + 'layout');\n if (self.settings.items) {\n self.add(self.settings.items);\n } else {\n self.add(self.render());\n }\n self._hasBody = true;\n },\n items: function () {\n return this._items;\n },\n find: function (selector) {\n selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\n return selector.find(this);\n },\n add: function (items) {\n var self = this;\n self.items().add(self.create(items)).parent(self);\n return self;\n },\n focus: function (keyboard) {\n var self = this;\n var focusCtrl, keyboardNav, items;\n if (keyboard) {\n keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\n if (keyboardNav) {\n keyboardNav.focusFirst(self);\n return;\n }\n }\n items = self.find('*');\n if (self.statusbar) {\n items.add(self.statusbar.items());\n }\n items.each(function (ctrl) {\n if (ctrl.settings.autofocus) {\n focusCtrl = null;\n return false;\n }\n if (ctrl.canFocus) {\n focusCtrl = focusCtrl || ctrl;\n }\n });\n if (focusCtrl) {\n focusCtrl.focus();\n }\n return self;\n },\n replace: function (oldItem, newItem) {\n var ctrlElm;\n var items = this.items();\n var i = items.length;\n while (i--) {\n if (items[i] === oldItem) {\n items[i] = newItem;\n break;\n }\n }\n if (i >= 0) {\n ctrlElm = newItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n ctrlElm = oldItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n }\n newItem.parent(this);\n },\n create: function (items) {\n var self = this;\n var settings;\n var ctrlItems = [];\n if (!global$2.isArray(items)) {\n items = [items];\n }\n global$2.each(items, function (item) {\n if (item) {\n if (!(item instanceof Control$1)) {\n if (typeof item === 'string') {\n item = { type: item };\n }\n settings = global$2.extend({}, self.settings.defaults, item);\n item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\n item = global$4.create(settings);\n }\n ctrlItems.push(item);\n }\n });\n return ctrlItems;\n },\n renderNew: function () {\n var self = this;\n self.items().each(function (ctrl, index) {\n var containerElm;\n ctrl.parent(self);\n if (!ctrl.state.get('rendered')) {\n containerElm = self.getEl('body');\n if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\n global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\n } else {\n global$9(containerElm).append(ctrl.renderHtml());\n }\n ctrl.postRender();\n ReflowQueue.add(ctrl);\n }\n });\n self._layout.applyClasses(self.items().filter(':visible'));\n self._lastRect = null;\n return self;\n },\n append: function (items) {\n return this.add(items).renderNew();\n },\n prepend: function (items) {\n var self = this;\n self.items().set(self.create(items).concat(self.items().toArray()));\n return self.renderNew();\n },\n insert: function (items, index, before) {\n var self = this;\n var curItems, beforeItems, afterItems;\n items = self.create(items);\n curItems = self.items();\n if (!before && index < curItems.length - 1) {\n index += 1;\n }\n if (index >= 0 && index < curItems.length) {\n beforeItems = curItems.slice(0, index).toArray();\n afterItems = curItems.slice(index).toArray();\n curItems.set(beforeItems.concat(items, afterItems));\n }\n return self.renderNew();\n },\n fromJSON: function (data) {\n var self = this;\n for (var name in data) {\n self.find('#' + name).value(data[name]);\n }\n return self;\n },\n toJSON: function () {\n var self = this, data = {};\n self.find('*').each(function (ctrl) {\n var name = ctrl.name(), value = ctrl.value();\n if (name && typeof value !== 'undefined') {\n data[name] = value;\n }\n });\n return data;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, role = this.settings.role;\n self.preRender();\n layout.preRender(self);\n return '
' + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n },\n postRender: function () {\n var self = this;\n var box;\n self.items().exec('postRender');\n self._super();\n self._layout.postRender(self);\n self.state.set('rendered', true);\n if (self.settings.style) {\n self.$el.css(self.settings.style);\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n if (!self.parent()) {\n self.keyboardNav = KeyboardNavigation({ root: self });\n }\n return self;\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n self._layout.recalc(self);\n return layoutRect;\n },\n recalc: function () {\n var self = this;\n var rect = self._layoutRect;\n var lastRect = self._lastRect;\n if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n self._layout.recalc(self);\n rect = self.layoutRect();\n self._lastRect = {\n x: rect.x,\n y: rect.y,\n w: rect.w,\n h: rect.h\n };\n return true;\n }\n },\n reflow: function () {\n var i;\n ReflowQueue.remove(this);\n if (this.visible()) {\n Control$1.repaintControls = [];\n Control$1.repaintControls.map = {};\n this.recalc();\n i = Control$1.repaintControls.length;\n while (i--) {\n Control$1.repaintControls[i].repaint();\n }\n if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\n this.repaint();\n }\n Control$1.repaintControls = [];\n }\n return this;\n }\n });\n\n function getDocumentSize(doc) {\n var documentElement, body, scrollWidth, clientWidth;\n var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n var max = Math.max;\n documentElement = doc.documentElement;\n body = doc.body;\n scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n clientWidth = max(documentElement.clientWidth, body.clientWidth);\n offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n clientHeight = max(documentElement.clientHeight, body.clientHeight);\n offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n function updateWithTouchData(e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n }\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || domGlobals.document;\n var downButton;\n var start, stop, drag, startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n start = function (e) {\n var docSize = getDocumentSize(doc);\n var handleElm, cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$9('
').css({\n position: 'absolute',\n top: 0,\n left: 0,\n width: docSize.width,\n height: docSize.height,\n zIndex: 2147483647,\n opacity: 0.0001,\n cursor: cursor\n }).appendTo(doc.body);\n global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n stop = function (e) {\n updateWithTouchData(e);\n global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n this.destroy = function () {\n global$9(handleElement).off();\n };\n global$9(handleElement).on('mousedown touchstart', start);\n }\n\n var Scrollable = {\n init: function () {\n var self = this;\n self.on('repaint', self.renderScroll);\n },\n renderScroll: function () {\n var self = this, margin = 2;\n function repaintScroll() {\n var hasScrollH, hasScrollV, bodyElm;\n function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\n var containerElm, scrollBarElm, scrollThumbElm;\n var containerSize, scrollSize, ratio, rect;\n var posNameLower, sizeNameLower;\n scrollBarElm = self.getEl('scroll' + axisName);\n if (scrollBarElm) {\n posNameLower = posName.toLowerCase();\n sizeNameLower = sizeName.toLowerCase();\n global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\n if (!hasScroll) {\n global$9(scrollBarElm).css('display', 'none');\n return;\n }\n global$9(scrollBarElm).css('display', 'block');\n containerElm = self.getEl('body');\n scrollThumbElm = self.getEl('scroll' + axisName + 't');\n containerSize = containerElm['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\n scrollSize = containerElm['scroll' + sizeName];\n ratio = containerSize / scrollSize;\n rect = {};\n rect[posNameLower] = containerElm['offset' + posName] + margin;\n rect[sizeNameLower] = containerSize;\n global$9(scrollBarElm).css(rect);\n rect = {};\n rect[posNameLower] = containerElm['scroll' + posName] * ratio;\n rect[sizeNameLower] = containerSize * ratio;\n global$9(scrollThumbElm).css(rect);\n }\n }\n bodyElm = self.getEl('body');\n hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\n hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\n repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\n repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\n }\n function addScroll() {\n function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\n var scrollStart;\n var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\n global$9(self.getEl()).append('
' + '
' + '
');\n self.draghelper = new DragHelper(axisId + 't', {\n start: function () {\n scrollStart = self.getEl('body')['scroll' + posName];\n global$9('#' + axisId).addClass(prefix + 'active');\n },\n drag: function (e) {\n var ratio, hasScrollH, hasScrollV, containerSize;\n var layoutRect = self.layoutRect();\n hasScrollH = layoutRect.contentW > layoutRect.innerW;\n hasScrollV = layoutRect.contentH > layoutRect.innerH;\n containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\n ratio = containerSize / self.getEl('body')['scroll' + sizeName];\n self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\n },\n stop: function () {\n global$9('#' + axisId).removeClass(prefix + 'active');\n }\n });\n }\n self.classes.add('scroll');\n addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\n addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\n }\n if (self.settings.autoScroll) {\n if (!self._hasScroll) {\n self._hasScroll = true;\n addScroll();\n self.on('wheel', function (e) {\n var bodyEl = self.getEl('body');\n bodyEl.scrollLeft += (e.deltaX || 0) * 10;\n bodyEl.scrollTop += e.deltaY * 10;\n repaintScroll();\n });\n global$9(self.getEl('body')).on('scroll', repaintScroll);\n }\n repaintScroll();\n }\n }\n };\n\n var Panel = Container.extend({\n Defaults: {\n layout: 'fit',\n containerCls: 'panel'\n },\n Mixins: [Scrollable],\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var innerHtml = self.settings.html;\n self.preRender();\n layout.preRender(self);\n if (typeof innerHtml === 'undefined') {\n innerHtml = '
' + layout.renderHtml(self) + '
';\n } else {\n if (typeof innerHtml === 'function') {\n innerHtml = innerHtml.call(self);\n }\n self._hasBody = false;\n }\n return '
' + (self._preBodyHtml || '') + innerHtml + '
';\n }\n });\n\n var Resizable = {\n resizeToContent: function () {\n this._layoutRect.autoResize = true;\n this._lastRect = null;\n this.reflow();\n },\n resizeTo: function (w, h) {\n if (w <= 1 || h <= 1) {\n var rect = funcs.getWindowSize();\n w = w <= 1 ? w * rect.w : w;\n h = h <= 1 ? h * rect.h : h;\n }\n this._layoutRect.autoResize = false;\n return this.layoutRect({\n minW: w,\n minH: h,\n w: w,\n h: h\n }).reflow();\n },\n resizeBy: function (dw, dh) {\n var self = this, rect = self.layoutRect();\n return self.resizeTo(rect.w + dw, rect.h + dh);\n }\n };\n\n var documentClickHandler, documentScrollHandler, windowResizeHandler;\n var visiblePanels = [];\n var zOrder = [];\n var hasModal;\n function isChildOf(ctrl, parent) {\n while (ctrl) {\n if (ctrl === parent) {\n return true;\n }\n ctrl = ctrl.parent();\n }\n }\n function skipOrHidePanels(e) {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\n if (panel.settings.autohide) {\n if (clickCtrl) {\n if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\n continue;\n }\n }\n e = panel.fire('autohide', { target: e.target });\n if (!e.isDefaultPrevented()) {\n panel.hide();\n }\n }\n }\n }\n function bindDocumentClickHandler() {\n if (!documentClickHandler) {\n documentClickHandler = function (e) {\n if (e.button === 2) {\n return;\n }\n skipOrHidePanels(e);\n };\n global$9(domGlobals.document).on('click touchstart', documentClickHandler);\n }\n }\n function bindDocumentScrollHandler() {\n if (!documentScrollHandler) {\n documentScrollHandler = function () {\n var i;\n i = visiblePanels.length;\n while (i--) {\n repositionPanel(visiblePanels[i]);\n }\n };\n global$9(domGlobals.window).on('scroll', documentScrollHandler);\n }\n }\n function bindWindowResizeHandler() {\n if (!windowResizeHandler) {\n var docElm_1 = domGlobals.document.documentElement;\n var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\n windowResizeHandler = function () {\n if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\n clientWidth_1 = docElm_1.clientWidth;\n clientHeight_1 = docElm_1.clientHeight;\n FloatPanel.hideAll();\n }\n };\n global$9(domGlobals.window).on('resize', windowResizeHandler);\n }\n }\n function repositionPanel(panel) {\n var scrollY = funcs.getViewPort().y;\n function toggleFixedChildPanels(fixed, deltaY) {\n var parent;\n for (var i = 0; i < visiblePanels.length; i++) {\n if (visiblePanels[i] !== panel) {\n parent = visiblePanels[i].parent();\n while (parent && (parent = parent.parent())) {\n if (parent === panel) {\n visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\n }\n }\n }\n }\n }\n if (panel.settings.autofix) {\n if (!panel.state.get('fixed')) {\n panel._autoFixY = panel.layoutRect().y;\n if (panel._autoFixY < scrollY) {\n panel.fixed(true).layoutRect({ y: 0 }).repaint();\n toggleFixedChildPanels(true, scrollY - panel._autoFixY);\n }\n } else {\n if (panel._autoFixY > scrollY) {\n panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\n toggleFixedChildPanels(false, panel._autoFixY - scrollY);\n }\n }\n }\n }\n function addRemove(add, ctrl) {\n var i, zIndex = FloatPanel.zIndex || 65535, topModal;\n if (add) {\n zOrder.push(ctrl);\n } else {\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === ctrl) {\n zOrder.splice(i, 1);\n }\n }\n }\n if (zOrder.length) {\n for (i = 0; i < zOrder.length; i++) {\n if (zOrder[i].modal) {\n zIndex++;\n topModal = zOrder[i];\n }\n zOrder[i].getEl().style.zIndex = zIndex;\n zOrder[i].zIndex = zIndex;\n zIndex++;\n }\n }\n var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\n if (topModal) {\n global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\n } else if (modalBlockEl) {\n modalBlockEl.parentNode.removeChild(modalBlockEl);\n hasModal = false;\n }\n FloatPanel.currentZIndex = zIndex;\n }\n var FloatPanel = Panel.extend({\n Mixins: [\n Movable,\n Resizable\n ],\n init: function (settings) {\n var self = this;\n self._super(settings);\n self._eventsRoot = self;\n self.classes.add('floatpanel');\n if (settings.autohide) {\n bindDocumentClickHandler();\n bindWindowResizeHandler();\n visiblePanels.push(self);\n }\n if (settings.autofix) {\n bindDocumentScrollHandler();\n self.on('move', function () {\n repositionPanel(this);\n });\n }\n self.on('postrender show', function (e) {\n if (e.control === self) {\n var $modalBlockEl_1;\n var prefix_1 = self.classPrefix;\n if (self.modal && !hasModal) {\n $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\n if (!$modalBlockEl_1[0]) {\n $modalBlockEl_1 = global$9('
').appendTo(self.getContainerElm());\n }\n global$7.setTimeout(function () {\n $modalBlockEl_1.addClass(prefix_1 + 'in');\n global$9(self.getEl()).addClass(prefix_1 + 'in');\n });\n hasModal = true;\n }\n addRemove(true, self);\n }\n });\n self.on('show', function () {\n self.parents().each(function (ctrl) {\n if (ctrl.state.get('fixed')) {\n self.fixed(true);\n return false;\n }\n });\n });\n if (settings.popover) {\n self._preBodyHtml = '
';\n self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\n }\n self.aria('label', settings.ariaLabel);\n self.aria('labelledby', self._id);\n self.aria('describedby', self.describedBy || self._id + '-none');\n },\n fixed: function (state) {\n var self = this;\n if (self.state.get('fixed') !== state) {\n if (self.state.get('rendered')) {\n var viewport = funcs.getViewPort();\n if (state) {\n self.layoutRect().y -= viewport.y;\n } else {\n self.layoutRect().y += viewport.y;\n }\n }\n self.classes.toggle('fixed', state);\n self.state.set('fixed', state);\n }\n return self;\n },\n show: function () {\n var self = this;\n var i;\n var state = self._super();\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === self) {\n break;\n }\n }\n if (i === -1) {\n visiblePanels.push(self);\n }\n return state;\n },\n hide: function () {\n removeVisiblePanel(this);\n addRemove(false, this);\n return this._super();\n },\n hideAll: function () {\n FloatPanel.hideAll();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n addRemove(false, self);\n }\n return self;\n },\n remove: function () {\n removeVisiblePanel(this);\n this._super();\n },\n postRender: function () {\n var self = this;\n if (self.settings.bodyRole) {\n this.getEl('body').setAttribute('role', self.settings.bodyRole);\n }\n return self._super();\n }\n });\n FloatPanel.hideAll = function () {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i];\n if (panel && panel.settings.autohide) {\n panel.hide();\n visiblePanels.splice(i, 1);\n }\n }\n };\n function removeVisiblePanel(panel) {\n var i;\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === panel) {\n visiblePanels.splice(i, 1);\n }\n }\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === panel) {\n zOrder.splice(i, 1);\n }\n }\n }\n\n var isFixed$1 = function (inlineToolbarContainer, editor) {\n return !!(inlineToolbarContainer && !editor.settings.ui_container);\n };\n var render$1 = function (editor, theme, args) {\n var panel, inlineToolbarContainer;\n var DOM = global$3.DOM;\n var fixedToolbarContainer = getFixedToolbarContainer(editor);\n if (fixedToolbarContainer) {\n inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\n }\n var reposition = function () {\n if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\n var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\n var deltaX = 0, deltaY = 0;\n if (scrollContainer) {\n var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\n deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\n deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\n }\n panel.fixed(false).moveRel(body, editor.rtl ? [\n 'tr-br',\n 'br-tr'\n ] : [\n 'tl-bl',\n 'bl-tl',\n 'tr-br'\n ]).moveBy(deltaX, deltaY);\n }\n };\n var show = function () {\n if (panel) {\n panel.show();\n reposition();\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var hide = function () {\n if (panel) {\n panel.hide();\n FloatPanel.hideAll();\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var render = function () {\n if (panel) {\n if (!panel.visible()) {\n show();\n }\n return;\n }\n panel = theme.panel = global$4.create({\n type: inlineToolbarContainer ? 'panel' : 'floatpanel',\n role: 'application',\n classes: 'tinymce tinymce-inline',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: isFixed$1(inlineToolbarContainer, editor),\n border: 1,\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n Events.fireBeforeRenderUI(editor);\n if (inlineToolbarContainer) {\n panel.renderTo(inlineToolbarContainer).reflow();\n } else {\n panel.renderTo().reflow();\n }\n A11y.addKeys(editor, panel);\n show();\n ContextToolbars.addContextualToolbars(editor);\n editor.on('nodeChange', reposition);\n editor.on('ResizeWindow', reposition);\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.nodeChanged();\n };\n editor.settings.content_editable = true;\n editor.on('focus', function () {\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, render, render);\n } else {\n render();\n }\n });\n editor.on('blur hide', hide);\n editor.on('remove', function () {\n if (panel) {\n panel.remove();\n panel = null;\n }\n });\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n return {};\n };\n var Inline = { render: render$1 };\n\n function Throbber (elm, inline) {\n var self = this;\n var state;\n var classPrefix = Control$1.classPrefix;\n var timer;\n self.show = function (time, callback) {\n function render() {\n if (state) {\n global$9(elm).append('
');\n if (callback) {\n callback();\n }\n }\n }\n self.hide();\n state = true;\n if (time) {\n timer = global$7.setTimeout(render, time);\n } else {\n render();\n }\n return self;\n };\n self.hide = function () {\n var child = elm.lastChild;\n global$7.clearTimeout(timer);\n if (child && child.className.indexOf('throbber') !== -1) {\n child.parentNode.removeChild(child);\n }\n state = false;\n return self;\n };\n }\n\n var setup = function (editor, theme) {\n var throbber;\n editor.on('ProgressState', function (e) {\n throbber = throbber || new Throbber(theme.panel.getEl('body'));\n if (e.state) {\n throbber.show(e.time);\n } else {\n throbber.hide();\n }\n });\n };\n var ProgressState = { setup: setup };\n\n var renderUI = function (editor, theme, args) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n args.skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\n }\n ProgressState.setup(editor, theme);\n return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\n };\n var Render = { renderUI: renderUI };\n\n var Tooltip = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget tooltip tooltip-n' },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
' + '
' + '
' + self.encode(self.state.get('text')) + '
' + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().lastChild.innerHTML = self.encode(e.value);\n });\n return self._super();\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 + 65535;\n }\n });\n\n var Widget = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.canFocus = true;\n if (settings.tooltip && Widget.tooltips !== false) {\n self.on('mouseenter', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (e.control === self) {\n var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(self.getEl(), rel);\n } else {\n tooltip.hide();\n }\n });\n self.on('mouseleave mousedown click', function () {\n self.tooltip().remove();\n self._tooltip = null;\n });\n }\n self.aria('label', settings.ariaLabel || settings.tooltip);\n },\n tooltip: function () {\n if (!this._tooltip) {\n this._tooltip = new Tooltip({ type: 'tooltip' });\n UiContainer.inheritUiContainer(this, this._tooltip);\n this._tooltip.renderTo();\n }\n return this._tooltip;\n },\n postRender: function () {\n var self = this, settings = self.settings;\n self._super();\n if (!self.parent() && (settings.width || settings.height)) {\n self.initLayoutRect();\n self.repaint();\n }\n if (settings.autofocus) {\n self.focus();\n }\n },\n bindStates: function () {\n var self = this;\n function disable(state) {\n self.aria('disabled', state);\n self.classes.toggle('disabled', state);\n }\n function active(state) {\n self.aria('pressed', state);\n self.classes.toggle('active', state);\n }\n self.state.on('change:disabled', function (e) {\n disable(e.value);\n });\n self.state.on('change:active', function (e) {\n active(e.value);\n });\n if (self.state.get('disabled')) {\n disable(true);\n }\n if (self.state.get('active')) {\n active(true);\n }\n return self._super();\n },\n remove: function () {\n this._super();\n if (this._tooltip) {\n this._tooltip.remove();\n this._tooltip = null;\n }\n }\n });\n\n var Progress = Widget.extend({\n Defaults: { value: 0 },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('progress');\n if (!self.settings.filter) {\n self.settings.filter = function (value) {\n return Math.round(value);\n };\n }\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = this.classPrefix;\n return '
' + '
' + '
' + '
' + '
0%
' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.value(self.settings.value);\n return self;\n },\n bindStates: function () {\n var self = this;\n function setValue(value) {\n value = self.settings.filter(value);\n self.getEl().lastChild.innerHTML = value + '%';\n self.getEl().firstChild.firstChild.style.width = value + '%';\n }\n self.state.on('change:value', function (e) {\n setValue(e.value);\n });\n setValue(self.state.get('value'));\n return self._super();\n }\n });\n\n var updateLiveRegion = function (ctx, text) {\n ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\n };\n var Notification = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget notification' },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.maxWidth = settings.maxWidth;\n if (settings.text) {\n self.text(settings.text);\n }\n if (settings.icon) {\n self.icon = settings.icon;\n }\n if (settings.color) {\n self.color = settings.color;\n }\n if (settings.type) {\n self.classes.add('notification-' + settings.type);\n }\n if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\n self.closeButton = false;\n } else {\n self.classes.add('has-close');\n self.closeButton = true;\n }\n if (settings.progressBar) {\n self.progressBar = new Progress();\n }\n self.on('click', function (e) {\n if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\n self.close();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var prefix = self.classPrefix;\n var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\n if (self.icon) {\n icon = '';\n }\n notificationStyle = ' style=\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\"' : '\"');\n if (self.closeButton) {\n closeButton = '';\n }\n if (self.progressBar) {\n progressBar = self.progressBar.renderHtml();\n }\n return '
' + icon + '
' + self.state.get('text') + '
' + progressBar + closeButton + '
' + '
';\n },\n postRender: function () {\n var self = this;\n global$7.setTimeout(function () {\n self.$el.addClass(self.classPrefix + 'in');\n updateLiveRegion(self, self.state.get('text'));\n }, 100);\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().firstChild.innerHTML = e.value;\n updateLiveRegion(self, e.value);\n });\n if (self.progressBar) {\n self.progressBar.bindStates();\n self.progressBar.state.on('change:value', function (e) {\n updateLiveRegion(self, self.state.get('text'));\n });\n }\n return self._super();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n }\n return self;\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 - 1;\n }\n });\n\n function NotificationManagerImpl (editor) {\n var getEditorContainer = function (editor) {\n return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\n };\n var getContainerWidth = function () {\n var container = getEditorContainer(editor);\n return funcs.getSize(container).width;\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n var firstItem = notifications.slice(0, 1)[0];\n var container = getEditorContainer(editor);\n firstItem.moveRel(container, 'tc-tc');\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (args, closeCallback) {\n var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\n var notif = new Notification(extendedArgs);\n notif.args = extendedArgs;\n if (extendedArgs.timeout > 0) {\n notif.timer = setTimeout(function () {\n notif.close();\n closeCallback();\n }, extendedArgs.timeout);\n }\n notif.on('close', function () {\n closeCallback();\n });\n notif.renderTo();\n return notif;\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.args;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var windows = [];\n var oldMetaValue = '';\n function toggleFullScreenState(state) {\n var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\n var viewport = global$9('meta[name=viewport]')[0], contentValue;\n if (global$8.overrideViewPort === false) {\n return;\n }\n if (!viewport) {\n viewport = domGlobals.document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\n }\n contentValue = viewport.getAttribute('content');\n if (contentValue && typeof oldMetaValue !== 'undefined') {\n oldMetaValue = contentValue;\n }\n viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\n }\n function toggleBodyFullScreenClasses(classPrefix, state) {\n if (checkFullscreenWindows() && state === false) {\n global$9([\n domGlobals.document.documentElement,\n domGlobals.document.body\n ]).removeClass(classPrefix + 'fullscreen');\n }\n }\n function checkFullscreenWindows() {\n for (var i = 0; i < windows.length; i++) {\n if (windows[i]._fullscreen) {\n return true;\n }\n }\n return false;\n }\n function handleWindowResize() {\n if (!global$8.desktop) {\n var lastSize_1 = {\n w: domGlobals.window.innerWidth,\n h: domGlobals.window.innerHeight\n };\n global$7.setInterval(function () {\n var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\n if (lastSize_1.w !== w || lastSize_1.h !== h) {\n lastSize_1 = {\n w: w,\n h: h\n };\n global$9(domGlobals.window).trigger('resize');\n }\n }, 100);\n }\n function reposition() {\n var i;\n var rect = funcs.getWindowSize();\n var layoutRect;\n for (i = 0; i < windows.length; i++) {\n layoutRect = windows[i].layoutRect();\n windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));\n }\n }\n global$9(domGlobals.window).on('resize', reposition);\n }\n var Window = FloatPanel.extend({\n modal: true,\n Defaults: {\n border: 1,\n layout: 'flex',\n containerCls: 'panel',\n role: 'dialog',\n callbacks: {\n submit: function () {\n this.fire('submit', { data: this.toJSON() });\n },\n close: function () {\n this.close();\n }\n }\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.classes.add('window');\n self.bodyClasses.add('window-body');\n self.state.set('fixed', true);\n if (settings.buttons) {\n self.statusbar = new Panel({\n layout: 'flex',\n border: '1 0 0 0',\n spacing: 3,\n padding: 10,\n align: 'center',\n pack: self.isRtl() ? 'start' : 'end',\n defaults: { type: 'button' },\n items: settings.buttons\n });\n self.statusbar.classes.add('foot');\n self.statusbar.parent(self);\n }\n self.on('click', function (e) {\n var closeClass = self.classPrefix + 'close';\n if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\n self.close();\n }\n });\n self.on('cancel', function () {\n self.close();\n });\n self.on('move', function (e) {\n if (e.control === self) {\n FloatPanel.hideAll();\n }\n });\n self.aria('describedby', self.describedBy || self._id + '-none');\n self.aria('label', settings.title);\n self._fullscreen = false;\n },\n recalc: function () {\n var self = this;\n var statusbar = self.statusbar;\n var layoutRect, width, x, needsRecalc;\n if (self._fullscreen) {\n self.layoutRect(funcs.getWindowSize());\n self.layoutRect().contentH = self.layoutRect().innerH;\n }\n self._super();\n layoutRect = self.layoutRect();\n if (self.settings.title && !self._fullscreen) {\n width = layoutRect.headerW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width / 2);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (statusbar) {\n statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\n width = statusbar.layoutRect().minW + layoutRect.deltaW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width - layoutRect.w);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (needsRecalc) {\n self.recalc();\n }\n },\n initLayoutRect: function () {\n var self = this;\n var layoutRect = self._super();\n var deltaH = 0, headEl;\n if (self.settings.title && !self._fullscreen) {\n headEl = self.getEl('head');\n var size = funcs.getSize(headEl);\n layoutRect.headerW = size.width;\n layoutRect.headerH = size.height;\n deltaH += layoutRect.headerH;\n }\n if (self.statusbar) {\n deltaH += self.statusbar.layoutRect().h;\n }\n layoutRect.deltaH += deltaH;\n layoutRect.minH += deltaH;\n layoutRect.h += deltaH;\n var rect = funcs.getWindowSize();\n layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\n layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\n return layoutRect;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\n var settings = self.settings;\n var headerHtml = '', footerHtml = '', html = settings.html;\n self.preRender();\n layout.preRender(self);\n if (settings.title) {\n headerHtml = '
' + '
' + self.encode(settings.title) + '
' + '
' + '' + '
';\n }\n if (settings.url) {\n html = '';\n }\n if (typeof html === 'undefined') {\n html = layout.renderHtml(self);\n }\n if (self.statusbar) {\n footerHtml = self.statusbar.renderHtml();\n }\n return '
' + '
' + headerHtml + '
' + html + '
' + footerHtml + '
' + '
';\n },\n fullscreen: function (state) {\n var self = this;\n var documentElement = domGlobals.document.documentElement;\n var slowRendering;\n var prefix = self.classPrefix;\n var layoutRect;\n if (state !== self._fullscreen) {\n global$9(domGlobals.window).on('resize', function () {\n var time;\n if (self._fullscreen) {\n if (!slowRendering) {\n time = new Date().getTime();\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n if (new Date().getTime() - time > 50) {\n slowRendering = true;\n }\n } else {\n if (!self._timer) {\n self._timer = global$7.setTimeout(function () {\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n self._timer = 0;\n }, 50);\n }\n }\n }\n });\n layoutRect = self.layoutRect();\n self._fullscreen = state;\n if (!state) {\n self.borderBox = BoxUtils.parseBox(self.settings.border);\n self.getEl('head').style.display = '';\n layoutRect.deltaH += layoutRect.headerH;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).removeClass(prefix + 'fullscreen');\n self.classes.remove('fullscreen');\n self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\n } else {\n self._initial = {\n x: layoutRect.x,\n y: layoutRect.y,\n w: layoutRect.w,\n h: layoutRect.h\n };\n self.borderBox = BoxUtils.parseBox('0');\n self.getEl('head').style.display = 'none';\n layoutRect.deltaH -= layoutRect.headerH + 2;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).addClass(prefix + 'fullscreen');\n self.classes.add('fullscreen');\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n }\n }\n return self.reflow();\n },\n postRender: function () {\n var self = this;\n var startPos;\n setTimeout(function () {\n self.classes.add('in');\n self.fire('open');\n }, 0);\n self._super();\n if (self.statusbar) {\n self.statusbar.postRender();\n }\n self.focus();\n this.dragHelper = new DragHelper(self._id + '-dragh', {\n start: function () {\n startPos = {\n x: self.layoutRect().x,\n y: self.layoutRect().y\n };\n },\n drag: function (e) {\n self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\n }\n });\n self.on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n self.close();\n }\n });\n windows.push(self);\n toggleFullScreenState(true);\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n remove: function () {\n var self = this;\n var i;\n self.dragHelper.destroy();\n self._super();\n if (self.statusbar) {\n this.statusbar.remove();\n }\n toggleBodyFullScreenClasses(self.classPrefix, false);\n i = windows.length;\n while (i--) {\n if (windows[i] === self) {\n windows.splice(i, 1);\n }\n }\n toggleFullScreenState(windows.length > 0);\n },\n getContentWindow: function () {\n var ifr = this.getEl().getElementsByTagName('iframe')[0];\n return ifr ? ifr.contentWindow : null;\n }\n });\n handleWindowResize();\n\n var MessageBox = Window.extend({\n init: function (settings) {\n settings = {\n border: 1,\n padding: 20,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n containerCls: 'panel',\n autoScroll: true,\n buttons: {\n type: 'button',\n text: 'Ok',\n action: 'ok'\n },\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200\n }\n };\n this._super(settings);\n },\n Statics: {\n OK: 1,\n OK_CANCEL: 2,\n YES_NO: 3,\n YES_NO_CANCEL: 4,\n msgBox: function (settings) {\n var buttons;\n var callback = settings.callback || function () {\n };\n function createButton(text, status, primary) {\n return {\n type: 'button',\n text: text,\n subtype: primary ? 'primary' : '',\n onClick: function (e) {\n e.control.parents()[1].close();\n callback(status);\n }\n };\n }\n switch (settings.buttons) {\n case MessageBox.OK_CANCEL:\n buttons = [\n createButton('Ok', true, true),\n createButton('Cancel', false)\n ];\n break;\n case MessageBox.YES_NO:\n case MessageBox.YES_NO_CANCEL:\n buttons = [\n createButton('Yes', 1, true),\n createButton('No', 0)\n ];\n if (settings.buttons === MessageBox.YES_NO_CANCEL) {\n buttons.push(createButton('Cancel', -1));\n }\n break;\n default:\n buttons = [createButton('Ok', true, true)];\n break;\n }\n return new Window({\n padding: 20,\n x: settings.x,\n y: settings.y,\n minWidth: 300,\n minHeight: 100,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n buttons: buttons,\n title: settings.title,\n role: 'alertdialog',\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200,\n text: settings.text\n },\n onPostRender: function () {\n this.aria('describedby', this.items()[0]._id);\n },\n onClose: settings.onClose,\n onCancel: function () {\n callback(false);\n }\n }).renderTo(domGlobals.document.body).reflow();\n },\n alert: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n return MessageBox.msgBox(settings);\n },\n confirm: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n settings.buttons = MessageBox.OK_CANCEL;\n return MessageBox.msgBox(settings);\n }\n }\n });\n\n function WindowManagerImpl (editor) {\n var open = function (args, params, closeCallback) {\n var win;\n args.title = args.title || ' ';\n args.url = args.url || args.file;\n if (args.url) {\n args.width = parseInt(args.width || 320, 10);\n args.height = parseInt(args.height || 240, 10);\n }\n if (args.body) {\n args.items = {\n defaults: args.defaults,\n type: args.bodyType || 'form',\n items: args.body,\n data: args.data,\n callbacks: args.commands\n };\n }\n if (!args.url && !args.buttons) {\n args.buttons = [\n {\n text: 'Ok',\n subtype: 'primary',\n onclick: function () {\n win.find('form')[0].submit();\n }\n },\n {\n text: 'Cancel',\n onclick: function () {\n win.close();\n }\n }\n ];\n }\n win = new Window(args);\n win.on('close', function () {\n closeCallback(win);\n });\n if (args.data) {\n win.on('postRender', function () {\n this.find('*').each(function (ctrl) {\n var name = ctrl.name();\n if (name in args.data) {\n ctrl.value(args.data[name]);\n }\n });\n });\n }\n win.features = args || {};\n win.params = params || {};\n win = win.renderTo(domGlobals.document.body).reflow();\n return win;\n };\n var alert = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.alert(message, function () {\n choiceCallback();\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var confirm = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.confirm(message, function (state) {\n choiceCallback(state);\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var close = function (window) {\n window.close();\n };\n var getParams = function (window) {\n return window.params;\n };\n var setParams = function (window, params) {\n window.params = params;\n };\n return {\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams\n };\n }\n\n var get = function (editor) {\n var renderUI = function (args) {\n return Render.renderUI(editor, this, args);\n };\n var resizeTo = function (w, h) {\n return Resize.resizeTo(editor, w, h);\n };\n var resizeBy = function (dw, dh) {\n return Resize.resizeBy(editor, dw, dh);\n };\n var getNotificationManagerImpl = function () {\n return NotificationManagerImpl(editor);\n };\n var getWindowManagerImpl = function () {\n return WindowManagerImpl();\n };\n return {\n renderUI: renderUI,\n resizeTo: resizeTo,\n resizeBy: resizeBy,\n getNotificationManagerImpl: getNotificationManagerImpl,\n getWindowManagerImpl: getWindowManagerImpl\n };\n };\n var ThemeApi = { get: get };\n\n var Layout = global$a.extend({\n Defaults: {\n firstControlClass: 'first',\n lastControlClass: 'last'\n },\n init: function (settings) {\n this.settings = global$2.extend({}, this.Defaults, settings);\n },\n preRender: function (container) {\n container.bodyClasses.add(this.settings.containerClass);\n },\n applyClasses: function (items) {\n var self = this;\n var settings = self.settings;\n var firstClass, lastClass, firstItem, lastItem;\n firstClass = settings.firstControlClass;\n lastClass = settings.lastControlClass;\n items.each(function (item) {\n item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\n if (item.visible()) {\n if (!firstItem) {\n firstItem = item;\n }\n lastItem = item;\n }\n });\n if (firstItem) {\n firstItem.classes.add(firstClass);\n }\n if (lastItem) {\n lastItem.classes.add(lastClass);\n }\n },\n renderHtml: function (container) {\n var self = this;\n var html = '';\n self.applyClasses(container.items());\n container.items().each(function (item) {\n html += item.renderHtml();\n });\n return html;\n },\n recalc: function () {\n },\n postRender: function () {\n },\n isNative: function () {\n return false;\n }\n });\n\n var AbsoluteLayout = Layout.extend({\n Defaults: {\n containerClass: 'abs-layout',\n controlClass: 'abs-layout-item'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n var settings = ctrl.settings;\n ctrl.layoutRect({\n x: settings.x,\n y: settings.y,\n w: settings.w,\n h: settings.h\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n renderHtml: function (container) {\n return '
' + this._super(container);\n }\n });\n\n var Button = Widget.extend({\n Defaults: {\n classes: 'widget btn',\n role: 'button'\n },\n init: function (settings) {\n var self = this;\n var size;\n self._super(settings);\n settings = self.settings;\n size = self.settings.size;\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('touchstart', function (e) {\n self.fire('click', e);\n e.preventDefault();\n });\n if (settings.subtype) {\n self.classes.add(settings.subtype);\n }\n if (size) {\n self.classes.add('btn-' + size);\n }\n if (settings.icon) {\n self.icon(settings.icon);\n }\n },\n icon: function (icon) {\n if (!arguments.length) {\n return this.state.get('icon');\n }\n this.state.set('icon', icon);\n return this;\n },\n repaint: function () {\n var btnElm = this.getEl().firstChild;\n var btnStyle;\n if (btnElm) {\n btnStyle = btnElm.style;\n btnStyle.width = btnStyle.height = '100%';\n }\n this._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.state.get('icon'), image;\n var text = self.state.get('text');\n var textHtml = '';\n var ariaPressed;\n var settings = self.settings;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
' + '' + '
';\n },\n bindStates: function () {\n var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\n function setButtonText(text) {\n var $span = $('span.' + textCls, self.getEl());\n if (text) {\n if (!$span[0]) {\n $('button:first', self.getEl()).append('');\n $span = $('span.' + textCls, self.getEl());\n }\n $span.html(self.encode(text));\n } else {\n $span.remove();\n }\n self.classes.toggle('btn-has-text', !!text);\n }\n self.state.on('change:text', function (e) {\n setButtonText(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n setButtonText(self.state.get('text'));\n });\n return self._super();\n }\n });\n\n var BrowseButton = Button.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n text: 'Browse...',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('browsebutton');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n postRender: function () {\n var self = this;\n var input = funcs.create('input', {\n type: 'file',\n id: self._id + '-browse',\n accept: self.settings.accept\n });\n self._super();\n global$9(input).on('change', function (e) {\n var files = e.target.files;\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n e.preventDefault();\n if (files.length) {\n self.fire('change', e);\n }\n });\n global$9(input).on('click', function (e) {\n e.stopPropagation();\n });\n global$9(self.getEl('button')).on('click touchstart', function (e) {\n e.stopPropagation();\n input.click();\n e.preventDefault();\n });\n self.getEl().appendChild(input);\n },\n remove: function () {\n global$9(this.getEl('button')).off();\n global$9(this.getEl('input')).off();\n this._super();\n }\n });\n\n var ButtonGroup = Container.extend({\n Defaults: {\n defaultType: 'button',\n role: 'group'\n },\n renderHtml: function () {\n var self = this, layout = self._layout;\n self.classes.add('btn-group');\n self.preRender();\n layout.preRender(self);\n return '
' + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var Checkbox = Widget.extend({\n Defaults: {\n classes: 'checkbox',\n role: 'checkbox',\n checked: false\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('click', function (e) {\n e.preventDefault();\n if (!self.disabled()) {\n self.checked(!self.checked());\n }\n });\n self.checked(self.settings.checked);\n },\n checked: function (state) {\n if (!arguments.length) {\n return this.state.get('checked');\n }\n this.state.set('checked', state);\n return this;\n },\n value: function (state) {\n if (!arguments.length) {\n return this.checked();\n }\n return this.checked(state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
' + '' + '' + self.encode(self.state.get('text')) + '' + '
';\n },\n bindStates: function () {\n var self = this;\n function checked(state) {\n self.classes.toggle('checked', state);\n self.aria('checked', state);\n }\n self.state.on('change:text', function (e) {\n self.getEl('al').firstChild.data = self.translate(e.value);\n });\n self.state.on('change:checked change:value', function (e) {\n self.fire('change');\n checked(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n if (typeof icon === 'undefined') {\n return self.settings.icon;\n }\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n });\n if (self.state.get('checked')) {\n checked(true);\n }\n return self._super();\n }\n });\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var ComboBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.classes.add('combobox');\n self.subinput = true;\n self.ariaTarget = 'inp';\n settings.menu = settings.menu || settings.values;\n if (settings.menu) {\n settings.icon = 'caret';\n }\n self.on('click', function (e) {\n var elm = e.target;\n var root = self.getEl();\n if (!global$9.contains(root, elm) && elm !== root) {\n return;\n }\n while (elm && elm !== root) {\n if (elm.id && elm.id.indexOf('-open') !== -1) {\n self.fire('action');\n if (settings.menu) {\n self.showMenu();\n if (e.aria) {\n self.menu.items()[0].focus();\n }\n }\n }\n elm = elm.parentNode;\n }\n });\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n if (e.target.nodeName === 'INPUT') {\n var oldValue = self.state.get('value');\n var newValue = e.target.value;\n if (newValue !== oldValue) {\n self.state.set('value', newValue);\n self.fire('autocomplete', e);\n }\n }\n });\n self.on('mouseover', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\n var statusMessage = self.statusMessage() || 'Ok';\n var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(e.target, rel);\n }\n });\n },\n statusLevel: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusLevel', value);\n }\n return this.state.get('statusLevel');\n },\n statusMessage: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusMessage', value);\n }\n return this.state.get('statusMessage');\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n if (!self.menu) {\n menu = settings.menu || [];\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control === self.menu) {\n self.focus();\n }\n });\n self.menu.on('show hide', function (e) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.value() === self.value());\n });\n }).fire('show');\n self.menu.on('select', function (e) {\n self.value(e.control.value());\n });\n self.on('focusin', function (e) {\n if (e.target.tagName.toUpperCase() === 'INPUT') {\n self.menu.hide();\n }\n });\n self.aria('expanded', true);\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n focus: function () {\n this.getEl('inp').focus();\n },\n repaint: function () {\n var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\n var width, lineHeight, innerPadding = 0;\n var inputElm = elm.firstChild;\n if (self.statusLevel() && self.statusLevel() !== 'none') {\n innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\n }\n if (openElm) {\n width = rect.w - funcs.getSize(openElm).width - 10;\n } else {\n width = rect.w - 10;\n }\n var doc = domGlobals.document;\n if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n lineHeight = self.layoutRect().h - 2 + 'px';\n }\n global$9(inputElm).css({\n width: width - innerPadding,\n lineHeight: lineHeight\n });\n self._super();\n return self;\n },\n postRender: function () {\n var self = this;\n global$9(this.getEl('inp')).on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n return self._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\n var value = self.state.get('value') || '';\n var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\n if ('spellcheck' in settings) {\n extraAttrs += ' spellcheck=\"' + settings.spellcheck + '\"';\n }\n if (settings.maxLength) {\n extraAttrs += ' maxlength=\"' + settings.maxLength + '\"';\n }\n if (settings.size) {\n extraAttrs += ' size=\"' + settings.size + '\"';\n }\n if (settings.subtype) {\n extraAttrs += ' type=\"' + settings.subtype + '\"';\n }\n statusHtml = '';\n if (self.disabled()) {\n extraAttrs += ' disabled=\"disabled\"';\n }\n icon = settings.icon;\n if (icon && icon !== 'caret') {\n icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\n }\n text = self.state.get('text');\n if (icon || text) {\n openBtnHtml = '
' + '' + '
';\n self.classes.add('has-open');\n }\n return '
' + '' + statusHtml + openBtnHtml + '
';\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl('inp').value);\n }\n return this.state.get('value');\n },\n showAutoComplete: function (items, term) {\n var self = this;\n if (items.length === 0) {\n self.hideMenu();\n return;\n }\n var insert = function (value, title) {\n return function () {\n self.fire('selectitem', {\n title: title,\n value: value\n });\n };\n };\n if (self.menu) {\n self.menu.items().remove();\n } else {\n self.menu = global$4.create({\n type: 'menu',\n classes: 'combobox-menu',\n layout: 'flow'\n }).parent(self).renderTo();\n }\n global$2.each(items, function (item) {\n self.menu.add({\n text: item.title,\n url: item.previewUrl,\n match: term,\n classes: 'menu-item-ellipsis',\n onclick: insert(item.value, item.title)\n });\n });\n self.menu.renderNew();\n self.hideMenu();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n var maxW = self.layoutRect().w;\n self.menu.layoutRect({\n w: maxW,\n minW: 0,\n maxW: maxW\n });\n self.menu.repaint();\n self.menu.reflow();\n self.menu.show();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n hideMenu: function () {\n if (this.menu) {\n this.menu.hide();\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl('inp').value !== e.value) {\n self.getEl('inp').value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl('inp').disabled = e.value;\n });\n self.state.on('change:statusLevel', function (e) {\n var statusIconElm = self.getEl('status');\n var prefix = self.classPrefix, value = e.value;\n funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\n funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\n funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\n funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\n self.classes.toggle('has-status', value !== 'none');\n self.repaint();\n });\n funcs.on(self.getEl('status'), 'mouseleave', function () {\n self.tooltip().hide();\n });\n self.on('cancel', function (e) {\n if (self.menu && self.menu.visible()) {\n e.stopPropagation();\n self.hideMenu();\n }\n });\n var focusIdx = function (idx, menu) {\n if (menu && menu.items().length > 0) {\n menu.items().eq(idx)[0].focus();\n }\n };\n self.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.target.nodeName === 'INPUT') {\n if (keyCode === global$d.DOWN) {\n e.preventDefault();\n self.fire('autocomplete');\n focusIdx(0, self.menu);\n } else if (keyCode === global$d.UP) {\n e.preventDefault();\n focusIdx(-1, self.menu);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n global$9(this.getEl('inp')).off();\n if (this.menu) {\n this.menu.remove();\n }\n this._super();\n }\n });\n\n var ColorBox = ComboBox.extend({\n init: function (settings) {\n var self = this;\n settings.spellcheck = false;\n if (settings.onaction) {\n settings.icon = 'none';\n }\n self._super(settings);\n self.classes.add('colorbox');\n self.on('change keyup postrender', function () {\n self.repaintColor(self.value());\n });\n },\n repaintColor: function (value) {\n var openElm = this.getEl('open');\n var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\n if (elm) {\n try {\n elm.style.background = value;\n } catch (ex) {\n }\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.state.get('rendered')) {\n self.repaintColor(e.value);\n }\n });\n return self._super();\n }\n });\n\n var PanelButton = Button.extend({\n showPanel: function () {\n var self = this, settings = self.settings;\n self.classes.add('opened');\n if (!self.panel) {\n var panelSettings = settings.panel;\n if (panelSettings.type) {\n panelSettings = {\n layout: 'grid',\n items: panelSettings\n };\n }\n panelSettings.role = panelSettings.role || 'dialog';\n panelSettings.popover = true;\n panelSettings.autohide = true;\n panelSettings.ariaRoot = true;\n self.panel = new FloatPanel(panelSettings).on('hide', function () {\n self.classes.remove('opened');\n }).on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n self.hidePanel();\n }).parent(self).renderTo(self.getContainerElm());\n self.panel.fire('show');\n self.panel.reflow();\n } else {\n self.panel.show();\n }\n var rtlRels = [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ];\n var ltrRels = [\n 'bc-tc',\n 'bc-tr',\n 'bc-tl',\n 'tc-bc',\n 'tc-br',\n 'tc-bl'\n ];\n var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\n self.panel.classes.toggle('start', rel.substr(-1) === 'l');\n self.panel.classes.toggle('end', rel.substr(-1) === 'r');\n var isTop = rel.substr(0, 1) === 't';\n self.panel.classes.toggle('bottom', !isTop);\n self.panel.classes.toggle('top', isTop);\n self.panel.moveRel(self.getEl(), rel);\n },\n hidePanel: function () {\n var self = this;\n if (self.panel) {\n self.panel.hide();\n }\n },\n postRender: function () {\n var self = this;\n self.aria('haspopup', true);\n self.on('click', function (e) {\n if (e.control === self) {\n if (self.panel && self.panel.visible()) {\n self.hidePanel();\n } else {\n self.showPanel();\n self.panel.focus(!!e.aria);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n if (this.panel) {\n this.panel.remove();\n this.panel = null;\n }\n return this._super();\n }\n });\n\n var DOM$3 = global$3.DOM;\n var ColorButton = PanelButton.extend({\n init: function (settings) {\n this._super(settings);\n this.classes.add('splitbtn');\n this.classes.add('colorbutton');\n },\n color: function (color) {\n if (color) {\n this._color = color;\n this.getEl('preview').style.backgroundColor = color;\n return this;\n }\n return this._color;\n },\n resetColor: function () {\n this._color = null;\n this.getEl('preview').style.backgroundColor = null;\n return this;\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\n var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var image = self.settings.image ? ' style=\"background-image: url(\\'' + self.settings.image + '\\')\"' : '';\n var textHtml = '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n return '
' + '' + '' + '
';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n if (e.aria && e.aria.key === 'down') {\n return;\n }\n if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\n e.stopImmediatePropagation();\n onClickHandler.call(self, e);\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var ColorPicker = Widget.extend({\n Defaults: { classes: 'widget colorpicker' },\n init: function (settings) {\n this._super(settings);\n },\n postRender: function () {\n var self = this;\n var color = self.color();\n var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\n hueRootElm = self.getEl('h');\n huePointElm = self.getEl('hp');\n svRootElm = self.getEl('sv');\n svPointElm = self.getEl('svp');\n function getPos(elm, event) {\n var pos = funcs.getPos(elm);\n var x, y;\n x = event.pageX - pos.x;\n y = event.pageY - pos.y;\n x = Math.max(0, Math.min(x / elm.clientWidth, 1));\n y = Math.max(0, Math.min(y / elm.clientHeight, 1));\n return {\n x: x,\n y: y\n };\n }\n function updateColor(hsv, hueUpdate) {\n var hue = (360 - hsv.h) / 360;\n funcs.css(huePointElm, { top: hue * 100 + '%' });\n if (!hueUpdate) {\n funcs.css(svPointElm, {\n left: hsv.s + '%',\n top: 100 - hsv.v + '%'\n });\n }\n svRootElm.style.background = global$e({\n s: 100,\n v: 100,\n h: hsv.h\n }).toHex();\n self.color().parse({\n s: hsv.s,\n v: hsv.v,\n h: hsv.h\n });\n }\n function updateSaturationAndValue(e) {\n var pos;\n pos = getPos(svRootElm, e);\n hsv.s = pos.x * 100;\n hsv.v = (1 - pos.y) * 100;\n updateColor(hsv);\n self.fire('change');\n }\n function updateHue(e) {\n var pos;\n pos = getPos(hueRootElm, e);\n hsv = color.toHsv();\n hsv.h = (1 - pos.y) * 360;\n updateColor(hsv, true);\n self.fire('change');\n }\n self._repaint = function () {\n hsv = color.toHsv();\n updateColor(hsv);\n };\n self._super();\n self._svdraghelper = new DragHelper(self._id + '-sv', {\n start: updateSaturationAndValue,\n drag: updateSaturationAndValue\n });\n self._hdraghelper = new DragHelper(self._id + '-h', {\n start: updateHue,\n drag: updateHue\n });\n self._repaint();\n },\n rgb: function () {\n return this.color().toRgb();\n },\n value: function (value) {\n var self = this;\n if (arguments.length) {\n self.color().parse(value);\n if (self._rendered) {\n self._repaint();\n }\n } else {\n return self.color().toHex();\n }\n },\n color: function () {\n if (!this._color) {\n this._color = global$e();\n }\n return this._color;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var hueHtml;\n var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\n function getOldIeFallbackHtml() {\n var i, l, html = '', gradientPrefix, stopsList;\n gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\n stopsList = stops.split(',');\n for (i = 0, l = stopsList.length - 1; i < l; i++) {\n html += '
';\n }\n return html;\n }\n var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\n hueHtml = '
' + getOldIeFallbackHtml() + '
' + '
';\n return '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + '
' + hueHtml + '
';\n }\n });\n\n var DropZone = Widget.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n height: 100,\n text: 'Drop an image here',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('dropzone');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n renderHtml: function () {\n var self = this;\n var attrs, elm;\n var cfg = self.settings;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n elm = funcs.create('div', attrs, '' + this.translate(cfg.text) + '');\n if (cfg.height) {\n funcs.css(elm, 'height', cfg.height + 'px');\n }\n if (cfg.width) {\n funcs.css(elm, 'width', cfg.width + 'px');\n }\n elm.className = self.classes;\n return elm.outerHTML;\n },\n postRender: function () {\n var self = this;\n var toggleDragClass = function (e) {\n e.preventDefault();\n self.classes.toggle('dragenter');\n self.getEl().className = self.classes;\n };\n var filter = function (files) {\n var accept = self.settings.accept;\n if (typeof accept !== 'string') {\n return files;\n }\n var re = new RegExp('(' + accept.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return global$2.grep(files, function (file) {\n return re.test(file.name);\n });\n };\n self._super();\n self.$el.on('dragover', function (e) {\n e.preventDefault();\n });\n self.$el.on('dragenter', toggleDragClass);\n self.$el.on('dragleave', toggleDragClass);\n self.$el.on('drop', function (e) {\n e.preventDefault();\n if (self.state.get('disabled')) {\n return;\n }\n var files = filter(e.dataTransfer.files);\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n if (files.length) {\n self.fire('change', e);\n }\n });\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var Path = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n self._super(settings);\n self.classes.add('path');\n self.canFocus = true;\n self.on('click', function (e) {\n var index;\n var target = e.target;\n if (index = target.getAttribute('data-index')) {\n self.fire('select', {\n value: self.row()[index],\n index: index\n });\n }\n });\n self.row(self.settings.row);\n },\n focus: function () {\n var self = this;\n self.getEl().firstChild.focus();\n return self;\n },\n row: function (row) {\n if (!arguments.length) {\n return this.state.get('row');\n }\n this.state.set('row', row);\n return this;\n },\n renderHtml: function () {\n var self = this;\n return '
' + self._getDataPathHtml(self.state.get('row')) + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:row', function (e) {\n self.innerHtml(self._getDataPathHtml(e.value));\n });\n return self._super();\n },\n _getDataPathHtml: function (data) {\n var self = this;\n var parts = data || [];\n var i, l, html = '';\n var prefix = self.classPrefix;\n for (i = 0, l = parts.length; i < l; i++) {\n html += (i > 0 ? '
' + self.settings.delimiter + '
' : '') + '
' + parts[i].name + '
';\n }\n if (!html) {\n html = '
\\xA0
';\n }\n return html;\n }\n });\n\n var ElementPath = Path.extend({\n postRender: function () {\n var self = this, editor = self.settings.editor;\n function isHidden(elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n }\n if (editor.settings.elementpath !== false) {\n self.on('select', function (e) {\n editor.focus();\n editor.selection.select(this.row()[e.index].element);\n editor.nodeChanged();\n });\n editor.on('nodeChange', function (e) {\n var outParents = [];\n var parents = e.parents;\n var i = parents.length;\n while (i--) {\n if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\n var args = editor.fire('ResolveName', {\n name: parents[i].nodeName.toLowerCase(),\n target: parents[i]\n });\n if (!args.isDefaultPrevented()) {\n outParents.push({\n name: args.name,\n element: parents[i]\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n self.row(outParents);\n });\n }\n return self._super();\n }\n });\n\n var FormItem = Container.extend({\n Defaults: {\n layout: 'flex',\n align: 'center',\n defaults: { flex: 1 }\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.classes.add('formitem');\n layout.preRender(self);\n return '
' + (self.settings.title ? '
' + self.settings.title + '
' : '') + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var Form = Container.extend({\n Defaults: {\n containerCls: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: 15,\n labelGap: 30,\n spacing: 10,\n callbacks: {\n submit: function () {\n this.submit();\n }\n }\n },\n preRender: function () {\n var self = this, items = self.items();\n if (!self.settings.formItemDefaults) {\n self.settings.formItemDefaults = {\n layout: 'flex',\n autoResize: 'overflow',\n defaults: { flex: 1 }\n };\n }\n items.each(function (ctrl) {\n var formItem;\n var label = ctrl.settings.label;\n if (label) {\n formItem = new FormItem(global$2.extend({\n items: {\n type: 'label',\n id: ctrl._id + '-l',\n text: label,\n flex: 0,\n forId: ctrl._id,\n disabled: ctrl.disabled()\n }\n }, self.settings.formItemDefaults));\n formItem.type = 'formitem';\n ctrl.aria('labelledby', ctrl._id + '-l');\n if (typeof ctrl.settings.flex === 'undefined') {\n ctrl.settings.flex = 1;\n }\n self.replace(ctrl, formItem);\n formItem.add(ctrl);\n }\n });\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n postRender: function () {\n var self = this;\n self._super();\n self.fromJSON(self.settings.data);\n },\n bindStates: function () {\n var self = this;\n self._super();\n function recalcLabels() {\n var maxLabelWidth = 0;\n var labels = [];\n var i, labelGap, items;\n if (self.settings.labelGapCalc === false) {\n return;\n }\n if (self.settings.labelGapCalc === 'children') {\n items = self.find('formitem');\n } else {\n items = self.items();\n }\n items.filter('formitem').each(function (item) {\n var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\n maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\n labels.push(labelCtrl);\n });\n labelGap = self.settings.labelGap || 0;\n i = labels.length;\n while (i--) {\n labels[i].settings.minWidth = maxLabelWidth + labelGap;\n }\n }\n self.on('show', recalcLabels);\n recalcLabels();\n }\n });\n\n var FieldSet = Form.extend({\n Defaults: {\n containerCls: 'fieldset',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: '25 15 5 15',\n labelGap: 30,\n spacing: 10,\n border: 1\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n return '
' + (self.settings.title ? '' + self.settings.title + '' : '') + '
' + (self.settings.html || '') + layout.renderHtml(self) + '
' + '
';\n }\n });\n\n var unique$1 = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique$1++;\n return prefix + '_' + random + unique$1 + String(time);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows$1 = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows$1, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows$1),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n\n var spot = Immutable('element', 'offset');\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var trim = global$2.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (node && node.nodeType === 1) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map(descendants(Element.fromDom(root), selector), function (element) {\n return element.dom();\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name);\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map(filter(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map(filter(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim(target.title).length > 0;\n };\n var find$2 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$2 };\n\n var getActiveEditor = function () {\n return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\n };\n var history = {};\n var HISTORY_LENGTH = 5;\n var clearHistory = function () {\n history = {};\n };\n var toMenuItem = function (target) {\n return {\n title: target.title,\n value: {\n title: { raw: target.title },\n url: target.url,\n attach: target.attach\n }\n };\n };\n var toMenuItems = function (targets) {\n return global$2.map(targets, toMenuItem);\n };\n var staticMenuItem = function (title, url) {\n return {\n title: title,\n value: {\n title: title,\n url: url,\n attach: noop\n }\n };\n };\n var isUniqueUrl = function (url, targets) {\n var foundTarget = exists(targets, function (target) {\n return target.url === url;\n });\n return !foundTarget;\n };\n var getSetting = function (editorSettings, name, defaultValue) {\n var value = name in editorSettings ? editorSettings[name] : defaultValue;\n return value === false ? null : value;\n };\n var createMenuItems = function (term, targets, fileType, editorSettings) {\n var separator = { title: '-' };\n var fromHistoryMenuItems = function (history) {\n var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\n var uniqueHistory = filter(historyItems, function (url) {\n return isUniqueUrl(url, targets);\n });\n return global$2.map(uniqueHistory, function (url) {\n return {\n title: url,\n value: {\n title: url,\n url: url,\n attach: noop\n }\n };\n });\n };\n var fromMenuItems = function (type) {\n var filteredTargets = filter(targets, function (target) {\n return target.type === type;\n });\n return toMenuItems(filteredTargets);\n };\n var anchorMenuItems = function () {\n var anchorMenuItems = fromMenuItems('anchor');\n var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\n var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\n if (topAnchor !== null) {\n anchorMenuItems.unshift(staticMenuItem('', topAnchor));\n }\n if (bottomAchor !== null) {\n anchorMenuItems.push(staticMenuItem('', bottomAchor));\n }\n return anchorMenuItems;\n };\n var join = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator, b);\n }, []);\n };\n if (editorSettings.typeahead_urls === false) {\n return [];\n }\n return fileType === 'file' ? join([\n filterByQuery(term, fromHistoryMenuItems(history)),\n filterByQuery(term, fromMenuItems('header')),\n filterByQuery(term, anchorMenuItems())\n ]) : filterByQuery(term, fromHistoryMenuItems(history));\n };\n var addToHistory = function (url, fileType) {\n var items = history[fileType];\n if (!/^https?/.test(url)) {\n return;\n }\n if (items) {\n if (indexOf(items, url).isNone()) {\n history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\n }\n } else {\n history[fileType] = [url];\n }\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n var result = global$2.grep(menuItems, function (item) {\n return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\n });\n return result.length === 1 && result[0].title === term ? [] : result;\n };\n var getTitle = function (linkDetails) {\n var title = linkDetails.title;\n return title.raw ? title.raw : title;\n };\n var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\n var autocomplete = function (term) {\n var linkTargets = LinkTargets.find(bodyElm);\n var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\n ctrl.showAutoComplete(menuItems, term);\n };\n ctrl.on('autocomplete', function () {\n autocomplete(ctrl.value());\n });\n ctrl.on('selectitem', function (e) {\n var linkDetails = e.value;\n ctrl.value(linkDetails.url);\n var title = getTitle(linkDetails);\n if (fileType === 'image') {\n ctrl.fire('change', {\n meta: {\n alt: title,\n attach: linkDetails.attach\n }\n });\n } else {\n ctrl.fire('change', {\n meta: {\n text: title,\n attach: linkDetails.attach\n }\n });\n }\n ctrl.focus();\n });\n ctrl.on('click', function (e) {\n if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\n autocomplete('');\n }\n });\n ctrl.on('PostRender', function () {\n ctrl.getRoot().on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n addToHistory(ctrl.value(), fileType);\n }\n });\n });\n };\n var statusToUiState = function (result) {\n var status = result.status, message = result.message;\n if (status === 'valid') {\n return {\n status: 'ok',\n message: message\n };\n } else if (status === 'unknown') {\n return {\n status: 'warn',\n message: message\n };\n } else if (status === 'invalid') {\n return {\n status: 'warn',\n message: message\n };\n } else {\n return {\n status: 'none',\n message: ''\n };\n }\n };\n var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\n var validatorHandler = editorSettings.filepicker_validator_handler;\n if (validatorHandler) {\n var validateUrl_1 = function (url) {\n if (url.length === 0) {\n ctrl.statusLevel('none');\n return;\n }\n validatorHandler({\n url: url,\n type: fileType\n }, function (result) {\n var uiState = statusToUiState(result);\n ctrl.statusMessage(uiState.message);\n ctrl.statusLevel(uiState.status);\n });\n };\n ctrl.state.on('change:value', function (e) {\n validateUrl_1(e.value);\n });\n }\n };\n var FilePicker = ComboBox.extend({\n Statics: { clearHistory: clearHistory },\n init: function (settings) {\n var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\n var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\n var fileType = settings.filetype;\n settings.spellcheck = false;\n fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\n if (fileBrowserCallbackTypes) {\n fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\n }\n if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\n fileBrowserCallback = editorSettings.file_picker_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n var meta = self.fire('beforecall').meta;\n meta = global$2.extend({ filetype: fileType }, meta);\n fileBrowserCallback.call(editor, function (value, meta) {\n self.value(value).fire('change', { meta: meta });\n }, self.value(), meta);\n };\n } else {\n fileBrowserCallback = editorSettings.file_browser_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\n };\n }\n }\n }\n if (actionCallback) {\n settings.icon = 'browse';\n settings.onaction = actionCallback;\n }\n self._super(settings);\n self.classes.add('filepicker');\n setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\n setupLinkValidatorHandler(self, editorSettings, fileType);\n }\n });\n\n var FitLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\n container.items().filter(':visible').each(function (ctrl) {\n ctrl.layoutRect({\n x: paddingBox.left,\n y: paddingBox.top,\n w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\n h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n }\n });\n\n var FlexLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\n var ctrl, ctrlLayoutRect, ctrlSettings, flex;\n var maxSizeItems = [];\n var size, maxSize, ratio, rect, pos, maxAlignEndPos;\n var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\n var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\n var alignDeltaSizeName, alignContentSizeName;\n var max = Math.max, min = Math.min;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n contPaddingBox = container.paddingBox;\n contSettings = container.settings;\n direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\n align = contSettings.align;\n pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\n spacing = contSettings.spacing || 0;\n if (direction === 'row-reversed' || direction === 'column-reverse') {\n items = items.set(items.toArray().reverse());\n direction = direction.split('-')[0];\n }\n if (direction === 'column') {\n posName = 'y';\n sizeName = 'h';\n minSizeName = 'minH';\n maxSizeName = 'maxH';\n innerSizeName = 'innerH';\n beforeName = 'top';\n deltaSizeName = 'deltaH';\n contentSizeName = 'contentH';\n alignBeforeName = 'left';\n alignSizeName = 'w';\n alignAxisName = 'x';\n alignInnerSizeName = 'innerW';\n alignMinSizeName = 'minW';\n alignAfterName = 'right';\n alignDeltaSizeName = 'deltaW';\n alignContentSizeName = 'contentW';\n } else {\n posName = 'x';\n sizeName = 'w';\n minSizeName = 'minW';\n maxSizeName = 'maxW';\n innerSizeName = 'innerW';\n beforeName = 'left';\n deltaSizeName = 'deltaW';\n contentSizeName = 'contentW';\n alignBeforeName = 'top';\n alignSizeName = 'h';\n alignAxisName = 'y';\n alignInnerSizeName = 'innerH';\n alignMinSizeName = 'minH';\n alignAfterName = 'bottom';\n alignDeltaSizeName = 'deltaH';\n alignContentSizeName = 'contentH';\n }\n availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\n maxAlignEndPos = totalFlex = 0;\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlSettings = ctrl.settings;\n flex = ctrlSettings.flex;\n availableSpace -= i < l - 1 ? spacing : 0;\n if (flex > 0) {\n totalFlex += flex;\n if (ctrlLayoutRect[maxSizeName]) {\n maxSizeItems.push(ctrl);\n }\n ctrlLayoutRect.flex = flex;\n }\n availableSpace -= ctrlLayoutRect[minSizeName];\n size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\n if (size > maxAlignEndPos) {\n maxAlignEndPos = size;\n }\n }\n rect = {};\n if (availableSpace < 0) {\n rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n } else {\n rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n }\n rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\n rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\n rect[alignContentSizeName] = maxAlignEndPos;\n rect.minW = min(rect.minW, contLayoutRect.maxW);\n rect.minH = min(rect.minH, contLayoutRect.maxH);\n rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n ratio = availableSpace / totalFlex;\n for (i = 0, l = maxSizeItems.length; i < l; i++) {\n ctrl = maxSizeItems[i];\n ctrlLayoutRect = ctrl.layoutRect();\n maxSize = ctrlLayoutRect[maxSizeName];\n size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\n if (size > maxSize) {\n availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\n totalFlex -= ctrlLayoutRect.flex;\n ctrlLayoutRect.flex = 0;\n ctrlLayoutRect.maxFlexSize = maxSize;\n } else {\n ctrlLayoutRect.maxFlexSize = 0;\n }\n }\n ratio = availableSpace / totalFlex;\n pos = contPaddingBox[beforeName];\n rect = {};\n if (totalFlex === 0) {\n if (pack === 'end') {\n pos = availableSpace + contPaddingBox[beforeName];\n } else if (pack === 'center') {\n pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\n if (pos < 0) {\n pos = contPaddingBox[beforeName];\n }\n } else if (pack === 'justify') {\n pos = contPaddingBox[beforeName];\n spacing = Math.floor(availableSpace / (items.length - 1));\n }\n }\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\n if (align === 'center') {\n rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\n } else if (align === 'stretch') {\n rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n } else if (align === 'end') {\n rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\n }\n if (ctrlLayoutRect.flex > 0) {\n size += ctrlLayoutRect.flex * ratio;\n }\n rect[sizeName] = size;\n rect[posName] = pos;\n ctrl.layoutRect(rect);\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n pos += size + spacing;\n }\n }\n });\n\n var FlowLayout = Layout.extend({\n Defaults: {\n containerClass: 'flow-layout',\n controlClass: 'flow-layout-item',\n endClass: 'break'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n isNative: function () {\n return true;\n }\n });\n\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var addFormatChangedListener = function (editor, name, changed) {\n var handler = function (state) {\n changed(state, name);\n };\n if (editor.formatter) {\n editor.formatter.formatChanged(name, handler);\n } else {\n editor.on('init', function () {\n editor.formatter.formatChanged(name, handler);\n });\n }\n };\n var postRenderFormatToggle = function (editor, name) {\n return function (e) {\n addFormatChangedListener(editor, name, function (state) {\n e.control.active(state);\n });\n };\n };\n\n var register = function (editor) {\n var alignFormats = [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ];\n var defaultAlign = 'alignleft';\n var alignMenuItems = [\n {\n text: 'Left',\n icon: 'alignleft',\n onclick: toggleFormat(editor, 'alignleft')\n },\n {\n text: 'Center',\n icon: 'aligncenter',\n onclick: toggleFormat(editor, 'aligncenter')\n },\n {\n text: 'Right',\n icon: 'alignright',\n onclick: toggleFormat(editor, 'alignright')\n },\n {\n text: 'Justify',\n icon: 'alignjustify',\n onclick: toggleFormat(editor, 'alignjustify')\n }\n ];\n editor.addMenuItem('align', {\n text: 'Align',\n menu: alignMenuItems\n });\n editor.addButton('align', {\n type: 'menubutton',\n icon: defaultAlign,\n menu: alignMenuItems,\n onShowMenu: function (e) {\n var menu = e.control.menu;\n global$2.each(alignFormats, function (formatName, idx) {\n menu.items().eq(idx).each(function (item) {\n return item.active(editor.formatter.match(formatName));\n });\n });\n },\n onPostRender: function (e) {\n var ctrl = e.control;\n global$2.each(alignFormats, function (formatName, idx) {\n addFormatChangedListener(editor, formatName, function (state) {\n ctrl.icon(defaultAlign);\n if (state) {\n ctrl.icon(formatName);\n }\n });\n });\n }\n });\n global$2.each({\n alignleft: [\n 'Align left',\n 'JustifyLeft'\n ],\n aligncenter: [\n 'Align center',\n 'JustifyCenter'\n ],\n alignright: [\n 'Align right',\n 'JustifyRight'\n ],\n alignjustify: [\n 'Justify',\n 'JustifyFull'\n ],\n alignnone: [\n 'No alignment',\n 'JustifyNone'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var Align = { register: register };\n\n var getFirstFont = function (fontFamily) {\n return fontFamily ? fontFamily.split(',')[0] : '';\n };\n var findMatchingValue = function (items, fontFamily) {\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var value;\n global$2.each(items, function (item) {\n if (item.value.toLowerCase() === font) {\n value = item.value;\n }\n });\n global$2.each(items, function (item) {\n if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\n value = item.value;\n }\n });\n return value;\n };\n var createFontNameListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n self.state.set('value', null);\n editor.on('init nodeChange', function (e) {\n var fontFamily = editor.queryCommandValue('FontName');\n var match = findMatchingValue(items, fontFamily);\n self.value(match ? match : null);\n if (!match && fontFamily) {\n self.text(getFirstFont(fontFamily));\n }\n });\n };\n };\n var createFormats = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var getFontItems = function (editor) {\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n return global$2.map(fonts, function (font) {\n return {\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n };\n });\n };\n var registerButtons = function (editor) {\n editor.addButton('fontselect', function () {\n var items = getFontItems(editor);\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: createFontNameListBoxChangeHandler(editor, items),\n onselect: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontName', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$1 = function (editor) {\n registerButtons(editor);\n };\n var FontSelect = { register: register$1 };\n\n var round = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var findMatchingValue$1 = function (items, pt, px) {\n var value;\n global$2.each(items, function (item) {\n if (item.value === px) {\n value = px;\n } else if (item.value === pt) {\n value = pt;\n }\n });\n return value;\n };\n var createFontSizeListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n editor.on('init nodeChange', function (e) {\n var px, pt, precision, match;\n px = editor.queryCommandValue('FontSize');\n if (px) {\n for (precision = 3; !match && precision >= 0; precision--) {\n pt = toPt(px, precision);\n match = findMatchingValue$1(items, pt, px);\n }\n }\n self.value(match ? match : null);\n if (!match) {\n self.text(pt);\n }\n });\n };\n };\n var getFontSizeItems = function (editor) {\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\n return global$2.map(fontsizeFormats.split(' '), function (item) {\n var text = item, value = item;\n var values = item.split('=');\n if (values.length > 1) {\n text = values[0];\n value = values[1];\n }\n return {\n text: text,\n value: value\n };\n });\n };\n var registerButtons$1 = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = getFontSizeItems(editor);\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: createFontSizeListBoxChangeHandler(editor, items),\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n };\n var FontSizeSelect = { register: register$2 };\n\n var hideMenuObjects = function (editor, menu) {\n var count = menu.length;\n global$2.each(menu, function (item) {\n if (item.menu) {\n item.hidden = hideMenuObjects(editor, item.menu) === 0;\n }\n var formatName = item.format;\n if (formatName) {\n item.hidden = !editor.formatter.canApply(formatName);\n }\n if (item.hidden) {\n count--;\n }\n });\n return count;\n };\n var hideFormatMenuItems = function (editor, menu) {\n var count = menu.items().length;\n menu.items().each(function (item) {\n if (item.menu) {\n item.visible(hideFormatMenuItems(editor, item.menu) > 0);\n }\n if (!item.menu && item.settings.menu) {\n item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\n }\n var formatName = item.settings.format;\n if (formatName) {\n item.visible(editor.formatter.canApply(formatName));\n }\n if (!item.visible()) {\n count--;\n }\n });\n return count;\n };\n var createFormatMenu = function (editor) {\n var count = 0;\n var newFormats = [];\n var defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n icon: 'bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n icon: 'italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n icon: 'underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n icon: 'strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n icon: 'superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n icon: 'subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n icon: 'code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Alignment',\n items: [\n {\n title: 'Left',\n icon: 'alignleft',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'aligncenter',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'alignright',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'alignjustify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var createMenu = function (formats) {\n var menu = [];\n if (!formats) {\n return;\n }\n global$2.each(formats, function (format) {\n var menuItem = {\n text: format.title,\n icon: format.icon\n };\n if (format.items) {\n menuItem.menu = createMenu(format.items);\n } else {\n var formatName = format.format || 'custom' + count++;\n if (!format.format) {\n format.name = formatName;\n newFormats.push(format);\n }\n menuItem.format = formatName;\n menuItem.cmd = format.cmd;\n }\n menu.push(menuItem);\n });\n return menu;\n };\n var createStylesMenu = function () {\n var menu;\n if (editor.settings.style_formats_merge) {\n if (editor.settings.style_formats) {\n menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\n } else {\n menu = createMenu(defaultStyleFormats);\n }\n } else {\n menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\n }\n return menu;\n };\n editor.on('init', function () {\n global$2.each(newFormats, function (format) {\n editor.formatter.register(format.name, format);\n });\n });\n return {\n type: 'menu',\n items: createStylesMenu(),\n onPostRender: function (e) {\n editor.fire('renderFormatsMenu', { control: e.control });\n },\n itemDefaults: {\n preview: true,\n textStyle: function () {\n if (this.settings.format) {\n return editor.formatter.getCssText(this.settings.format);\n }\n },\n onPostRender: function () {\n var self = this;\n self.parent().on('show', function () {\n var formatName, command;\n formatName = self.settings.format;\n if (formatName) {\n self.disabled(!editor.formatter.canApply(formatName));\n self.active(editor.formatter.match(formatName));\n }\n command = self.settings.cmd;\n if (command) {\n self.active(editor.queryCommandState(command));\n }\n });\n },\n onclick: function () {\n if (this.settings.format) {\n toggleFormat(editor, this.settings.format)();\n }\n if (this.settings.cmd) {\n editor.execCommand(this.settings.cmd);\n }\n }\n }\n };\n };\n var registerMenuItems = function (editor, formatMenu) {\n editor.addMenuItem('formats', {\n text: 'Formats',\n menu: formatMenu\n });\n };\n var registerButtons$2 = function (editor, formatMenu) {\n editor.addButton('styleselect', {\n type: 'menubutton',\n text: 'Formats',\n menu: formatMenu,\n onShowMenu: function () {\n if (editor.settings.style_formats_autohide) {\n hideFormatMenuItems(editor, this.menu);\n }\n }\n });\n };\n var register$3 = function (editor) {\n var formatMenu = createFormatMenu(editor);\n registerMenuItems(editor, formatMenu);\n registerButtons$2(editor, formatMenu);\n };\n var Formats = { register: register$3 };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var createFormats$1 = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var createListBoxChangeHandler = function (editor, items, formatName) {\n return function () {\n var self = this;\n editor.on('nodeChange', function (e) {\n var formatter = editor.formatter;\n var value = null;\n global$2.each(e.parents, function (node) {\n global$2.each(items, function (item) {\n if (formatName) {\n if (formatter.matchNode(node, formatName, { value: item.value })) {\n value = item.value;\n }\n } else {\n if (formatter.matchNode(node, item.value)) {\n value = item.value;\n }\n }\n if (value) {\n return false;\n }\n });\n if (value) {\n return false;\n }\n });\n self.value(value);\n });\n };\n };\n var lazyFormatSelectBoxItems = function (editor, blocks) {\n return function () {\n var items = [];\n global$2.each(blocks, function (block) {\n items.push({\n text: block[0],\n value: block[1],\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n });\n });\n return {\n type: 'listbox',\n text: blocks[0][0],\n values: items,\n fixedWidth: true,\n onselect: function (e) {\n if (e.control) {\n var fmt = e.control.value();\n toggleFormat(editor, fmt)();\n }\n },\n onPostRender: createListBoxChangeHandler(editor, items)\n };\n };\n };\n var buildMenuItems = function (editor, blocks) {\n return global$2.map(blocks, function (block) {\n return {\n text: block[0],\n onclick: toggleFormat(editor, block[1]),\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n };\n });\n };\n var register$4 = function (editor) {\n var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\n editor.addMenuItem('blockformats', {\n text: 'Blocks',\n menu: buildMenuItems(editor, blocks)\n });\n editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\n };\n var FormatSelect = { register: register$4 };\n\n var createCustomMenuItems = function (editor, names) {\n var items, nameList;\n if (typeof names === 'string') {\n nameList = names.split(' ');\n } else if (global$2.isArray(names)) {\n return flatten(global$2.map(names, function (names) {\n return createCustomMenuItems(editor, names);\n }));\n }\n items = global$2.grep(nameList, function (name) {\n return name === '|' || name in editor.menuItems;\n });\n return global$2.map(items, function (name) {\n return name === '|' ? { text: '-' } : editor.menuItems[name];\n });\n };\n var isSeparator$1 = function (menuItem) {\n return menuItem && menuItem.text === '-';\n };\n var trimMenuItems = function (menuItems) {\n var menuItems2 = filter(menuItems, function (menuItem, i) {\n return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\n });\n return filter(menuItems2, function (menuItem, i) {\n return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\n });\n };\n var createContextMenuItems = function (editor, context) {\n var outputMenuItems = [{ text: '-' }];\n var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\n return menuItem.context === context;\n });\n global$2.each(menuItems, function (menuItem) {\n if (menuItem.separator === 'before') {\n outputMenuItems.push({ text: '|' });\n }\n if (menuItem.prependToContext) {\n outputMenuItems.unshift(menuItem);\n } else {\n outputMenuItems.push(menuItem);\n }\n if (menuItem.separator === 'after') {\n outputMenuItems.push({ text: '|' });\n }\n });\n return outputMenuItems;\n };\n var createInsertMenu = function (editor) {\n var insertButtonItems = editor.settings.insert_button_items;\n if (insertButtonItems) {\n return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\n } else {\n return trimMenuItems(createContextMenuItems(editor, 'insert'));\n }\n };\n var registerButtons$3 = function (editor) {\n editor.addButton('insert', {\n type: 'menubutton',\n icon: 'insert',\n menu: [],\n oncreatemenu: function () {\n this.menu.add(createInsertMenu(editor));\n this.menu.renderNew();\n }\n });\n };\n var register$5 = function (editor) {\n registerButtons$3(editor);\n };\n var InsertButton = { register: register$5 };\n\n var registerFormatButtons = function (editor) {\n global$2.each({\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript'\n }, function (text, name) {\n editor.addButton(name, {\n active: false,\n tooltip: text,\n onPostRender: postRenderFormatToggle(editor, name),\n onclick: toggleFormat(editor, name)\n });\n });\n };\n var registerCommandButtons = function (editor) {\n global$2.each({\n outdent: [\n 'Decrease indent',\n 'Outdent'\n ],\n indent: [\n 'Increase indent',\n 'Indent'\n ],\n cut: [\n 'Cut',\n 'Cut'\n ],\n copy: [\n 'Copy',\n 'Copy'\n ],\n paste: [\n 'Paste',\n 'Paste'\n ],\n help: [\n 'Help',\n 'mceHelp'\n ],\n selectall: [\n 'Select all',\n 'SelectAll'\n ],\n visualaid: [\n 'Visual aids',\n 'mceToggleVisualAid'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n remove: [\n 'Remove',\n 'Delete'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n tooltip: item[0],\n cmd: item[1]\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$2.each({\n blockquote: [\n 'Blockquote',\n 'mceBlockQuote'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var registerButtons$4 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$1 = function (editor) {\n global$2.each({\n bold: [\n 'Bold',\n 'Bold',\n 'Meta+B'\n ],\n italic: [\n 'Italic',\n 'Italic',\n 'Meta+I'\n ],\n underline: [\n 'Underline',\n 'Underline',\n 'Meta+U'\n ],\n strikethrough: [\n 'Strikethrough',\n 'Strikethrough'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n cut: [\n 'Cut',\n 'Cut',\n 'Meta+X'\n ],\n copy: [\n 'Copy',\n 'Copy',\n 'Meta+C'\n ],\n paste: [\n 'Paste',\n 'Paste',\n 'Meta+V'\n ],\n selectall: [\n 'Select all',\n 'SelectAll',\n 'Meta+A'\n ]\n }, function (item, name) {\n editor.addMenuItem(name, {\n text: item[0],\n icon: name,\n shortcut: item[2],\n cmd: item[1]\n });\n });\n editor.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'code',\n onclick: toggleFormat(editor, 'code')\n });\n };\n var register$6 = function (editor) {\n registerButtons$4(editor);\n registerMenuItems$1(editor);\n };\n var SimpleControls = { register: register$6 };\n\n var toggleUndoRedoState = function (editor, type) {\n return function () {\n var self = this;\n var checkState = function () {\n var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\n return editor.undoManager ? editor.undoManager[typeFn]() : false;\n };\n self.disabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\n self.disabled(editor.readonly || !checkState());\n });\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var registerButtons$5 = function (editor) {\n editor.addButton('undo', {\n tooltip: 'Undo',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addButton('redo', {\n tooltip: 'Redo',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var register$7 = function (editor) {\n registerMenuItems$2(editor);\n registerButtons$5(editor);\n };\n var UndoRedo = { register: register$7 };\n\n var toggleVisualAidState = function (editor) {\n return function () {\n var self = this;\n editor.on('VisualAid', function (e) {\n self.active(e.hasVisual);\n });\n self.active(editor.hasVisual);\n };\n };\n var registerMenuItems$3 = function (editor) {\n editor.addMenuItem('visualaid', {\n text: 'Visual aids',\n selectable: true,\n onPostRender: toggleVisualAidState(editor),\n cmd: 'mceToggleVisualAid'\n });\n };\n var register$8 = function (editor) {\n registerMenuItems$3(editor);\n };\n var VisualAid = { register: register$8 };\n\n var setupEnvironment = function () {\n Widget.tooltips = !global$8.iOS;\n Control$1.translate = function (text) {\n return global$1.translate(text);\n };\n };\n var setupUiContainer = function (editor) {\n if (editor.settings.ui_container) {\n global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\n return elm.dom();\n });\n }\n };\n var setupRtlMode = function (editor) {\n if (editor.rtl) {\n Control$1.rtl = true;\n }\n };\n var setupHideFloatPanels = function (editor) {\n editor.on('mousedown progressstate', function () {\n FloatPanel.hideAll();\n });\n };\n var setup$1 = function (editor) {\n setupRtlMode(editor);\n setupHideFloatPanels(editor);\n setupUiContainer(editor);\n setupEnvironment();\n FormatSelect.register(editor);\n Align.register(editor);\n SimpleControls.register(editor);\n UndoRedo.register(editor);\n FontSizeSelect.register(editor);\n FontSelect.register(editor);\n Formats.register(editor);\n VisualAid.register(editor);\n InsertButton.register(editor);\n };\n var FormatControls = { setup: setup$1 };\n\n var GridLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\n var colWidths = [];\n var rowHeights = [];\n var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\n settings = container.settings;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n cols = settings.columns || Math.ceil(Math.sqrt(items.length));\n rows = Math.ceil(items.length / cols);\n spacingH = settings.spacingH || settings.spacing || 0;\n spacingV = settings.spacingV || settings.spacing || 0;\n alignH = settings.alignH || settings.align;\n alignV = settings.alignV || settings.align;\n contPaddingBox = container.paddingBox;\n reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\n if (alignH && typeof alignH === 'string') {\n alignH = [alignH];\n }\n if (alignV && typeof alignV === 'string') {\n alignV = [alignV];\n }\n for (x = 0; x < cols; x++) {\n colWidths.push(0);\n }\n for (y = 0; y < rows; y++) {\n rowHeights.push(0);\n }\n for (y = 0; y < rows; y++) {\n for (x = 0; x < cols; x++) {\n ctrl = items[y * cols + x];\n if (!ctrl) {\n break;\n }\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlMinWidth = ctrlLayoutRect.minW;\n ctrlMinHeight = ctrlLayoutRect.minH;\n colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\n rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\n }\n }\n availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\n for (maxX = 0, x = 0; x < cols; x++) {\n maxX += colWidths[x] + (x > 0 ? spacingH : 0);\n availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\n }\n availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\n for (maxY = 0, y = 0; y < rows; y++) {\n maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\n availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\n }\n maxX += contPaddingBox.left + contPaddingBox.right;\n maxY += contPaddingBox.top + contPaddingBox.bottom;\n rect = {};\n rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\n rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\n rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\n rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n if (contLayoutRect.autoResize) {\n rect = container.layoutRect(rect);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n }\n var flexV;\n if (settings.packV === 'start') {\n flexV = 0;\n } else {\n flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\n }\n var totalFlex = 0;\n var flexWidths = settings.flexWidths;\n if (flexWidths) {\n for (x = 0; x < flexWidths.length; x++) {\n totalFlex += flexWidths[x];\n }\n } else {\n totalFlex = cols;\n }\n var ratio = availableWidth / totalFlex;\n for (x = 0; x < cols; x++) {\n colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\n }\n posY = contPaddingBox.top;\n for (y = 0; y < rows; y++) {\n posX = contPaddingBox.left;\n height = rowHeights[y] + flexV;\n for (x = 0; x < cols; x++) {\n if (reverseRows) {\n idx = y * cols + cols - 1 - x;\n } else {\n idx = y * cols + x;\n }\n ctrl = items[idx];\n if (!ctrl) {\n break;\n }\n ctrlSettings = ctrl.settings;\n ctrlLayoutRect = ctrl.layoutRect();\n width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\n ctrlLayoutRect.x = posX;\n ctrlLayoutRect.y = posY;\n align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\n } else if (align === 'right') {\n ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\n } else if (align === 'stretch') {\n ctrlLayoutRect.w = width;\n }\n align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\n } else if (align === 'bottom') {\n ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\n } else if (align === 'stretch') {\n ctrlLayoutRect.h = height;\n }\n ctrl.layoutRect(ctrlLayoutRect);\n posX += width + spacingH;\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n }\n posY += height + spacingV;\n }\n }\n });\n\n var Iframe$1 = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('iframe');\n self.canFocus = false;\n return '';\n },\n src: function (src) {\n this.getEl().src = src;\n },\n html: function (html, callback) {\n var self = this, body = this.getEl().contentWindow.document.body;\n if (!body) {\n global$7.setTimeout(function () {\n self.html(html);\n });\n } else {\n body.innerHTML = html;\n if (callback) {\n callback();\n }\n }\n return this;\n }\n });\n\n var InfoBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('infobox');\n self.canFocus = false;\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n help: function (state) {\n this.state.set('help', state);\n },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
' + '
' + self.encode(self.state.get('text')) + '' + '
' + '
';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl('body').firstChild.data = self.encode(e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n self.state.on('change:help', function (e) {\n self.classes.toggle('has-help', e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Label = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('label');\n self.canFocus = false;\n if (settings.multiline) {\n self.classes.add('autoscroll');\n }\n if (settings.strong) {\n self.classes.add('strong');\n }\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n if (self.settings.multiline) {\n var size = funcs.getSize(self.getEl());\n if (size.width > layoutRect.maxW) {\n layoutRect.minW = layoutRect.maxW;\n self.classes.add('multiline');\n }\n self.getEl().style.width = layoutRect.minW + 'px';\n layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\n }\n return layoutRect;\n },\n repaint: function () {\n var self = this;\n if (!self.settings.multiline) {\n self.getEl().style.lineHeight = self.layoutRect().h + 'px';\n }\n return self._super();\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n renderHtml: function () {\n var self = this;\n var targetCtrl, forName, forId = self.settings.forId;\n var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\n if (!forId && (forName = self.settings.forName)) {\n targetCtrl = self.getRoot().find('#' + forName)[0];\n if (targetCtrl) {\n forId = targetCtrl._id;\n }\n }\n if (forId) {\n return '';\n }\n return '' + text + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.innerHtml(self.encode(e.value));\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Toolbar$1 = Container.extend({\n Defaults: {\n role: 'toolbar',\n layout: 'flow'\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('toolbar');\n },\n postRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n ctrl.classes.add('toolbar-item');\n });\n return self._super();\n }\n });\n\n var MenuBar = Toolbar$1.extend({\n Defaults: {\n role: 'menubar',\n containerCls: 'menubar',\n ariaRoot: true,\n defaults: { type: 'menubutton' }\n }\n });\n\n function isChildOf$1(node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n var MenuButton = Button.extend({\n init: function (settings) {\n var self = this;\n self._renderOpen = true;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menubtn');\n if (settings.fixedWidth) {\n self.classes.add('fixed-width');\n }\n self.aria('haspopup', true);\n self.state.set('menu', settings.menu || self.render());\n },\n showMenu: function (toggle) {\n var self = this;\n var menu;\n if (self.menu && self.menu.visible() && toggle !== false) {\n return self.hideMenu();\n }\n if (!self.menu) {\n menu = self.state.get('menu') || [];\n self.classes.add('opened');\n if (menu.length) {\n menu = {\n type: 'menu',\n animate: true,\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n menu.animate = true;\n }\n if (!menu.renderTo) {\n self.menu = global$4.create(menu).parent(self).renderTo();\n } else {\n self.menu = menu.parent(self).show().renderTo();\n }\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n self.menu.on('show hide', function (e) {\n if (e.type === 'hide' && e.control.parent() === self) {\n self.classes.remove('opened-under');\n }\n if (e.control === self.menu) {\n self.activeMenu(e.type === 'show');\n self.classes.toggle('opened', e.type === 'show');\n }\n self.aria('expanded', e.type === 'show');\n }).fire('show');\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.repaint();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n var menuLayoutRect = self.menu.layoutRect();\n var selfBottom = self.$el.offset().top + self.layoutRect().h;\n if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\n self.classes.add('opened-under');\n }\n self.fire('showmenu');\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n }\n },\n activeMenu: function (state) {\n this.classes.toggle('active', state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.settings.icon, image;\n var text = self.state.get('text');\n var textHtml = '';\n image = self.settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\n return '
' + '' + '
';\n },\n postRender: function () {\n var self = this;\n self.on('click', function (e) {\n if (e.control === self && isChildOf$1(e.target, self.getEl())) {\n self.focus();\n self.showMenu(!e.aria);\n if (e.aria) {\n self.menu.items().filter(':visible')[0].focus();\n }\n }\n });\n self.on('mouseenter', function (e) {\n var overCtrl = e.control;\n var parent = self.parent();\n var hasVisibleSiblingMenu;\n if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\n parent.items().filter('MenuButton').each(function (ctrl) {\n if (ctrl.hideMenu && ctrl !== overCtrl) {\n if (ctrl.menu && ctrl.menu.visible()) {\n hasVisibleSiblingMenu = true;\n }\n ctrl.hideMenu();\n }\n });\n if (hasVisibleSiblingMenu) {\n overCtrl.focus();\n overCtrl.showMenu();\n }\n }\n });\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:menu', function () {\n if (self.menu) {\n self.menu.remove();\n }\n self.menu = null;\n });\n return self._super();\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Menu = FloatPanel.extend({\n Defaults: {\n defaultType: 'menuitem',\n border: 1,\n layout: 'stack',\n role: 'application',\n bodyRole: 'menu',\n ariaRoot: true\n },\n init: function (settings) {\n var self = this;\n settings.autohide = true;\n settings.constrainToViewport = true;\n if (typeof settings.items === 'function') {\n settings.itemsFactory = settings.items;\n settings.items = [];\n }\n if (settings.itemDefaults) {\n var items = settings.items;\n var i = items.length;\n while (i--) {\n items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\n }\n }\n self._super(settings);\n self.classes.add('menu');\n if (settings.animate && global$8.ie !== 11) {\n self.classes.add('animate');\n }\n },\n repaint: function () {\n this.classes.toggle('menu-align', true);\n this._super();\n this.getEl().style.height = '';\n this.getEl('body').style.height = '';\n return this;\n },\n cancel: function () {\n var self = this;\n self.hideAll();\n self.fire('select');\n },\n load: function () {\n var self = this;\n var time, factory;\n function hideThrobber() {\n if (self.throbber) {\n self.throbber.hide();\n self.throbber = null;\n }\n }\n factory = self.settings.itemsFactory;\n if (!factory) {\n return;\n }\n if (!self.throbber) {\n self.throbber = new Throbber(self.getEl('body'), true);\n if (self.items().length === 0) {\n self.throbber.show();\n self.fire('loading');\n } else {\n self.throbber.show(100, function () {\n self.items().remove();\n self.fire('loading');\n });\n }\n self.on('hide close', hideThrobber);\n }\n self.requestTime = time = new Date().getTime();\n self.settings.itemsFactory(function (items) {\n if (items.length === 0) {\n self.hide();\n return;\n }\n if (self.requestTime !== time) {\n return;\n }\n self.getEl().style.width = '';\n self.getEl('body').style.width = '';\n hideThrobber();\n self.items().remove();\n self.getEl('body').innerHTML = '';\n self.add(items);\n self.renderNew();\n self.fire('loaded');\n });\n },\n hideAll: function () {\n var self = this;\n this.find('menuitem').exec('hideMenu');\n return self._super();\n },\n preRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n var settings = ctrl.settings;\n if (settings.icon || settings.image || settings.selectable) {\n self._hasIcons = true;\n return false;\n }\n });\n if (self.settings.itemsFactory) {\n self.on('postrender', function () {\n if (self.settings.itemsFactory) {\n self.load();\n }\n });\n }\n self.on('show hide', function (e) {\n if (e.control === self) {\n if (e.type === 'show') {\n global$7.setTimeout(function () {\n self.classes.add('in');\n }, 0);\n } else {\n self.classes.remove('in');\n }\n }\n });\n return self._super();\n }\n });\n\n var ListBox = MenuButton.extend({\n init: function (settings) {\n var self = this;\n var values, selected, selectedText, lastItemCtrl;\n function setSelected(menuValues) {\n for (var i = 0; i < menuValues.length; i++) {\n selected = menuValues[i].selected || settings.value === menuValues[i].value;\n if (selected) {\n selectedText = selectedText || menuValues[i].text;\n self.state.set('value', menuValues[i].value);\n return true;\n }\n if (menuValues[i].menu) {\n if (setSelected(menuValues[i].menu)) {\n return true;\n }\n }\n }\n }\n self._super(settings);\n settings = self.settings;\n self._values = values = settings.values;\n if (values) {\n if (typeof settings.value !== 'undefined') {\n setSelected(values);\n }\n if (!selected && values.length > 0) {\n selectedText = values[0].text;\n self.state.set('value', values[0].value);\n }\n self.state.set('menu', values);\n }\n self.state.set('text', settings.text || selectedText);\n self.classes.add('listbox');\n self.on('select', function (e) {\n var ctrl = e.control;\n if (lastItemCtrl) {\n e.lastControl = lastItemCtrl;\n }\n if (settings.multiple) {\n ctrl.active(!ctrl.active());\n } else {\n self.value(e.control.value());\n }\n lastItemCtrl = ctrl;\n });\n },\n value: function (value) {\n if (arguments.length === 0) {\n return this.state.get('value');\n }\n if (typeof value === 'undefined') {\n return this;\n }\n function valueExists(values) {\n return exists(values, function (a) {\n return a.menu ? valueExists(a.menu) : a.value === value;\n });\n }\n if (this.settings.values) {\n if (valueExists(this.settings.values)) {\n this.state.set('value', value);\n } else if (value === null) {\n this.state.set('value', null);\n }\n } else {\n this.state.set('value', value);\n }\n return this;\n },\n bindStates: function () {\n var self = this;\n function activateMenuItemsByValue(menu, value) {\n if (menu instanceof Menu) {\n menu.items().each(function (ctrl) {\n if (!ctrl.hasMenus()) {\n ctrl.active(ctrl.value() === value);\n }\n });\n }\n }\n function getSelectedItem(menuValues, value) {\n var selectedItem;\n if (!menuValues) {\n return;\n }\n for (var i = 0; i < menuValues.length; i++) {\n if (menuValues[i].value === value) {\n return menuValues[i];\n }\n if (menuValues[i].menu) {\n selectedItem = getSelectedItem(menuValues[i].menu, value);\n if (selectedItem) {\n return selectedItem;\n }\n }\n }\n }\n self.on('show', function (e) {\n activateMenuItemsByValue(e.control, self.value());\n });\n self.state.on('change:value', function (e) {\n var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\n if (selectedItem) {\n self.text(selectedItem.text);\n } else {\n self.text(self.settings.text);\n }\n });\n return self._super();\n }\n });\n\n var toggleTextStyle = function (ctrl, state) {\n var textStyle = ctrl._textStyle;\n if (textStyle) {\n var textElm = ctrl.getEl('text');\n textElm.setAttribute('style', textStyle);\n if (state) {\n textElm.style.color = '';\n textElm.style.backgroundColor = '';\n }\n }\n };\n var MenuItem = Widget.extend({\n Defaults: {\n border: 0,\n role: 'menuitem'\n },\n init: function (settings) {\n var self = this;\n var text;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menu-item');\n if (settings.menu) {\n self.classes.add('menu-item-expand');\n }\n if (settings.preview) {\n self.classes.add('menu-item-preview');\n }\n text = self.state.get('text');\n if (text === '-' || text === '|') {\n self.classes.add('menu-item-sep');\n self.aria('role', 'separator');\n self.state.set('text', '-');\n }\n if (settings.selectable) {\n self.aria('role', 'menuitemcheckbox');\n self.classes.add('menu-item-checkbox');\n settings.icon = 'selected';\n }\n if (!settings.preview && !settings.selectable) {\n self.classes.add('menu-item-normal');\n }\n self.on('mousedown', function (e) {\n e.preventDefault();\n });\n if (settings.menu && !settings.ariaHideMenu) {\n self.aria('haspopup', true);\n }\n },\n hasMenus: function () {\n return !!this.settings.menu;\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n var parent = self.parent();\n parent.items().each(function (ctrl) {\n if (ctrl !== self) {\n ctrl.hideMenu();\n }\n });\n if (settings.menu) {\n menu = self.menu;\n if (!menu) {\n menu = settings.menu;\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n if (parent.settings.itemDefaults) {\n menu.itemDefaults = parent.settings.itemDefaults;\n }\n menu = self.menu = global$4.create(menu).parent(self).renderTo();\n menu.reflow();\n menu.on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n menu.hide();\n });\n menu.on('show hide', function (e) {\n if (e.control.items) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.selected);\n });\n }\n }).fire('show');\n menu.on('hide', function (e) {\n if (e.control === menu) {\n self.classes.remove('selected');\n }\n });\n menu.submenu = true;\n } else {\n menu.show();\n }\n menu._parentMenu = parent;\n menu.classes.add('menu-sub');\n var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\n 'tl-tr',\n 'bl-br',\n 'tr-tl',\n 'br-bl'\n ] : [\n 'tr-tl',\n 'br-bl',\n 'tl-tr',\n 'bl-br'\n ]);\n menu.moveRel(self.getEl(), rel);\n menu.rel = rel;\n rel = 'menu-sub-' + rel;\n menu.classes.remove(menu._lastRel).add(rel);\n menu._lastRel = rel;\n self.classes.add('selected');\n self.aria('expanded', true);\n }\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n self.aria('expanded', false);\n }\n return self;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var settings = self.settings;\n var prefix = self.classPrefix;\n var text = self.state.get('text');\n var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\n var url = self.encode(settings.url), iconHtml = '';\n function convertShortcut(shortcut) {\n var i, value, replace = {};\n if (global$8.mac) {\n replace = {\n alt: '⌥',\n ctrl: '⌘',\n shift: '⇧',\n meta: '⌘'\n };\n } else {\n replace = { meta: 'Ctrl' };\n }\n shortcut = shortcut.split('+');\n for (i = 0; i < shortcut.length; i++) {\n value = replace[shortcut[i].toLowerCase()];\n if (value) {\n shortcut[i] = value;\n }\n }\n return shortcut.join('+');\n }\n function escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n function markMatches(text) {\n var match = settings.match || '';\n return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\n return '!mce~match[' + match + ']mce~match!';\n }) : text;\n }\n function boldMatches(text) {\n return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '');\n }\n if (icon) {\n self.parent().classes.add('menu-has-icons');\n }\n if (settings.image) {\n image = ' style=\"background-image: url(\\'' + settings.image + '\\')\"';\n }\n if (shortcut) {\n shortcut = convertShortcut(shortcut);\n }\n icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\n iconHtml = text !== '-' ? '\\xA0' : '';\n text = boldMatches(self.encode(markMatches(text)));\n url = boldMatches(self.encode(markMatches(url)));\n return '
' + iconHtml + (text !== '-' ? '' + text + '' : '') + (shortcut ? '
' + shortcut + '
' : '') + (settings.menu ? '
' : '') + (url ? '
' + url + '
' : '') + '
';\n },\n postRender: function () {\n var self = this, settings = self.settings;\n var textStyle = settings.textStyle;\n if (typeof textStyle === 'function') {\n textStyle = textStyle.call(this);\n }\n if (textStyle) {\n var textElm = self.getEl('text');\n if (textElm) {\n textElm.setAttribute('style', textStyle);\n self._textStyle = textStyle;\n }\n }\n self.on('mouseenter click', function (e) {\n if (e.control === self) {\n if (!settings.menu && e.type === 'click') {\n self.fire('select');\n global$7.requestAnimationFrame(function () {\n self.parent().hideAll();\n });\n } else {\n self.showMenu();\n if (e.aria) {\n self.menu.focus(true);\n }\n }\n }\n });\n self._super();\n return self;\n },\n hover: function () {\n var self = this;\n self.parent().items().each(function (ctrl) {\n ctrl.classes.remove('selected');\n });\n self.classes.toggle('selected', true);\n return self;\n },\n active: function (state) {\n toggleTextStyle(this, state);\n if (typeof state !== 'undefined') {\n this.aria('checked', state);\n }\n return this._super(state);\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Radio = Checkbox.extend({\n Defaults: {\n classes: 'radio',\n role: 'radio'\n }\n });\n\n var ResizeHandle = Widget.extend({\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n self.classes.add('resizehandle');\n if (self.settings.direction === 'both') {\n self.classes.add('resizehandle-both');\n }\n self.canFocus = false;\n return '
' + '' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.resizeDragHelper = new DragHelper(this._id, {\n start: function () {\n self.fire('ResizeStart');\n },\n drag: function (e) {\n if (self.settings.direction !== 'both') {\n e.deltaX = 0;\n }\n self.fire('Resize', e);\n },\n stop: function () {\n self.fire('ResizeEnd');\n }\n });\n },\n remove: function () {\n if (this.resizeDragHelper) {\n this.resizeDragHelper.destroy();\n }\n return this._super();\n }\n });\n\n function createOptions(options) {\n var strOptions = '';\n if (options) {\n for (var i = 0; i < options.length; i++) {\n strOptions += '';\n }\n }\n return strOptions;\n }\n var SelectBox = Widget.extend({\n Defaults: {\n classes: 'selectbox',\n role: 'selectbox',\n options: []\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.settings.size) {\n self.size = self.settings.size;\n }\n if (self.settings.options) {\n self._options = self.settings.options;\n }\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n },\n options: function (state) {\n if (!arguments.length) {\n return this.state.get('options');\n }\n this.state.set('options', state);\n return this;\n },\n renderHtml: function () {\n var self = this;\n var options, size = '';\n options = createOptions(self._options);\n if (self.size) {\n size = ' size = \"' + self.size + '\"';\n }\n return '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:options', function (e) {\n self.getEl().innerHTML = createOptions(e.value);\n });\n return self._super();\n }\n });\n\n function constrain(value, minVal, maxVal) {\n if (value < minVal) {\n value = minVal;\n }\n if (value > maxVal) {\n value = maxVal;\n }\n return value;\n }\n function setAriaProp(el, name, value) {\n el.setAttribute('aria-' + name, value);\n }\n function updateSliderHandle(ctrl, value) {\n var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\n if (ctrl.settings.orientation === 'v') {\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n handleEl = ctrl.getEl('handle');\n maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\n handleEl.style[stylePosName] = styleValue;\n handleEl.style.height = ctrl.layoutRect().h + 'px';\n setAriaProp(handleEl, 'valuenow', value);\n setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\n setAriaProp(handleEl, 'valuemin', ctrl._minValue);\n setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\n }\n var Slider = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.previewFilter) {\n settings.previewFilter = function (value) {\n return Math.round(value * 100) / 100;\n };\n }\n self._super(settings);\n self.classes.add('slider');\n if (settings.orientation === 'v') {\n self.classes.add('vertical');\n }\n self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\n self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\n self._initValue = self.state.get('value');\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
' + '
' + '
';\n },\n reset: function () {\n this.value(this._initValue).repaint();\n },\n postRender: function () {\n var self = this;\n var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\n function toFraction(min, max, val) {\n return (val + min) / (max - min);\n }\n function fromFraction(min, max, val) {\n return val * (max - min) - min;\n }\n function handleKeyboard(minValue, maxValue) {\n function alter(delta) {\n var value;\n value = self.value();\n value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\n value = constrain(value, minValue, maxValue);\n self.value(value);\n self.fire('dragstart', { value: value });\n self.fire('drag', { value: value });\n self.fire('dragend', { value: value });\n }\n self.on('keydown', function (e) {\n switch (e.keyCode) {\n case 37:\n case 38:\n alter(-1);\n break;\n case 39:\n case 40:\n alter(1);\n break;\n }\n });\n }\n function handleDrag(minValue, maxValue, handleEl) {\n var startPos, startHandlePos, maxHandlePos, handlePos, value;\n self._dragHelper = new DragHelper(self._id, {\n handle: self._id + '-handle',\n start: function (e) {\n startPos = e[screenCordName];\n startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\n maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n self.fire('dragstart', { value: value });\n },\n drag: function (e) {\n var delta = e[screenCordName] - startPos;\n handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\n handleEl.style[stylePosName] = handlePos + 'px';\n value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\n self.value(value);\n self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\n self.fire('drag', { value: value });\n },\n stop: function () {\n self.tooltip().hide();\n self.fire('dragend', { value: value });\n }\n });\n }\n minValue = self._minValue;\n maxValue = self._maxValue;\n if (self.settings.orientation === 'v') {\n screenCordName = 'screenY';\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n screenCordName = 'screenX';\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n self._super();\n handleKeyboard(minValue, maxValue);\n handleDrag(minValue, maxValue, self.getEl('handle'));\n },\n repaint: function () {\n this._super();\n updateSliderHandle(this, this.value());\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n updateSliderHandle(self, e.value);\n });\n return self._super();\n }\n });\n\n var Spacer = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('spacer');\n self.canFocus = false;\n return '
';\n }\n });\n\n var SplitButton = MenuButton.extend({\n Defaults: {\n classes: 'widget btn splitbtn',\n role: 'button'\n },\n repaint: function () {\n var self = this;\n var elm = self.getEl();\n var rect = self.layoutRect();\n var mainButtonElm, menuButtonElm;\n self._super();\n mainButtonElm = elm.firstChild;\n menuButtonElm = elm.lastChild;\n global$9(mainButtonElm).css({\n width: rect.w - funcs.getSize(menuButtonElm).width,\n height: rect.h - 2\n });\n global$9(menuButtonElm).css({ height: rect.h - 2 });\n return self;\n },\n activeMenu: function (state) {\n var self = this;\n global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var image;\n var icon = self.state.get('icon');\n var text = self.state.get('text');\n var settings = self.settings;\n var textHtml = '', ariaPressed;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
' + '' + '' + '
';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n var node = e.target;\n if (e.control === this) {\n while (node) {\n if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\n e.stopImmediatePropagation();\n if (onClickHandler) {\n onClickHandler.call(this, e);\n }\n return;\n }\n node = node.parentNode;\n }\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var StackLayout = FlowLayout.extend({\n Defaults: {\n containerClass: 'stack-layout',\n controlClass: 'stack-layout-item',\n endClass: 'break'\n },\n isNative: function () {\n return true;\n }\n });\n\n var TabPanel = Panel.extend({\n Defaults: {\n layout: 'absolute',\n defaults: { type: 'panel' }\n },\n activateTab: function (idx) {\n var activeTabElm;\n if (this.activeTabId) {\n activeTabElm = this.getEl(this.activeTabId);\n global$9(activeTabElm).removeClass(this.classPrefix + 'active');\n activeTabElm.setAttribute('aria-selected', 'false');\n }\n this.activeTabId = 't' + idx;\n activeTabElm = this.getEl('t' + idx);\n activeTabElm.setAttribute('aria-selected', 'true');\n global$9(activeTabElm).addClass(this.classPrefix + 'active');\n this.items()[idx].show().fire('showtab');\n this.reflow();\n this.items().each(function (item, i) {\n if (idx !== i) {\n item.hide();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var tabsHtml = '';\n var prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n self.items().each(function (ctrl, i) {\n var id = self._id + '-t' + i;\n ctrl.aria('role', 'tabpanel');\n ctrl.aria('labelledby', id);\n tabsHtml += '
' + self.encode(ctrl.settings.title) + '
';\n });\n return '
' + '
' + tabsHtml + '
' + '
' + layout.renderHtml(self) + '
' + '
';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.settings.activeTab = self.settings.activeTab || 0;\n self.activateTab(self.settings.activeTab);\n this.on('click', function (e) {\n var targetParent = e.target.parentNode;\n if (targetParent && targetParent.id === self._id + '-head') {\n var i = targetParent.childNodes.length;\n while (i--) {\n if (targetParent.childNodes[i] === e.target) {\n self.activateTab(i);\n }\n }\n }\n });\n },\n initLayoutRect: function () {\n var self = this;\n var rect, minW, minH;\n minW = funcs.getSize(self.getEl('head')).width;\n minW = minW < 0 ? 0 : minW;\n minH = 0;\n self.items().each(function (item) {\n minW = Math.max(minW, item.layoutRect().minW);\n minH = Math.max(minH, item.layoutRect().minH);\n });\n self.items().each(function (ctrl) {\n ctrl.settings.x = 0;\n ctrl.settings.y = 0;\n ctrl.settings.w = minW;\n ctrl.settings.h = minH;\n ctrl.layoutRect({\n x: 0,\n y: 0,\n w: minW,\n h: minH\n });\n });\n var headH = funcs.getSize(self.getEl('head')).height;\n self.settings.minWidth = minW;\n self.settings.minHeight = minH + headH;\n rect = self._super();\n rect.deltaH += headH;\n rect.innerH = rect.h - rect.deltaH;\n return rect;\n }\n });\n\n var TextBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('textbox');\n if (settings.multiline) {\n self.classes.add('multiline');\n } else {\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n self.state.set('value', e.target.value);\n });\n }\n },\n repaint: function () {\n var self = this;\n var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n var doc = domGlobals.document;\n if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n style.lineHeight = rect.h - borderH + 'px';\n }\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right + 8;\n borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\n if (rect.x !== lastRepaintRect.x) {\n style.left = rect.x + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = rect.y + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n style.width = rect.w - borderW + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n style.height = rect.h - borderH + 'px';\n lastRepaintRect.h = rect.h;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n return self;\n },\n renderHtml: function () {\n var self = this;\n var settings = self.settings;\n var attrs, elm;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n global$2.each([\n 'rows',\n 'spellcheck',\n 'maxLength',\n 'size',\n 'readonly',\n 'min',\n 'max',\n 'step',\n 'list',\n 'pattern',\n 'placeholder',\n 'required',\n 'multiple'\n ], function (name) {\n attrs[name] = settings[name];\n });\n if (self.disabled()) {\n attrs.disabled = 'disabled';\n }\n if (settings.subtype) {\n attrs.type = settings.subtype;\n }\n elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\n elm.value = self.state.get('value');\n elm.className = self.classes.toString();\n return elm.outerHTML;\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl().value);\n }\n return this.state.get('value');\n },\n postRender: function () {\n var self = this;\n self.getEl().value = self.state.get('value');\n self._super();\n self.$el.on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl().value !== e.value) {\n self.getEl().value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl().disabled = e.value;\n });\n return self._super();\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var getApi = function () {\n return {\n Selector: Selector,\n Collection: Collection$2,\n ReflowQueue: ReflowQueue,\n Control: Control$1,\n Factory: global$4,\n KeyboardNavigation: KeyboardNavigation,\n Container: Container,\n DragHelper: DragHelper,\n Scrollable: Scrollable,\n Panel: Panel,\n Movable: Movable,\n Resizable: Resizable,\n FloatPanel: FloatPanel,\n Window: Window,\n MessageBox: MessageBox,\n Tooltip: Tooltip,\n Widget: Widget,\n Progress: Progress,\n Notification: Notification,\n Layout: Layout,\n AbsoluteLayout: AbsoluteLayout,\n Button: Button,\n ButtonGroup: ButtonGroup,\n Checkbox: Checkbox,\n ComboBox: ComboBox,\n ColorBox: ColorBox,\n PanelButton: PanelButton,\n ColorButton: ColorButton,\n ColorPicker: ColorPicker,\n Path: Path,\n ElementPath: ElementPath,\n FormItem: FormItem,\n Form: Form,\n FieldSet: FieldSet,\n FilePicker: FilePicker,\n FitLayout: FitLayout,\n FlexLayout: FlexLayout,\n FlowLayout: FlowLayout,\n FormatControls: FormatControls,\n GridLayout: GridLayout,\n Iframe: Iframe$1,\n InfoBox: InfoBox,\n Label: Label,\n Toolbar: Toolbar$1,\n MenuBar: MenuBar,\n MenuButton: MenuButton,\n MenuItem: MenuItem,\n Throbber: Throbber,\n Menu: Menu,\n ListBox: ListBox,\n Radio: Radio,\n ResizeHandle: ResizeHandle,\n SelectBox: SelectBox,\n Slider: Slider,\n Spacer: Spacer,\n SplitButton: SplitButton,\n StackLayout: StackLayout,\n TabPanel: TabPanel,\n TextBox: TextBox,\n DropZone: DropZone,\n BrowseButton: BrowseButton\n };\n };\n var appendTo = function (target) {\n if (target.ui) {\n global$2.each(getApi(), function (ref, key) {\n target.ui[key] = ref;\n });\n } else {\n target.ui = getApi();\n }\n };\n var registerToFactory = function () {\n global$2.each(getApi(), function (ref, key) {\n global$4.add(key, ref);\n });\n };\n var Api = {\n appendTo: appendTo,\n registerToFactory: registerToFactory\n };\n\n Api.registerToFactory();\n Api.appendTo(window.tinymce ? window.tinymce : {});\n global.add('modern', function (editor) {\n FormatControls.setup(editor);\n return ThemeApi.get(editor);\n });\n function Theme () {\n }\n\n return Theme;\n\n}(window));\n})();\n","(function () {\nvar paste = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasProPlugin = function (editor) {\n if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global$1.get('powerpaste')) {\n if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\n domGlobals.window.console.log('PowerPaste is incompatible with Paste plugin! Remove \\'paste\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n var DetectProPlugin = { hasProPlugin: hasProPlugin };\n\n var get = function (clipboard, quirks) {\n return {\n clipboard: clipboard,\n quirks: quirks\n };\n };\n var Api = { get: get };\n\n var firePastePreProcess = function (editor, html, internal, isWordHtml) {\n return editor.fire('PastePreProcess', {\n content: html,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePostProcess = function (editor, node, internal, isWordHtml) {\n return editor.fire('PastePostProcess', {\n node: node,\n internal: internal,\n wordContent: isWordHtml\n });\n };\n var firePastePlainTextToggle = function (editor, state) {\n return editor.fire('PastePlainTextToggle', { state: state });\n };\n var firePaste = function (editor, ieFake) {\n return editor.fire('paste', { ieFake: ieFake });\n };\n var Events = {\n firePastePreProcess: firePastePreProcess,\n firePastePostProcess: firePastePostProcess,\n firePastePlainTextToggle: firePastePlainTextToggle,\n firePaste: firePaste\n };\n\n var shouldPlainTextInform = function (editor) {\n return editor.getParam('paste_plaintext_inform', true);\n };\n var shouldBlockDrop = function (editor) {\n return editor.getParam('paste_block_drop', false);\n };\n var shouldPasteDataImages = function (editor) {\n return editor.getParam('paste_data_images', false);\n };\n var shouldFilterDrop = function (editor) {\n return editor.getParam('paste_filter_drop', true);\n };\n var getPreProcess = function (editor) {\n return editor.getParam('paste_preprocess');\n };\n var getPostProcess = function (editor) {\n return editor.getParam('paste_postprocess');\n };\n var getWebkitStyles = function (editor) {\n return editor.getParam('paste_webkit_styles');\n };\n var shouldRemoveWebKitStyles = function (editor) {\n return editor.getParam('paste_remove_styles_if_webkit', true);\n };\n var shouldMergeFormats = function (editor) {\n return editor.getParam('paste_merge_formats', true);\n };\n var isSmartPasteEnabled = function (editor) {\n return editor.getParam('smart_paste', true);\n };\n var isPasteAsTextEnabled = function (editor) {\n return editor.getParam('paste_as_text', false);\n };\n var getRetainStyleProps = function (editor) {\n return editor.getParam('paste_retain_style_properties');\n };\n var getWordValidElements = function (editor) {\n var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';\n return editor.getParam('paste_word_valid_elements', defaultValidElements);\n };\n var shouldConvertWordFakeLists = function (editor) {\n return editor.getParam('paste_convert_word_fake_lists', true);\n };\n var shouldUseDefaultFilters = function (editor) {\n return editor.getParam('paste_enable_default_filters', true);\n };\n var Settings = {\n shouldPlainTextInform: shouldPlainTextInform,\n shouldBlockDrop: shouldBlockDrop,\n shouldPasteDataImages: shouldPasteDataImages,\n shouldFilterDrop: shouldFilterDrop,\n getPreProcess: getPreProcess,\n getPostProcess: getPostProcess,\n getWebkitStyles: getWebkitStyles,\n shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,\n shouldMergeFormats: shouldMergeFormats,\n isSmartPasteEnabled: isSmartPasteEnabled,\n isPasteAsTextEnabled: isPasteAsTextEnabled,\n getRetainStyleProps: getRetainStyleProps,\n getWordValidElements: getWordValidElements,\n shouldConvertWordFakeLists: shouldConvertWordFakeLists,\n shouldUseDefaultFilters: shouldUseDefaultFilters\n };\n\n var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {\n return userIsInformedState.get() === false && Settings.shouldPlainTextInform(editor);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n text: editor.translate(message),\n type: 'info'\n });\n };\n var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {\n if (clipboard.pasteFormat.get() === 'text') {\n clipboard.pasteFormat.set('html');\n Events.firePastePlainTextToggle(editor, false);\n } else {\n clipboard.pasteFormat.set('text');\n Events.firePastePlainTextToggle(editor, true);\n if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {\n displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');\n userIsInformedState.set(true);\n }\n }\n editor.focus();\n };\n var Actions = { togglePlainTextPaste: togglePlainTextPaste };\n\n var register = function (editor, clipboard, userIsInformedState) {\n editor.addCommand('mceTogglePlainTextPaste', function () {\n Actions.togglePlainTextPaste(editor, clipboard, userIsInformedState);\n });\n editor.addCommand('mceInsertClipboardContent', function (ui, value) {\n if (value.content) {\n clipboard.pasteHtml(value.content, value.internal);\n }\n if (value.text) {\n clipboard.pasteText(value.text);\n }\n });\n };\n var Commands = { register: register };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var internalMimeType = 'x-tinymce/html';\n var internalMark = '';\n var mark = function (html) {\n return internalMark + html;\n };\n var unmark = function (html) {\n return html.replace(internalMark, '');\n };\n var isMarked = function (html) {\n return html.indexOf(internalMark) !== -1;\n };\n var InternalHtml = {\n mark: mark,\n unmark: unmark,\n isMarked: isMarked,\n internalHtmlMime: function () {\n return internalMimeType;\n }\n };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.html.Entities');\n\n var isPlainText = function (text) {\n return !/<(?:\\/?(?!(?:div|p|br|span)>)\\w+|(?:(?!(?:span style=\"white-space:\\s?pre;?\">)|br\\s?\\/>))\\w+\\s[^>]+)>/i.test(text);\n };\n var toBRs = function (text) {\n return text.replace(/\\r?\\n/g, '
');\n };\n var openContainer = function (rootTag, rootAttrs) {\n var key;\n var attrs = [];\n var tag = '<' + rootTag;\n if (typeof rootAttrs === 'object') {\n for (key in rootAttrs) {\n if (rootAttrs.hasOwnProperty(key)) {\n attrs.push(key + '=\"' + global$6.encodeAllRaw(rootAttrs[key]) + '\"');\n }\n }\n if (attrs.length) {\n tag += ' ' + attrs.join(' ');\n }\n }\n return tag + '>';\n };\n var toBlockElements = function (text, rootTag, rootAttrs) {\n var blocks = text.split(/\\n\\n/);\n var tagOpen = openContainer(rootTag, rootAttrs);\n var tagClose = '';\n var paragraphs = global$4.map(blocks, function (p) {\n return p.split(/\\n/).join('
');\n });\n var stitch = function (p) {\n return tagOpen + p + tagClose;\n };\n return paragraphs.length === 1 ? paragraphs[0] : global$4.map(paragraphs, stitch).join('');\n };\n var convert = function (text, rootTag, rootAttrs) {\n return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);\n };\n var Newlines = {\n isPlainText: isPlainText,\n convert: convert,\n toBRs: toBRs,\n toBlockElements: toBlockElements\n };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.html.Schema');\n\n function filter(content, items) {\n global$4.each(items, function (v) {\n if (v.constructor === RegExp) {\n content = content.replace(v, '');\n } else {\n content = content.replace(v[0], v[1]);\n }\n });\n return content;\n }\n function innerText(html) {\n var schema = global$a();\n var domParser = global$7({}, schema);\n var text = '';\n var shortEndedElements = schema.getShortEndedElements();\n var ignoreElements = global$4.makeMap('script noscript style textarea video audio iframe object', ' ');\n var blockElements = schema.getBlockElements();\n function walk(node) {\n var name = node.name, currentNode = node;\n if (name === 'br') {\n text += '\\n';\n return;\n }\n if (name === 'wbr') {\n return;\n }\n if (shortEndedElements[name]) {\n text += ' ';\n }\n if (ignoreElements[name]) {\n text += ' ';\n return;\n }\n if (node.type === 3) {\n text += node.value;\n }\n if (!node.shortEnded) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n if (blockElements[name] && currentNode.next) {\n text += '\\n';\n if (name === 'p') {\n text += '\\n';\n }\n }\n }\n html = filter(html, [//g]);\n walk(domParser.parse(html));\n return text;\n }\n function trimHtml(html) {\n function trimSpaces(all, s1, s2) {\n if (!s1 && !s2) {\n return ' ';\n }\n return '\\xA0';\n }\n html = filter(html, [\n /^[\\s\\S]*]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/ig,\n /|/g,\n [\n /( ?)\\u00a0<\\/span>( ?)/g,\n trimSpaces\n ],\n /
/g,\n /
$/i\n ]);\n return html;\n }\n function createIdGenerator(prefix) {\n var count = 0;\n return function () {\n return prefix + count++;\n };\n }\n var isMsEdge = function () {\n return domGlobals.navigator.userAgent.indexOf(' Edge/') !== -1;\n };\n var Utils = {\n filter: filter,\n innerText: innerText,\n trimHtml: trimHtml,\n createIdGenerator: createIdGenerator,\n isMsEdge: isMsEdge\n };\n\n function isWordContent(content) {\n return / 1) {\n currentListNode.attr('start', '' + start);\n }\n paragraphNode.wrap(currentListNode);\n } else {\n currentListNode.append(paragraphNode);\n }\n paragraphNode.name = 'li';\n if (level > lastLevel && prevListNode) {\n prevListNode.lastChild.append(currentListNode);\n }\n lastLevel = level;\n removeIgnoredNodes(paragraphNode);\n trimListStart(paragraphNode, /^\\u00a0+/);\n trimListStart(paragraphNode, /^\\s*([\\u2022\\u00b7\\u00a7\\u25CF]|\\w+\\.)/);\n trimListStart(paragraphNode, /^\\u00a0+/);\n }\n var elements = [];\n var child = node.firstChild;\n while (typeof child !== 'undefined' && child !== null) {\n elements.push(child);\n child = child.walk();\n if (child !== null) {\n while (typeof child !== 'undefined' && child.parent !== node) {\n child = child.walk();\n }\n }\n }\n for (var i = 0; i < elements.length; i++) {\n node = elements[i];\n if (node.name === 'p' && node.firstChild) {\n var nodeText = getText(node);\n if (isBulletList(nodeText)) {\n convertParagraphToLi(node, 'ul');\n continue;\n }\n if (isNumericList(nodeText)) {\n var matches = /([0-9]+)\\./.exec(nodeText);\n var start = 1;\n if (matches) {\n start = parseInt(matches[1], 10);\n }\n convertParagraphToLi(node, 'ol', start);\n continue;\n }\n if (node._listLevel) {\n convertParagraphToLi(node, 'ul', 1);\n continue;\n }\n currentListNode = null;\n } else {\n prevListNode = currentListNode;\n currentListNode = null;\n }\n }\n }\n function filterStyles(editor, validStyles, node, styleValue) {\n var outputStyles = {}, matches;\n var styles = editor.dom.parseStyle(styleValue);\n global$4.each(styles, function (value, name) {\n switch (name) {\n case 'mso-list':\n matches = /\\w+ \\w+([0-9]+)/i.exec(styleValue);\n if (matches) {\n node._listLevel = parseInt(matches[1], 10);\n }\n if (/Ignore/i.test(value) && node.firstChild) {\n node._listIgnore = true;\n node.firstChild._listIgnore = true;\n }\n break;\n case 'horiz-align':\n name = 'text-align';\n break;\n case 'vert-align':\n name = 'vertical-align';\n break;\n case 'font-color':\n case 'mso-foreground':\n name = 'color';\n break;\n case 'mso-background':\n case 'mso-highlight':\n name = 'background';\n break;\n case 'font-weight':\n case 'font-style':\n if (value !== 'normal') {\n outputStyles[name] = value;\n }\n return;\n case 'mso-element':\n if (/^(comment|comment-list)$/i.test(value)) {\n node.remove();\n return;\n }\n break;\n }\n if (name.indexOf('mso-comment') === 0) {\n node.remove();\n return;\n }\n if (name.indexOf('mso-') === 0) {\n return;\n }\n if (Settings.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {\n outputStyles[name] = value;\n }\n });\n if (/(bold)/i.test(outputStyles['font-weight'])) {\n delete outputStyles['font-weight'];\n node.wrap(new global$9('b', 1));\n }\n if (/(italic)/i.test(outputStyles['font-style'])) {\n delete outputStyles['font-style'];\n node.wrap(new global$9('i', 1));\n }\n outputStyles = editor.dom.serializeStyle(outputStyles, node.name);\n if (outputStyles) {\n return outputStyles;\n }\n return null;\n }\n var filterWordContent = function (editor, content) {\n var retainStyleProperties, validStyles;\n retainStyleProperties = Settings.getRetainStyleProps(editor);\n if (retainStyleProperties) {\n validStyles = global$4.makeMap(retainStyleProperties.split(/[, ]/));\n }\n content = Utils.filter(content, [\n /
/gi,\n /]+id=\"?docs-internal-[^>]*>/gi,\n //gi,\n /<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|img|meta|link|style|\\w:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\n [\n /<(\\/?)s>/gi,\n '<$1strike>'\n ],\n [\n / /gi,\n '\\xA0'\n ],\n [\n /([\\s\\u00a0]*)<\\/span>/gi,\n function (str, spaces) {\n return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\\xA0') : '';\n }\n ]\n ]);\n var validElements = Settings.getWordValidElements(editor);\n var schema = global$a({\n valid_elements: validElements,\n valid_children: '-li[p]'\n });\n global$4.each(schema.elements, function (rule) {\n if (!rule.attributes.class) {\n rule.attributes.class = {};\n rule.attributesOrder.push('class');\n }\n if (!rule.attributes.style) {\n rule.attributes.style = {};\n rule.attributesOrder.push('style');\n }\n });\n var domParser = global$7({}, schema);\n domParser.addAttributeFilter('style', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));\n if (node.name === 'span' && node.parent && !node.attributes.length) {\n node.unwrap();\n }\n }\n });\n domParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {\n node.remove();\n }\n node.attr('class', null);\n }\n });\n domParser.addNodeFilter('del', function (nodes) {\n var i = nodes.length;\n while (i--) {\n nodes[i].remove();\n }\n });\n domParser.addNodeFilter('a', function (nodes) {\n var i = nodes.length, node, href, name;\n while (i--) {\n node = nodes[i];\n href = node.attr('href');\n name = node.attr('name');\n if (href && href.indexOf('#_msocom_') !== -1) {\n node.remove();\n continue;\n }\n if (href && href.indexOf('file://') === 0) {\n href = href.split('#')[1];\n if (href) {\n href = '#' + href;\n }\n }\n if (!href && !name) {\n node.unwrap();\n } else {\n if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {\n node.unwrap();\n continue;\n }\n node.attr({\n href: href,\n name: name\n });\n }\n }\n });\n var rootNode = domParser.parse(content);\n if (Settings.shouldConvertWordFakeLists(editor)) {\n convertFakeListsToProperLists(rootNode);\n }\n content = global$8({ validate: editor.settings.validate }, schema).serialize(rootNode);\n return content;\n };\n var preProcess = function (editor, content) {\n return Settings.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;\n };\n var WordFilter = {\n preProcess: preProcess,\n isWordContent: isWordContent\n };\n\n var preProcess$1 = function (editor, html) {\n var parser = global$7({}, editor.schema);\n parser.addNodeFilter('meta', function (nodes) {\n global$4.each(nodes, function (node) {\n return node.remove();\n });\n });\n var fragment = parser.parse(html, {\n forced_root_block: false,\n isRootContent: true\n });\n return global$8({ validate: editor.settings.validate }, editor.schema).serialize(fragment);\n };\n var processResult = function (content, cancelled) {\n return {\n content: content,\n cancelled: cancelled\n };\n };\n var postProcessFilter = function (editor, html, internal, isWordHtml) {\n var tempBody = editor.dom.create('div', { style: 'display:none' }, html);\n var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);\n return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());\n };\n var filterContent = function (editor, content, internal, isWordHtml) {\n var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);\n var filteredContent = preProcess$1(editor, preProcessArgs.content);\n if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {\n return postProcessFilter(editor, filteredContent, internal, isWordHtml);\n } else {\n return processResult(filteredContent, preProcessArgs.isDefaultPrevented());\n }\n };\n var process = function (editor, html, internal) {\n var isWordHtml = WordFilter.isWordContent(html);\n var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;\n return filterContent(editor, content, internal, isWordHtml);\n };\n var ProcessFilters = { process: process };\n\n var pasteHtml = function (editor, html) {\n editor.insertContent(html, {\n merge: Settings.shouldMergeFormats(editor),\n paste: true\n });\n return true;\n };\n var isAbsoluteUrl = function (url) {\n return /^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(url);\n };\n var isImageUrl = function (url) {\n return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);\n };\n var createImage = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.insertContent('');\n });\n return true;\n };\n var createLink = function (editor, url, pasteHtmlFn) {\n editor.undoManager.extra(function () {\n pasteHtmlFn(editor, url);\n }, function () {\n editor.execCommand('mceInsertLink', false, url);\n });\n return true;\n };\n var linkSelection = function (editor, html, pasteHtmlFn) {\n return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;\n };\n var insertImage = function (editor, html, pasteHtmlFn) {\n return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;\n };\n var smartInsertContent = function (editor, html) {\n global$4.each([\n linkSelection,\n insertImage,\n pasteHtml\n ], function (action) {\n return action(editor, html, pasteHtml) !== true;\n });\n };\n var insertContent = function (editor, html) {\n if (Settings.isSmartPasteEnabled(editor) === false) {\n pasteHtml(editor, html);\n } else {\n smartInsertContent(editor, html);\n }\n };\n var SmartPaste = {\n isImageUrl: isImageUrl,\n isAbsoluteUrl: isAbsoluteUrl,\n insertContent: insertContent\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter$1 = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var exports$1 = {}, module = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module, undefined));\n var Promise = module.exports.boltExport;\n\n var nu = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n domGlobals.setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$1 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$1,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n var traverse = function (array, fn) {\n return par$1(map(array, fn));\n };\n var mapM = traverse;\n\n var value = function () {\n var subject = Cell(Option.none());\n var clear = function () {\n subject.set(Option.none());\n };\n var set = function (s) {\n subject.set(Option.some(s));\n };\n var on = function (f) {\n subject.get().each(f);\n };\n var isSet = function () {\n return subject.get().isSome();\n };\n return {\n clear: clear,\n set: set,\n isSet: isSet,\n on: on\n };\n };\n\n var pasteHtml$1 = function (editor, html, internalFlag) {\n var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);\n var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);\n if (args.cancelled === false) {\n SmartPaste.insertContent(editor, args.content);\n }\n };\n var pasteText = function (editor, text) {\n text = editor.dom.encode(text).replace(/\\r\\n/g, '\\n');\n text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);\n pasteHtml$1(editor, text, false);\n };\n var getDataTransferItems = function (dataTransfer) {\n var items = {};\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n if (dataTransfer) {\n if (dataTransfer.getData) {\n var legacyText = dataTransfer.getData('Text');\n if (legacyText && legacyText.length > 0) {\n if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {\n items['text/plain'] = legacyText;\n }\n }\n }\n if (dataTransfer.types) {\n for (var i = 0; i < dataTransfer.types.length; i++) {\n var contentType = dataTransfer.types[i];\n try {\n items[contentType] = dataTransfer.getData(contentType);\n } catch (ex) {\n items[contentType] = '';\n }\n }\n }\n }\n return items;\n };\n var getClipboardContent = function (editor, clipboardEvent) {\n var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);\n return Utils.isMsEdge() ? global$4.extend(content, { 'text/html': '' }) : content;\n };\n var hasContentType = function (clipboardContent, mimeType) {\n return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;\n };\n var hasHtmlOrText = function (content) {\n return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');\n };\n var getBase64FromUri = function (uri) {\n var idx;\n idx = uri.indexOf(',');\n if (idx !== -1) {\n return uri.substr(idx + 1);\n }\n return null;\n };\n var isValidDataUriImage = function (settings, imgElm) {\n return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;\n };\n var extractFilename = function (editor, str) {\n var m = str.match(/([\\s\\S]+?)\\.(?:jpeg|jpg|png|gif)$/i);\n return m ? editor.dom.encode(m[1]) : null;\n };\n var uniqueId = Utils.createIdGenerator('mceclip');\n var pasteImage = function (editor, imageItem) {\n var base64 = getBase64FromUri(imageItem.uri);\n var id = uniqueId();\n var name = editor.settings.images_reuse_filename && imageItem.blob.name ? extractFilename(editor, imageItem.blob.name) : id;\n var img = new domGlobals.Image();\n img.src = imageItem.uri;\n if (isValidDataUriImage(editor.settings, img)) {\n var blobCache = editor.editorUpload.blobCache;\n var blobInfo = void 0, existingBlobInfo = void 0;\n existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (!existingBlobInfo) {\n blobInfo = blobCache.create(id, imageItem.blob, base64, name);\n blobCache.add(blobInfo);\n } else {\n blobInfo = existingBlobInfo;\n }\n pasteHtml$1(editor, '', false);\n } else {\n pasteHtml$1(editor, '', false);\n }\n };\n var isClipboardEvent = function (event) {\n return event.type === 'paste';\n };\n var readBlobsAsDataUris = function (items) {\n return mapM(items, function (item) {\n return Future.nu(function (resolve) {\n var blob = item.getAsFile ? item.getAsFile() : item;\n var reader = new window.FileReader();\n reader.onload = function () {\n resolve({\n blob: blob,\n uri: reader.result\n });\n };\n reader.readAsDataURL(blob);\n });\n });\n };\n var getImagesFromDataTransfer = function (dataTransfer) {\n var items = dataTransfer.items ? map(from$1(dataTransfer.items), function (item) {\n return item.getAsFile();\n }) : [];\n var files = dataTransfer.files ? from$1(dataTransfer.files) : [];\n var images = filter$1(items.length > 0 ? items : files, function (file) {\n return /^image\\/(jpeg|png|gif|bmp)$/.test(file.type);\n });\n return images;\n };\n var pasteImageData = function (editor, e, rng) {\n var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;\n if (editor.settings.paste_data_images && dataTransfer) {\n var images = getImagesFromDataTransfer(dataTransfer);\n if (images.length > 0) {\n e.preventDefault();\n readBlobsAsDataUris(images).get(function (blobResults) {\n if (rng) {\n editor.selection.setRng(rng);\n }\n each(blobResults, function (result) {\n pasteImage(editor, result);\n });\n });\n return true;\n }\n }\n return false;\n };\n var isBrokenAndroidClipboardEvent = function (e) {\n var clipboardData = e.clipboardData;\n return domGlobals.navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;\n };\n var isKeyboardPasteEvent = function (e) {\n return global$5.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;\n };\n var registerEventHandlers = function (editor, pasteBin, pasteFormat) {\n var keyboardPasteEvent = value();\n var keyboardPastePlainTextState;\n editor.on('keydown', function (e) {\n function removePasteBinOnKeyUp(e) {\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n pasteBin.remove();\n }\n }\n if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {\n keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;\n if (keyboardPastePlainTextState && global$2.webkit && domGlobals.navigator.userAgent.indexOf('Version/') !== -1) {\n return;\n }\n e.stopImmediatePropagation();\n keyboardPasteEvent.set(e);\n window.setTimeout(function () {\n keyboardPasteEvent.clear();\n }, 100);\n if (global$2.ie && keyboardPastePlainTextState) {\n e.preventDefault();\n Events.firePaste(editor, true);\n return;\n }\n pasteBin.remove();\n pasteBin.create();\n editor.once('keyup', removePasteBinOnKeyUp);\n editor.once('paste', function () {\n editor.off('keyup', removePasteBinOnKeyUp);\n });\n }\n });\n function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {\n var content, isPlainTextHtml;\n if (hasContentType(clipboardContent, 'text/html')) {\n content = clipboardContent['text/html'];\n } else {\n content = pasteBin.getHtml();\n internal = internal ? internal : InternalHtml.isMarked(content);\n if (pasteBin.isDefaultContent(content)) {\n plainTextMode = true;\n }\n }\n content = Utils.trimHtml(content);\n pasteBin.remove();\n isPlainTextHtml = internal === false && Newlines.isPlainText(content);\n if (!content.length || isPlainTextHtml) {\n plainTextMode = true;\n }\n if (plainTextMode) {\n if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {\n content = clipboardContent['text/plain'];\n } else {\n content = Utils.innerText(content);\n }\n }\n if (pasteBin.isDefaultContent(content)) {\n if (!isKeyBoardPaste) {\n editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');\n }\n return;\n }\n if (plainTextMode) {\n pasteText(editor, content);\n } else {\n pasteHtml$1(editor, content, internal);\n }\n }\n var getLastRng = function () {\n return pasteBin.getLastRng() || editor.selection.getRng();\n };\n editor.on('paste', function (e) {\n var isKeyBoardPaste = keyboardPasteEvent.isSet();\n var clipboardContent = getClipboardContent(editor, e);\n var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;\n var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());\n keyboardPastePlainTextState = false;\n if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {\n pasteBin.remove();\n return;\n }\n if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {\n pasteBin.remove();\n return;\n }\n if (!isKeyBoardPaste) {\n e.preventDefault();\n }\n if (global$2.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {\n pasteBin.create();\n editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {\n e.stopPropagation();\n });\n editor.getDoc().execCommand('Paste', false, null);\n clipboardContent['text/html'] = pasteBin.getHtml();\n }\n if (hasContentType(clipboardContent, 'text/html')) {\n e.preventDefault();\n if (!internal) {\n internal = InternalHtml.isMarked(clipboardContent['text/html']);\n }\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n } else {\n global$3.setEditorTimeout(editor, function () {\n insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);\n }, 0);\n }\n });\n };\n var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {\n registerEventHandlers(editor, pasteBin, pasteFormat);\n var src;\n editor.parser.addNodeFilter('img', function (nodes, name, args) {\n var isPasteInsert = function (args) {\n return args.data && args.data.paste === true;\n };\n var remove = function (node) {\n if (!node.attr('data-mce-object') && src !== global$2.transparentSrc) {\n node.remove();\n }\n };\n var isWebKitFakeUrl = function (src) {\n return src.indexOf('webkit-fake-url') === 0;\n };\n var isDataUri = function (src) {\n return src.indexOf('data:') === 0;\n };\n if (!editor.settings.paste_data_images && isPasteInsert(args)) {\n var i = nodes.length;\n while (i--) {\n src = nodes[i].attributes.map.src;\n if (!src) {\n continue;\n }\n if (isWebKitFakeUrl(src)) {\n remove(nodes[i]);\n } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {\n remove(nodes[i]);\n }\n }\n }\n });\n };\n\n var getPasteBinParent = function (editor) {\n return global$2.ie && editor.inline ? domGlobals.document.body : editor.getBody();\n };\n var isExternalPasteBin = function (editor) {\n return getPasteBinParent(editor) !== editor.getBody();\n };\n var delegatePasteEvents = function (editor, pasteBinElm, pasteBinDefaultContent) {\n if (isExternalPasteBin(editor)) {\n editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {\n if (!isDefault(editor, pasteBinDefaultContent)) {\n editor.fire('paste');\n }\n });\n }\n };\n var create = function (editor, lastRngCell, pasteBinDefaultContent) {\n var dom = editor.dom, body = editor.getBody();\n var pasteBinElm;\n lastRngCell.set(editor.selection.getRng());\n pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {\n 'id': 'mcepastebin',\n 'class': 'mce-pastebin',\n 'contentEditable': true,\n 'data-mce-bogus': 'all',\n 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'\n }, pasteBinDefaultContent);\n if (global$2.ie || global$2.gecko) {\n dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);\n }\n dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {\n e.stopPropagation();\n });\n delegatePasteEvents(editor, pasteBinElm, pasteBinDefaultContent);\n pasteBinElm.focus();\n editor.selection.select(pasteBinElm, true);\n };\n var remove = function (editor, lastRngCell) {\n if (getEl(editor)) {\n var pasteBinClone = void 0;\n var lastRng = lastRngCell.get();\n while (pasteBinClone = editor.dom.get('mcepastebin')) {\n editor.dom.remove(pasteBinClone);\n editor.dom.unbind(pasteBinClone);\n }\n if (lastRng) {\n editor.selection.setRng(lastRng);\n }\n }\n lastRngCell.set(null);\n };\n var getEl = function (editor) {\n return editor.dom.get('mcepastebin');\n };\n var getHtml = function (editor) {\n var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;\n var copyAndRemove = function (toElm, fromElm) {\n toElm.appendChild(fromElm);\n editor.dom.remove(fromElm, true);\n };\n pasteBinClones = global$4.grep(getPasteBinParent(editor).childNodes, function (elm) {\n return elm.id === 'mcepastebin';\n });\n pasteBinElm = pasteBinClones.shift();\n global$4.each(pasteBinClones, function (pasteBinClone) {\n copyAndRemove(pasteBinElm, pasteBinClone);\n });\n dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);\n for (i = dirtyWrappers.length - 1; i >= 0; i--) {\n cleanWrapper = editor.dom.create('div');\n pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);\n copyAndRemove(cleanWrapper, dirtyWrappers[i]);\n }\n return pasteBinElm ? pasteBinElm.innerHTML : '';\n };\n var getLastRng = function (lastRng) {\n return lastRng.get();\n };\n var isDefaultContent = function (pasteBinDefaultContent, content) {\n return content === pasteBinDefaultContent;\n };\n var isPasteBin = function (elm) {\n return elm && elm.id === 'mcepastebin';\n };\n var isDefault = function (editor, pasteBinDefaultContent) {\n var pasteBinElm = getEl(editor);\n return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);\n };\n var PasteBin = function (editor) {\n var lastRng = Cell(null);\n var pasteBinDefaultContent = '%MCEPASTEBIN%';\n return {\n create: function () {\n return create(editor, lastRng, pasteBinDefaultContent);\n },\n remove: function () {\n return remove(editor, lastRng);\n },\n getEl: function () {\n return getEl(editor);\n },\n getHtml: function () {\n return getHtml(editor);\n },\n getLastRng: function () {\n return getLastRng(lastRng);\n },\n isDefault: function () {\n return isDefault(editor, pasteBinDefaultContent);\n },\n isDefaultContent: function (content) {\n return isDefaultContent(pasteBinDefaultContent, content);\n }\n };\n };\n\n var Clipboard = function (editor, pasteFormat) {\n var pasteBin = PasteBin(editor);\n editor.on('preInit', function () {\n return registerEventsAndFilters(editor, pasteBin, pasteFormat);\n });\n return {\n pasteFormat: pasteFormat,\n pasteHtml: function (html, internalFlag) {\n return pasteHtml$1(editor, html, internalFlag);\n },\n pasteText: function (text) {\n return pasteText(editor, text);\n },\n pasteImageData: function (e, rng) {\n return pasteImageData(editor, e, rng);\n },\n getDataTransferItems: getDataTransferItems,\n hasHtmlOrText: hasHtmlOrText,\n hasContentType: hasContentType\n };\n };\n\n var noop$1 = function () {\n };\n var hasWorkingClipboardApi = function (clipboardData) {\n return global$2.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;\n };\n var setHtml5Clipboard = function (clipboardData, html, text) {\n if (hasWorkingClipboardApi(clipboardData)) {\n try {\n clipboardData.clearData();\n clipboardData.setData('text/html', html);\n clipboardData.setData('text/plain', text);\n clipboardData.setData(InternalHtml.internalHtmlMime(), html);\n return true;\n } catch (e) {\n return false;\n }\n } else {\n return false;\n }\n };\n var setClipboardData = function (evt, data, fallback, done) {\n if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {\n evt.preventDefault();\n done();\n } else {\n fallback(data.html, done);\n }\n };\n var fallback = function (editor) {\n return function (html, done) {\n var markedHtml = InternalHtml.mark(html);\n var outer = editor.dom.create('div', {\n 'contenteditable': 'false',\n 'data-mce-bogus': 'all'\n });\n var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);\n editor.dom.setStyles(outer, {\n position: 'fixed',\n top: '0',\n left: '-3000px',\n width: '1000px',\n overflow: 'hidden'\n });\n outer.appendChild(inner);\n editor.dom.add(editor.getBody(), outer);\n var range = editor.selection.getRng();\n inner.focus();\n var offscreenRange = editor.dom.createRng();\n offscreenRange.selectNodeContents(inner);\n editor.selection.setRng(offscreenRange);\n setTimeout(function () {\n editor.selection.setRng(range);\n outer.parentNode.removeChild(outer);\n done();\n }, 0);\n };\n };\n var getData = function (editor) {\n return {\n html: editor.selection.getContent({ contextual: true }),\n text: editor.selection.getContent({ format: 'text' })\n };\n };\n var isTableSelection = function (editor) {\n return !!editor.dom.getParent(editor.selection.getStart(), 'td[data-mce-selected],th[data-mce-selected]', editor.getBody());\n };\n var hasSelectedContent = function (editor) {\n return !editor.selection.isCollapsed() || isTableSelection(editor);\n };\n var cut = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), function () {\n setTimeout(function () {\n editor.execCommand('Delete');\n }, 0);\n });\n }\n };\n };\n var copy = function (editor) {\n return function (evt) {\n if (hasSelectedContent(editor)) {\n setClipboardData(evt, getData(editor), fallback(editor), noop$1);\n }\n };\n };\n var register$1 = function (editor) {\n editor.on('cut', cut(editor));\n editor.on('copy', copy(editor));\n };\n var CutCopy = { register: register$1 };\n\n var global$b = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var getCaretRangeFromEvent = function (editor, e) {\n return global$b.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());\n };\n var isPlainTextFileUrl = function (content) {\n var plainTextContent = content['text/plain'];\n return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;\n };\n var setFocusedRange = function (editor, rng) {\n editor.focus();\n editor.selection.setRng(rng);\n };\n var setup = function (editor, clipboard, draggingInternallyState) {\n if (Settings.shouldBlockDrop(editor)) {\n editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {\n e.preventDefault();\n e.stopPropagation();\n });\n }\n if (!Settings.shouldPasteDataImages(editor)) {\n editor.on('drop', function (e) {\n var dataTransfer = e.dataTransfer;\n if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {\n e.preventDefault();\n }\n });\n }\n editor.on('drop', function (e) {\n var dropContent, rng;\n rng = getCaretRangeFromEvent(editor, e);\n if (e.isDefaultPrevented() || draggingInternallyState.get()) {\n return;\n }\n dropContent = clipboard.getDataTransferItems(e.dataTransfer);\n var internal = clipboard.hasContentType(dropContent, InternalHtml.internalHtmlMime());\n if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {\n return;\n }\n if (rng && Settings.shouldFilterDrop(editor)) {\n var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];\n if (content_1) {\n e.preventDefault();\n global$3.setEditorTimeout(editor, function () {\n editor.undoManager.transact(function () {\n if (dropContent['mce-internal']) {\n editor.execCommand('Delete');\n }\n setFocusedRange(editor, rng);\n content_1 = Utils.trimHtml(content_1);\n if (!dropContent['text/html']) {\n clipboard.pasteText(content_1);\n } else {\n clipboard.pasteHtml(content_1, internal);\n }\n });\n });\n }\n }\n });\n editor.on('dragstart', function (e) {\n draggingInternallyState.set(true);\n });\n editor.on('dragover dragend', function (e) {\n if (Settings.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {\n e.preventDefault();\n setFocusedRange(editor, getCaretRangeFromEvent(editor, e));\n }\n if (e.type === 'dragend') {\n draggingInternallyState.set(false);\n }\n });\n };\n var DragDrop = { setup: setup };\n\n var setup$1 = function (editor) {\n var plugin = editor.plugins.paste;\n var preProcess = Settings.getPreProcess(editor);\n if (preProcess) {\n editor.on('PastePreProcess', function (e) {\n preProcess.call(plugin, plugin, e);\n });\n }\n var postProcess = Settings.getPostProcess(editor);\n if (postProcess) {\n editor.on('PastePostProcess', function (e) {\n postProcess.call(plugin, plugin, e);\n });\n }\n };\n var PrePostProcess = { setup: setup$1 };\n\n function addPreProcessFilter(editor, filterFunc) {\n editor.on('PastePreProcess', function (e) {\n e.content = filterFunc(editor, e.content, e.internal, e.wordContent);\n });\n }\n function addPostProcessFilter(editor, filterFunc) {\n editor.on('PastePostProcess', function (e) {\n filterFunc(editor, e.node);\n });\n }\n function removeExplorerBrElementsAfterBlocks(editor, html) {\n if (!WordFilter.isWordContent(html)) {\n return html;\n }\n var blockElements = [];\n global$4.each(editor.schema.getBlockElements(), function (block, blockName) {\n blockElements.push(blockName);\n });\n var explorerBlocksRegExp = new RegExp('(?:
 [\\\\s\\\\r\\\\n]+|
)*(<\\\\/?(' + blockElements.join('|') + ')[^>]*>)(?:
 [\\\\s\\\\r\\\\n]+|
)*', 'g');\n html = Utils.filter(html, [[\n explorerBlocksRegExp,\n '$1'\n ]]);\n html = Utils.filter(html, [\n [\n /

/g,\n '

'\n ],\n [\n /
/g,\n ' '\n ],\n [\n /

/g,\n '
'\n ]\n ]);\n return html;\n }\n function removeWebKitStyles(editor, content, internal, isWordHtml) {\n if (isWordHtml || internal) {\n return content;\n }\n var webKitStylesSetting = Settings.getWebkitStyles(editor);\n var webKitStyles;\n if (Settings.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {\n return content;\n }\n if (webKitStylesSetting) {\n webKitStyles = webKitStylesSetting.split(/[, ]/);\n }\n if (webKitStyles) {\n var dom_1 = editor.dom, node_1 = editor.selection.getNode();\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, function (all, before, value, after) {\n var inputStyles = dom_1.parseStyle(dom_1.decode(value));\n var outputStyles = {};\n if (webKitStyles === 'none') {\n return before + after;\n }\n for (var i = 0; i < webKitStyles.length; i++) {\n var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);\n if (/color/.test(webKitStyles[i])) {\n inputValue = dom_1.toHex(inputValue);\n currentValue = dom_1.toHex(currentValue);\n }\n if (currentValue !== inputValue) {\n outputStyles[webKitStyles[i]] = inputValue;\n }\n }\n outputStyles = dom_1.serializeStyle(outputStyles, 'span');\n if (outputStyles) {\n return before + ' style=\"' + outputStyles + '\"' + after;\n }\n return before + after;\n });\n } else {\n content = content.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi, '$1$3');\n }\n content = content.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi, function (all, before, value, after) {\n return before + ' style=\"' + value + '\"' + after;\n });\n return content;\n }\n function removeUnderlineAndFontInAnchor(editor, root) {\n editor.$('a', root).find('font,u').each(function (i, node) {\n editor.dom.remove(node, true);\n });\n }\n var setup$2 = function (editor) {\n if (global$2.webkit) {\n addPreProcessFilter(editor, removeWebKitStyles);\n }\n if (global$2.ie) {\n addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);\n addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);\n }\n };\n var Quirks = { setup: setup$2 };\n\n var stateChange = function (editor, clipboard, e) {\n var ctrl = e.control;\n ctrl.active(clipboard.pasteFormat.get() === 'text');\n editor.on('PastePlainTextToggle', function (e) {\n ctrl.active(e.state);\n });\n };\n var register$2 = function (editor, clipboard) {\n var postRender = curry(stateChange, editor, clipboard);\n editor.addButton('pastetext', {\n active: false,\n icon: 'pastetext',\n tooltip: 'Paste as text',\n cmd: 'mceTogglePlainTextPaste',\n onPostRender: postRender\n });\n editor.addMenuItem('pastetext', {\n text: 'Paste as text',\n selectable: true,\n active: clipboard.pasteFormat,\n cmd: 'mceTogglePlainTextPaste',\n onPostRender: postRender\n });\n };\n var Buttons = { register: register$2 };\n\n global$1.add('paste', function (editor) {\n if (DetectProPlugin.hasProPlugin(editor) === false) {\n var userIsInformedState = Cell(false);\n var draggingInternallyState = Cell(false);\n var pasteFormat = Cell(Settings.isPasteAsTextEnabled(editor) ? 'text' : 'html');\n var clipboard = Clipboard(editor, pasteFormat);\n var quirks = Quirks.setup(editor);\n Buttons.register(editor, clipboard);\n Commands.register(editor, clipboard, userIsInformedState);\n PrePostProcess.setup(editor);\n CutCopy.register(editor);\n DragDrop.setup(editor, clipboard, draggingInternallyState);\n return Api.get(clipboard, quirks);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","// Exports the \"directionality\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/directionality')\n// ES2015:\n// import 'tinymce/plugins/directionality'\nrequire('./plugin.js');","(function () {\nvar advlist = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var applyListFormat = function (editor, listName, styleValue) {\n var cmd = listName === 'UL' ? 'InsertUnorderedList' : 'InsertOrderedList';\n editor.execCommand(cmd, false, styleValue === false ? null : { 'list-style-type': styleValue });\n };\n var Actions = { applyListFormat: applyListFormat };\n\n var register = function (editor) {\n editor.addCommand('ApplyUnorderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'UL', value['list-style-type']);\n });\n editor.addCommand('ApplyOrderedListStyle', function (ui, value) {\n Actions.applyListFormat(editor, 'OL', value['list-style-type']);\n });\n };\n var Commands = { register: register };\n\n var getNumberStyles = function (editor) {\n var styles = editor.getParam('advlist_number_styles', 'default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var getBulletStyles = function (editor) {\n var styles = editor.getParam('advlist_bullet_styles', 'default,circle,disc,square');\n return styles ? styles.split(/[ ,]/) : [];\n };\n var Settings = {\n getNumberStyles: getNumberStyles,\n getBulletStyles: getBulletStyles\n };\n\n var isChildOfBody = function (editor, elm) {\n return editor.$.contains(editor.getBody(), elm);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isListNode = function (editor) {\n return function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName) && isChildOfBody(editor, node);\n };\n };\n var getSelectedStyleType = function (editor) {\n var listElm = editor.dom.getParent(editor.selection.getNode(), 'ol,ul');\n return editor.dom.getStyle(listElm, 'listStyleType') || '';\n };\n var ListUtils = {\n isTableCellNode: isTableCellNode,\n isListNode: isListNode,\n getSelectedStyleType: getSelectedStyleType\n };\n\n var styleValueToText = function (styleValue) {\n return styleValue.replace(/\\-/g, ' ').replace(/\\b\\w/g, function (chr) {\n return chr.toUpperCase();\n });\n };\n var toMenuItems = function (styles) {\n return global$1.map(styles, function (styleValue) {\n var text = styleValueToText(styleValue);\n var data = styleValue === 'default' ? '' : styleValue;\n return {\n text: text,\n data: data\n };\n });\n };\n var ListStyles = { toMenuItems: toMenuItems };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var listState = function (editor, listName) {\n return function (e) {\n var ctrl = e.control;\n editor.on('NodeChange', function (e) {\n var tableCellIndex = findIndex(e.parents, ListUtils.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$1.grep(parents, ListUtils.isListNode(editor));\n ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n });\n };\n };\n var updateSelection = function (editor) {\n return function (e) {\n var listStyleType = ListUtils.getSelectedStyleType(editor);\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.data === listStyleType);\n });\n };\n };\n var addSplitButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.addButton(id, {\n active: false,\n type: 'splitbutton',\n tooltip: tooltip,\n menu: ListStyles.toMenuItems(styles),\n onPostRender: listState(editor, nodeName),\n onshow: updateSelection(editor),\n onselect: function (e) {\n Actions.applyListFormat(editor, nodeName, e.control.settings.data);\n },\n onclick: function () {\n editor.execCommand(cmd);\n }\n });\n };\n var addButton = function (editor, id, tooltip, cmd, nodeName, styles) {\n editor.addButton(id, {\n active: false,\n type: 'button',\n tooltip: tooltip,\n onPostRender: listState(editor, nodeName),\n onclick: function () {\n editor.execCommand(cmd);\n }\n });\n };\n var addControl = function (editor, id, tooltip, cmd, nodeName, styles) {\n if (styles.length > 0) {\n addSplitButton(editor, id, tooltip, cmd, nodeName, styles);\n } else {\n addButton(editor, id, tooltip, cmd, nodeName);\n }\n };\n var register$1 = function (editor) {\n addControl(editor, 'numlist', 'Numbered list', 'InsertOrderedList', 'OL', Settings.getNumberStyles(editor));\n addControl(editor, 'bullist', 'Bullet list', 'InsertUnorderedList', 'UL', Settings.getBulletStyles(editor));\n };\n var Buttons = { register: register$1 };\n\n global.add('advlist', function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$1.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (hasPlugin(editor, 'lists')) {\n Buttons.register(editor);\n Commands.register(editor);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar autosave = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.LocalStorage');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var fireRestoreDraft = function (editor) {\n return editor.fire('RestoreDraft');\n };\n var fireStoreDraft = function (editor) {\n return editor.fire('StoreDraft');\n };\n var fireRemoveDraft = function (editor) {\n return editor.fire('RemoveDraft');\n };\n\n var parse = function (timeString, defaultTime) {\n var multiples = {\n s: 1000,\n m: 60000\n };\n var toParse = timeString || defaultTime;\n var parsedTime = /^(\\d+)([ms]?)$/.exec('' + toParse);\n return (parsedTime[2] ? multiples[parsedTime[2]] : 1) * parseInt(toParse, 10);\n };\n\n var shouldAskBeforeUnload = function (editor) {\n return editor.getParam('autosave_ask_before_unload', true);\n };\n var getAutoSavePrefix = function (editor) {\n var prefix = editor.getParam('autosave_prefix', 'tinymce-autosave-{path}{query}{hash}-{id}-');\n prefix = prefix.replace(/\\{path\\}/g, domGlobals.document.location.pathname);\n prefix = prefix.replace(/\\{query\\}/g, domGlobals.document.location.search);\n prefix = prefix.replace(/\\{hash\\}/g, domGlobals.document.location.hash);\n prefix = prefix.replace(/\\{id\\}/g, editor.id);\n return prefix;\n };\n var shouldRestoreWhenEmpty = function (editor) {\n return editor.getParam('autosave_restore_when_empty', false);\n };\n var getAutoSaveInterval = function (editor) {\n return parse(editor.settings.autosave_interval, '30s');\n };\n var getAutoSaveRetention = function (editor) {\n return parse(editor.settings.autosave_retention, '20m');\n };\n\n var isEmpty = function (editor, html) {\n var forcedRootBlockName = editor.settings.forced_root_block;\n html = global$2.trim(typeof html === 'undefined' ? editor.getBody().innerHTML : html);\n return html === '' || new RegExp('^<' + forcedRootBlockName + '[^>]*>((\\xA0| |[ \\t]|]*>)+?|)|
$', 'i').test(html);\n };\n var hasDraft = function (editor) {\n var time = parseInt(global$1.getItem(getAutoSavePrefix(editor) + 'time'), 10) || 0;\n if (new Date().getTime() - time > getAutoSaveRetention(editor)) {\n removeDraft(editor, false);\n return false;\n }\n return true;\n };\n var removeDraft = function (editor, fire) {\n var prefix = getAutoSavePrefix(editor);\n global$1.removeItem(prefix + 'draft');\n global$1.removeItem(prefix + 'time');\n if (fire !== false) {\n fireRemoveDraft(editor);\n }\n };\n var storeDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (!isEmpty(editor) && editor.isDirty()) {\n global$1.setItem(prefix + 'draft', editor.getContent({\n format: 'raw',\n no_events: true\n }));\n global$1.setItem(prefix + 'time', new Date().getTime().toString());\n fireStoreDraft(editor);\n }\n };\n var restoreDraft = function (editor) {\n var prefix = getAutoSavePrefix(editor);\n if (hasDraft(editor)) {\n editor.setContent(global$1.getItem(prefix + 'draft'), { format: 'raw' });\n fireRestoreDraft(editor);\n }\n };\n var startStoreDraft = function (editor, started) {\n var interval = getAutoSaveInterval(editor);\n if (!started.get()) {\n setInterval(function () {\n if (!editor.removed) {\n storeDraft(editor);\n }\n }, interval);\n started.set(true);\n }\n };\n var restoreLastDraft = function (editor) {\n editor.undoManager.transact(function () {\n restoreDraft(editor);\n removeDraft(editor);\n });\n editor.focus();\n };\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var get = function (editor) {\n return {\n hasDraft: curry(hasDraft, editor),\n storeDraft: curry(storeDraft, editor),\n restoreDraft: curry(restoreDraft, editor),\n removeDraft: curry(removeDraft, editor),\n isEmpty: curry(isEmpty, editor)\n };\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n global$3._beforeUnloadHandler = function () {\n var msg;\n global$2.each(global$3.get(), function (editor) {\n if (editor.plugins.autosave) {\n editor.plugins.autosave.storeDraft();\n }\n if (!msg && editor.isDirty() && shouldAskBeforeUnload(editor)) {\n msg = editor.translate('You have unsaved changes are you sure you want to navigate away?');\n }\n });\n return msg;\n };\n var setup = function (editor) {\n domGlobals.window.onbeforeunload = global$3._beforeUnloadHandler;\n };\n\n var postRender = function (editor, started) {\n return function (e) {\n var ctrl = e.control;\n ctrl.disabled(!hasDraft(editor));\n editor.on('StoreDraft RestoreDraft RemoveDraft', function () {\n ctrl.disabled(!hasDraft(editor));\n });\n startStoreDraft(editor, started);\n };\n };\n var register = function (editor, started) {\n editor.addButton('restoredraft', {\n title: 'Restore last draft',\n onclick: function () {\n restoreLastDraft(editor);\n },\n onPostRender: postRender(editor, started)\n });\n editor.addMenuItem('restoredraft', {\n text: 'Restore last draft',\n onclick: function () {\n restoreLastDraft(editor);\n },\n onPostRender: postRender(editor, started),\n context: 'file'\n });\n };\n\n global.add('autosave', function (editor) {\n var started = Cell(false);\n setup();\n register(editor, started);\n editor.on('init', function () {\n if (shouldRestoreWhenEmpty(editor) && editor.dom.isEmpty(editor.getBody())) {\n restoreDraft(editor);\n }\n });\n return get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// Exports the \"wordcount\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/wordcount')\n// ES2015:\n// import 'tinymce/plugins/wordcount'\nrequire('./plugin.js');","(function () {\nvar table = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$1 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has(element, 'style') && trim(get(element, 'style')) === '') {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$2(rogue);\n });\n };\n var remove$2 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$2(wrapper);\n };\n\n var dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access()[key(row, column)];\n return raw !== undefined ? Option.some(raw) : Option.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element());\n });\n return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all(), function (r) {\n return r.cells();\n });\n return filter(all, predicate);\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n each$1(house.access(), function (detail) {\n if (isSelected(detail)) {\n var startRow = detail.row();\n var endRow = startRow + detail.rowspan() - 1;\n var startCol = detail.column();\n var endCol = startCol + detail.colspan() - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\n return row.dom().childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\n each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$2 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n api.set(element, value);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var NBSP = '\\xA0';\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(NBSP) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return Element.fromTag('tr', doc.dom());\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.fromTag(name(prev.element()), docu.dom());\n var formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\n append(lastNode, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column();\n var rightEdge = detail.column() + detail.colspan() - 1;\n var topEdge = detail.row();\n var bottomEdge = detail.row() + detail.rowspan() - 1;\n return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\n };\n var isWithin = function (bounds, detail) {\n return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\n var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\n var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element();\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone$1 = function (element) {\n return Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var comparePosition = function (element, other) {\n return element.dom().compareDocumentPosition(other.dom());\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$1,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: Element.fromTag,\n clone: clone$1,\n text: Element.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n getText: get$2,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\n };\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.some([start]),\n start: start,\n finish: finish\n }));\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(startTable, start, finish),\n start: start,\n finish: finish\n }));\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n }));\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n }));\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Option.some(sels) : Option.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes().map(function (boxes) {\n return {\n boxes: constant(boxes),\n start: constant(identified.start()),\n finish: constant(identified.finish())\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\n };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom(), {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom().innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$1(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$1(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$3 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$4 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var platform = PlatformDetection$1.detect();\n var needManualCalc = function () {\n return platform.browser.isIE() || platform.browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$1(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$1(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$4(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$3(cell);\n }\n return normalizePixelSize(value, cell, get$3, setHeight);\n };\n var get$5 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has(cell, type) ? parseInt(get(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get(element, 'width'));\n }, function (width) {\n return Option.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$4(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$4(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$4(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$4(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$5(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left();\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top();\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = map(gridSection, function (row) {\n if (row.isNew()) {\n newRows.push(row.element());\n }\n var tr = row.element();\n empty(tr);\n each(row.cells(), function (cell) {\n if (cell.isNew()) {\n newCells.push(cell.element());\n }\n setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\n setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\n append(tr, cell.element());\n });\n return tr;\n });\n append$1(section, rows);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n each(grid, function (row) {\n switch (row.section()) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$6(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has$1 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Option.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Option.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element();\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid();\n var rowsArr = range(0, grid.rows());\n var cols = range(0, grid.columns());\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var Blocks = {\n columns: columns,\n rows: rows$1\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return blocker;\n };\n var row$1 = function (r, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return blocker;\n };\n var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$1(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$1(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section());\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells();\n var r = map(cells, f);\n return rowcells(r, gridRow.section());\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells()[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element();\n };\n var cellLength = function (gridRow) {\n return gridRow.cells().length;\n };\n var GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, result.rowspan(), result.colspan());\n return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\n } else {\n return [];\n }\n });\n return rowdetails(details, row.section());\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details());\n return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable();\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable();\n };\n var onCells = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.none();\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element(), cell.element());\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\n };\n\n var adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n var ColumnContext = __assign({}, adt);\n\n var neighbours$1 = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has(cell, type) && parseInt(get(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidth = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column(), cell.column() + cell.colspan(), widths);\n return {\n element: cell.element,\n width: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\n return {\n element: cell.element,\n height: constant(height),\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all(), function (row, i) {\n return {\n element: row.element,\n height: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$4(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;\n var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$2(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\n\n var defaultTableToolbar = [\n 'tableprops',\n 'tabledelete',\n '|',\n 'tableinsertrowbefore',\n 'tableinsertrowafter',\n 'tabledeleterow',\n '|',\n 'tableinsertcolbefore',\n 'tableinsertcolafter',\n 'tabledeletecol'\n ];\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var defaultAttributes = { border: '1' };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', defaultStyles, 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback');\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return objectResizing === 'table' || objectResizing;\n };\n var getToolbar = function (editor) {\n var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);\n if (toolbar === '' || toolbar === false) {\n return [];\n } else if (isString(toolbar)) {\n return toolbar.split(/[ ,]/);\n } else if (isArray(toolbar)) {\n return toolbar;\n } else {\n return [];\n }\n };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\n each(result.newRows(), function (row) {\n fireNewRow(editor, row.dom());\n });\n each(result.newCells(), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n return result.cursor().map(function (cell) {\n var rng = editor.dom.createRng();\n rng.setStart(cell.dom(), 0);\n rng.setEnd(cell.dom(), 0);\n return rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n function styleFieldHasFocus(e) {\n return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);\n }\n var syncAdvancedStyleFields = function (editor, evt) {\n if (styleFieldHasFocus(evt)) {\n updateAdvancedFields(editor, evt);\n } else {\n updateStyleField(editor, evt);\n }\n };\n var updateStyleField = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n css['border-style'] = data.borderStyle;\n css['border-color'] = data.borderColor;\n css['background-color'] = data.backgroundColor;\n css.width = data.width ? addSizeSuffix(data.width) : '';\n css.height = data.height ? addSizeSuffix(data.height) : '';\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n var updateAdvancedFields = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#borderStyle').value(css['border-style'] || '');\n rootControl.find('#borderColor').value(css['border-color'] || '');\n rootControl.find('#backgroundColor').value(css['background-color'] || '');\n rootControl.find('#width').value(css.width || '');\n rootControl.find('#height').value(css.height || '');\n };\n var extractAdvancedStyles = function (dom, elm) {\n var css = dom.parseStyle(dom.getAttrib(elm, 'style'));\n var data = {};\n if (css['border-style']) {\n data.borderStyle = css['border-style'];\n }\n if (css['border-color']) {\n data.borderColor = css['border-color'];\n }\n if (css['background-color']) {\n data.backgroundColor = css['background-color'];\n }\n data.style = dom.serializeStyle(css);\n return data;\n };\n var createStyleForm = function (editor) {\n var createColorPickAction = function () {\n var colorPickerCallback = getColorPickerCallback(editor);\n if (colorPickerCallback) {\n return function (evt) {\n return colorPickerCallback.call(editor, function (value) {\n evt.control.value(value).fire('change');\n }, evt.control.value());\n };\n }\n };\n return {\n title: 'Advanced',\n type: 'form',\n defaults: { onchange: curry(updateStyleField, editor) },\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: curry(updateAdvancedFields, editor)\n },\n {\n type: 'form',\n padding: 0,\n formItemDefaults: {\n layout: 'grid',\n alignH: [\n 'start',\n 'right'\n ]\n },\n defaults: { size: 7 },\n items: [\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n onselect: curry(updateStyleField, editor),\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n },\n {\n label: 'Border color',\n type: 'colorbox',\n name: 'borderColor',\n onaction: createColorPickAction()\n },\n {\n label: 'Background color',\n type: 'colorbox',\n name: 'backgroundColor',\n onaction: createColorPickAction()\n }\n ]\n }\n ]\n };\n };\n var Helpers = {\n createStyleForm: createStyleForm,\n buildListItems: buildListItems,\n updateStyleField: updateStyleField,\n extractAdvancedStyles: extractAdvancedStyles,\n updateAdvancedFields: updateAdvancedFields,\n syncAdvancedStyleFields: syncAdvancedStyleFields\n };\n\n var updateStyles = function (elm, cssText) {\n delete elm.dataset.mceStyle;\n elm.style.cssText += ';' + cssText;\n };\n var extractDataFromElement = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n type: elm.nodeName.toLowerCase(),\n style: '',\n align: '',\n valign: ''\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n global$1.each('top middle bottom'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'valign' + name)) {\n data.valign = name;\n }\n });\n if (hasAdvancedCellTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var onSubmitCellForm = function (editor, cells, evt) {\n var dom = editor.dom;\n var data;\n function setAttrib(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedCellTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(cells, function (cellElm) {\n setAttrib(cellElm, 'scope', data.scope);\n if (cells.length === 1) {\n setAttrib(cellElm, 'style', data.style);\n } else {\n updateStyles(cellElm, data.style);\n }\n setAttrib(cellElm, 'class', data.class);\n setStyle(cellElm, 'width', addSizeSuffix(data.width));\n setStyle(cellElm, 'height', addSizeSuffix(data.height));\n if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {\n cellElm = dom.rename(cellElm, data.type);\n }\n if (cells.length === 1) {\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n }\n if (data.align) {\n Styles$1.applyAlign(editor, cellElm, data.align);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, data, classListCtrl, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n if (cells.length > 1) {\n data = {\n width: '',\n height: '',\n scope: '',\n class: '',\n align: '',\n valign: '',\n style: '',\n type: cellElm.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement(editor, cellElm);\n }\n if (getCellClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getCellClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'td',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n var generalCellForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n layout: 'grid',\n columns: 2,\n labelGapCalc: false,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: [\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell type',\n name: 'type',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n label: 'Scope',\n name: 'scope',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n label: 'H Align',\n name: 'align',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'V Align',\n name: 'valign',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedCellTab(editor)) {\n editor.windowManager.open({\n title: 'Cell properties',\n bodyType: 'tabpanel',\n data: data,\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalCellForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n } else {\n editor.windowManager.open({\n title: 'Cell properties',\n data: data,\n body: generalCellForm,\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n }\n };\n var CellDialog = { open: open };\n\n var extractDataFromElement$1 = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n align: '',\n style: '',\n type: elm.parentNode.nodeName.toLowerCase()\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedRowTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n parentElm.appendChild(rowElm);\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\n };\n function onSubmitRowForm(editor, rows, oldData, evt) {\n var dom = editor.dom;\n function setAttrib(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedRowTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n var data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n setAttrib(rowElm, 'scope', data.scope);\n setAttrib(rowElm, 'style', data.style);\n setAttrib(rowElm, 'class', data.class);\n setStyle(rowElm, 'height', addSizeSuffix(data.height));\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n }\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm, classListCtrl, data;\n var rows = [];\n var generalRowForm;\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n if (rows.length > 1) {\n data = {\n height: '',\n scope: '',\n style: '',\n class: '',\n align: '',\n type: rowElm.parentNode.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement$1(editor, rowElm);\n }\n if (getRowClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getRowClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalRowForm = {\n type: 'form',\n columns: 2,\n padding: 0,\n defaults: { type: 'textbox' },\n items: [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n text: 'Header',\n maxWidth: null,\n values: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n text: 'None',\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height'\n },\n classListCtrl\n ]\n };\n if (hasAdvancedRowTab(editor)) {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalRowForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n } else {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n body: generalRowForm,\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n }\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$7 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$7(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$1(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n function styleTDTH(dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n dom.setStyle(elm, name, value);\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n }\n var extractDataFromElement$2 = function (editor, tableElm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),\n height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),\n cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),\n cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),\n border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),\n borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),\n caption: !!dom.select('caption', tableElm)[0],\n class: dom.getAttrib(tableElm, 'class')\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(tableElm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedTableTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));\n }\n return data;\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(data.cellspacing);\n global$1.extend(attrs, {\n 'data-mce-border-color': data.borderColor,\n 'data-mce-cell-padding': data.cellpadding,\n 'data-mce-border': data.border\n });\n } else {\n global$1.extend(attrs, {\n border: data.border,\n cellpadding: data.cellpadding,\n cellspacing: data.cellspacing\n });\n }\n if (shouldStyleWithCss(editor)) {\n if (tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addSizeSuffix(data.border),\n 'border-color': data.borderColor,\n 'padding': addSizeSuffix(data.cellpadding)\n });\n }\n }\n }\n if (data.style) {\n global$1.extend(styles, dom.parseStyle(data.style));\n } else {\n styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);\n }\n attrs.style = dom.serializeStyle(styles);\n dom.setAttribs(tableElm, attrs);\n };\n var onSubmitTableForm = function (editor, tableElm, evt) {\n var dom = editor.dom;\n var captionElm;\n var data;\n if (hasAdvancedTableTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n if (data.class === false) {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);\n }\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
' : '\\xA0';\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n Styles$1.unApplyAlign(editor, tableElm);\n if (data.align) {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, isProps) {\n var dom = editor.dom;\n var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;\n if (isProps === true) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = extractDataFromElement$2(editor, tableElm);\n }\n } else {\n colsCtrl = {\n label: 'Cols',\n name: 'cols'\n };\n rowsCtrl = {\n label: 'Rows',\n name: 'rows'\n };\n }\n if (getTableClassList(editor).length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalTableForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n labelGapCalc: false,\n padding: 0,\n layout: 'grid',\n columns: 2,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: hasAppearanceOptions(editor) ? [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell spacing',\n name: 'cellspacing'\n },\n {\n label: 'Cell padding',\n name: 'cellpadding'\n },\n {\n label: 'Border',\n name: 'border'\n },\n {\n label: 'Caption',\n name: 'caption',\n type: 'checkbox'\n }\n ] : [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n }\n ]\n },\n {\n label: 'Alignment',\n name: 'align',\n type: 'listbox',\n text: 'None',\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedTableTab(editor)) {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalTableForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n } else {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n body: generalTableForm,\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n }\n };\n var TableDialog = { open: open$2 };\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption, isRoot);\n table.filter(not(isRoot)).each(function (table) {\n var cursor = Element.fromText('');\n after(table, cursor);\n remove$2(table);\n var rng = editor.dom.createRng();\n rng.setStart(cursor.dom(), 0);\n rng.setEnd(cursor.dom(), 0);\n editor.selection.setRng(rng);\n });\n });\n };\n var getSelectionStartFromSelector = function (selector) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCaption = getSelectionStartFromSelector('caption');\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell().bind(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n actOnSelection(actions.deleteRow);\n },\n mceTableCopyRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor),\n mceTableProps: curry(TableDialog.open, editor, true),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function (ui, val) {\n func(val);\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, fields);\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = struct.apply(null, args);\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create$1 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n handler(evt);\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge$3 = baseMerge(shallow$1);\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$2(div, Styles$2.resolve('blocker'));\n add$2(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(event.x(), event.y()));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left(), info.top());\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\n });\n\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n }\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = Events.create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta(), event.yDelta(), t);\n });\n });\n var assign = function (t) {\n target = Option.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var isContentEditableTrue = function (elm) {\n return get(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get(target, 'data-initial-' + dir), 10);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));\n add$2(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = Events.create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$2 };\n\n var createContainer = function () {\n var container = Element.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$8 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$8,\n remove: remove$6\n };\n\n var ResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW, startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table().dom();\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table();\n var rawTable = table.dom();\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n startW = e.width;\n startRawW = getRawWidth(targetElm);\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\n }\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\n });\n };\n var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$3 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$2(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Option.some(rect) : Option.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom());\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom().createRange();\n r.selectNode(target.dom());\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom().createRange();\n cursorRange.selectNode(node.dom());\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom().getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Option.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return Element.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return Selection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom(), soffset);\n selection.extend(finish.dom(), foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n var selection = win.getSelection();\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = Selection.getWin(selection).dom();\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$9 = function (win) {\n return getExact(win).map(function (range) {\n return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 0) {\n selectRange(container, boxes, cellSel.start(), cellSel.finish());\n return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clear(container);\n annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\n return newSels.boxes();\n };\n return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.some(sidestep)\n }\n ];\n var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[0]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item())) {\n return Option.none();\n } else {\n return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\n }\n });\n };\n var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$2 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$2, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$2, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$2, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$2, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$2 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\n\n var adt$5 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent(), info.index());\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() + amount,\n right: caret.right(),\n bottom: caret.bottom() + amount\n });\n };\n var moveUp = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\n left: caret.left() + xDelta,\n top: caret.top() + yDelta,\n right: caret.right() + xDelta,\n bottom: caret.bottom() + yDelta\n });\n };\n var getTop$1 = function (caret) {\n return caret.top();\n };\n var getBottom = function (caret) {\n return caret.bottom();\n };\n var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n };\n var getElemBox = function (bridge, element) {\n return Option.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Option.some(caret);\n }\n if (isAtTable(bridge, caret.left(), movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\n return guess.start().fold(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var platform$1 = PlatformDetection$1.detect();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.some(point(sel.finish(), sel.foffset()));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\n return BrTags.process(analysis);\n });\n });\n };\n var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$1.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n var TableKeys = { handle: handle$2 };\n\n var detection = PlatformDetection$1.detect();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range();\n return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clear(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n }\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n var KeyDirection = {\n down: down,\n up: up\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = PlatformDetection$1.detect().browser.isSafari();\n var get$a = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom().getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$9(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$a(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Option.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$2(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected());\n var removeSelectionClasses = removeClasses([\n ephemera.selected(),\n ephemera.lastSelected(),\n ephemera.firstSelected()\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$2(start, ephemera.firstSelected());\n add$2(finish, ephemera.lastSelected());\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected());\n remove(element, ephemera.firstSelected());\n remove(element, ephemera.lastSelected());\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected(), '1');\n };\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected(), '1');\n set(finish, ephemera.lastSelected(), '1');\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var hasInternalTarget = function (e) {\n return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var annotations = SelectionAnnotation.byAttr(Ephemera);\n editor.on('init', function (e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = Selection.relative(ns.start(), ns.finish());\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = wrapEvent(event);\n if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = wrapEvent(event);\n lazyResize().each(function (resize) {\n resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n resize.showBars();\n });\n };\n var isMouseEvent = function (event) {\n return event.hasOwnProperty('x') && event.hasOwnProperty('y');\n };\n var wrapEvent = function (event) {\n var target = Element.fromDom(event.target);\n var stop = function () {\n event.stopPropagation();\n };\n var prevent = function () {\n event.preventDefault();\n };\n var kill = compose(prevent, stop);\n return {\n target: constant(target),\n x: constant(isMouseEvent(event) ? event.x : null),\n y: constant(isMouseEvent(event) ? event.y : null),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(event)\n };\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(wrapEvent(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(wrapEvent(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(wrapEvent(e));\n }\n };\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('nodechange', syncSelection);\n handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var each$4 = global$1.each;\n var addButtons = function (editor) {\n var menuItems = [];\n each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {\n if (name === '|') {\n menuItems.push({ text: '-' });\n } else {\n menuItems.push(editor.menuItems[name]);\n }\n });\n editor.addButton('table', {\n type: 'menubutton',\n title: 'Table',\n menu: menuItems\n });\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n editor.addButton('tableprops', {\n title: 'Table properties',\n onclick: cmd('mceTableProps'),\n icon: 'table'\n });\n editor.addButton('tabledelete', {\n title: 'Delete table',\n onclick: cmd('mceTableDelete')\n });\n editor.addButton('tablecellprops', {\n title: 'Cell properties',\n onclick: cmd('mceTableCellProps')\n });\n editor.addButton('tablemergecells', {\n title: 'Merge cells',\n onclick: cmd('mceTableMergeCells')\n });\n editor.addButton('tablesplitcells', {\n title: 'Split cell',\n onclick: cmd('mceTableSplitCells')\n });\n editor.addButton('tableinsertrowbefore', {\n title: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore')\n });\n editor.addButton('tableinsertrowafter', {\n title: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter')\n });\n editor.addButton('tabledeleterow', {\n title: 'Delete row',\n onclick: cmd('mceTableDeleteRow')\n });\n editor.addButton('tablerowprops', {\n title: 'Row properties',\n onclick: cmd('mceTableRowProps')\n });\n editor.addButton('tablecutrow', {\n title: 'Cut row',\n onclick: cmd('mceTableCutRow')\n });\n editor.addButton('tablecopyrow', {\n title: 'Copy row',\n onclick: cmd('mceTableCopyRow')\n });\n editor.addButton('tablepasterowbefore', {\n title: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore')\n });\n editor.addButton('tablepasterowafter', {\n title: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter')\n });\n editor.addButton('tableinsertcolbefore', {\n title: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore')\n });\n editor.addButton('tableinsertcolafter', {\n title: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter')\n });\n editor.addButton('tabledeletecol', {\n title: 'Delete column',\n onclick: cmd('mceTableDeleteCol')\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);\n return selectorMatched;\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.addContextToolbar(isTable, toolbar.join(' '));\n }\n };\n var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selections) {\n var targets = Option.none();\n var tableCtrls = [];\n var cellCtrls = [];\n var mergeCtrls = [];\n var unmergeCtrls = [];\n var noTargetDisable = function (ctrl) {\n ctrl.disabled(true);\n };\n var ctrlEnable = function (ctrl) {\n ctrl.disabled(false);\n };\n var pushTable = function () {\n var self = this;\n tableCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushCell = function () {\n var self = this;\n cellCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushMerge = function () {\n var self = this;\n mergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.mergable().isNone());\n });\n };\n var pushUnmerge = function () {\n var self = this;\n unmergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.unmergable().isNone());\n });\n };\n var setDisabledCtrls = function () {\n targets.fold(function () {\n each(tableCtrls, noTargetDisable);\n each(cellCtrls, noTargetDisable);\n each(mergeCtrls, noTargetDisable);\n each(unmergeCtrls, noTargetDisable);\n }, function (targets) {\n each(tableCtrls, ctrlEnable);\n each(cellCtrls, ctrlEnable);\n each(mergeCtrls, function (mergeCtrl) {\n mergeCtrl.disabled(targets.mergable().isNone());\n });\n each(unmergeCtrls, function (unmergeCtrl) {\n unmergeCtrl.disabled(targets.unmergable().isNone());\n });\n });\n };\n editor.on('init', function () {\n editor.on('nodechange', function (e) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n targets = cellOpt.bind(function (cellDom) {\n var cell = Element.fromDom(cellDom);\n var table = TableLookup.table(cell);\n return table.map(function (table) {\n return TableTargets.forMenu(selections, table, cell);\n });\n });\n setDisabledCtrls();\n });\n });\n var generateTableGrid = function () {\n var html = '';\n html = '';\n for (var y = 0; y < 10; y++) {\n html += '';\n for (var x = 0; x < 10; x++) {\n html += '';\n }\n html += '';\n }\n html += '
';\n html += '
1 x 1
';\n return html;\n };\n var selectGrid = function (editor, tx, ty, control) {\n var table = control.getEl().getElementsByTagName('table')[0];\n var x, y, focusCell, cell, active;\n var rtl = control.isRtl() || control.parent().rel === 'tl-tr';\n table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);\n if (rtl) {\n tx = 9 - tx;\n }\n for (y = 0; y < 10; y++) {\n for (x = 0; x < 10; x++) {\n cell = table.rows[y].childNodes[x].firstChild;\n active = (rtl ? x >= tx : x <= tx) && y <= ty;\n editor.dom.toggleClass(cell, 'mce-active', active);\n if (active) {\n focusCell = cell;\n }\n }\n }\n return focusCell.parentNode;\n };\n var insertTable = hasTableGrid(editor) === false ? {\n text: 'Table',\n icon: 'table',\n context: 'table',\n onclick: cmd('mceInsertTable')\n } : {\n text: 'Table',\n icon: 'table',\n context: 'table',\n ariaHideMenu: true,\n onclick: function (e) {\n if (e.aria) {\n this.parent().hideAll();\n e.stopImmediatePropagation();\n editor.execCommand('mceInsertTable');\n }\n },\n onshow: function () {\n selectGrid(editor, 0, 0, this.menu.items()[0]);\n },\n onhide: function () {\n var elements = this.menu.items()[0].getEl().getElementsByTagName('a');\n editor.dom.removeClass(elements, 'mce-active');\n editor.dom.addClass(elements[0], 'mce-active');\n },\n menu: [{\n type: 'container',\n html: generateTableGrid(),\n onPostRender: function () {\n this.lastX = this.lastY = 0;\n },\n onmousemove: function (e) {\n var target = e.target;\n var x, y;\n if (target.tagName.toUpperCase() === 'A') {\n x = parseInt(target.getAttribute('data-mce-x'), 10);\n y = parseInt(target.getAttribute('data-mce-y'), 10);\n if (this.isRtl() || this.parent().rel === 'tl-tr') {\n x = 9 - x;\n }\n if (x !== this.lastX || y !== this.lastY) {\n selectGrid(editor, x, y, e.control);\n this.lastX = x;\n this.lastY = y;\n }\n }\n },\n onclick: function (e) {\n var self = this;\n if (e.target.tagName.toUpperCase() === 'A') {\n e.preventDefault();\n e.stopPropagation();\n self.parent().cancel();\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, self.lastX + 1, self.lastY + 1);\n });\n editor.addVisual();\n }\n }\n }]\n };\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n var tableProperties = {\n text: 'Table properties',\n context: 'table',\n onPostRender: pushTable,\n onclick: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n context: 'table',\n onPostRender: pushTable,\n cmd: 'mceTableDelete'\n };\n var row = {\n text: 'Row',\n context: 'table',\n menu: [\n {\n text: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete row',\n onclick: cmd('mceTableDeleteRow'),\n onPostRender: pushCell\n },\n {\n text: 'Row properties',\n onclick: cmd('mceTableRowProps'),\n onPostRender: pushCell\n },\n { text: '-' },\n {\n text: 'Cut row',\n onclick: cmd('mceTableCutRow'),\n onPostRender: pushCell\n },\n {\n text: 'Copy row',\n onclick: cmd('mceTableCopyRow'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter'),\n onPostRender: pushCell\n }\n ]\n };\n var column = {\n text: 'Column',\n context: 'table',\n menu: [\n {\n text: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete column',\n onclick: cmd('mceTableDeleteCol'),\n onPostRender: pushCell\n }\n ]\n };\n var cell = {\n separator: 'before',\n text: 'Cell',\n context: 'table',\n menu: [\n {\n text: 'Cell properties',\n onclick: cmd('mceTableCellProps'),\n onPostRender: pushCell\n },\n {\n text: 'Merge cells',\n onclick: cmd('mceTableMergeCells'),\n onPostRender: pushMerge\n },\n {\n text: 'Split cell',\n onclick: cmd('mceTableSplitCells'),\n onPostRender: pushUnmerge\n }\n ]\n };\n editor.addMenuItem('inserttable', insertTable);\n editor.addMenuItem('tableprops', tableProperties);\n editor.addMenuItem('deletetable', deleteTable);\n editor.addMenuItem('row', row);\n editor.addMenuItem('column', column);\n editor.addMenuItem('cell', cell);\n };\n var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n }\n };\n };\n\n function Plugin(editor) {\n var resizeHandler = ResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var selections = Selections(editor);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selections);\n Buttons.addButtons(editor);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows);\n }\n global.add('table', Plugin);\n function Plugin$1 () {\n }\n\n return Plugin$1;\n\n}(window));\n})();\n","// Exports the \"linktools\" plugin for usage with module loaders\r\n// Usage:\r\n// CommonJS:\r\n// require('tinymce/plugins/linktools')\r\n// ES2015:\r\n// import 'tinymce/plugins/linktools'\r\nrequire('./plugin.js');\r\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","(function () {\nvar insertdatetime = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var getDateFormat = function (editor) {\n return editor.getParam('insertdatetime_dateformat', editor.translate('%Y-%m-%d'));\n };\n var getTimeFormat = function (editor) {\n return editor.getParam('insertdatetime_timeformat', editor.translate('%H:%M:%S'));\n };\n var getFormats = function (editor) {\n return editor.getParam('insertdatetime_formats', [\n '%H:%M:%S',\n '%Y-%m-%d',\n '%I:%M:%S %p',\n '%D'\n ]);\n };\n var getDefaultDateTime = function (editor) {\n var formats = getFormats(editor);\n return formats.length > 0 ? formats[0] : getTimeFormat(editor);\n };\n var shouldInsertTimeElement = function (editor) {\n return editor.getParam('insertdatetime_element', false);\n };\n var Settings = {\n getDateFormat: getDateFormat,\n getTimeFormat: getTimeFormat,\n getFormats: getFormats,\n getDefaultDateTime: getDefaultDateTime,\n shouldInsertTimeElement: shouldInsertTimeElement\n };\n\n var daysShort = 'Sun Mon Tue Wed Thu Fri Sat Sun'.split(' ');\n var daysLong = 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday'.split(' ');\n var monthsShort = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ');\n var monthsLong = 'January February March April May June July August September October November December'.split(' ');\n var addZeros = function (value, len) {\n value = '' + value;\n if (value.length < len) {\n for (var i = 0; i < len - value.length; i++) {\n value = '0' + value;\n }\n }\n return value;\n };\n var getDateTime = function (editor, fmt, date) {\n date = date || new Date();\n fmt = fmt.replace('%D', '%m/%d/%Y');\n fmt = fmt.replace('%r', '%I:%M:%S %p');\n fmt = fmt.replace('%Y', '' + date.getFullYear());\n fmt = fmt.replace('%y', '' + date.getYear());\n fmt = fmt.replace('%m', addZeros(date.getMonth() + 1, 2));\n fmt = fmt.replace('%d', addZeros(date.getDate(), 2));\n fmt = fmt.replace('%H', '' + addZeros(date.getHours(), 2));\n fmt = fmt.replace('%M', '' + addZeros(date.getMinutes(), 2));\n fmt = fmt.replace('%S', '' + addZeros(date.getSeconds(), 2));\n fmt = fmt.replace('%I', '' + ((date.getHours() + 11) % 12 + 1));\n fmt = fmt.replace('%p', '' + (date.getHours() < 12 ? 'AM' : 'PM'));\n fmt = fmt.replace('%B', '' + editor.translate(monthsLong[date.getMonth()]));\n fmt = fmt.replace('%b', '' + editor.translate(monthsShort[date.getMonth()]));\n fmt = fmt.replace('%A', '' + editor.translate(daysLong[date.getDay()]));\n fmt = fmt.replace('%a', '' + editor.translate(daysShort[date.getDay()]));\n fmt = fmt.replace('%%', '%');\n return fmt;\n };\n var updateElement = function (editor, timeElm, computerTime, userTime) {\n var newTimeElm = editor.dom.create('time', { datetime: computerTime }, userTime);\n timeElm.parentNode.insertBefore(newTimeElm, timeElm);\n editor.dom.remove(timeElm);\n editor.selection.select(newTimeElm, true);\n editor.selection.collapse(false);\n };\n var insertDateTime = function (editor, format) {\n if (Settings.shouldInsertTimeElement(editor)) {\n var userTime = getDateTime(editor, format);\n var computerTime = void 0;\n if (/%[HMSIp]/.test(format)) {\n computerTime = getDateTime(editor, '%Y-%m-%dT%H:%M');\n } else {\n computerTime = getDateTime(editor, '%Y-%m-%d');\n }\n var timeElm = editor.dom.getParent(editor.selection.getStart(), 'time');\n if (timeElm) {\n updateElement(editor, timeElm, computerTime, userTime);\n } else {\n editor.insertContent('');\n }\n } else {\n editor.insertContent(getDateTime(editor, format));\n }\n };\n var Actions = {\n insertDateTime: insertDateTime,\n getDateTime: getDateTime\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertDate', function () {\n Actions.insertDateTime(editor, Settings.getDateFormat(editor));\n });\n editor.addCommand('mceInsertTime', function () {\n Actions.insertDateTime(editor, Settings.getTimeFormat(editor));\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var createMenuItems = function (editor, lastFormatState) {\n var formats = Settings.getFormats(editor);\n return global$1.map(formats, function (fmt) {\n return {\n text: Actions.getDateTime(editor, fmt),\n onclick: function () {\n lastFormatState.set(fmt);\n Actions.insertDateTime(editor, fmt);\n }\n };\n });\n };\n var register$1 = function (editor, lastFormatState) {\n var menuItems = createMenuItems(editor, lastFormatState);\n editor.addButton('insertdatetime', {\n type: 'splitbutton',\n title: 'Insert date/time',\n menu: menuItems,\n onclick: function () {\n var lastFormat = lastFormatState.get();\n Actions.insertDateTime(editor, lastFormat ? lastFormat : Settings.getDefaultDateTime(editor));\n }\n });\n editor.addMenuItem('insertdatetime', {\n icon: 'date',\n text: 'Date/time',\n menu: menuItems,\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('insertdatetime', function (editor) {\n var lastFormatState = Cell(null);\n Commands.register(editor);\n Buttons.register(editor, lastFormatState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","(function () {\nvar autoresize = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var getAutoResizeMinHeight = function (editor) {\n return parseInt(editor.getParam('autoresize_min_height', editor.getElement().offsetHeight), 10);\n };\n var getAutoResizeMaxHeight = function (editor) {\n return parseInt(editor.getParam('autoresize_max_height', 0), 10);\n };\n var getAutoResizeOverflowPadding = function (editor) {\n return editor.getParam('autoresize_overflow_padding', 1);\n };\n var getAutoResizeBottomMargin = function (editor) {\n return editor.getParam('autoresize_bottom_margin', 50);\n };\n var shouldAutoResizeOnInit = function (editor) {\n return editor.getParam('autoresize_on_init', true);\n };\n var Settings = {\n getAutoResizeMinHeight: getAutoResizeMinHeight,\n getAutoResizeMaxHeight: getAutoResizeMaxHeight,\n getAutoResizeOverflowPadding: getAutoResizeOverflowPadding,\n getAutoResizeBottomMargin: getAutoResizeBottomMargin,\n shouldAutoResizeOnInit: shouldAutoResizeOnInit\n };\n\n var isFullscreen = function (editor) {\n return editor.plugins.fullscreen && editor.plugins.fullscreen.isFullscreen();\n };\n var wait = function (editor, oldSize, times, interval, callback) {\n global$2.setEditorTimeout(editor, function () {\n resize(editor, oldSize);\n if (times--) {\n wait(editor, oldSize, times, interval, callback);\n } else if (callback) {\n callback();\n }\n }, interval);\n };\n var toggleScrolling = function (editor, state) {\n var body = editor.getBody();\n if (body) {\n body.style.overflowY = state ? '' : 'hidden';\n if (!state) {\n body.scrollTop = 0;\n }\n }\n };\n var resize = function (editor, oldSize) {\n var deltaSize, doc, body, resizeHeight, myHeight;\n var marginTop, marginBottom, paddingTop, paddingBottom, borderTop, borderBottom;\n var dom = editor.dom;\n doc = editor.getDoc();\n if (!doc) {\n return;\n }\n if (isFullscreen(editor)) {\n toggleScrolling(editor, true);\n return;\n }\n body = doc.body;\n resizeHeight = Settings.getAutoResizeMinHeight(editor);\n marginTop = dom.getStyle(body, 'margin-top', true);\n marginBottom = dom.getStyle(body, 'margin-bottom', true);\n paddingTop = dom.getStyle(body, 'padding-top', true);\n paddingBottom = dom.getStyle(body, 'padding-bottom', true);\n borderTop = dom.getStyle(body, 'border-top-width', true);\n borderBottom = dom.getStyle(body, 'border-bottom-width', true);\n myHeight = body.offsetHeight + parseInt(marginTop, 10) + parseInt(marginBottom, 10) + parseInt(paddingTop, 10) + parseInt(paddingBottom, 10) + parseInt(borderTop, 10) + parseInt(borderBottom, 10);\n if (isNaN(myHeight) || myHeight <= 0) {\n myHeight = global$1.ie ? body.scrollHeight : global$1.webkit && body.clientHeight === 0 ? 0 : body.offsetHeight;\n }\n if (myHeight > Settings.getAutoResizeMinHeight(editor)) {\n resizeHeight = myHeight;\n }\n var maxHeight = Settings.getAutoResizeMaxHeight(editor);\n if (maxHeight && myHeight > maxHeight) {\n resizeHeight = maxHeight;\n toggleScrolling(editor, true);\n } else {\n toggleScrolling(editor, false);\n }\n if (resizeHeight !== oldSize.get()) {\n deltaSize = resizeHeight - oldSize.get();\n dom.setStyle(editor.iframeElement, 'height', resizeHeight + 'px');\n oldSize.set(resizeHeight);\n if (global$1.webkit && deltaSize < 0) {\n resize(editor, oldSize);\n }\n }\n };\n var setup = function (editor, oldSize) {\n editor.on('init', function () {\n var overflowPadding, bottomMargin;\n var dom = editor.dom;\n overflowPadding = Settings.getAutoResizeOverflowPadding(editor);\n bottomMargin = Settings.getAutoResizeBottomMargin(editor);\n if (overflowPadding !== false) {\n dom.setStyles(editor.getBody(), {\n paddingLeft: overflowPadding,\n paddingRight: overflowPadding\n });\n }\n if (bottomMargin !== false) {\n dom.setStyles(editor.getBody(), { paddingBottom: bottomMargin });\n }\n });\n editor.on('nodechange setcontent keyup FullscreenStateChanged', function (e) {\n resize(editor, oldSize);\n });\n if (Settings.shouldAutoResizeOnInit(editor)) {\n editor.on('init', function () {\n wait(editor, oldSize, 20, 100, function () {\n wait(editor, oldSize, 5, 1000);\n });\n });\n }\n };\n var Resize = {\n setup: setup,\n resize: resize\n };\n\n var register = function (editor, oldSize) {\n editor.addCommand('mceAutoResize', function () {\n Resize.resize(editor, oldSize);\n });\n };\n var Commands = { register: register };\n\n global.add('autoresize', function (editor) {\n if (!editor.inline) {\n var oldSize = Cell(0);\n Commands.register(editor, oldSize);\n Resize.setup(editor, oldSize);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","/* global tinymce:true */\r\n\r\n/* eslint-disable */\r\n\r\n(function(tinymce)\r\n{\r\n \"use strict\";\r\n var PluginManager = tinymce.PluginManager;\r\n\r\n function Plugin(editor)\r\n {\r\n function isTable()\r\n {\r\n return editor.dom.getParent(editor.selection.getStart(), 'table');\r\n }\r\n\r\n function addButtons()\r\n {\r\n editor.addButton('tabletools_props', {\r\n title: 'Table properties',\r\n icon: 'table',\r\n onclick: editor.menuItems.tableprops.onclick\r\n });\r\n editor.addButton('tabletools_delete', {\r\n title: 'Delete table',\r\n icon: 'remove',\r\n cmd: 'mceTableDelete'\r\n });\r\n editor.addButton(\"tabletools_cell\", {\r\n type: \"menubutton\",\r\n title: \"Cell\",\r\n icon: 'template',\r\n menu: editor.menuItems.cell.menu\r\n });\r\n editor.addButton(\"tabletools_row\", {\r\n type: \"menubutton\",\r\n title: \"Row\",\r\n icon: 'pagebreak',\r\n menu: editor.menuItems.row.menu\r\n });\r\n editor.addButton(\"tabletools_column\", {\r\n type: \"menubutton\",\r\n title: \"Column\",\r\n icon: 'pagebreak fa-rotate-90',\r\n menu: editor.menuItems.column.menu\r\n });\r\n editor.addButton(\"tabletools_insert\", {\r\n type: \"menubutton\",\r\n title: \"Insert table\",\r\n icon: 'table',\r\n ariaHideMenu: true,\r\n onclick: editor.menuItems.inserttable.onclick,\r\n onshow: editor.menuItems.inserttable.onshow,\r\n onhide: editor.menuItems.inserttable.onhide,\r\n menu: editor.menuItems.inserttable.menu\r\n });\r\n }\r\n\r\n function addToolbars()\r\n {\r\n editor.addContextToolbar(\r\n isTable,\r\n \"tabletools_props tabletools_delete | tabletools_cell tabletools_row tabletools_column\"\r\n );\r\n }\r\n\r\n addButtons();\r\n addToolbars();\r\n }\r\n\r\n PluginManager.add('tabletools', Plugin, ['table']);\r\n \r\n})(tinymce);\r\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=style&index=0&lang=css&\"","// Exports the \"paste\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/paste')\n// ES2015:\n// import 'tinymce/plugins/paste'\nrequire('./plugin.js');","(function () {\nvar link = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var assumeExternalTargets = function (editorSettings) {\n return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;\n };\n var hasContextToolbar = function (editorSettings) {\n return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;\n };\n var getLinkList = function (editorSettings) {\n return editorSettings.link_list;\n };\n var hasDefaultLinkTarget = function (editorSettings) {\n return typeof editorSettings.default_link_target === 'string';\n };\n var getDefaultLinkTarget = function (editorSettings) {\n return editorSettings.default_link_target;\n };\n var getTargetList = function (editorSettings) {\n return editorSettings.target_list;\n };\n var setTargetList = function (editor, list) {\n editor.settings.target_list = list;\n };\n var shouldShowTargetList = function (editorSettings) {\n return getTargetList(editorSettings) !== false;\n };\n var getRelList = function (editorSettings) {\n return editorSettings.rel_list;\n };\n var hasRelList = function (editorSettings) {\n return getRelList(editorSettings) !== undefined;\n };\n var getLinkClassList = function (editorSettings) {\n return editorSettings.link_class_list;\n };\n var hasLinkClassList = function (editorSettings) {\n return getLinkClassList(editorSettings) !== undefined;\n };\n var shouldShowLinkTitle = function (editorSettings) {\n return editorSettings.link_title !== false;\n };\n var allowUnsafeLinkTarget = function (editorSettings) {\n return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;\n };\n var Settings = {\n assumeExternalTargets: assumeExternalTargets,\n hasContextToolbar: hasContextToolbar,\n getLinkList: getLinkList,\n hasDefaultLinkTarget: hasDefaultLinkTarget,\n getDefaultLinkTarget: getDefaultLinkTarget,\n getTargetList: getTargetList,\n setTargetList: setTargetList,\n shouldShowTargetList: shouldShowTargetList,\n getRelList: getRelList,\n hasRelList: hasRelList,\n getLinkClassList: getLinkClassList,\n hasLinkClassList: hasLinkClassList,\n shouldShowLinkTitle: shouldShowLinkTitle,\n allowUnsafeLinkTarget: allowUnsafeLinkTarget\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var appendClickRemove = function (link, evt) {\n domGlobals.document.body.appendChild(link);\n link.dispatchEvent(evt);\n domGlobals.document.body.removeChild(link);\n };\n var open = function (url) {\n if (!global$3.ie || global$3.ie > 10) {\n var link = domGlobals.document.createElement('a');\n link.target = '_blank';\n link.href = url;\n link.rel = 'noreferrer noopener';\n var evt = domGlobals.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, domGlobals.window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n appendClickRemove(link, evt);\n } else {\n var win = domGlobals.window.open('', '_blank');\n if (win) {\n win.opener = null;\n var doc = win.document;\n doc.open();\n doc.write('');\n doc.close();\n }\n }\n };\n var OpenUrl = { open: open };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var toggleTargetRules = function (rel, isUnsafe) {\n var rules = ['noopener'];\n var newRel = rel ? rel.split(/\\s+/) : [];\n var toString = function (rel) {\n return global$4.trim(rel.sort().join(' '));\n };\n var addTargetRules = function (rel) {\n rel = removeTargetRules(rel);\n return rel.length ? rel.concat(rules) : rules;\n };\n var removeTargetRules = function (rel) {\n return rel.filter(function (val) {\n return global$4.inArray(rules, val) === -1;\n });\n };\n newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);\n return newRel.length ? toString(newRel) : null;\n };\n var trimCaretContainers = function (text) {\n return text.replace(/\\uFEFF/g, '');\n };\n var getAnchorElement = function (editor, selectedElm) {\n selectedElm = selectedElm || editor.selection.getNode();\n if (isImageFigure(selectedElm)) {\n return editor.dom.select('a[href]', selectedElm)[0];\n } else {\n return editor.dom.getParent(selectedElm, 'a[href]');\n }\n };\n var getAnchorText = function (selection, anchorElm) {\n var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });\n return trimCaretContainers(text);\n };\n var isLink = function (elm) {\n return elm && elm.nodeName === 'A' && elm.href;\n };\n var hasLinks = function (elements) {\n return global$4.grep(elements, isLink).length > 0;\n };\n var isOnlyTextSelected = function (html) {\n if (/]+>[^<]+<\\/a>$/.test(html) || html.indexOf('href=') === -1)) {\n return false;\n }\n return true;\n };\n var isImageFigure = function (node) {\n return node && node.nodeName === 'FIGURE' && /\\bimage\\b/i.test(node.className);\n };\n var link = function (editor, attachState) {\n return function (data) {\n editor.undoManager.transact(function () {\n var selectedElm = editor.selection.getNode();\n var anchorElm = getAnchorElement(editor, selectedElm);\n var linkAttrs = {\n href: data.href,\n target: data.target ? data.target : null,\n rel: data.rel ? data.rel : null,\n class: data.class ? data.class : null,\n title: data.title ? data.title : null\n };\n if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {\n linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');\n }\n if (data.href === attachState.href) {\n attachState.attach();\n attachState = {};\n }\n if (anchorElm) {\n editor.focus();\n if (data.hasOwnProperty('text')) {\n if ('innerText' in anchorElm) {\n anchorElm.innerText = data.text;\n } else {\n anchorElm.textContent = data.text;\n }\n }\n editor.dom.setAttribs(anchorElm, linkAttrs);\n editor.selection.select(anchorElm);\n editor.undoManager.add();\n } else {\n if (isImageFigure(selectedElm)) {\n linkImageFigure(editor, selectedElm, linkAttrs);\n } else if (data.hasOwnProperty('text')) {\n editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));\n } else {\n editor.execCommand('mceInsertLink', false, linkAttrs);\n }\n }\n });\n };\n };\n var unlink = function (editor) {\n return function () {\n editor.undoManager.transact(function () {\n var node = editor.selection.getNode();\n if (isImageFigure(node)) {\n unlinkImageFigure(editor, node);\n } else {\n editor.execCommand('unlink');\n }\n });\n };\n };\n var unlinkImageFigure = function (editor, fig) {\n var a, img;\n img = editor.dom.select('img', fig)[0];\n if (img) {\n a = editor.dom.getParents(img, 'a[href]', fig)[0];\n if (a) {\n a.parentNode.insertBefore(img, a);\n editor.dom.remove(a);\n }\n }\n };\n var linkImageFigure = function (editor, fig, attrs) {\n var a, img;\n img = editor.dom.select('img', fig)[0];\n if (img) {\n a = editor.dom.create('a', attrs);\n img.parentNode.insertBefore(a, img);\n a.appendChild(img);\n }\n };\n var Utils = {\n link: link,\n unlink: unlink,\n isLink: isLink,\n hasLinks: hasLinks,\n isOnlyTextSelected: isOnlyTextSelected,\n getAnchorElement: getAnchorElement,\n getAnchorText: getAnchorText,\n toggleTargetRules: toggleTargetRules\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var attachState = {};\n var createLinkList = function (editor, callback) {\n var linkList = Settings.getLinkList(editor.settings);\n if (typeof linkList === 'string') {\n global$6.send({\n url: linkList,\n success: function (text) {\n callback(editor, JSON.parse(text));\n }\n });\n } else if (typeof linkList === 'function') {\n linkList(function (list) {\n callback(editor, list);\n });\n } else {\n callback(editor, linkList);\n }\n };\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$4.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n var delayedConfirm = function (editor, message, callback) {\n var rng = editor.selection.getRng();\n global$5.setEditorTimeout(editor, function () {\n editor.windowManager.confirm(message, function (state) {\n editor.selection.setRng(rng);\n callback(state);\n });\n });\n };\n var showDialog = function (editor, linkList) {\n var data = {};\n var selection = editor.selection;\n var dom = editor.dom;\n var anchorElm, initialText;\n var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;\n var linkListChangeHandler = function (e) {\n var textCtrl = win.find('#text');\n if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {\n textCtrl.value(e.control.text());\n }\n win.find('#href').value(e.control.value());\n };\n var buildAnchorListControl = function (url) {\n var anchorList = [];\n global$4.each(editor.dom.select('a:not([href])'), function (anchor) {\n var id = anchor.name || anchor.id;\n if (id) {\n anchorList.push({\n text: id,\n value: '#' + id,\n selected: url.indexOf('#' + id) !== -1\n });\n }\n });\n if (anchorList.length) {\n anchorList.unshift({\n text: 'None',\n value: ''\n });\n return {\n name: 'anchor',\n type: 'listbox',\n label: 'Anchors',\n values: anchorList,\n onselect: linkListChangeHandler\n };\n }\n };\n var updateText = function () {\n if (!initialText && onlyText && !data.text) {\n this.parent().parent().find('#text')[0].value(this.value());\n }\n };\n var urlChange = function (e) {\n var meta = e.meta || {};\n if (linkListCtrl) {\n linkListCtrl.value(editor.convertURL(this.value(), 'href'));\n }\n global$4.each(e.meta, function (value, key) {\n var inp = win.find('#' + key);\n if (key === 'text') {\n if (initialText.length === 0) {\n inp.value(value);\n data.text = value;\n }\n } else {\n inp.value(value);\n }\n });\n if (meta.attach) {\n attachState = {\n href: this.value(),\n attach: meta.attach\n };\n }\n if (!meta.text) {\n updateText.call(this);\n }\n };\n var onBeforeCall = function (e) {\n e.meta = win.toJSON();\n };\n onlyText = Utils.isOnlyTextSelected(selection.getContent());\n anchorElm = Utils.getAnchorElement(editor);\n data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);\n data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';\n if (anchorElm) {\n data.target = dom.getAttrib(anchorElm, 'target');\n } else if (Settings.hasDefaultLinkTarget(editor.settings)) {\n data.target = Settings.getDefaultLinkTarget(editor.settings);\n }\n if (value = dom.getAttrib(anchorElm, 'rel')) {\n data.rel = value;\n }\n if (value = dom.getAttrib(anchorElm, 'class')) {\n data.class = value;\n }\n if (value = dom.getAttrib(anchorElm, 'title')) {\n data.title = value;\n }\n if (onlyText) {\n textListCtrl = {\n name: 'text',\n type: 'textbox',\n size: 40,\n label: 'Text to display',\n onchange: function () {\n data.text = this.value();\n }\n };\n }\n if (linkList) {\n linkListCtrl = {\n type: 'listbox',\n label: 'Link list',\n values: buildListItems(linkList, function (item) {\n item.value = editor.convertURL(item.value || item.url, 'href');\n }, [{\n text: 'None',\n value: ''\n }]),\n onselect: linkListChangeHandler,\n value: editor.convertURL(data.href, 'href'),\n onPostRender: function () {\n linkListCtrl = this;\n }\n };\n }\n if (Settings.shouldShowTargetList(editor.settings)) {\n if (Settings.getTargetList(editor.settings) === undefined) {\n Settings.setTargetList(editor, [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'New window',\n value: '_blank'\n }\n ]);\n }\n targetListCtrl = {\n name: 'target',\n type: 'listbox',\n label: 'Target',\n values: buildListItems(Settings.getTargetList(editor.settings))\n };\n }\n if (Settings.hasRelList(editor.settings)) {\n relListCtrl = {\n name: 'rel',\n type: 'listbox',\n label: 'Rel',\n values: buildListItems(Settings.getRelList(editor.settings), function (item) {\n if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {\n item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');\n }\n })\n };\n }\n if (Settings.hasLinkClassList(editor.settings)) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: buildListItems(Settings.getLinkClassList(editor.settings), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n inline: 'a',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n if (Settings.shouldShowLinkTitle(editor.settings)) {\n linkTitleCtrl = {\n name: 'title',\n type: 'textbox',\n label: 'Title',\n value: data.title\n };\n }\n win = editor.windowManager.open({\n title: 'Insert link',\n data: data,\n body: [\n {\n name: 'href',\n type: 'filepicker',\n filetype: 'file',\n size: 40,\n autofocus: true,\n label: 'Url',\n onchange: urlChange,\n onkeyup: updateText,\n onpaste: updateText,\n onbeforecall: onBeforeCall\n },\n textListCtrl,\n linkTitleCtrl,\n buildAnchorListControl(data.href),\n linkListCtrl,\n relListCtrl,\n targetListCtrl,\n classListCtrl\n ],\n onSubmit: function (e) {\n var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);\n var insertLink = Utils.link(editor, attachState);\n var removeLink = Utils.unlink(editor);\n var resultData = global$4.extend({}, data, e.data);\n var href = resultData.href;\n if (!href) {\n removeLink();\n return;\n }\n if (!onlyText || resultData.text === initialText) {\n delete resultData.text;\n }\n if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {\n delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {\n if (state) {\n resultData.href = 'mailto:' + href;\n }\n insertLink(resultData);\n });\n return;\n }\n if (assumeExternalTargets === true && !/^\\w+:/i.test(href) || assumeExternalTargets === false && /^\\s*www[\\.|\\d\\.]/i.test(href)) {\n delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {\n if (state) {\n resultData.href = 'http://' + href;\n }\n insertLink(resultData);\n });\n return;\n }\n insertLink(resultData);\n }\n });\n };\n var open$1 = function (editor) {\n createLinkList(editor, showDialog);\n };\n var Dialog = { open: open$1 };\n\n var getLink = function (editor, elm) {\n return editor.dom.getParent(elm, 'a[href]');\n };\n var getSelectedLink = function (editor) {\n return getLink(editor, editor.selection.getStart());\n };\n var getHref = function (elm) {\n var href = elm.getAttribute('data-mce-href');\n return href ? href : elm.getAttribute('href');\n };\n var isContextMenuVisible = function (editor) {\n var contextmenu = editor.plugins.contextmenu;\n return contextmenu ? contextmenu.isContextMenuVisible() : false;\n };\n var hasOnlyAltModifier = function (e) {\n return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;\n };\n var gotoLink = function (editor, a) {\n if (a) {\n var href = getHref(a);\n if (/^#/.test(href)) {\n var targetEl = editor.$(href);\n if (targetEl.length) {\n editor.selection.scrollIntoView(targetEl[0], true);\n }\n } else {\n OpenUrl.open(a.href);\n }\n }\n };\n var openDialog = function (editor) {\n return function () {\n Dialog.open(editor);\n };\n };\n var gotoSelectedLink = function (editor) {\n return function () {\n gotoLink(editor, getSelectedLink(editor));\n };\n };\n var leftClickedOnAHref = function (editor) {\n return function (elm) {\n var sel, rng, node;\n if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {\n sel = editor.selection;\n rng = sel.getRng();\n node = rng.startContainer;\n if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {\n return true;\n }\n }\n return false;\n };\n };\n var setupGotoLinks = function (editor) {\n editor.on('click', function (e) {\n var link = getLink(editor, e.target);\n if (link && global$1.metaKeyPressed(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n editor.on('keydown', function (e) {\n var link = getSelectedLink(editor);\n if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {\n e.preventDefault();\n gotoLink(editor, link);\n }\n });\n };\n var toggleActiveState = function (editor) {\n return function () {\n var self = this;\n editor.on('nodechange', function (e) {\n self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));\n });\n };\n };\n var toggleViewLinkState = function (editor) {\n return function () {\n var self = this;\n var toggleVisibility = function (e) {\n if (Utils.hasLinks(e.parents)) {\n self.show();\n } else {\n self.hide();\n }\n };\n if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {\n self.hide();\n }\n editor.on('nodechange', toggleVisibility);\n self.on('remove', function () {\n editor.off('nodechange', toggleVisibility);\n });\n };\n };\n var Actions = {\n openDialog: openDialog,\n gotoSelectedLink: gotoSelectedLink,\n leftClickedOnAHref: leftClickedOnAHref,\n setupGotoLinks: setupGotoLinks,\n toggleActiveState: toggleActiveState,\n toggleViewLinkState: toggleViewLinkState\n };\n\n var register = function (editor) {\n editor.addCommand('mceLink', Actions.openDialog(editor));\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n editor.addShortcut('Meta+K', '', Actions.openDialog(editor));\n };\n var Keyboard = { setup: setup };\n\n var setupButtons = function (editor) {\n editor.addButton('link', {\n active: false,\n icon: 'link',\n tooltip: 'Insert/edit link',\n onclick: Actions.openDialog(editor),\n onpostrender: Actions.toggleActiveState(editor)\n });\n editor.addButton('unlink', {\n active: false,\n icon: 'unlink',\n tooltip: 'Remove link',\n onclick: Utils.unlink(editor),\n onpostrender: Actions.toggleActiveState(editor)\n });\n if (editor.addContextToolbar) {\n editor.addButton('openlink', {\n icon: 'newtab',\n tooltip: 'Open link',\n onclick: Actions.gotoSelectedLink(editor)\n });\n }\n };\n var setupMenuItems = function (editor) {\n editor.addMenuItem('openlink', {\n text: 'Open link',\n icon: 'newtab',\n onclick: Actions.gotoSelectedLink(editor),\n onPostRender: Actions.toggleViewLinkState(editor),\n prependToContext: true\n });\n editor.addMenuItem('link', {\n icon: 'link',\n text: 'Link',\n shortcut: 'Meta+K',\n onclick: Actions.openDialog(editor),\n stateSelector: 'a[href]',\n context: 'insert',\n prependToContext: true\n });\n editor.addMenuItem('unlink', {\n icon: 'unlink',\n text: 'Remove link',\n onclick: Utils.unlink(editor),\n stateSelector: 'a[href]'\n });\n };\n var setupContextToolbars = function (editor) {\n if (editor.addContextToolbar) {\n editor.addContextToolbar(Actions.leftClickedOnAHref(editor), 'openlink | link unlink');\n }\n };\n var Controls = {\n setupButtons: setupButtons,\n setupMenuItems: setupMenuItems,\n setupContextToolbars: setupContextToolbars\n };\n\n global.add('link', function (editor) {\n Controls.setupButtons(editor);\n Controls.setupMenuItems(editor);\n Controls.setupContextToolbars(editor);\n Actions.setupGotoLinks(editor);\n Commands.register(editor);\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(function () {\nvar nonbreaking = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var stringRepeat = function (string, repeats) {\n var str = '';\n for (var index = 0; index < repeats; index++) {\n str += string;\n }\n return str;\n };\n var isVisualCharsEnabled = function (editor) {\n return editor.plugins.visualchars ? editor.plugins.visualchars.isEnabled() : false;\n };\n var insertNbsp = function (editor, times) {\n var nbsp = isVisualCharsEnabled(editor) ? ' ' : ' ';\n editor.insertContent(stringRepeat(nbsp, times));\n editor.dom.setAttrib(editor.dom.select('span.mce-nbsp'), 'data-mce-bogus', '1');\n };\n var Actions = { insertNbsp: insertNbsp };\n\n var register = function (editor) {\n editor.addCommand('mceNonBreaking', function () {\n Actions.insertNbsp(editor, 1);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getKeyboardSpaces = function (editor) {\n var spaces = editor.getParam('nonbreaking_force_tab', 0);\n if (typeof spaces === 'boolean') {\n return spaces === true ? 3 : 0;\n } else {\n return spaces;\n }\n };\n var Settings = { getKeyboardSpaces: getKeyboardSpaces };\n\n var setup = function (editor) {\n var spaces = Settings.getKeyboardSpaces(editor);\n if (spaces > 0) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$1.TAB && !e.isDefaultPrevented()) {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n Actions.insertNbsp(editor, spaces);\n }\n });\n }\n };\n var Keyboard = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('nonbreaking', {\n title: 'Nonbreaking space',\n cmd: 'mceNonBreaking'\n });\n editor.addMenuItem('nonbreaking', {\n icon: 'nonbreaking',\n text: 'Nonbreaking space',\n cmd: 'mceNonBreaking',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('nonbreaking', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"charmap\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/charmap')\n// ES2015:\n// import 'tinymce/plugins/charmap'\nrequire('./plugin.js');","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","(function () {\nvar image = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasDimensions = function (editor) {\n return editor.settings.image_dimensions === false ? false : true;\n };\n var hasAdvTab = function (editor) {\n return editor.settings.image_advtab === true ? true : false;\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.settings.image_description === false ? false : true;\n };\n var hasImageTitle = function (editor) {\n return editor.settings.image_title === true ? true : false;\n };\n var hasImageCaption = function (editor) {\n return editor.settings.image_caption === true ? true : false;\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', false);\n };\n var hasUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', false);\n };\n var getUploadUrl = function (editor) {\n return editor.getParam('images_upload_url');\n };\n var getUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler');\n };\n var getUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path');\n };\n var getUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials');\n };\n var Settings = {\n hasDimensions: hasDimensions,\n hasAdvTab: hasAdvTab,\n getPrependUrl: getPrependUrl,\n getClassList: getClassList,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasImageCaption: hasImageCaption,\n getImageList: getImageList,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n getUploadUrl: getUploadUrl,\n getUploadHandler: getUploadHandler,\n getUploadBasePath: getUploadBasePath,\n getUploadCredentials: getUploadCredentials\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url, callback) {\n var img = domGlobals.document.createElement('img');\n function done(width, height) {\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback({\n width: width,\n height: height\n });\n }\n img.onload = function () {\n var width = parseIntAndGetMax(img.width, img.clientWidth);\n var height = parseIntAndGetMax(img.height, img.clientHeight);\n done(width, height);\n };\n img.onerror = function () {\n done(0, 0);\n };\n var style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n domGlobals.document.body.appendChild(img);\n img.src = url;\n };\n var buildListItems = function (inputList, itemCallback, startItems) {\n function appendItems(values, output) {\n output = output || [];\n global$2.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n itemCallback(menuItem);\n }\n output.push(menuItem);\n });\n return output;\n }\n return appendItems(inputList, startItems || []);\n };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var splitMargin = css.margin.split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n var createImageList = function (editor, callback) {\n var imageList = Settings.getImageList(editor);\n if (typeof imageList === 'string') {\n global$3.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n function selectImage() {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n }\n imgElm.onload = function () {\n if (!data.width && !data.height && Settings.hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: imgElm.clientWidth,\n height: imgElm.clientHeight\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n var blobToDataUri = function (blob) {\n return new global$1(function (resolve, reject) {\n var reader = FileReader();\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Utils = {\n getImageSize: getImageSize,\n buildListItems: buildListItems,\n removePixelSuffix: removePixelSuffix,\n addPixelSuffix: addPixelSuffix,\n mergeMargins: mergeMargins,\n createImageList: createImageList,\n waitLoadImage: waitLoadImage,\n blobToDataUri: blobToDataUri\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var DOM = global$4.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return Utils.removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n var getVspace = function (image) {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return Utils.removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return Utils.removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var setAttrib = function (image, name, value) {\n image.setAttribute(name, value);\n };\n var wrapInFigure = function (image) {\n var figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = Utils.addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n setAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return Utils.removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var defaultData = function () {\n return {\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: ''\n };\n };\n var getStyleValue = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n setAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, merge(data, { caption: false }), image);\n setAttrib(image, 'alt', data.alt);\n if (data.caption) {\n var figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n var read = function (normalizeCss, image) {\n return {\n src: getAttrib(image, 'src'),\n alt: getAttrib(image, 'alt'),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getStyle(image, 'borderStyle')\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\n updateProp(image, oldData, newData, 'src', setAttrib);\n updateProp(image, oldData, newData, 'alt', setAttrib);\n updateProp(image, oldData, newData, 'title', setAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', setAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return setAttrib(image, 'style', value);\n }, normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = Utils.mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return editor.schema.getTextBlockElements()[node.nodeName];\n }, editor.getBody());\n if (textBlock) {\n return dom.split(textBlock, figure);\n } else {\n return figure;\n }\n };\n var readImageDataFromSelection = function (editor) {\n var image = getSelectedImage(editor);\n return image ? read(function (css) {\n return normalizeCss(editor, css);\n }, image) : defaultData();\n };\n var insertImageAtCaret = function (editor, data) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n var writeImageDataToSelection = function (editor, data) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n Utils.waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, data) {\n var image = getSelectedImage(editor);\n if (image) {\n if (data.src) {\n writeImageDataToSelection(editor, data);\n } else {\n deleteImage(editor, image);\n }\n } else if (data.src) {\n insertImageAtCaret(editor, data);\n }\n };\n\n var updateVSpaceHSpaceBorder = function (editor) {\n return function (evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n if (!Settings.hasAdvTab(editor)) {\n return;\n }\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#vspace').value('');\n rootControl.find('#hspace').value('');\n css = Utils.mergeMargins(css);\n if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {\n if (css['margin-top'] === css['margin-bottom']) {\n rootControl.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));\n } else {\n rootControl.find('#vspace').value('');\n }\n if (css['margin-right'] === css['margin-left']) {\n rootControl.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));\n } else {\n rootControl.find('#hspace').value('');\n }\n }\n if (css['border-width']) {\n rootControl.find('#border').value(Utils.removePixelSuffix(css['border-width']));\n } else {\n rootControl.find('#border').value('');\n }\n if (css['border-style']) {\n rootControl.find('#borderStyle').value(css['border-style']);\n } else {\n rootControl.find('#borderStyle').value('');\n }\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n };\n var updateStyle = function (editor, win) {\n win.find('#style').each(function (ctrl) {\n var value = getStyleValue(function (css) {\n return normalizeCss(editor, css);\n }, merge(defaultData(), win.toJSON()));\n ctrl.value(value);\n });\n };\n var makeTab = function (editor) {\n return {\n title: 'Advanced',\n type: 'form',\n pack: 'start',\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: updateVSpaceHSpaceBorder(editor)\n },\n {\n type: 'form',\n layout: 'grid',\n packV: 'start',\n columns: 2,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50,\n onchange: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n }\n },\n items: [\n {\n label: 'Vertical space',\n name: 'vspace'\n },\n {\n label: 'Border width',\n name: 'border'\n },\n {\n label: 'Horizontal space',\n name: 'hspace'\n },\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n maxWidth: 90,\n onselect: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n },\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n }\n ]\n }\n ]\n };\n };\n var AdvTab = { makeTab: makeTab };\n\n var doSyncSize = function (widthCtrl, heightCtrl) {\n widthCtrl.state.set('oldVal', widthCtrl.value());\n heightCtrl.state.set('oldVal', heightCtrl.value());\n };\n var doSizeControls = function (win, f) {\n var widthCtrl = win.find('#width')[0];\n var heightCtrl = win.find('#height')[0];\n var constrained = win.find('#constrain')[0];\n if (widthCtrl && heightCtrl && constrained) {\n f(widthCtrl, heightCtrl, constrained.checked());\n }\n };\n var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {\n var oldWidth = widthCtrl.state.get('oldVal');\n var oldHeight = heightCtrl.state.get('oldVal');\n var newWidth = widthCtrl.value();\n var newHeight = heightCtrl.value();\n if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {\n if (newWidth !== oldWidth) {\n newHeight = Math.round(newWidth / oldWidth * newHeight);\n if (!isNaN(newHeight)) {\n heightCtrl.value(newHeight);\n }\n } else {\n newWidth = Math.round(newHeight / oldHeight * newWidth);\n if (!isNaN(newWidth)) {\n widthCtrl.value(newWidth);\n }\n }\n }\n doSyncSize(widthCtrl, heightCtrl);\n };\n var syncSize = function (win) {\n doSizeControls(win, doSyncSize);\n };\n var updateSize = function (win) {\n doSizeControls(win, doUpdateSize);\n };\n var createUi = function () {\n var recalcSize = function (evt) {\n updateSize(evt.control.rootControl);\n };\n return {\n type: 'container',\n label: 'Dimensions',\n layout: 'flex',\n align: 'center',\n spacing: 5,\n items: [\n {\n name: 'width',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Width'\n },\n {\n type: 'label',\n text: 'x'\n },\n {\n name: 'height',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Height'\n },\n {\n name: 'constrain',\n type: 'checkbox',\n checked: true,\n text: 'Constrain proportions'\n }\n ]\n };\n };\n var SizeManager = {\n createUi: createUi,\n syncSize: syncSize,\n updateSize: updateSize\n };\n\n var onSrcChange = function (evt, editor) {\n var srcURL, prependURL, absoluteURLPattern;\n var meta = evt.meta || {};\n var control = evt.control;\n var rootControl = control.rootControl;\n var imageListCtrl = rootControl.find('#image-list')[0];\n if (imageListCtrl) {\n imageListCtrl.value(editor.convertURL(control.value(), 'src'));\n }\n global$2.each(meta, function (value, key) {\n rootControl.find('#' + key).value(value);\n });\n if (!meta.width && !meta.height) {\n srcURL = editor.convertURL(control.value(), 'src');\n prependURL = Settings.getPrependUrl(editor);\n absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');\n if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {\n srcURL = prependURL + srcURL;\n }\n control.value(srcURL);\n Utils.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {\n if (data.width && data.height && Settings.hasDimensions(editor)) {\n rootControl.find('#width').value(data.width);\n rootControl.find('#height').value(data.height);\n SizeManager.syncSize(rootControl);\n }\n });\n }\n };\n var onBeforeCall = function (evt) {\n evt.meta = evt.control.rootControl.toJSON();\n };\n var getGeneralItems = function (editor, imageListCtrl) {\n var generalFormItems = [\n {\n name: 'src',\n type: 'filepicker',\n filetype: 'image',\n label: 'Source',\n autofocus: true,\n onchange: function (evt) {\n onSrcChange(evt, editor);\n },\n onbeforecall: onBeforeCall\n },\n imageListCtrl\n ];\n if (Settings.hasDescription(editor)) {\n generalFormItems.push({\n name: 'alt',\n type: 'textbox',\n label: 'Image description'\n });\n }\n if (Settings.hasImageTitle(editor)) {\n generalFormItems.push({\n name: 'title',\n type: 'textbox',\n label: 'Image Title'\n });\n }\n if (Settings.hasDimensions(editor)) {\n generalFormItems.push(SizeManager.createUi());\n }\n if (Settings.getClassList(editor)) {\n generalFormItems.push({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Utils.buildListItems(Settings.getClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n inline: 'img',\n classes: [item.value]\n });\n };\n }\n })\n });\n }\n if (Settings.hasImageCaption(editor)) {\n generalFormItems.push({\n name: 'caption',\n type: 'checkbox',\n label: 'Caption'\n });\n }\n return generalFormItems;\n };\n var makeTab$1 = function (editor, imageListCtrl) {\n return {\n title: 'General',\n type: 'form',\n items: getGeneralItems(editor, imageListCtrl)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n getGeneralItems: getGeneralItems\n };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n var noop = function () {\n };\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n function Uploader (settings) {\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var uploadBlob = function (blobInfo, handler) {\n return new global$1(function (resolve, reject) {\n try {\n handler(blobInfo, resolve, reject, noop);\n } catch (ex) {\n reject(ex.message);\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var upload = function (blobInfo) {\n return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$2.extend({\n credentials: false,\n handler: defaultHandler\n }, settings);\n return { upload: upload };\n }\n\n var onFileInput = function (editor) {\n return function (evt) {\n var Throbber = global$5.get('Throbber');\n var rootControl = evt.control.rootControl;\n var throbber = new Throbber(rootControl.getEl());\n var file = evt.control.value();\n var blobUri = URL.createObjectURL(file);\n var uploader = Uploader({\n url: Settings.getUploadUrl(editor),\n basePath: Settings.getUploadBasePath(editor),\n credentials: Settings.getUploadCredentials(editor),\n handler: Settings.getUploadHandler(editor)\n });\n var finalize = function () {\n throbber.hide();\n URL.revokeObjectURL(blobUri);\n };\n throbber.show();\n return Utils.blobToDataUri(file).then(function (dataUrl) {\n var blobInfo = editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n base64: dataUrl.split(',')[1]\n });\n return uploader.upload(blobInfo).then(function (url) {\n var src = rootControl.find('#src');\n src.value(url);\n rootControl.find('tabpanel')[0].activateTab(0);\n src.fire('change');\n finalize();\n return url;\n });\n }).catch(function (err) {\n editor.windowManager.alert(err);\n finalize();\n });\n };\n };\n var acceptExts = '.jpg,.jpeg,.png,.gif';\n var makeTab$2 = function (editor) {\n return {\n title: 'Upload',\n type: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: '20 20 20 20',\n items: [\n {\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'center',\n spacing: 10,\n items: [\n {\n text: 'Browse for an image',\n type: 'browsebutton',\n accept: acceptExts,\n onchange: onFileInput(editor)\n },\n {\n text: 'OR',\n type: 'label'\n }\n ]\n },\n {\n text: 'Drop an image here',\n type: 'dropzone',\n accept: acceptExts,\n height: 100,\n onchange: onFileInput(editor)\n }\n ]\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var submitForm = function (editor, evt) {\n var win = evt.control.getRoot();\n SizeManager.updateSize(win);\n editor.undoManager.transact(function () {\n var data = merge(readImageDataFromSelection(editor), win.toJSON());\n insertOrUpdateImage(editor, data);\n });\n editor.editorUpload.uploadImagesAuto();\n };\n function Dialog (editor) {\n function showDialog(imageList) {\n var data = readImageDataFromSelection(editor);\n var win, imageListCtrl;\n if (imageList) {\n imageListCtrl = {\n type: 'listbox',\n label: 'Image list',\n name: 'image-list',\n values: Utils.buildListItems(imageList, function (item) {\n item.value = editor.convertURL(item.value || item.url, 'src');\n }, [{\n text: 'None',\n value: ''\n }]),\n value: data.src && editor.convertURL(data.src, 'src'),\n onselect: function (e) {\n var altCtrl = win.find('#alt');\n if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {\n altCtrl.value(e.control.text());\n }\n win.find('#src').value(e.control.value()).fire('change');\n },\n onPostRender: function () {\n imageListCtrl = this;\n }\n };\n }\n if (Settings.hasAdvTab(editor) || Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n var body = [MainTab.makeTab(editor, imageListCtrl)];\n if (Settings.hasAdvTab(editor)) {\n body.push(AdvTab.makeTab(editor));\n }\n if (Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n body.push(UploadTab.makeTab(editor));\n }\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n bodyType: 'tabpanel',\n body: body,\n onSubmit: curry(submitForm, editor)\n });\n } else {\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n body: MainTab.getGeneralItems(editor, imageListCtrl),\n onSubmit: curry(submitForm, editor)\n });\n }\n SizeManager.syncSize(win);\n }\n function open() {\n Utils.createImageList(editor, showDialog);\n }\n return { open: open };\n }\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n };\n var Commands = { register: register };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length, node;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$2.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('preInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onclick: Dialog(editor).open,\n stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'\n });\n editor.addMenuItem('image', {\n icon: 'image',\n text: 'Image',\n onclick: Dialog(editor).open,\n context: 'insert',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('image', function (editor) {\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"editor\"},[_c('tinymce',{attrs:{\"id\":_vm.id,\"init\":_vm.settings(),\"value\":_vm.value},on:{\"input\":_vm.input}}),(_vm.modal)?_c('div',{staticClass:\"filemanager-modal\"},[_c('filemanager',{attrs:{\"modal\":true,\"media\":_vm.media}})],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar validEvents = [\n 'onActivate',\n 'onAddUndo',\n 'onBeforeAddUndo',\n 'onBeforeExecCommand',\n 'onBeforeGetContent',\n 'onBeforeRenderUI',\n 'onBeforeSetContent',\n 'onBeforePaste',\n 'onBlur',\n 'onChange',\n 'onClearUndos',\n 'onClick',\n 'onContextMenu',\n 'onCopy',\n 'onCut',\n 'onDblclick',\n 'onDeactivate',\n 'onDirty',\n 'onDrag',\n 'onDragDrop',\n 'onDragEnd',\n 'onDragGesture',\n 'onDragOver',\n 'onDrop',\n 'onExecCommand',\n 'onFocus',\n 'onFocusIn',\n 'onFocusOut',\n 'onGetContent',\n 'onHide',\n 'onInit',\n 'onKeyDown',\n 'onKeyPress',\n 'onKeyUp',\n 'onLoadContent',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onNodeChange',\n 'onObjectResizeStart',\n 'onObjectResized',\n 'onObjectSelected',\n 'onPaste',\n 'onPostProcess',\n 'onPostRender',\n 'onPreProcess',\n 'onProgressState',\n 'onRedo',\n 'onRemove',\n 'onReset',\n 'onSaveContent',\n 'onSelectionChange',\n 'onSetAttrib',\n 'onSetContent',\n 'onShow',\n 'onSubmit',\n 'onUndo',\n 'onVisualAid'\n];\nvar isValidKey = function (key) { return validEvents.indexOf(key) !== -1; };\nexport var bindHandlers = function (initEvent, listeners, editor) {\n Object.keys(listeners)\n .filter(isValidKey)\n .forEach(function (key) {\n var handler = listeners[key];\n if (typeof handler === 'function') {\n if (key === 'onInit') {\n handler(initEvent, editor);\n }\n else {\n editor.on(key.substring(2), function (e) { return handler(e, editor); });\n }\n }\n });\n};\nexport var bindModelHandlers = function (ctx, editor) {\n var modelEvents = ctx.$props.modelEvents ? ctx.$props.modelEvents : null;\n var normalizedEvents = Array.isArray(modelEvents) ? modelEvents.join(' ') : modelEvents;\n var currentContent;\n ctx.$watch('value', function (val, prevVal) {\n if (editor && typeof val === 'string' && val !== currentContent && val !== prevVal) {\n editor.setContent(val);\n currentContent = val;\n }\n });\n editor.on(normalizedEvents ? normalizedEvents : 'change keyup undo redo', function () {\n currentContent = editor.getContent();\n ctx.$emit('input', currentContent);\n });\n};\nexport var initEditor = function (initEvent, ctx, editor) {\n var value = ctx.$props.value ? ctx.$props.value : '';\n var initialValue = ctx.$props.initialValue ? ctx.$props.initialValue : '';\n editor.setContent(value || initialValue);\n // checks if the v-model shorthand is used (which sets an v-on:input listener) and then binds either\n // specified the events or defaults to \"change keyup\" event and emits the editor content on that event\n if (ctx.$listeners.input) {\n bindModelHandlers(ctx, editor);\n }\n bindHandlers(initEvent, ctx.$listeners, editor);\n};\nvar unique = 0;\nexport var uuid = function (prefix) {\n var time = Date.now();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n};\nexport var isTextarea = function (element) {\n return element !== null && element.tagName.toLowerCase() === 'textarea';\n};\nvar normalizePluginArray = function (plugins) {\n if (typeof plugins === 'undefined' || plugins === '') {\n return [];\n }\n return Array.isArray(plugins) ? plugins : plugins.split(' ');\n};\nexport var mergePlugins = function (initPlugins, inputPlugins) {\n return normalizePluginArray(initPlugins).concat(normalizePluginArray(inputPlugins));\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { uuid } from './Utils';\nvar injectScriptTag = function (scriptId, doc, url, callback) {\n var scriptTag = doc.createElement('script');\n scriptTag.type = 'application/javascript';\n scriptTag.id = scriptId;\n scriptTag.addEventListener('load', callback);\n scriptTag.src = url;\n if (doc.head) {\n doc.head.appendChild(scriptTag);\n }\n};\nexport var create = function () {\n return {\n listeners: [],\n scriptId: uuid('tiny-script'),\n scriptLoaded: false\n };\n};\nexport var load = function (state, doc, url, callback) {\n if (state.scriptLoaded) {\n callback();\n }\n else {\n state.listeners.push(callback);\n if (!doc.getElementById(state.scriptId)) {\n injectScriptTag(state.scriptId, doc, url, function () {\n state.listeners.forEach(function (fn) { return fn(); });\n state.scriptLoaded = true;\n });\n }\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport var editorProps = {\n apiKey: String,\n cloudChannel: String,\n id: String,\n init: Object,\n initialValue: String,\n inline: Boolean,\n modelEvents: [String, Array],\n plugins: [String, Array],\n tagName: String,\n toolbar: [String, Array],\n value: String,\n disabled: Boolean\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport * as ScriptLoader from '../ScriptLoader';\nimport { getTinymce } from '../TinyMCE';\nimport { initEditor, isTextarea, mergePlugins, uuid } from '../Utils';\nimport { editorProps } from './EditorPropTypes';\nvar scriptState = ScriptLoader.create();\nvar renderInline = function (h, id, tagName) {\n return h(tagName ? tagName : 'div', {\n attrs: { id: id }\n });\n};\nvar renderIframe = function (h, id) {\n return h('textarea', {\n attrs: { id: id },\n style: { visibility: 'hidden' }\n });\n};\nvar initialise = function (ctx) { return function () {\n var finalInit = __assign({}, ctx.$props.init, { readonly: ctx.$props.disabled, selector: \"#\" + ctx.elementId, plugins: mergePlugins(ctx.$props.init && ctx.$props.init.plugins, ctx.$props.plugins), toolbar: ctx.$props.toolbar || (ctx.$props.init && ctx.$props.init.toolbar), inline: ctx.inlineEditor, setup: function (editor) {\n ctx.editor = editor;\n editor.on('init', function (e) { return initEditor(e, ctx, editor); });\n if (ctx.$props.init && typeof ctx.$props.init.setup === 'function') {\n ctx.$props.init.setup(editor);\n }\n } });\n if (isTextarea(ctx.element)) {\n ctx.element.style.visibility = '';\n }\n getTinymce().init(finalInit);\n}; };\nexport var Editor = {\n props: editorProps,\n created: function () {\n this.elementId = this.$props.id || uuid('tiny-vue');\n this.inlineEditor = (this.$props.init && this.$props.init.inline) || this.$props.inline;\n },\n watch: {\n disabled: function () {\n this.editor.setMode(this.disabled ? 'readonly' : 'design');\n }\n },\n mounted: function () {\n this.element = this.$el;\n if (getTinymce() !== null) {\n initialise(this)();\n }\n else if (this.element && this.element.ownerDocument) {\n var doc = this.element.ownerDocument;\n var channel = this.$props.cloudChannel ? this.$props.cloudChannel : 'stable';\n var apiKey = this.$props.apiKey ? this.$props.apiKey : '';\n var url = \"https://cloud.tinymce.com/\" + channel + \"/tinymce.min.js?apiKey=\" + apiKey;\n ScriptLoader.load(scriptState, doc, url, initialise(this));\n }\n },\n beforeDestroy: function () {\n if (getTinymce() !== null) {\n getTinymce().remove(this.editor);\n }\n },\n render: function (h) {\n return this.inlineEditor ? renderInline(h, this.elementId, this.$props.tagName) : renderIframe(h, this.elementId);\n }\n};\n","/**\n * Copyright (c) 2018-present, Ephox, Inc.\n *\n * This source code is licensed under the Apache 2 license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { Editor } from './components/Editor';\nexport default Editor;\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Editor.vue?vue&type=template&id=81a916b8&\"\nimport script from \"./Editor.vue?vue&type=script&lang=js&\"\nexport * from \"./Editor.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Editor.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","(function () {\nvar visualchars = (function (domGlobals) {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (toggleState) {\n var isEnabled = function () {\n return toggleState.get();\n };\n return { isEnabled: isEnabled };\n };\n var Api = { get: get };\n\n var fireVisualChars = function (editor, state) {\n return editor.fire('VisualChars', { state: state });\n };\n var Events = { fireVisualChars: fireVisualChars };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var type = function (element) {\n return element.dom().nodeType;\n };\n var value = function (element) {\n return element.dom().nodeValue;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isText = isType$1(TEXT);\n\n var charMap = {\n '\\xA0': 'nbsp',\n '\\xAD': 'shy'\n };\n var charMapToRegExp = function (charMap, global) {\n var key, regExp = '';\n for (key in charMap) {\n regExp += key;\n }\n return new RegExp('[' + regExp + ']', global ? 'g' : '');\n };\n var charMapToSelector = function (charMap) {\n var key, selector = '';\n for (key in charMap) {\n if (selector) {\n selector += ',';\n }\n selector += 'span.mce-' + charMap[key];\n }\n return selector;\n };\n var Data = {\n charMap: charMap,\n regExp: charMapToRegExp(charMap),\n regExpGlobal: charMapToRegExp(charMap, true),\n selector: charMapToSelector(charMap),\n charMapToRegExp: charMapToRegExp,\n charMapToSelector: charMapToSelector\n };\n\n var wrapCharWithSpan = function (value) {\n return '' + value + '';\n };\n var Html = { wrapCharWithSpan: wrapCharWithSpan };\n\n var isMatch = function (n) {\n var value$1 = value(n);\n return isText(n) && value$1 !== undefined && Data.regExp.test(value$1);\n };\n var filterDescendants = function (scope, predicate) {\n var result = [];\n var dom = scope.dom();\n var children = map(dom.childNodes, Element.fromDom);\n each(children, function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(filterDescendants(x, predicate));\n });\n return result;\n };\n var findParentElm = function (elm, rootElm) {\n while (elm.parentNode) {\n if (elm.parentNode === rootElm) {\n return elm;\n }\n elm = elm.parentNode;\n }\n };\n var replaceWithSpans = function (text) {\n return text.replace(Data.regExpGlobal, Html.wrapCharWithSpan);\n };\n var Nodes = {\n isMatch: isMatch,\n filterDescendants: filterDescendants,\n findParentElm: findParentElm,\n replaceWithSpans: replaceWithSpans\n };\n\n var show = function (editor, rootElm) {\n var node, div;\n var nodeList = Nodes.filterDescendants(Element.fromDom(rootElm), Nodes.isMatch);\n each(nodeList, function (n) {\n var withSpans = Nodes.replaceWithSpans(editor.dom.encode(value(n)));\n div = editor.dom.create('div', null, withSpans);\n while (node = div.lastChild) {\n editor.dom.insertAfter(node, n.dom());\n }\n editor.dom.remove(n.dom());\n });\n };\n var hide = function (editor, body) {\n var nodeList = editor.dom.select(Data.selector, body);\n each(nodeList, function (node) {\n editor.dom.remove(node, 1);\n });\n };\n var toggle = function (editor) {\n var body = editor.getBody();\n var bookmark = editor.selection.getBookmark();\n var parentNode = Nodes.findParentElm(editor.selection.getNode(), body);\n parentNode = parentNode !== undefined ? parentNode : body;\n hide(editor, parentNode);\n show(editor, parentNode);\n editor.selection.moveToBookmark(bookmark);\n };\n var VisualChars = {\n show: show,\n hide: hide,\n toggle: toggle\n };\n\n var toggleVisualChars = function (editor, toggleState) {\n var body = editor.getBody();\n var selection = editor.selection;\n var bookmark;\n toggleState.set(!toggleState.get());\n Events.fireVisualChars(editor, toggleState.get());\n bookmark = selection.getBookmark();\n if (toggleState.get() === true) {\n VisualChars.show(editor, body);\n } else {\n VisualChars.hide(editor, body);\n }\n selection.moveToBookmark(bookmark);\n };\n var Actions = { toggleVisualChars: toggleVisualChars };\n\n var register = function (editor, toggleState) {\n editor.addCommand('mceVisualChars', function () {\n Actions.toggleVisualChars(editor, toggleState);\n });\n };\n var Commands = { register: register };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var setup = function (editor, toggleState) {\n var debouncedToggle = global$1.debounce(function () {\n VisualChars.toggle(editor);\n }, 300);\n if (editor.settings.forced_root_block !== false) {\n editor.on('keydown', function (e) {\n if (toggleState.get() === true) {\n e.keyCode === 13 ? VisualChars.toggle(editor) : debouncedToggle();\n }\n });\n }\n };\n var Keyboard = { setup: setup };\n\n var isEnabledByDefault = function (editor) {\n return editor.getParam('visualchars_default_state', false);\n };\n var Settings = { isEnabledByDefault: isEnabledByDefault };\n\n var setup$1 = function (editor, toggleState) {\n editor.on('init', function () {\n var valueForToggling = !Settings.isEnabledByDefault(editor);\n toggleState.set(valueForToggling);\n Actions.toggleVisualChars(editor, toggleState);\n });\n };\n var Bindings = { setup: setup$1 };\n\n var toggleActiveState = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('VisualChars', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor) {\n editor.addButton('visualchars', {\n active: false,\n title: 'Show invisible characters',\n cmd: 'mceVisualChars',\n onPostRender: toggleActiveState(editor)\n });\n editor.addMenuItem('visualchars', {\n text: 'Show invisible characters',\n cmd: 'mceVisualChars',\n onPostRender: toggleActiveState(editor),\n selectable: true,\n context: 'view',\n prependToContext: true\n });\n };\n\n global.add('visualchars', function (editor) {\n var toggleState = Cell(false);\n Commands.register(editor, toggleState);\n register$1(editor);\n Keyboard.setup(editor, toggleState);\n Bindings.setup(editor, toggleState);\n return Api.get(toggleState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(function () {\nvar emoticons = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var emoticons = [\n [\n 'cool',\n 'cry',\n 'embarassed',\n 'foot-in-mouth'\n ],\n [\n 'frown',\n 'innocent',\n 'kiss',\n 'laughing'\n ],\n [\n 'money-mouth',\n 'sealed',\n 'smile',\n 'surprised'\n ],\n [\n 'tongue-out',\n 'undecided',\n 'wink',\n 'yell'\n ]\n ];\n var getHtml = function (pluginUrl) {\n var emoticonsHtml;\n emoticonsHtml = '';\n global$1.each(emoticons, function (row) {\n emoticonsHtml += '';\n global$1.each(row, function (icon) {\n var emoticonUrl = pluginUrl + '/img/smiley-' + icon + '.gif';\n emoticonsHtml += '';\n });\n emoticonsHtml += '';\n });\n emoticonsHtml += '
';\n return emoticonsHtml;\n };\n var PanelHtml = { getHtml: getHtml };\n\n var insertEmoticon = function (editor, src, alt) {\n editor.insertContent(editor.dom.createHTML('img', {\n src: src,\n alt: alt\n }));\n };\n var register = function (editor, pluginUrl) {\n var panelHtml = PanelHtml.getHtml(pluginUrl);\n editor.addButton('emoticons', {\n type: 'panelbutton',\n panel: {\n role: 'application',\n autohide: true,\n html: panelHtml,\n onclick: function (e) {\n var linkElm = editor.dom.getParent(e.target, 'a');\n if (linkElm) {\n insertEmoticon(editor, linkElm.getAttribute('data-mce-url'), linkElm.getAttribute('data-mce-alt'));\n this.hide();\n }\n }\n },\n tooltip: 'Emoticons'\n });\n };\n var Buttons = { register: register };\n\n global.add('emoticons', function (editor, pluginUrl) {\n Buttons.register(editor, pluginUrl);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"anchor\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/anchor')\n// ES2015:\n// import 'tinymce/plugins/anchor'\nrequire('./plugin.js');","(function () {\nvar hr = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var register = function (editor) {\n editor.addCommand('InsertHorizontalRule', function () {\n editor.execCommand('mceInsertContent', false, '
');\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('hr', {\n icon: 'hr',\n tooltip: 'Horizontal line',\n cmd: 'InsertHorizontalRule'\n });\n editor.addMenuItem('hr', {\n icon: 'hr',\n text: 'Horizontal line',\n cmd: 'InsertHorizontalRule',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('hr', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar directionality = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var setDir = function (editor, dir) {\n var dom = editor.dom;\n var curDir;\n var blocks = editor.selection.getSelectedBlocks();\n if (blocks.length) {\n curDir = dom.getAttrib(blocks[0], 'dir');\n global$1.each(blocks, function (block) {\n if (!dom.getParent(block.parentNode, '*[dir=\"' + dir + '\"]', dom.getRoot())) {\n dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);\n }\n });\n editor.nodeChanged();\n }\n };\n var Direction = { setDir: setDir };\n\n var register = function (editor) {\n editor.addCommand('mceDirectionLTR', function () {\n Direction.setDir(editor, 'ltr');\n });\n editor.addCommand('mceDirectionRTL', function () {\n Direction.setDir(editor, 'rtl');\n });\n };\n var Commands = { register: register };\n\n var generateSelector = function (dir) {\n var selector = [];\n global$1.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) {\n selector.push(name + '[dir=' + dir + ']');\n });\n return selector.join(',');\n };\n var register$1 = function (editor) {\n editor.addButton('ltr', {\n title: 'Left to right',\n cmd: 'mceDirectionLTR',\n stateSelector: generateSelector('ltr')\n });\n editor.addButton('rtl', {\n title: 'Right to left',\n cmd: 'mceDirectionRTL',\n stateSelector: generateSelector('rtl')\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('directionality', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 4.9.11 (2020-07-13)\n(function () {\n(function (domGlobals) {\n 'use strict';\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isObject = isType('object');\n var isArray = isType('array');\n var isNull = isType('null');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var partition = function (xs, pred) {\n var pass = [];\n var fail = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var arr = pred(x, i) ? pass : fail;\n arr.push(x);\n }\n return {\n pass: pass,\n fail: fail\n };\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var difference = function (a1, a2) {\n return filter(a1, function (x) {\n return !contains(a2, x);\n });\n };\n var mapToObject = function (xs, f) {\n var r = {};\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n r[String(x)] = f(x, i);\n }\n return r;\n };\n var sort = function (xs, comparator) {\n var copy = nativeSlice.call(xs, 0);\n copy.sort(comparator);\n return copy;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var nav = domGlobals.navigator, userAgent = nav.userAgent;\n var opera, webkit, ie, ie11, ie12, gecko, mac, iDevice, android, fileApi, phone, tablet, windowsPhone;\n var matchMediaQuery = function (query) {\n return 'matchMedia' in domGlobals.window ? domGlobals.matchMedia(query).matches : false;\n };\n opera = false;\n android = /Android/.test(userAgent);\n webkit = /WebKit/.test(userAgent);\n ie = !webkit && !opera && /MSIE/gi.test(userAgent) && /Explorer/gi.test(nav.appName);\n ie = ie && /MSIE (\\w+)\\./.exec(userAgent)[1];\n ie11 = userAgent.indexOf('Trident/') !== -1 && (userAgent.indexOf('rv:') !== -1 || nav.appName.indexOf('Netscape') !== -1) ? 11 : false;\n ie12 = userAgent.indexOf('Edge/') !== -1 && !ie && !ie11 ? 12 : false;\n ie = ie || ie11 || ie12;\n gecko = !webkit && !ie11 && /Gecko/.test(userAgent);\n mac = userAgent.indexOf('Mac') !== -1;\n iDevice = /(iPad|iPhone)/.test(userAgent);\n fileApi = 'FormData' in domGlobals.window && 'FileReader' in domGlobals.window && 'URL' in domGlobals.window && !!URL.createObjectURL;\n phone = matchMediaQuery('only screen and (max-device-width: 480px)') && (android || iDevice);\n tablet = matchMediaQuery('only screen and (min-width: 800px)') && (android || iDevice);\n windowsPhone = userAgent.indexOf('Windows Phone') !== -1;\n if (ie12) {\n webkit = false;\n }\n var contentEditable = !iDevice || fileApi || parseInt(userAgent.match(/AppleWebKit\\/(\\d*)/)[1], 10) >= 534;\n var Env = {\n opera: opera,\n webkit: webkit,\n ie: ie,\n gecko: gecko,\n mac: mac,\n iOS: iDevice,\n android: android,\n contentEditable: contentEditable,\n transparentSrc: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7',\n caretAfter: ie !== 8,\n range: domGlobals.window.getSelection && 'Range' in domGlobals.window,\n documentMode: ie && !ie12 ? domGlobals.document.documentMode || 7 : 10,\n fileApi: fileApi,\n ceFalse: ie === false || ie > 8,\n cacheSuffix: null,\n container: null,\n overrideViewPort: null,\n experimentalShadowDom: false,\n canHaveCSP: ie === false || ie > 11,\n desktop: !phone && !tablet,\n windowsPhone: windowsPhone\n };\n\n var promise = function () {\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\n };\n var Promise = function (fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('not a function');\n }\n this._state = null;\n this._value = null;\n this._deferreds = [];\n doResolve(fn, bind(resolve, this), bind(reject, this));\n };\n var asap = Promise.immediateFn || typeof setImmediate === 'function' && setImmediate || function (fn) {\n setTimeout(fn, 1);\n };\n function handle(deferred) {\n var me = this;\n if (this._state === null) {\n this._deferreds.push(deferred);\n return;\n }\n asap(function () {\n var cb = me._state ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (me._state ? deferred.resolve : deferred.reject)(me._value);\n return;\n }\n var ret;\n try {\n ret = cb(me._value);\n } catch (e) {\n deferred.reject(e);\n return;\n }\n deferred.resolve(ret);\n });\n }\n function resolve(newValue) {\n try {\n if (newValue === this) {\n throw new TypeError('A promise cannot be resolved with itself.');\n }\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (typeof then === 'function') {\n doResolve(bind(then, newValue), bind(resolve, this), bind(reject, this));\n return;\n }\n }\n this._state = true;\n this._value = newValue;\n finale.call(this);\n } catch (e) {\n reject.call(this, e);\n }\n }\n function reject(newValue) {\n this._state = false;\n this._value = newValue;\n finale.call(this);\n }\n function finale() {\n for (var i = 0, len = this._deferreds.length; i < len; i++) {\n handle.call(this, this._deferreds[i]);\n }\n this._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, resolve, reject) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n }\n function doResolve(fn, onFulfilled, onRejected) {\n var done = false;\n try {\n fn(function (value) {\n if (done) {\n return;\n }\n done = true;\n onFulfilled(value);\n }, function (reason) {\n if (done) {\n return;\n }\n done = true;\n onRejected(reason);\n });\n } catch (ex) {\n if (done) {\n return;\n }\n done = true;\n onRejected(ex);\n }\n }\n Promise.prototype.catch = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var me = this;\n return new Promise(function (resolve, reject) {\n handle.call(me, new Handler(onFulfilled, onRejected, resolve, reject));\n });\n };\n Promise.all = function () {\n var args = Array.prototype.slice.call(arguments.length === 1 && isArray(arguments[0]) ? arguments[0] : arguments);\n return new Promise(function (resolve, reject) {\n if (args.length === 0) {\n return resolve([]);\n }\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var promiseObj = window.Promise ? window.Promise : promise();\n\n var requestAnimationFramePromise;\n var requestAnimationFrame = function (callback, element) {\n var i, requestAnimationFrameFunc = domGlobals.window.requestAnimationFrame;\n var vendors = [\n 'ms',\n 'moz',\n 'webkit'\n ];\n var featurefill = function (callback) {\n domGlobals.window.setTimeout(callback, 0);\n };\n for (i = 0; i < vendors.length && !requestAnimationFrameFunc; i++) {\n requestAnimationFrameFunc = domGlobals.window[vendors[i] + 'RequestAnimationFrame'];\n }\n if (!requestAnimationFrameFunc) {\n requestAnimationFrameFunc = featurefill;\n }\n requestAnimationFrameFunc(callback, element);\n };\n var wrappedSetTimeout = function (callback, time) {\n if (typeof time !== 'number') {\n time = 0;\n }\n return setTimeout(callback, time);\n };\n var wrappedSetInterval = function (callback, time) {\n if (typeof time !== 'number') {\n time = 1;\n }\n return setInterval(callback, time);\n };\n var wrappedClearTimeout = function (id) {\n return clearTimeout(id);\n };\n var wrappedClearInterval = function (id) {\n return clearInterval(id);\n };\n var debounce = function (callback, time) {\n var timer, func;\n func = function () {\n var args = arguments;\n clearTimeout(timer);\n timer = wrappedSetTimeout(function () {\n callback.apply(this, args);\n }, time);\n };\n func.stop = function () {\n clearTimeout(timer);\n };\n return func;\n };\n var Delay = {\n requestAnimationFrame: function (callback, element) {\n if (requestAnimationFramePromise) {\n requestAnimationFramePromise.then(callback);\n return;\n }\n requestAnimationFramePromise = new promiseObj(function (resolve) {\n if (!element) {\n element = domGlobals.document.body;\n }\n requestAnimationFrame(resolve, element);\n }).then(callback);\n },\n setTimeout: wrappedSetTimeout,\n setInterval: wrappedSetInterval,\n setEditorTimeout: function (editor, callback, time) {\n return wrappedSetTimeout(function () {\n if (!editor.removed) {\n callback();\n }\n }, time);\n },\n setEditorInterval: function (editor, callback, time) {\n var timer;\n timer = wrappedSetInterval(function () {\n if (!editor.removed) {\n callback();\n } else {\n clearInterval(timer);\n }\n }, time);\n return timer;\n },\n debounce: debounce,\n throttle: debounce,\n clearInterval: wrappedClearInterval,\n clearTimeout: wrappedClearTimeout\n };\n\n var eventExpandoPrefix = 'mce-data-';\n var mouseEventRe = /^(?:mouse|contextmenu)|click/;\n var deprecated = {\n keyLocation: 1,\n layerX: 1,\n layerY: 1,\n returnValue: 1,\n webkitMovementX: 1,\n webkitMovementY: 1,\n keyIdentifier: 1\n };\n var hasIsDefaultPrevented = function (event) {\n return event.isDefaultPrevented === returnTrue || event.isDefaultPrevented === returnFalse;\n };\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n var addEvent = function (target, name, callback, capture) {\n if (target.addEventListener) {\n target.addEventListener(name, callback, capture || false);\n } else if (target.attachEvent) {\n target.attachEvent('on' + name, callback);\n }\n };\n var removeEvent = function (target, name, callback, capture) {\n if (target.removeEventListener) {\n target.removeEventListener(name, callback, capture || false);\n } else if (target.detachEvent) {\n target.detachEvent('on' + name, callback);\n }\n };\n var getTargetFromShadowDom = function (event, defaultTarget) {\n if (event.composedPath) {\n var composedPath = event.composedPath();\n if (composedPath && composedPath.length > 0) {\n return composedPath[0];\n }\n }\n return defaultTarget;\n };\n var fix = function (originalEvent, data) {\n var name;\n var event = data || {};\n for (name in originalEvent) {\n if (!deprecated[name]) {\n event[name] = originalEvent[name];\n }\n }\n if (!event.target) {\n event.target = event.srcElement || domGlobals.document;\n }\n if (Env.experimentalShadowDom) {\n event.target = getTargetFromShadowDom(originalEvent, event.target);\n }\n if (originalEvent && mouseEventRe.test(originalEvent.type) && originalEvent.pageX === undefined && originalEvent.clientX !== undefined) {\n var eventDoc = event.target.ownerDocument || domGlobals.document;\n var doc = eventDoc.documentElement;\n var body = eventDoc.body;\n event.pageX = originalEvent.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = originalEvent.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n event.preventDefault = function () {\n event.isDefaultPrevented = returnTrue;\n if (originalEvent) {\n if (originalEvent.preventDefault) {\n originalEvent.preventDefault();\n } else {\n originalEvent.returnValue = false;\n }\n }\n };\n event.stopPropagation = function () {\n event.isPropagationStopped = returnTrue;\n if (originalEvent) {\n if (originalEvent.stopPropagation) {\n originalEvent.stopPropagation();\n } else {\n originalEvent.cancelBubble = true;\n }\n }\n };\n event.stopImmediatePropagation = function () {\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n if (hasIsDefaultPrevented(event) === false) {\n event.isDefaultPrevented = returnFalse;\n event.isPropagationStopped = returnFalse;\n event.isImmediatePropagationStopped = returnFalse;\n }\n if (typeof event.metaKey === 'undefined') {\n event.metaKey = false;\n }\n return event;\n };\n var bindOnReady = function (win, callback, eventUtils) {\n var doc = win.document, event = { type: 'ready' };\n if (eventUtils.domLoaded) {\n callback(event);\n return;\n }\n var isDocReady = function () {\n return doc.readyState === 'complete' || doc.readyState === 'interactive' && doc.body;\n };\n var readyHandler = function () {\n if (!eventUtils.domLoaded) {\n eventUtils.domLoaded = true;\n callback(event);\n }\n };\n var waitForDomLoaded = function () {\n if (isDocReady()) {\n removeEvent(doc, 'readystatechange', waitForDomLoaded);\n readyHandler();\n }\n };\n var tryScroll = function () {\n try {\n doc.documentElement.doScroll('left');\n } catch (ex) {\n Delay.setTimeout(tryScroll);\n return;\n }\n readyHandler();\n };\n if (doc.addEventListener && !(Env.ie && Env.ie < 11)) {\n if (isDocReady()) {\n readyHandler();\n } else {\n addEvent(win, 'DOMContentLoaded', readyHandler);\n }\n } else {\n addEvent(doc, 'readystatechange', waitForDomLoaded);\n if (doc.documentElement.doScroll && win.self === win.top) {\n tryScroll();\n }\n }\n addEvent(win, 'load', readyHandler);\n };\n var EventUtils = function () {\n var self = this;\n var events = {}, count, expando, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;\n expando = eventExpandoPrefix + (+new Date()).toString(32);\n hasMouseEnterLeave = 'onmouseenter' in domGlobals.document.documentElement;\n hasFocusIn = 'onfocusin' in domGlobals.document.documentElement;\n mouseEnterLeave = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n };\n count = 1;\n self.domLoaded = false;\n self.events = events;\n var executeHandlers = function (evt, id) {\n var callbackList, i, l, callback;\n var container = events[id];\n callbackList = container && container[evt.type];\n if (callbackList) {\n for (i = 0, l = callbackList.length; i < l; i++) {\n callback = callbackList[i];\n if (callback && callback.func.call(callback.scope, evt) === false) {\n evt.preventDefault();\n }\n if (evt.isImmediatePropagationStopped()) {\n return;\n }\n }\n }\n };\n self.bind = function (target, names, callback, scope) {\n var id, callbackList, i, name, fakeName, nativeHandler, capture;\n var win = domGlobals.window;\n var defaultNativeHandler = function (evt) {\n executeHandlers(fix(evt || win.event), id);\n };\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return;\n }\n if (!target[expando]) {\n id = count++;\n target[expando] = id;\n events[id] = {};\n } else {\n id = target[expando];\n }\n scope = scope || target;\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n nativeHandler = defaultNativeHandler;\n fakeName = capture = false;\n if (name === 'DOMContentLoaded') {\n name = 'ready';\n }\n if (self.domLoaded && name === 'ready' && target.readyState === 'complete') {\n callback.call(scope, fix({ type: name }));\n continue;\n }\n if (!hasMouseEnterLeave) {\n fakeName = mouseEnterLeave[name];\n if (fakeName) {\n nativeHandler = function (evt) {\n var current, related;\n current = evt.currentTarget;\n related = evt.relatedTarget;\n if (related && current.contains) {\n related = current.contains(related);\n } else {\n while (related && related !== current) {\n related = related.parentNode;\n }\n }\n if (!related) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';\n evt.target = current;\n executeHandlers(evt, id);\n }\n };\n }\n }\n if (!hasFocusIn && (name === 'focusin' || name === 'focusout')) {\n capture = true;\n fakeName = name === 'focusin' ? 'focus' : 'blur';\n nativeHandler = function (evt) {\n evt = fix(evt || win.event);\n evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';\n executeHandlers(evt, id);\n };\n }\n callbackList = events[id][name];\n if (!callbackList) {\n events[id][name] = callbackList = [{\n func: callback,\n scope: scope\n }];\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n callbackList.nativeHandler = nativeHandler;\n if (name === 'ready') {\n bindOnReady(target, nativeHandler, self);\n } else {\n addEvent(target, fakeName || name, nativeHandler, capture);\n }\n } else {\n if (name === 'ready' && self.domLoaded) {\n callback({ type: name });\n } else {\n callbackList.push({\n func: callback,\n scope: scope\n });\n }\n }\n }\n target = callbackList = 0;\n return callback;\n };\n self.unbind = function (target, names, callback) {\n var id, callbackList, i, ci, name, eventMap;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n id = target[expando];\n if (id) {\n eventMap = events[id];\n if (names) {\n names = names.split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n callbackList = eventMap[name];\n if (callbackList) {\n if (callback) {\n ci = callbackList.length;\n while (ci--) {\n if (callbackList[ci].func === callback) {\n var nativeHandler = callbackList.nativeHandler;\n var fakeName = callbackList.fakeName, capture = callbackList.capture;\n callbackList = callbackList.slice(0, ci).concat(callbackList.slice(ci + 1));\n callbackList.nativeHandler = nativeHandler;\n callbackList.fakeName = fakeName;\n callbackList.capture = capture;\n eventMap[name] = callbackList;\n }\n }\n }\n if (!callback || callbackList.length === 0) {\n delete eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n }\n }\n } else {\n for (name in eventMap) {\n callbackList = eventMap[name];\n removeEvent(target, callbackList.fakeName || name, callbackList.nativeHandler, callbackList.capture);\n }\n eventMap = {};\n }\n for (name in eventMap) {\n return self;\n }\n delete events[id];\n try {\n delete target[expando];\n } catch (ex) {\n target[expando] = null;\n }\n }\n return self;\n };\n self.fire = function (target, name, args) {\n var id;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n args = fix(null, args);\n args.type = name;\n args.target = target;\n do {\n id = target[expando];\n if (id) {\n executeHandlers(args, id);\n }\n target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;\n } while (target && !args.isPropagationStopped());\n return self;\n };\n self.clean = function (target) {\n var i, children;\n var unbind = self.unbind;\n if (!target || target.nodeType === 3 || target.nodeType === 8) {\n return self;\n }\n if (target[expando]) {\n unbind(target);\n }\n if (!target.getElementsByTagName) {\n target = target.document;\n }\n if (target && target.getElementsByTagName) {\n unbind(target);\n children = target.getElementsByTagName('*');\n i = children.length;\n while (i--) {\n target = children[i];\n if (target[expando]) {\n unbind(target);\n }\n }\n }\n return self;\n };\n self.destroy = function () {\n events = {};\n };\n self.cancel = function (e) {\n if (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n return false;\n };\n };\n EventUtils.Event = new EventUtils();\n EventUtils.Event.bind(domGlobals.window, 'ready', function () {\n });\n\n var i, support, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains$1, expando = 'sizzle' + -new Date(), preferredDoc = domGlobals.window.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), sortOrder = function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n }, strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, hasOwn = {}.hasOwnProperty, arr = [], pop = arr.pop, push_native = arr.push, push = arr.push, slice = arr.slice, indexOf$1 = arr.indexOf || function (elem) {\n var i = 0, len = this.length;\n for (; i < len; i++) {\n if (this[i] === elem) {\n return i;\n }\n }\n return -1;\n }, booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped', whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]', identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+', attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]', pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*'), rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g'), rpseudo = new RegExp(pseudos), ridentifier = new RegExp('^' + identifier + '$'), matchExpr = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\\d$/i, rnative = /^[^{]+\\{\\s*\\[native \\w/, rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/, rsibling = /[+~]/, rescape = /'|\\\\/g, runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig'), funescape = function (_, escaped, escapedWhitespace) {\n var high = '0x' + escaped - 65536;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n };\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? function (target, els) {\n push_native.apply(target, slice.call(els));\n } : function (target, els) {\n var j = target.length, i = 0;\n while (target[j++] = els[i++]) {\n }\n target.length = j - 1;\n }\n };\n }\n var Sizzle = function (selector, context, results, seed) {\n var match, elem, m, nodeType, i, groups, old, nid, newContext, newSelector;\n if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n setDocument(context);\n }\n context = context || document;\n results = results || [];\n if (!selector || typeof selector !== 'string') {\n return results;\n }\n if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {\n return [];\n }\n if (documentIsHTML && !seed) {\n if (match = rquickExpr.exec(selector)) {\n if (m = match[1]) {\n if (nodeType === 9) {\n elem = context.getElementById(m);\n if (elem && elem.parentNode) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains$1(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n nid = old = expando;\n newContext = context;\n newSelector = nodeType === 9 && selector;\n if (nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {\n groups = tokenize(selector);\n if (old = context.getAttribute('id')) {\n nid = old.replace(rescape, '\\\\$&');\n } else {\n context.setAttribute('id', nid);\n }\n nid = '[id=\\'' + nid + '\\'] ';\n i = groups.length;\n while (i--) {\n groups[i] = nid + toSelector(groups[i]);\n }\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n newSelector = groups.join(',');\n }\n if (newSelector) {\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {\n } finally {\n if (!old) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n return select(selector.replace(rtrim, '$1'), context, results, seed);\n };\n function createCache() {\n var keys = [];\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n function siblingCheck(a, b) {\n var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && (~b.sourceIndex || MAX_NEGATIVE) - (~a.sourceIndex || MAX_NEGATIVE);\n if (diff) {\n return diff;\n }\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n return a ? 1 : -1;\n }\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== strundefined && context;\n }\n support = Sizzle.support = {};\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare, doc = node ? node.ownerDocument || node : preferredDoc, parent = doc.defaultView;\n function getTop(win) {\n try {\n return win.top;\n } catch (ex) {\n }\n return null;\n }\n if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n document = doc;\n docElem = doc.documentElement;\n documentIsHTML = !isXML(doc);\n if (parent && parent !== getTop(parent)) {\n if (parent.addEventListener) {\n parent.addEventListener('unload', function () {\n setDocument();\n }, false);\n } else if (parent.attachEvent) {\n parent.attachEvent('onunload', function () {\n setDocument();\n });\n }\n }\n support.attributes = true;\n support.getElementsByTagName = true;\n support.getElementsByClassName = rnative.test(doc.getElementsByClassName);\n support.getById = true;\n Expr.find.ID = function (id, context) {\n if (typeof context.getElementById !== strundefined && documentIsHTML) {\n var m = context.getElementById(id);\n return m && m.parentNode ? [m] : [];\n }\n };\n Expr.filter.ID = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find.TAG = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== strundefined) {\n return context.getElementsByTagName(tag);\n }\n } : function (tag, context) {\n var elem, tmp = [], i = 0, results = context.getElementsByTagName(tag);\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n return tmp;\n }\n return results;\n };\n Expr.find.CLASS = support.getElementsByClassName && function (className, context) {\n if (documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n rbuggyMatches = [];\n rbuggyQSA = [];\n support.disconnectedMatch = true;\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n contains$1 = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === doc || a.ownerDocument === preferredDoc && contains$1(preferredDoc, a)) {\n return -1;\n }\n if (b === doc || b.ownerDocument === preferredDoc && contains$1(preferredDoc, b)) {\n return 1;\n }\n return sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n }\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];\n if (!aup || !bup) {\n return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf$1.call(sortInput, a) - indexOf$1.call(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n while (ap[i] === bp[i]) {\n i++;\n }\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n return doc;\n };\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n expr = expr.replace(rattributeQuotes, '=\\'$1\\']');\n if (support.matchesSelector && documentIsHTML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {\n }\n }\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n return contains$1(context, elem);\n };\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n var fn = Expr.attrHandle[name.toLowerCase()], val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n Sizzle.uniqueSort = function (results) {\n var elem, duplicates = [], j = 0, i = 0;\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n sortInput = null;\n return results;\n };\n getText = Sizzle.getText = function (elem) {\n var node, ret = '', i = 0, nodeType = elem.nodeType;\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n return ret;\n };\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n createPseudo: markFunction,\n match: matchExpr,\n attrHandle: {},\n find: {},\n relative: {\n '>': {\n dir: 'parentNode',\n first: true\n },\n ' ': { dir: 'parentNode' },\n '+': {\n dir: 'previousSibling',\n first: true\n },\n '~': { dir: 'previousSibling' }\n },\n preFilter: {\n ATTR: function (match) {\n match[1] = match[1].replace(runescape, funescape);\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n return match.slice(0, 4);\n },\n CHILD: function (match) {\n match[1] = match[1].toLowerCase();\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n return match;\n },\n PSEUDO: function (match) {\n var excess, unquoted = !match[6] && match[2];\n if (matchExpr.CHILD.test(match[0])) {\n return null;\n }\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n return match.slice(0, 3);\n }\n },\n filter: {\n TAG: function (nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n CLASS: function (className) {\n var pattern = classCache[className + ' '];\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');\n });\n },\n ATTR: function (name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n result += '';\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n CHILD: function (type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth', forward = type.slice(-4) !== 'last', ofType = what === 'of-type';\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? 'nextSibling' : 'previousSibling', parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType;\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n start = [forward ? parent.firstChild : parent.lastChild];\n if (forward && useCache) {\n outerCache = parent[expando] || (parent[expando] = {});\n cache = outerCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = cache[0] === dirruns && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n outerCache[type] = [\n dirruns,\n nodeIndex,\n diff\n ];\n break;\n }\n }\n } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {\n diff = cache[1];\n } else {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n (node[expando] || (node[expando] = {}))[type] = [\n dirruns,\n diff\n ];\n }\n if (node === elem) {\n break;\n }\n }\n }\n }\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n PSEUDO: function (pseudo, argument) {\n var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n if (fn[expando]) {\n return fn(argument);\n }\n if (fn.length > 1) {\n args = [\n pseudo,\n pseudo,\n '',\n argument\n ];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx, matched = fn(seed, argument), i = matched.length;\n while (i--) {\n idx = indexOf$1.call(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n return fn;\n }\n },\n pseudos: {\n not: markFunction(function (selector) {\n var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n return !results.pop();\n };\n }),\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n target: function (elem) {\n var hash = domGlobals.window.location && domGlobals.window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n root: function (elem) {\n return elem === docElem;\n },\n focus: function (elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n enabled: function (elem) {\n return elem.disabled === false;\n },\n disabled: function (elem) {\n return elem.disabled === true;\n },\n checked: function (elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n selected: function (elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n return elem.selected === true;\n },\n empty: function (elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n parent: function (elem) {\n return !Expr.pseudos.empty(elem);\n },\n header: function (elem) {\n return rheader.test(elem.nodeName);\n },\n input: function (elem) {\n return rinputs.test(elem.nodeName);\n },\n button: function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n text: function (elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n first: createPositionalPseudo(function () {\n return [0];\n }),\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n Expr.pseudos.nth = Expr.pseudos.eq;\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n for (i in {\n submit: true,\n reset: true\n }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n }\n function setFilters() {\n }\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + ' '];\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n matched = false;\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n if (!matched) {\n break;\n }\n }\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n function toSelector(tokens) {\n var i = 0, len = tokens.length, selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir, checkNonElements = base && dir === 'parentNode', doneName = done++;\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n } : function (elem, context, xml) {\n var oldCache, outerCache, newCache = [\n dirruns,\n doneName\n ];\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n if ((oldCache = outerCache[dir]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n outerCache[dir] = newCache;\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n };\n }\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n function multipleContexts(selector, contexts, results) {\n var i = 0, len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n function condense(unmatched, map, filter, context, xml) {\n var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n return newUnmatched;\n }\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf$1.call(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n function matcherFromTokens(tokens) {\n var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {\n return indexOf$1.call(checkContext, elem) > -1;\n }, implicitRelative, true), matchers = [function (elem, context, xml) {\n return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n }];\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n return elementMatcher(matchers);\n }\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, outermost) {\n var elem, j, matcher, matchedCount = 0, i = '0', unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG('*', outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;\n if (outermost) {\n outermostContext = context !== document && context;\n }\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n matchedCount += i;\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n setMatched = condense(setMatched);\n }\n push.apply(results, setMatched);\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n return unmatched;\n };\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n compile = Sizzle.compile = function (selector, match) {\n var i, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + ' '];\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n cached.selector = selector;\n }\n return cached;\n };\n select = Sizzle.select = function (selector, context, results, seed) {\n var i, tokens, token, type, find, compiled = typeof selector === 'function' && selector, match = !seed && tokenize(selector = compiled.selector || selector);\n results = results || [];\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && support.getById && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find.ID(token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n selector = selector.slice(tokens.shift().value.length);\n }\n i = matchExpr.needsContext.test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n break;\n }\n }\n }\n }\n (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n support.detectDuplicates = !!hasDuplicate;\n setDocument();\n support.sortDetached = true;\n\n var isArray$1 = Array.isArray;\n var toArray = function (obj) {\n var array = obj, i, l;\n if (!isArray$1(obj)) {\n array = [];\n for (i = 0, l = obj.length; i < l; i++) {\n array[i] = obj[i];\n }\n }\n return array;\n };\n var each$1 = function (o, cb, s) {\n var n, l;\n if (!o) {\n return 0;\n }\n s = s || o;\n if (o.length !== undefined) {\n for (n = 0, l = o.length; n < l; n++) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n } else {\n for (n in o) {\n if (o.hasOwnProperty(n)) {\n if (cb.call(s, o[n], n, o) === false) {\n return 0;\n }\n }\n }\n }\n return 1;\n };\n var map$1 = function (array, callback) {\n var out = [];\n each$1(array, function (item, index) {\n out.push(callback(item, index, array));\n });\n return out;\n };\n var filter$1 = function (a, f) {\n var o = [];\n each$1(a, function (v, index) {\n if (!f || f(v, index, a)) {\n o.push(v);\n }\n });\n return o;\n };\n var indexOf$2 = function (a, v) {\n var i, l;\n if (a) {\n for (i = 0, l = a.length; i < l; i++) {\n if (a[i] === v) {\n return i;\n }\n }\n }\n return -1;\n };\n var reduce = function (collection, iteratee, accumulator, thisArg) {\n var i = 0;\n if (arguments.length < 3) {\n accumulator = collection[0];\n }\n for (; i < collection.length; i++) {\n accumulator = iteratee.call(thisArg, accumulator, collection[i], i);\n }\n return accumulator;\n };\n var findIndex$1 = function (array, predicate, thisArg) {\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n if (predicate.call(thisArg, array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n var find$1 = function (array, predicate, thisArg) {\n var idx = findIndex$1(array, predicate, thisArg);\n if (idx !== -1) {\n return array[idx];\n }\n return undefined;\n };\n var last$1 = function (collection) {\n return collection[collection.length - 1];\n };\n var ArrUtils = {\n isArray: isArray$1,\n toArray: toArray,\n each: each$1,\n map: map$1,\n filter: filter$1,\n indexOf: indexOf$2,\n reduce: reduce,\n findIndex: findIndex$1,\n find: find$1,\n last: last$1\n };\n\n var whiteSpaceRegExp = /^\\s*|\\s*$/g;\n var trim = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp, '');\n };\n var is = function (obj, type) {\n if (!type) {\n return obj !== undefined;\n }\n if (type === 'array' && ArrUtils.isArray(obj)) {\n return true;\n }\n return typeof obj === type;\n };\n var makeMap = function (items, delim, map) {\n var i;\n items = items || [];\n delim = delim || ',';\n if (typeof items === 'string') {\n items = items.split(delim);\n }\n map = map || {};\n i = items.length;\n while (i--) {\n map[items[i]] = {};\n }\n return map;\n };\n var hasOwnProperty = function (obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n };\n var create = function (s, p, root) {\n var self = this;\n var sp, ns, cn, scn, c, de = 0;\n s = /^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(s);\n cn = s[3].match(/(^|\\.)(\\w+)$/i)[2];\n ns = self.createNS(s[3].replace(/\\.\\w+$/, ''), root);\n if (ns[cn]) {\n return;\n }\n if (s[2] === 'static') {\n ns[cn] = p;\n if (this.onCreate) {\n this.onCreate(s[2], s[3], ns[cn]);\n }\n return;\n }\n if (!p[cn]) {\n p[cn] = function () {\n };\n de = 1;\n }\n ns[cn] = p[cn];\n self.extend(ns[cn].prototype, p);\n if (s[5]) {\n sp = self.resolve(s[5]).prototype;\n scn = s[5].match(/\\.(\\w+)$/i)[1];\n c = ns[cn];\n if (de) {\n ns[cn] = function () {\n return sp[scn].apply(this, arguments);\n };\n } else {\n ns[cn] = function () {\n this.parent = sp[scn];\n return c.apply(this, arguments);\n };\n }\n ns[cn].prototype[cn] = ns[cn];\n self.each(sp, function (f, n) {\n ns[cn].prototype[n] = sp[n];\n });\n self.each(p, function (f, n) {\n if (sp[n]) {\n ns[cn].prototype[n] = function () {\n this.parent = sp[n];\n return f.apply(this, arguments);\n };\n } else {\n if (n !== cn) {\n ns[cn].prototype[n] = f;\n }\n }\n });\n }\n self.each(p.static, function (f, n) {\n ns[cn][n] = f;\n });\n };\n var extend = function (obj, ext) {\n var x = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n x[_i - 2] = arguments[_i];\n }\n var i, l, name;\n var args = arguments;\n var value;\n for (i = 1, l = args.length; i < l; i++) {\n ext = args[i];\n for (name in ext) {\n if (ext.hasOwnProperty(name)) {\n value = ext[name];\n if (value !== undefined) {\n obj[name] = value;\n }\n }\n }\n }\n return obj;\n };\n var walk = function (o, f, n, s) {\n s = s || this;\n if (o) {\n if (n) {\n o = o[n];\n }\n ArrUtils.each(o, function (o, i) {\n if (f.call(s, o, i, n) === false) {\n return false;\n }\n walk(o, f, n, s);\n });\n }\n };\n var createNS = function (n, o) {\n var i, v;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0; i < n.length; i++) {\n v = n[i];\n if (!o[v]) {\n o[v] = {};\n }\n o = o[v];\n }\n return o;\n };\n var resolve$1 = function (n, o) {\n var i, l;\n o = o || domGlobals.window;\n n = n.split('.');\n for (i = 0, l = n.length; i < l; i++) {\n o = o[n[i]];\n if (!o) {\n break;\n }\n }\n return o;\n };\n var explode = function (s, d) {\n if (!s || is(s, 'array')) {\n return s;\n }\n return ArrUtils.map(s.split(d || ','), trim);\n };\n var _addCacheSuffix = function (url) {\n var cacheSuffix = Env.cacheSuffix;\n if (cacheSuffix) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + cacheSuffix;\n }\n return url;\n };\n var Tools = {\n trim: trim,\n isArray: ArrUtils.isArray,\n is: is,\n toArray: ArrUtils.toArray,\n makeMap: makeMap,\n each: ArrUtils.each,\n map: ArrUtils.map,\n grep: ArrUtils.filter,\n inArray: ArrUtils.indexOf,\n hasOwn: hasOwnProperty,\n extend: extend,\n create: create,\n walk: walk,\n createNS: createNS,\n resolve: resolve$1,\n explode: explode,\n _addCacheSuffix: _addCacheSuffix\n };\n\n var doc = domGlobals.document, push$1 = Array.prototype.push, slice$1 = Array.prototype.slice;\n var rquickExpr$1 = /^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/;\n var Event = EventUtils.Event;\n var skipUniques = Tools.makeMap('children,contents,next,prev');\n var isDefined = function (obj) {\n return typeof obj !== 'undefined';\n };\n var isString$1 = function (obj) {\n return typeof obj === 'string';\n };\n var isWindow = function (obj) {\n return obj && obj === obj.window;\n };\n var createFragment = function (html, fragDoc) {\n var frag, node, container;\n fragDoc = fragDoc || doc;\n container = fragDoc.createElement('div');\n frag = fragDoc.createDocumentFragment();\n container.innerHTML = html;\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var domManipulate = function (targetNodes, sourceItem, callback, reverse) {\n var i;\n if (isString$1(sourceItem)) {\n sourceItem = createFragment(sourceItem, getElementDocument(targetNodes[0]));\n } else if (sourceItem.length && !sourceItem.nodeType) {\n sourceItem = DomQuery.makeArray(sourceItem);\n if (reverse) {\n for (i = sourceItem.length - 1; i >= 0; i--) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n } else {\n for (i = 0; i < sourceItem.length; i++) {\n domManipulate(targetNodes, sourceItem[i], callback, reverse);\n }\n }\n return targetNodes;\n }\n if (sourceItem.nodeType) {\n i = targetNodes.length;\n while (i--) {\n callback.call(targetNodes[i], sourceItem);\n }\n }\n return targetNodes;\n };\n var hasClass = function (node, className) {\n return node && className && (' ' + node.className + ' ').indexOf(' ' + className + ' ') !== -1;\n };\n var wrap = function (elements, wrapper, all) {\n var lastParent, newWrapper;\n wrapper = DomQuery(wrapper)[0];\n elements.each(function () {\n var self = this;\n if (!all || lastParent !== self.parentNode) {\n lastParent = self.parentNode;\n newWrapper = wrapper.cloneNode(false);\n self.parentNode.insertBefore(newWrapper, self);\n newWrapper.appendChild(self);\n } else {\n newWrapper.appendChild(self);\n }\n });\n return elements;\n };\n var numericCssMap = Tools.makeMap('fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom', ' ');\n var booleanMap = Tools.makeMap('checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected', ' ');\n var propFix = {\n for: 'htmlFor',\n class: 'className',\n readonly: 'readOnly'\n };\n var cssFix = { float: 'cssFloat' };\n var attrHooks = {}, cssHooks = {};\n var DomQuery = function (selector, context) {\n return new DomQuery.fn.init(selector, context);\n };\n var inArray = function (item, array) {\n var i;\n if (array.indexOf) {\n return array.indexOf(item);\n }\n i = array.length;\n while (i--) {\n if (array[i] === item) {\n return i;\n }\n }\n return -1;\n };\n var whiteSpaceRegExp$1 = /^\\s*|\\s*$/g;\n var trim$1 = function (str) {\n return str === null || str === undefined ? '' : ('' + str).replace(whiteSpaceRegExp$1, '');\n };\n var each$2 = function (obj, callback) {\n var length, key, i, value;\n if (obj) {\n length = obj.length;\n if (length === undefined) {\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n value = obj[key];\n if (callback.call(value, key, value) === false) {\n break;\n }\n }\n }\n } else {\n for (i = 0; i < length; i++) {\n value = obj[i];\n if (callback.call(value, i, value) === false) {\n break;\n }\n }\n }\n }\n return obj;\n };\n var grep = function (array, callback) {\n var out = [];\n each$2(array, function (i, item) {\n if (callback(item, i)) {\n out.push(item);\n }\n });\n return out;\n };\n var getElementDocument = function (element) {\n if (!element) {\n return doc;\n }\n if (element.nodeType === 9) {\n return element;\n }\n return element.ownerDocument;\n };\n DomQuery.fn = DomQuery.prototype = {\n constructor: DomQuery,\n selector: '',\n context: null,\n length: 0,\n init: function (selector, context) {\n var self = this;\n var match, node;\n if (!selector) {\n return self;\n }\n if (selector.nodeType) {\n self.context = self[0] = selector;\n self.length = 1;\n return self;\n }\n if (context && context.nodeType) {\n self.context = context;\n } else {\n if (context) {\n return DomQuery(selector).attr(context);\n }\n self.context = context = domGlobals.document;\n }\n if (isString$1(selector)) {\n self.selector = selector;\n if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {\n match = [\n null,\n selector,\n null\n ];\n } else {\n match = rquickExpr$1.exec(selector);\n }\n if (match) {\n if (match[1]) {\n node = createFragment(selector, getElementDocument(context)).firstChild;\n while (node) {\n push$1.call(self, node);\n node = node.nextSibling;\n }\n } else {\n node = getElementDocument(context).getElementById(match[2]);\n if (!node) {\n return self;\n }\n if (node.id !== match[2]) {\n return self.find(selector);\n }\n self.length = 1;\n self[0] = node;\n }\n } else {\n return DomQuery(context).find(selector);\n }\n } else {\n this.add(selector, false);\n }\n return self;\n },\n toArray: function () {\n return Tools.toArray(this);\n },\n add: function (items, sort) {\n var self = this;\n var nodes, i;\n if (isString$1(items)) {\n return self.add(DomQuery(items));\n }\n if (sort !== false) {\n nodes = DomQuery.unique(self.toArray().concat(DomQuery.makeArray(items)));\n self.length = nodes.length;\n for (i = 0; i < nodes.length; i++) {\n self[i] = nodes[i];\n }\n } else {\n push$1.apply(self, DomQuery.makeArray(items));\n }\n return self;\n },\n attr: function (name, value) {\n var self = this;\n var hook;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.attr(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n var hook;\n if (this.nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n if (value === null) {\n this.removeAttribute(name, 2);\n } else {\n this.setAttribute(name, value, 2);\n }\n }\n });\n } else {\n if (self[0] && self[0].nodeType === 1) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n return hook.get(self[0], name);\n }\n if (booleanMap[name]) {\n return self.prop(name) ? name : undefined;\n }\n value = self[0].getAttribute(name, 2);\n if (value === null) {\n value = undefined;\n }\n }\n return value;\n }\n return self;\n },\n removeAttr: function (name) {\n return this.attr(name, null);\n },\n prop: function (name, value) {\n var self = this;\n name = propFix[name] || name;\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.prop(name, value);\n });\n } else if (isDefined(value)) {\n this.each(function () {\n if (this.nodeType === 1) {\n this[name] = value;\n }\n });\n } else {\n if (self[0] && self[0].nodeType && name in self[0]) {\n return self[0][name];\n }\n return value;\n }\n return self;\n },\n css: function (name, value) {\n var self = this;\n var elm, hook;\n var camel = function (name) {\n return name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n };\n var dashed = function (name) {\n return name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n };\n if (typeof name === 'object') {\n each$2(name, function (name, value) {\n self.css(name, value);\n });\n } else {\n if (isDefined(value)) {\n name = camel(name);\n if (typeof value === 'number' && !numericCssMap[name]) {\n value = value.toString() + 'px';\n }\n self.each(function () {\n var style = this.style;\n hook = cssHooks[name];\n if (hook && hook.set) {\n hook.set(this, value);\n return;\n }\n try {\n this.style[cssFix[name] || name] = value;\n } catch (ex) {\n }\n if (value === null || value === '') {\n if (style.removeProperty) {\n style.removeProperty(dashed(name));\n } else {\n style.removeAttribute(name);\n }\n }\n });\n } else {\n elm = self[0];\n hook = cssHooks[name];\n if (hook && hook.get) {\n return hook.get(elm);\n }\n if (elm.ownerDocument.defaultView) {\n try {\n return elm.ownerDocument.defaultView.getComputedStyle(elm, null).getPropertyValue(dashed(name));\n } catch (ex) {\n return undefined;\n }\n } else if (elm.currentStyle) {\n return elm.currentStyle[camel(name)];\n } else {\n return '';\n }\n }\n }\n return self;\n },\n remove: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n Event.clean(node);\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n return this;\n },\n empty: function () {\n var self = this;\n var node, i = this.length;\n while (i--) {\n node = self[i];\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n }\n return this;\n },\n html: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n try {\n while (i--) {\n self[i].innerHTML = value;\n }\n } catch (ex) {\n DomQuery(self[i]).empty().append(value);\n }\n return self;\n }\n return self[0] ? self[0].innerHTML : '';\n },\n text: function (value) {\n var self = this;\n var i;\n if (isDefined(value)) {\n i = self.length;\n while (i--) {\n if ('innerText' in self[i]) {\n self[i].innerText = value;\n } else {\n self[0].textContent = value;\n }\n }\n return self;\n }\n return self[0] ? self[0].innerText || self[0].textContent : '';\n },\n append: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.appendChild(node);\n }\n });\n },\n prepend: function () {\n return domManipulate(this, arguments, function (node) {\n if (this.nodeType === 1 || this.host && this.host.nodeType === 1) {\n this.insertBefore(node, this.firstChild);\n }\n }, true);\n },\n before: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this);\n });\n }\n return self;\n },\n after: function () {\n var self = this;\n if (self[0] && self[0].parentNode) {\n return domManipulate(self, arguments, function (node) {\n this.parentNode.insertBefore(node, this.nextSibling);\n }, true);\n }\n return self;\n },\n appendTo: function (val) {\n DomQuery(val).append(this);\n return this;\n },\n prependTo: function (val) {\n DomQuery(val).prepend(this);\n return this;\n },\n replaceWith: function (content) {\n return this.before(content).remove();\n },\n wrap: function (content) {\n return wrap(this, content);\n },\n wrapAll: function (content) {\n return wrap(this, content, true);\n },\n wrapInner: function (content) {\n this.each(function () {\n DomQuery(this).contents().wrapAll(content);\n });\n return this;\n },\n unwrap: function () {\n return this.parent().each(function () {\n DomQuery(this).replaceWith(this.childNodes);\n });\n },\n clone: function () {\n var result = [];\n this.each(function () {\n result.push(this.cloneNode(true));\n });\n return DomQuery(result);\n },\n addClass: function (className) {\n return this.toggleClass(className, true);\n },\n removeClass: function (className) {\n return this.toggleClass(className, false);\n },\n toggleClass: function (className, state) {\n var self = this;\n if (typeof className !== 'string') {\n return self;\n }\n if (className.indexOf(' ') !== -1) {\n each$2(className.split(' '), function () {\n self.toggleClass(this, state);\n });\n } else {\n self.each(function (index, node) {\n var existingClassName, classState;\n classState = hasClass(node, className);\n if (classState !== state) {\n existingClassName = node.className;\n if (classState) {\n node.className = trim$1((' ' + existingClassName + ' ').replace(' ' + className + ' ', ' '));\n } else {\n node.className += existingClassName ? ' ' + className : className;\n }\n }\n });\n }\n return self;\n },\n hasClass: function (className) {\n return hasClass(this[0], className);\n },\n each: function (callback) {\n return each$2(this, callback);\n },\n on: function (name, callback) {\n return this.each(function () {\n Event.bind(this, name, callback);\n });\n },\n off: function (name, callback) {\n return this.each(function () {\n Event.unbind(this, name, callback);\n });\n },\n trigger: function (name) {\n return this.each(function () {\n if (typeof name === 'object') {\n Event.fire(this, name.type, name);\n } else {\n Event.fire(this, name);\n }\n });\n },\n show: function () {\n return this.css('display', '');\n },\n hide: function () {\n return this.css('display', 'none');\n },\n slice: function () {\n return new DomQuery(slice$1.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n first: function () {\n return this.eq(0);\n },\n last: function () {\n return this.eq(-1);\n },\n find: function (selector) {\n var i, l;\n var ret = [];\n for (i = 0, l = this.length; i < l; i++) {\n DomQuery.find(selector, this[i], ret);\n }\n return DomQuery(ret);\n },\n filter: function (selector) {\n if (typeof selector === 'function') {\n return DomQuery(grep(this.toArray(), function (item, i) {\n return selector(i, item);\n }));\n }\n return DomQuery(DomQuery.filter(selector, this.toArray()));\n },\n closest: function (selector) {\n var result = [];\n if (selector instanceof DomQuery) {\n selector = selector[0];\n }\n this.each(function (i, node) {\n while (node) {\n if (typeof selector === 'string' && DomQuery(node).is(selector)) {\n result.push(node);\n break;\n } else if (node === selector) {\n result.push(node);\n break;\n }\n node = node.parentNode;\n }\n });\n return DomQuery(result);\n },\n offset: function (offset) {\n var elm, doc, docElm;\n var x = 0, y = 0, pos;\n if (!offset) {\n elm = this[0];\n if (elm) {\n doc = elm.ownerDocument;\n docElm = doc.documentElement;\n if (elm.getBoundingClientRect) {\n pos = elm.getBoundingClientRect();\n x = pos.left + (docElm.scrollLeft || doc.body.scrollLeft) - docElm.clientLeft;\n y = pos.top + (docElm.scrollTop || doc.body.scrollTop) - docElm.clientTop;\n }\n }\n return {\n left: x,\n top: y\n };\n }\n return this.css(offset);\n },\n push: push$1,\n sort: [].sort,\n splice: [].splice\n };\n Tools.extend(DomQuery, {\n extend: Tools.extend,\n makeArray: function (object) {\n if (isWindow(object) || object.nodeType) {\n return [object];\n }\n return Tools.toArray(object);\n },\n inArray: inArray,\n isArray: Tools.isArray,\n each: each$2,\n trim: trim$1,\n grep: grep,\n find: Sizzle,\n expr: Sizzle.selectors,\n unique: Sizzle.uniqueSort,\n text: Sizzle.getText,\n contains: Sizzle.contains,\n filter: function (expr, elems, not) {\n var i = elems.length;\n if (not) {\n expr = ':not(' + expr + ')';\n }\n while (i--) {\n if (elems[i].nodeType !== 1) {\n elems.splice(i, 1);\n }\n }\n if (elems.length === 1) {\n elems = DomQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [];\n } else {\n elems = DomQuery.find.matches(expr, elems);\n }\n return elems;\n }\n });\n var dir = function (el, prop, until) {\n var matched = [];\n var cur = el[prop];\n if (typeof until !== 'string' && until instanceof DomQuery) {\n until = until[0];\n }\n while (cur && cur.nodeType !== 9) {\n if (until !== undefined) {\n if (cur === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(cur).is(until)) {\n break;\n }\n }\n if (cur.nodeType === 1) {\n matched.push(cur);\n }\n cur = cur[prop];\n }\n return matched;\n };\n var sibling = function (node, siblingName, nodeType, until) {\n var result = [];\n if (until instanceof DomQuery) {\n until = until[0];\n }\n for (; node; node = node[siblingName]) {\n if (nodeType && node.nodeType !== nodeType) {\n continue;\n }\n if (until !== undefined) {\n if (node === until) {\n break;\n }\n if (typeof until === 'string' && DomQuery(node).is(until)) {\n break;\n }\n }\n result.push(node);\n }\n return result;\n };\n var firstSibling = function (node, siblingName, nodeType) {\n for (node = node[siblingName]; node; node = node[siblingName]) {\n if (node.nodeType === nodeType) {\n return node;\n }\n }\n return null;\n };\n each$2({\n parent: function (node) {\n var parent = node.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function (node) {\n return dir(node, 'parentNode');\n },\n next: function (node) {\n return firstSibling(node, 'nextSibling', 1);\n },\n prev: function (node) {\n return firstSibling(node, 'previousSibling', 1);\n },\n children: function (node) {\n return sibling(node.firstChild, 'nextSibling', 1);\n },\n contents: function (node) {\n return Tools.toArray((node.nodeName === 'iframe' ? node.contentDocument || node.contentWindow.document : node).childNodes);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n if (!skipUniques[name]) {\n result = DomQuery.unique(result);\n }\n if (name.indexOf('parents') === 0) {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (selector) {\n return result.filter(selector);\n }\n return result;\n };\n });\n each$2({\n parentsUntil: function (node, until) {\n return dir(node, 'parentNode', until);\n },\n nextUntil: function (node, until) {\n return sibling(node, 'nextSibling', 1, until).slice(1);\n },\n prevUntil: function (node, until) {\n return sibling(node, 'previousSibling', 1, until).slice(1);\n }\n }, function (name, fn) {\n DomQuery.fn[name] = function (selector, filter) {\n var self = this;\n var result = [];\n self.each(function () {\n var nodes = fn.call(result, this, selector, result);\n if (nodes) {\n if (DomQuery.isArray(nodes)) {\n result.push.apply(result, nodes);\n } else {\n result.push(nodes);\n }\n }\n });\n if (this.length > 1) {\n result = DomQuery.unique(result);\n if (name.indexOf('parents') === 0 || name === 'prevUntil') {\n result = result.reverse();\n }\n }\n result = DomQuery(result);\n if (filter) {\n return result.filter(filter);\n }\n return result;\n };\n });\n DomQuery.fn.is = function (selector) {\n return !!selector && this.filter(selector).length > 0;\n };\n DomQuery.fn.init.prototype = DomQuery.fn;\n DomQuery.overrideDefaults = function (callback) {\n var defaults;\n var sub = function (selector, context) {\n defaults = defaults || callback();\n if (arguments.length === 0) {\n selector = defaults.element;\n }\n if (!context) {\n context = defaults.context;\n }\n return new sub.fn.init(selector, context);\n };\n DomQuery.extend(sub, this);\n return sub;\n };\n var appendHooks = function (targetHooks, prop, hooks) {\n each$2(hooks, function (name, func) {\n targetHooks[name] = targetHooks[name] || {};\n targetHooks[name][prop] = func;\n });\n };\n if (Env.ie && Env.ie < 8) {\n appendHooks(attrHooks, 'get', {\n maxlength: function (elm) {\n var value = elm.maxLength;\n if (value === 2147483647) {\n return undefined;\n }\n return value;\n },\n size: function (elm) {\n var value = elm.size;\n if (value === 20) {\n return undefined;\n }\n return value;\n },\n class: function (elm) {\n return elm.className;\n },\n style: function (elm) {\n var value = elm.style.cssText;\n if (value.length === 0) {\n return undefined;\n }\n return value;\n }\n });\n appendHooks(attrHooks, 'set', {\n class: function (elm, value) {\n elm.className = value;\n },\n style: function (elm, value) {\n elm.style.cssText = value;\n }\n });\n }\n if (Env.ie && Env.ie < 9) {\n cssFix.float = 'styleFloat';\n appendHooks(cssHooks, 'set', {\n opacity: function (elm, value) {\n var style = elm.style;\n if (value === null || value === '') {\n style.removeAttribute('filter');\n } else {\n style.zoom = 1;\n style.filter = 'alpha(opacity=' + value * 100 + ')';\n }\n }\n });\n }\n DomQuery.attrHooks = attrHooks;\n DomQuery.cssHooks = cssHooks;\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$2 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$2(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie$1 = 'IE';\n var opera$1 = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie$1, current),\n isOpera: isBrowser(opera$1, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie$1),\n opera: constant(opera$1),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android$1 = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android$1, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android$1),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains$2 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var trim$2 = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n var lTrim = function (str) {\n return str.replace(/^\\s+/g, '');\n };\n var rTrim = function (str) {\n return str.replace(/\\s+$/g, '');\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$2(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$2(uastring, 'edge/') && contains$2(uastring, 'chrome') && contains$2(uastring, 'safari') && contains$2(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$2(uastring, 'chrome') && !contains$2(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$2(uastring, 'msie') || contains$2(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$2(uastring, 'safari') || contains$2(uastring, 'mobile/')) && contains$2(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$2(uastring, 'iphone') || contains$2(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var keys = Object.keys;\n var hasOwnProperty$1 = Object.hasOwnProperty;\n var each$3 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$2 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$3(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n var bifilter = function (obj, pred) {\n var t = {};\n var f = {};\n each$3(obj, function (x, i) {\n var branch = pred(x, i) ? t : f;\n branch[i] = x;\n });\n return {\n t: t,\n f: f\n };\n };\n var has = function (obj, key) {\n return hasOwnProperty$1.call(obj, key);\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$3(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has$1 = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$3(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var getAllRaw = function (element) {\n var css = {};\n var dom = element.dom();\n if (isSupported(dom)) {\n for (var i = 0; i < dom.style.length; i++) {\n var ruleName = dom.style.item(i);\n css[ruleName] = dom.style[ruleName];\n }\n }\n return css;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var toArray$1 = function (target, f) {\n var r = [];\n var recurse = function (e) {\n r.push(e);\n return f(e);\n };\n var cur = f(target);\n do {\n cur = cur.bind(recurse);\n } while (cur.isSome());\n return r;\n };\n var Recurse = { toArray: toArray$1 };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is$1 = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$3 = browser.isIE() ? ieContains : regularContains;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var documentElement = function (element) {\n return Element.fromDom(element.dom().ownerDocument.documentElement);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var prevSiblings = function (element) {\n return reverse(Recurse.toArray(element, prevSibling));\n };\n var nextSiblings = function (element) {\n return Recurse.toArray(element, nextSibling);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var childNodesCount = function (element) {\n return element.dom().childNodes.length;\n };\n var spot = Immutable('element', 'offset');\n\n var browser$1 = PlatformDetection$1.detect().browser;\n var firstElement = function (nodes) {\n return find(nodes, isElement);\n };\n var getTableCaptionDeltaY = function (elm) {\n if (browser$1.isFirefox() && name(elm) === 'table') {\n return firstElement(children(elm)).filter(function (elm) {\n return name(elm) === 'caption';\n }).bind(function (caption) {\n return firstElement(nextSiblings(caption)).map(function (body) {\n var bodyTop = body.dom().offsetTop;\n var captionTop = caption.dom().offsetTop;\n var captionHeight = caption.dom().offsetHeight;\n return bodyTop <= captionTop ? -captionHeight : 0;\n });\n }).getOr(0);\n } else {\n return 0;\n }\n };\n var getPos = function (body, elm, rootElm) {\n var x = 0, y = 0, offsetParent;\n var doc = body.ownerDocument;\n var pos;\n rootElm = rootElm ? rootElm : body;\n if (elm) {\n if (rootElm === body && elm.getBoundingClientRect && get$1(Element.fromDom(body), 'position') === 'static') {\n pos = elm.getBoundingClientRect();\n x = pos.left + (doc.documentElement.scrollLeft || body.scrollLeft) - doc.documentElement.clientLeft;\n y = pos.top + (doc.documentElement.scrollTop || body.scrollTop) - doc.documentElement.clientTop;\n return {\n x: x,\n y: y\n };\n }\n offsetParent = elm;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n offsetParent = elm.parentNode;\n while (offsetParent && offsetParent !== rootElm && offsetParent.nodeType) {\n x -= offsetParent.scrollLeft || 0;\n y -= offsetParent.scrollTop || 0;\n offsetParent = offsetParent.parentNode;\n }\n y += getTableCaptionDeltaY(Element.fromDom(elm));\n }\n return {\n x: x,\n y: y\n };\n };\n var Position = { getPos: getPos };\n\n var exports$1 = {}, module$1 = { exports: exports$1 };\n (function (define, exports, module, require) {\n (function (f) {\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = f();\n } else if (typeof define === 'function' && define.amd) {\n define([], f);\n } else {\n var g;\n if (typeof window !== 'undefined') {\n g = window;\n } else if (typeof global !== 'undefined') {\n g = global;\n } else if (typeof self !== 'undefined') {\n g = self;\n } else {\n g = this;\n }\n g.EphoxContactWrapper = f();\n }\n }(function () {\n return function () {\n function r(e, n, t) {\n function o(i, f) {\n if (!n[i]) {\n if (!e[i]) {\n var c = 'function' == typeof require && require;\n if (!f && c)\n return c(i, !0);\n if (u)\n return u(i, !0);\n var a = new Error('Cannot find module \\'' + i + '\\'');\n throw a.code = 'MODULE_NOT_FOUND', a;\n }\n var p = n[i] = { exports: {} };\n e[i][0].call(p.exports, function (r) {\n var n = e[i][1][r];\n return o(n || r);\n }, p, p.exports, r, e, n, t);\n }\n return n[i].exports;\n }\n for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++)\n o(t[i]);\n return o;\n }\n return r;\n }()({\n 1: [\n function (require, module, exports) {\n var process = module.exports = {};\n var cachedSetTimeout;\n var cachedClearTimeout;\n function defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n }\n function defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n }\n (function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n }());\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n }\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n }\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n }\n function drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n };\n function Item(fun, array) {\n this.fun = fun;\n this.array = array;\n }\n Item.prototype.run = function () {\n this.fun.apply(null, this.array);\n };\n process.title = 'browser';\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = '';\n process.versions = {};\n function noop() {\n }\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n process.listeners = function (name) {\n return [];\n };\n process.binding = function (name) {\n throw new Error('process.binding is not supported');\n };\n process.cwd = function () {\n return '/';\n };\n process.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n };\n process.umask = function () {\n return 0;\n };\n },\n {}\n ],\n 2: [\n function (require, module, exports) {\n (function (setImmediate) {\n (function (root) {\n var setTimeoutFunc = setTimeout;\n function noop() {\n }\n function bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n }\n function Promise(fn) {\n if (typeof this !== 'object')\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n }\n function handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n }\n function resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n }\n function reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n }\n function finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n }\n function Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n function doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n }\n Promise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n };\n Promise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n };\n Promise.all = function (arr) {\n var args = Array.prototype.slice.call(arr);\n return new Promise(function (resolve, reject) {\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n };\n Promise.resolve = function (value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n };\n Promise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n };\n Promise._immediateFn = typeof setImmediate === 'function' ? function (fn) {\n setImmediate(fn);\n } : function (fn) {\n setTimeoutFunc(fn, 0);\n };\n Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n };\n Promise._setImmediateFn = function _setImmediateFn(fn) {\n Promise._immediateFn = fn;\n };\n Promise._setUnhandledRejectionFn = function _setUnhandledRejectionFn(fn) {\n Promise._unhandledRejectionFn = fn;\n };\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Promise;\n } else if (!root.Promise) {\n root.Promise = Promise;\n }\n }(this));\n }.call(this, require('timers').setImmediate));\n },\n { 'timers': 3 }\n ],\n 3: [\n function (require, module, exports) {\n (function (setImmediate, clearImmediate) {\n var nextTick = require('process/browser.js').nextTick;\n var apply = Function.prototype.apply;\n var slice = Array.prototype.slice;\n var immediateIds = {};\n var nextImmediateId = 0;\n exports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n };\n exports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n };\n exports.clearTimeout = exports.clearInterval = function (timeout) {\n timeout.close();\n };\n function Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n }\n Timeout.prototype.unref = Timeout.prototype.ref = function () {\n };\n Timeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n };\n exports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n };\n exports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n };\n exports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n };\n exports.setImmediate = typeof setImmediate === 'function' ? setImmediate : function (fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n immediateIds[id] = true;\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n exports.clearImmediate(id);\n }\n });\n return id;\n };\n exports.clearImmediate = typeof clearImmediate === 'function' ? clearImmediate : function (id) {\n delete immediateIds[id];\n };\n }.call(this, require('timers').setImmediate, require('timers').clearImmediate));\n },\n {\n 'process/browser.js': 1,\n 'timers': 3\n }\n ],\n 4: [\n function (require, module, exports) {\n var promisePolyfill = require('promise-polyfill');\n var Global = function () {\n if (typeof window !== 'undefined') {\n return window;\n } else {\n return Function('return this;')();\n }\n }();\n module.exports = { boltExport: Global.Promise || promisePolyfill };\n },\n { 'promise-polyfill': 2 }\n ]\n }, {}, [4])(4);\n }));\n }(undefined, exports$1, module$1, undefined));\n var Promise = module$1.exports.boltExport;\n\n var nu$3 = function (baseFn) {\n var data = Option.none();\n var callbacks = [];\n var map = function (f) {\n return nu$3(function (nCallback) {\n get(function (data) {\n nCallback(f(data));\n });\n });\n };\n var get = function (nCallback) {\n if (isReady()) {\n call(nCallback);\n } else {\n callbacks.push(nCallback);\n }\n };\n var set = function (x) {\n data = Option.some(x);\n run(callbacks);\n callbacks = [];\n };\n var isReady = function () {\n return data.isSome();\n };\n var run = function (cbs) {\n each(cbs, call);\n };\n var call = function (cb) {\n data.each(function (x) {\n domGlobals.setTimeout(function () {\n cb(x);\n }, 0);\n });\n };\n baseFn(set);\n return {\n get: get,\n map: map,\n isReady: isReady\n };\n };\n var pure = function (a) {\n return nu$3(function (callback) {\n callback(a);\n });\n };\n var LazyValue = {\n nu: nu$3,\n pure: pure\n };\n\n var errorReporter = function (err) {\n domGlobals.setTimeout(function () {\n throw err;\n }, 0);\n };\n var make = function (run) {\n var get = function (callback) {\n run().then(callback, errorReporter);\n };\n var map = function (fab) {\n return make(function () {\n return run().then(fab);\n });\n };\n var bind = function (aFutureB) {\n return make(function () {\n return run().then(function (v) {\n return aFutureB(v).toPromise();\n });\n });\n };\n var anonBind = function (futureB) {\n return make(function () {\n return run().then(function () {\n return futureB.toPromise();\n });\n });\n };\n var toLazy = function () {\n return LazyValue.nu(get);\n };\n var toCached = function () {\n var cache = null;\n return make(function () {\n if (cache === null) {\n cache = run();\n }\n return cache;\n });\n };\n var toPromise = run;\n return {\n map: map,\n bind: bind,\n anonBind: anonBind,\n toLazy: toLazy,\n toCached: toCached,\n toPromise: toPromise,\n get: get\n };\n };\n var nu$4 = function (baseFn) {\n return make(function () {\n return new Promise(baseFn);\n });\n };\n var pure$1 = function (a) {\n return make(function () {\n return Promise.resolve(a);\n });\n };\n var Future = {\n nu: nu$4,\n pure: pure$1\n };\n\n var par = function (asyncValues, nu) {\n return nu(function (callback) {\n var r = [];\n var count = 0;\n var cb = function (i) {\n return function (value) {\n r[i] = value;\n count++;\n if (count >= asyncValues.length) {\n callback(r);\n }\n };\n };\n if (asyncValues.length === 0) {\n callback([]);\n } else {\n each(asyncValues, function (asyncValue, i) {\n asyncValue.get(cb(i));\n });\n }\n });\n };\n\n var par$1 = function (futures) {\n return par(futures, Future.nu);\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n function StyleSheetLoader(document, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var idCount = 0;\n var loadedStates = {};\n var maxLoadTime;\n maxLoadTime = settings.maxLoadTime || 5000;\n var appendToHead = function (node) {\n document.getElementsByTagName('head')[0].appendChild(node);\n };\n var load = function (url, loadedCallback, errorCallback) {\n var link, style, startTime, state;\n var passed = function () {\n var callbacks = state.passed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 2;\n state.passed = [];\n state.failed = [];\n };\n var failed = function () {\n var callbacks = state.failed;\n var i = callbacks.length;\n while (i--) {\n callbacks[i]();\n }\n state.status = 3;\n state.passed = [];\n state.failed = [];\n };\n var isOldWebKit = function () {\n var webKitChunks = domGlobals.navigator.userAgent.match(/WebKit\\/(\\d*)/);\n return !!(webKitChunks && parseInt(webKitChunks[1], 10) < 536);\n };\n var wait = function (testCallback, waitCallback) {\n if (!testCallback()) {\n if (new Date().getTime() - startTime < maxLoadTime) {\n Delay.setTimeout(waitCallback);\n } else {\n failed();\n }\n }\n };\n var waitForWebKitLinkLoaded = function () {\n wait(function () {\n var styleSheets = document.styleSheets;\n var styleSheet, i = styleSheets.length, owner;\n while (i--) {\n styleSheet = styleSheets[i];\n owner = styleSheet.ownerNode ? styleSheet.ownerNode : styleSheet.owningElement;\n if (owner && owner.id === link.id) {\n passed();\n return true;\n }\n }\n }, waitForWebKitLinkLoaded);\n };\n var waitForGeckoLinkLoaded = function () {\n wait(function () {\n try {\n var cssRules = style.sheet.cssRules;\n passed();\n return !!cssRules;\n } catch (ex) {\n }\n }, waitForGeckoLinkLoaded);\n };\n url = Tools._addCacheSuffix(url);\n if (!loadedStates[url]) {\n state = {\n passed: [],\n failed: []\n };\n loadedStates[url] = state;\n } else {\n state = loadedStates[url];\n }\n if (loadedCallback) {\n state.passed.push(loadedCallback);\n }\n if (errorCallback) {\n state.failed.push(errorCallback);\n }\n if (state.status === 1) {\n return;\n }\n if (state.status === 2) {\n passed();\n return;\n }\n if (state.status === 3) {\n failed();\n return;\n }\n state.status = 1;\n link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.id = 'u' + idCount++;\n link.async = false;\n link.defer = false;\n startTime = new Date().getTime();\n if (settings.contentCssCors) {\n link.crossOrigin = 'anonymous';\n }\n if ('onload' in link && !isOldWebKit()) {\n link.onload = waitForWebKitLinkLoaded;\n link.onerror = failed;\n } else {\n if (domGlobals.navigator.userAgent.indexOf('Firefox') > 0) {\n style = document.createElement('style');\n style.textContent = '@import \"' + url + '\"';\n waitForGeckoLinkLoaded();\n appendToHead(style);\n return;\n }\n waitForWebKitLinkLoaded();\n }\n appendToHead(link);\n link.href = url;\n };\n var loadF = function (url) {\n return Future.nu(function (resolve) {\n load(url, compose(resolve, constant(Result.value(url))), compose(resolve, constant(Result.error(url))));\n });\n };\n var unbox = function (result) {\n return result.fold(identity, identity);\n };\n var loadAll = function (urls, success, failure) {\n par$1(map(urls, loadF)).get(function (result) {\n var parts = partition(result, function (r) {\n return r.isValue();\n });\n if (parts.fail.length > 0) {\n failure(parts.fail.map(unbox));\n } else {\n success(parts.pass.map(unbox));\n }\n });\n };\n return {\n load: load,\n loadAll: loadAll\n };\n }\n\n function TreeWalker (startNode, rootNode) {\n var node = startNode;\n var findSibling = function (node, startName, siblingName, shallow) {\n var sibling, parent;\n if (node) {\n if (!shallow && node[startName]) {\n return node[startName];\n }\n if (node !== rootNode) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parentNode; parent && parent !== rootNode; parent = parent.parentNode) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n }\n };\n var findPreviousNode = function (node, startName, siblingName, shallow) {\n var sibling, parent, child;\n if (node) {\n sibling = node[siblingName];\n if (rootNode && sibling === rootNode) {\n return;\n }\n if (sibling) {\n if (!shallow) {\n for (child = sibling[startName]; child; child = child[startName]) {\n if (!child[startName]) {\n return child;\n }\n }\n }\n return sibling;\n }\n parent = node.parentNode;\n if (parent && parent !== rootNode) {\n return parent;\n }\n }\n };\n this.current = function () {\n return node;\n };\n this.next = function (shallow) {\n node = findSibling(node, 'firstChild', 'nextSibling', shallow);\n return node;\n };\n this.prev = function (shallow) {\n node = findSibling(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n this.prev2 = function (shallow) {\n node = findPreviousNode(node, 'lastChild', 'previousSibling', shallow);\n return node;\n };\n }\n\n var blocks = [\n 'article',\n 'aside',\n 'details',\n 'div',\n 'dt',\n 'figcaption',\n 'footer',\n 'form',\n 'fieldset',\n 'header',\n 'hgroup',\n 'html',\n 'main',\n 'nav',\n 'section',\n 'summary',\n 'body',\n 'p',\n 'dl',\n 'multicol',\n 'dd',\n 'figure',\n 'address',\n 'center',\n 'blockquote',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'listing',\n 'xmp',\n 'pre',\n 'plaintext',\n 'menu',\n 'dir',\n 'ul',\n 'ol',\n 'li',\n 'hr',\n 'table',\n 'tbody',\n 'thead',\n 'tfoot',\n 'th',\n 'tr',\n 'td',\n 'caption'\n ];\n var voids = [\n 'area',\n 'base',\n 'basefont',\n 'br',\n 'col',\n 'frame',\n 'hr',\n 'img',\n 'input',\n 'isindex',\n 'link',\n 'meta',\n 'param',\n 'embed',\n 'source',\n 'wbr',\n 'track'\n ];\n var tableCells = [\n 'td',\n 'th'\n ];\n var tableSections = [\n 'thead',\n 'tbody',\n 'tfoot'\n ];\n var textBlocks = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div',\n 'address',\n 'pre',\n 'form',\n 'blockquote',\n 'center',\n 'dir',\n 'fieldset',\n 'header',\n 'footer',\n 'article',\n 'section',\n 'hgroup',\n 'aside',\n 'nav',\n 'figure'\n ];\n var headings = [\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ];\n var listItems = [\n 'li',\n 'dd',\n 'dt'\n ];\n var lists = [\n 'ul',\n 'ol',\n 'dl'\n ];\n var wsElements = [\n 'pre',\n 'script',\n 'textarea',\n 'style'\n ];\n var lazyLookup = function (items) {\n var lookup;\n return function (node) {\n lookup = lookup ? lookup : mapToObject(items, constant(true));\n return lookup.hasOwnProperty(name(node));\n };\n };\n var isHeading = lazyLookup(headings);\n var isBlock = lazyLookup(blocks);\n var isInline = function (node) {\n return isElement(node) && !isBlock(node);\n };\n var isBr = function (node) {\n return isElement(node) && name(node) === 'br';\n };\n var isTextBlock = lazyLookup(textBlocks);\n var isList = lazyLookup(lists);\n var isListItem = lazyLookup(listItems);\n var isVoid = lazyLookup(voids);\n var isTableSection = lazyLookup(tableSections);\n var isTableCell = lazyLookup(tableCells);\n var isWsPreserveElement = lazyLookup(wsElements);\n\n var isNodeType = function (type) {\n return function (node) {\n return !!node && node.nodeType === type;\n };\n };\n var isRestrictedNode = function (node) {\n return !!node && !Object.getPrototypeOf(node);\n };\n var isElement$1 = isNodeType(1);\n var matchNodeNames = function (names) {\n var items = names.toLowerCase().split(' ');\n return function (node) {\n var i, name;\n if (node && node.nodeType) {\n name = node.nodeName.toLowerCase();\n for (i = 0; i < items.length; i++) {\n if (name === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var matchStyleValues = function (name, values) {\n var items = values.toLowerCase().split(' ');\n return function (node) {\n var i, cssValue;\n if (isElement$1(node)) {\n for (i = 0; i < items.length; i++) {\n var computed = node.ownerDocument.defaultView.getComputedStyle(node, null);\n cssValue = computed ? computed.getPropertyValue(name) : null;\n if (cssValue === items[i]) {\n return true;\n }\n }\n }\n return false;\n };\n };\n var hasPropValue = function (propName, propValue) {\n return function (node) {\n return isElement$1(node) && node[propName] === propValue;\n };\n };\n var hasAttribute = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.hasAttribute(attrName);\n };\n };\n var hasAttributeValue = function (attrName, attrValue) {\n return function (node) {\n return isElement$1(node) && node.getAttribute(attrName) === attrValue;\n };\n };\n var isBogus = function (node) {\n return isElement$1(node) && node.hasAttribute('data-mce-bogus');\n };\n var isBogusAll = function (node) {\n return isElement$1(node) && node.getAttribute('data-mce-bogus') === 'all';\n };\n var isTable = function (node) {\n return isElement$1(node) && node.tagName === 'TABLE';\n };\n var hasContentEditableState = function (value) {\n return function (node) {\n if (isElement$1(node)) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isText$1 = isNodeType(3);\n var isComment = isNodeType(8);\n var isDocument = isNodeType(9);\n var isDocumentFragment = isNodeType(11);\n var isBr$1 = matchNodeNames('br');\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var NodeType = {\n isText: isText$1,\n isElement: isElement$1,\n isComment: isComment,\n isDocument: isDocument,\n isDocumentFragment: isDocumentFragment,\n isBr: isBr$1,\n isContentEditableTrue: isContentEditableTrue,\n isContentEditableFalse: isContentEditableFalse,\n isRestrictedNode: isRestrictedNode,\n matchNodeNames: matchNodeNames,\n hasPropValue: hasPropValue,\n hasAttribute: hasAttribute,\n hasAttributeValue: hasAttributeValue,\n matchStyleValues: matchStyleValues,\n isBogus: isBogus,\n isBogusAll: isBogusAll,\n isTable: isTable\n };\n\n var surroundedBySpans = function (node) {\n var previousIsSpan = node.previousSibling && node.previousSibling.nodeName === 'SPAN';\n var nextIsSpan = node.nextSibling && node.nextSibling.nodeName === 'SPAN';\n return previousIsSpan && nextIsSpan;\n };\n var isBookmarkNode = function (node) {\n return node && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var trimNode = function (dom, node) {\n var i, children = node.childNodes;\n if (NodeType.isElement(node) && isBookmarkNode(node)) {\n return;\n }\n for (i = children.length - 1; i >= 0; i--) {\n trimNode(dom, children[i]);\n }\n if (NodeType.isDocument(node) === false) {\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n var trimmedLength = Tools.trim(node.nodeValue).length;\n if (dom.isBlock(node.parentNode) || trimmedLength > 0) {\n return;\n }\n if (trimmedLength === 0 && surroundedBySpans(node)) {\n return;\n }\n } else if (NodeType.isElement(node)) {\n children = node.childNodes;\n if (children.length === 1 && isBookmarkNode(children[0])) {\n node.parentNode.insertBefore(children[0], node);\n }\n if (children.length || isVoid(Element.fromDom(node))) {\n return;\n }\n }\n dom.remove(node);\n }\n return node;\n };\n var TrimNode = { trimNode: trimNode };\n\n var makeMap$1 = Tools.makeMap;\n var namedEntities, baseEntities, reverseEntities;\n var attrsCharsRegExp = /[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var textCharsRegExp = /[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n var rawCharsRegExp = /[<>&\\\"\\']/g;\n var entityRegExp = /&#([a-z0-9]+);?|&([a-z0-9]+);/gi;\n var asciiMap = {\n 128: '\\u20AC',\n 130: '\\u201A',\n 131: '\\u0192',\n 132: '\\u201E',\n 133: '\\u2026',\n 134: '\\u2020',\n 135: '\\u2021',\n 136: '\\u02c6',\n 137: '\\u2030',\n 138: '\\u0160',\n 139: '\\u2039',\n 140: '\\u0152',\n 142: '\\u017d',\n 145: '\\u2018',\n 146: '\\u2019',\n 147: '\\u201C',\n 148: '\\u201D',\n 149: '\\u2022',\n 150: '\\u2013',\n 151: '\\u2014',\n 152: '\\u02DC',\n 153: '\\u2122',\n 154: '\\u0161',\n 155: '\\u203A',\n 156: '\\u0153',\n 158: '\\u017e',\n 159: '\\u0178'\n };\n baseEntities = {\n '\"': '"',\n '\\'': ''',\n '<': '<',\n '>': '>',\n '&': '&',\n '`': '`'\n };\n reverseEntities = {\n '<': '<',\n '>': '>',\n '&': '&',\n '"': '\"',\n ''': '\\''\n };\n var nativeDecode = function (text) {\n var elm;\n elm = Element.fromTag('div').dom();\n elm.innerHTML = text;\n return elm.textContent || elm.innerText || text;\n };\n var buildEntitiesLookup = function (items, radix) {\n var i, chr, entity;\n var lookup = {};\n if (items) {\n items = items.split(',');\n radix = radix || 10;\n for (i = 0; i < items.length; i += 2) {\n chr = String.fromCharCode(parseInt(items[i], radix));\n if (!baseEntities[chr]) {\n entity = '&' + items[i + 1] + ';';\n lookup[chr] = entity;\n lookup[entity] = chr;\n }\n }\n return lookup;\n }\n };\n namedEntities = buildEntitiesLookup('50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,' + '5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,' + '5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,' + '5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,' + '68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,' + '6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,' + '6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,' + '75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,' + '7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,' + '7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,' + 'sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,' + 'st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,' + 't9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,' + 'tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,' + 'u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,' + '81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,' + '8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,' + '8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,' + '8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,' + '8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,' + 'nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,' + 'rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,' + 'Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,' + '80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,' + '811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro', 32);\n var encodeRaw = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeAllRaw = function (text) {\n return ('' + text).replace(rawCharsRegExp, function (chr) {\n return baseEntities[chr] || chr;\n });\n };\n var encodeNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeNamed = function (text, attr, entities) {\n entities = entities || namedEntities;\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n return baseEntities[chr] || entities[chr] || chr;\n });\n };\n var getEncodeFunc = function (name, entities) {\n var entitiesMap = buildEntitiesLookup(entities) || namedEntities;\n var encodeNamedAndNumeric = function (text, attr) {\n return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function (chr) {\n if (baseEntities[chr] !== undefined) {\n return baseEntities[chr];\n }\n if (entitiesMap[chr] !== undefined) {\n return entitiesMap[chr];\n }\n if (chr.length > 1) {\n return '&#' + ((chr.charCodeAt(0) - 55296) * 1024 + (chr.charCodeAt(1) - 56320) + 65536) + ';';\n }\n return '&#' + chr.charCodeAt(0) + ';';\n });\n };\n var encodeCustomNamed = function (text, attr) {\n return encodeNamed(text, attr, entitiesMap);\n };\n var nameMap = makeMap$1(name.replace(/\\+/g, ','));\n if (nameMap.named && nameMap.numeric) {\n return encodeNamedAndNumeric;\n }\n if (nameMap.named) {\n if (entities) {\n return encodeCustomNamed;\n }\n return encodeNamed;\n }\n if (nameMap.numeric) {\n return encodeNumeric;\n }\n return encodeRaw;\n };\n var decode = function (text) {\n return text.replace(entityRegExp, function (all, numeric) {\n if (numeric) {\n if (numeric.charAt(0).toLowerCase() === 'x') {\n numeric = parseInt(numeric.substr(1), 16);\n } else {\n numeric = parseInt(numeric, 10);\n }\n if (numeric > 65535) {\n numeric -= 65536;\n return String.fromCharCode(55296 + (numeric >> 10), 56320 + (numeric & 1023));\n }\n return asciiMap[numeric] || String.fromCharCode(numeric);\n }\n return reverseEntities[all] || namedEntities[all] || nativeDecode(all);\n });\n };\n var Entities = {\n encodeRaw: encodeRaw,\n encodeAllRaw: encodeAllRaw,\n encodeNumeric: encodeNumeric,\n encodeNamed: encodeNamed,\n getEncodeFunc: getEncodeFunc,\n decode: decode\n };\n\n var mapCache = {}, dummyObj = {};\n var makeMap$2 = Tools.makeMap, each$4 = Tools.each, extend$1 = Tools.extend, explode$1 = Tools.explode, inArray$1 = Tools.inArray;\n var split = function (items, delim) {\n items = Tools.trim(items);\n return items ? items.split(delim || ' ') : [];\n };\n var compileSchema = function (type) {\n var schema = {};\n var globalAttributes, blockContent;\n var phrasingContent, flowContent, html4BlockContent, html4PhrasingContent;\n var add = function (name, attributes, children) {\n var ni, attributesOrder, element;\n var arrayToMap = function (array, obj) {\n var map = {};\n var i, l;\n for (i = 0, l = array.length; i < l; i++) {\n map[array[i]] = obj || {};\n }\n return map;\n };\n children = children || [];\n attributes = attributes || '';\n if (typeof children === 'string') {\n children = split(children);\n }\n name = split(name);\n ni = name.length;\n while (ni--) {\n attributesOrder = split([\n globalAttributes,\n attributes\n ].join(' '));\n element = {\n attributes: arrayToMap(attributesOrder),\n attributesOrder: attributesOrder,\n children: arrayToMap(children, dummyObj)\n };\n schema[name[ni]] = element;\n }\n };\n var addAttrs = function (name, attributes) {\n var ni, schemaItem, i, l;\n name = split(name);\n ni = name.length;\n attributes = split(attributes);\n while (ni--) {\n schemaItem = schema[name[ni]];\n for (i = 0, l = attributes.length; i < l; i++) {\n schemaItem.attributes[attributes[i]] = {};\n schemaItem.attributesOrder.push(attributes[i]);\n }\n }\n };\n if (mapCache[type]) {\n return mapCache[type];\n }\n globalAttributes = 'id accesskey class dir lang style tabindex title role';\n blockContent = 'address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul';\n phrasingContent = 'a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd ' + 'label map noscript object q s samp script select small span strong sub sup ' + 'textarea u var #text #comment';\n if (type !== 'html4') {\n globalAttributes += ' contenteditable contextmenu draggable dropzone ' + 'hidden spellcheck translate';\n blockContent += ' article aside details dialog figure main header footer hgroup section nav';\n phrasingContent += ' audio canvas command datalist mark meter output picture ' + 'progress time wbr video ruby bdi keygen';\n }\n if (type !== 'html5-strict') {\n globalAttributes += ' xml:lang';\n html4PhrasingContent = 'acronym applet basefont big font strike tt';\n phrasingContent = [\n phrasingContent,\n html4PhrasingContent\n ].join(' ');\n each$4(split(html4PhrasingContent), function (name) {\n add(name, '', phrasingContent);\n });\n html4BlockContent = 'center dir isindex noframes';\n blockContent = [\n blockContent,\n html4BlockContent\n ].join(' ');\n flowContent = [\n blockContent,\n phrasingContent\n ].join(' ');\n each$4(split(html4BlockContent), function (name) {\n add(name, '', flowContent);\n });\n }\n flowContent = flowContent || [\n blockContent,\n phrasingContent\n ].join(' ');\n add('html', 'manifest', 'head body');\n add('head', '', 'base command link meta noscript script style title');\n add('title hr noscript br');\n add('base', 'href target');\n add('link', 'href rel media hreflang type sizes hreflang');\n add('meta', 'name http-equiv content charset');\n add('style', 'media type scoped');\n add('script', 'src async defer type charset');\n add('body', 'onafterprint onbeforeprint onbeforeunload onblur onerror onfocus ' + 'onhashchange onload onmessage onoffline ononline onpagehide onpageshow ' + 'onpopstate onresize onscroll onstorage onunload', flowContent);\n add('address dt dd div caption', '', flowContent);\n add('h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn', '', phrasingContent);\n add('blockquote', 'cite', flowContent);\n add('ol', 'reversed start type', 'li');\n add('ul', '', 'li');\n add('li', 'value', flowContent);\n add('dl', '', 'dt dd');\n add('a', 'href target rel media hreflang type', phrasingContent);\n add('q', 'cite', phrasingContent);\n add('ins del', 'cite datetime', flowContent);\n add('img', 'src sizes srcset alt usemap ismap width height');\n add('iframe', 'src name width height', flowContent);\n add('embed', 'src type width height');\n add('object', 'data type typemustmatch name usemap form width height', [\n flowContent,\n 'param'\n ].join(' '));\n add('param', 'name value');\n add('map', 'name', [\n flowContent,\n 'area'\n ].join(' '));\n add('area', 'alt coords shape href target rel media hreflang type');\n add('table', 'border', 'caption colgroup thead tfoot tbody tr' + (type === 'html4' ? ' col' : ''));\n add('colgroup', 'span', 'col');\n add('col', 'span');\n add('tbody thead tfoot', '', 'tr');\n add('tr', '', 'td th');\n add('td', 'colspan rowspan headers', flowContent);\n add('th', 'colspan rowspan headers scope abbr', flowContent);\n add('form', 'accept-charset action autocomplete enctype method name novalidate target', flowContent);\n add('fieldset', 'disabled form name', [\n flowContent,\n 'legend'\n ].join(' '));\n add('label', 'form for', phrasingContent);\n add('input', 'accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate ' + 'formtarget height list max maxlength min multiple name pattern readonly required size src step type value width');\n add('button', 'disabled form formaction formenctype formmethod formnovalidate formtarget name type value', type === 'html4' ? flowContent : phrasingContent);\n add('select', 'disabled form multiple name required size', 'option optgroup');\n add('optgroup', 'disabled label', 'option');\n add('option', 'disabled label selected value');\n add('textarea', 'cols dirname disabled form maxlength name readonly required rows wrap');\n add('menu', 'type label', [\n flowContent,\n 'li'\n ].join(' '));\n add('noscript', '', flowContent);\n if (type !== 'html4') {\n add('wbr');\n add('ruby', '', [\n phrasingContent,\n 'rt rp'\n ].join(' '));\n add('figcaption', '', flowContent);\n add('mark rt rp summary bdi', '', phrasingContent);\n add('canvas', 'width height', flowContent);\n add('video', 'src crossorigin poster preload autoplay mediagroup loop ' + 'muted controls width height buffered', [\n flowContent,\n 'track source'\n ].join(' '));\n add('audio', 'src crossorigin preload autoplay mediagroup loop muted controls ' + 'buffered volume', [\n flowContent,\n 'track source'\n ].join(' '));\n add('picture', '', 'img source');\n add('source', 'src srcset type media sizes');\n add('track', 'kind src srclang label default');\n add('datalist', '', [\n phrasingContent,\n 'option'\n ].join(' '));\n add('article section nav aside main header footer', '', flowContent);\n add('hgroup', '', 'h1 h2 h3 h4 h5 h6');\n add('figure', '', [\n flowContent,\n 'figcaption'\n ].join(' '));\n add('time', 'datetime', phrasingContent);\n add('dialog', 'open', flowContent);\n add('command', 'type label icon disabled checked radiogroup command');\n add('output', 'for form name', phrasingContent);\n add('progress', 'value max', phrasingContent);\n add('meter', 'value min max low high optimum', phrasingContent);\n add('details', 'open', [\n flowContent,\n 'summary'\n ].join(' '));\n add('keygen', 'autofocus challenge disabled form keytype name');\n }\n if (type !== 'html5-strict') {\n addAttrs('script', 'language xml:space');\n addAttrs('style', 'xml:space');\n addAttrs('object', 'declare classid code codebase codetype archive standby align border hspace vspace');\n addAttrs('embed', 'align name hspace vspace');\n addAttrs('param', 'valuetype type');\n addAttrs('a', 'charset name rev shape coords');\n addAttrs('br', 'clear');\n addAttrs('applet', 'codebase archive code object alt name width height align hspace vspace');\n addAttrs('img', 'name longdesc align border hspace vspace');\n addAttrs('iframe', 'longdesc frameborder marginwidth marginheight scrolling align');\n addAttrs('font basefont', 'size color face');\n addAttrs('input', 'usemap align');\n addAttrs('select', 'onchange');\n addAttrs('textarea');\n addAttrs('h1 h2 h3 h4 h5 h6 div p legend caption', 'align');\n addAttrs('ul', 'type compact');\n addAttrs('li', 'type');\n addAttrs('ol dl menu dir', 'compact');\n addAttrs('pre', 'width xml:space');\n addAttrs('hr', 'align noshade size width');\n addAttrs('isindex', 'prompt');\n addAttrs('table', 'summary width frame rules cellspacing cellpadding align bgcolor');\n addAttrs('col', 'width align char charoff valign');\n addAttrs('colgroup', 'width align char charoff valign');\n addAttrs('thead', 'align char charoff valign');\n addAttrs('tr', 'align char charoff valign bgcolor');\n addAttrs('th', 'axis align char charoff valign nowrap bgcolor width height');\n addAttrs('form', 'accept');\n addAttrs('td', 'abbr axis scope align char charoff valign nowrap bgcolor width height');\n addAttrs('tfoot', 'align char charoff valign');\n addAttrs('tbody', 'align char charoff valign');\n addAttrs('area', 'nohref');\n addAttrs('body', 'background bgcolor text link vlink alink');\n }\n if (type !== 'html4') {\n addAttrs('input button select textarea', 'autofocus');\n addAttrs('input textarea', 'placeholder');\n addAttrs('a', 'download');\n addAttrs('link script img', 'crossorigin');\n addAttrs('iframe', 'sandbox seamless allowfullscreen');\n }\n each$4(split('a form meter progress dfn'), function (name) {\n if (schema[name]) {\n delete schema[name].children[name];\n }\n });\n delete schema.caption.children.table;\n delete schema.script;\n mapCache[type] = schema;\n return schema;\n };\n var compileElementMap = function (value, mode) {\n var styles;\n if (value) {\n styles = {};\n if (typeof value === 'string') {\n value = { '*': value };\n }\n each$4(value, function (value, key) {\n styles[key] = styles[key.toUpperCase()] = mode === 'map' ? makeMap$2(value, /[, ]/) : explode$1(value, /[, ]/);\n });\n }\n return styles;\n };\n function Schema(settings) {\n var elements = {};\n var children = {};\n var patternElements = [];\n var validStyles;\n var invalidStyles;\n var schemaItems;\n var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, validClasses;\n var blockElementsMap, nonEmptyElementsMap, moveCaretBeforeOnEnterElementsMap, textBlockElementsMap, textInlineElementsMap;\n var customElementsMap = {}, specialElements = {};\n var createLookupTable = function (option, defaultValue, extendWith) {\n var value = settings[option];\n if (!value) {\n value = mapCache[option];\n if (!value) {\n value = makeMap$2(defaultValue, ' ', makeMap$2(defaultValue.toUpperCase(), ' '));\n value = extend$1(value, extendWith);\n mapCache[option] = value;\n }\n } else {\n value = makeMap$2(value, /[, ]/, makeMap$2(value.toUpperCase(), /[, ]/));\n }\n return value;\n };\n settings = settings || {};\n schemaItems = compileSchema(settings.schema);\n if (settings.verify_html === false) {\n settings.valid_elements = '*[*]';\n }\n validStyles = compileElementMap(settings.valid_styles);\n invalidStyles = compileElementMap(settings.invalid_styles, 'map');\n validClasses = compileElementMap(settings.valid_classes, 'map');\n whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea video audio iframe object code');\n selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');\n shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link ' + 'meta param embed source wbr track');\n boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize ' + 'noshade nowrap readonly selected autoplay loop controls');\n nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object ' + 'script pre code', shortEndedElementsMap);\n moveCaretBeforeOnEnterElementsMap = createLookupTable('move_caret_before_on_enter_elements', 'table', nonEmptyElementsMap);\n textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' + 'blockquote center dir fieldset header footer article section hgroup aside main nav figure');\n blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' + 'th tr td li ol ul caption dl dt dd noscript menu isindex option ' + 'datalist select optgroup figcaption details summary', textBlockElementsMap);\n textInlineElementsMap = createLookupTable('text_inline_elements', 'span strong b em i font strike u var cite ' + 'dfn code mark q sup sub samp');\n each$4((settings.special || 'script noscript iframe noframes noembed title style textarea xmp').split(' '), function (name) {\n specialElements[name] = new RegExp(']*>', 'gi');\n });\n var patternToRegExp = function (str) {\n return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');\n };\n var addValidElements = function (validElements) {\n var ei, el, ai, al, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder, prefix, outputName, globalAttributes, globalAttributesOrder, key, value;\n var elementRuleRegExp = /^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/, attrRuleRegExp = /^([!\\-])?(\\w+[\\\\:]:\\w+|[^=:<]+)?(?:([=:<])(.*))?$/, hasPatternsRegExp = /[*?+]/;\n if (validElements) {\n validElements = split(validElements, ',');\n if (elements['@']) {\n globalAttributes = elements['@'].attributes;\n globalAttributesOrder = elements['@'].attributesOrder;\n }\n for (ei = 0, el = validElements.length; ei < el; ei++) {\n matches = elementRuleRegExp.exec(validElements[ei]);\n if (matches) {\n prefix = matches[1];\n elementName = matches[2];\n outputName = matches[3];\n attrData = matches[5];\n attributes = {};\n attributesOrder = [];\n element = {\n attributes: attributes,\n attributesOrder: attributesOrder\n };\n if (prefix === '#') {\n element.paddEmpty = true;\n }\n if (prefix === '-') {\n element.removeEmpty = true;\n }\n if (matches[4] === '!') {\n element.removeEmptyAttrs = true;\n }\n if (globalAttributes) {\n for (key in globalAttributes) {\n attributes[key] = globalAttributes[key];\n }\n attributesOrder.push.apply(attributesOrder, globalAttributesOrder);\n }\n if (attrData) {\n attrData = split(attrData, '|');\n for (ai = 0, al = attrData.length; ai < al; ai++) {\n matches = attrRuleRegExp.exec(attrData[ai]);\n if (matches) {\n attr = {};\n attrType = matches[1];\n attrName = matches[2].replace(/[\\\\:]:/g, ':');\n prefix = matches[3];\n value = matches[4];\n if (attrType === '!') {\n element.attributesRequired = element.attributesRequired || [];\n element.attributesRequired.push(attrName);\n attr.required = true;\n }\n if (attrType === '-') {\n delete attributes[attrName];\n attributesOrder.splice(inArray$1(attributesOrder, attrName), 1);\n continue;\n }\n if (prefix) {\n if (prefix === '=') {\n element.attributesDefault = element.attributesDefault || [];\n element.attributesDefault.push({\n name: attrName,\n value: value\n });\n attr.defaultValue = value;\n }\n if (prefix === ':') {\n element.attributesForced = element.attributesForced || [];\n element.attributesForced.push({\n name: attrName,\n value: value\n });\n attr.forcedValue = value;\n }\n if (prefix === '<') {\n attr.validValues = makeMap$2(value, '?');\n }\n }\n if (hasPatternsRegExp.test(attrName)) {\n element.attributePatterns = element.attributePatterns || [];\n attr.pattern = patternToRegExp(attrName);\n element.attributePatterns.push(attr);\n } else {\n if (!attributes[attrName]) {\n attributesOrder.push(attrName);\n }\n attributes[attrName] = attr;\n }\n }\n }\n }\n if (!globalAttributes && elementName === '@') {\n globalAttributes = attributes;\n globalAttributesOrder = attributesOrder;\n }\n if (outputName) {\n element.outputName = elementName;\n elements[outputName] = element;\n }\n if (hasPatternsRegExp.test(elementName)) {\n element.pattern = patternToRegExp(elementName);\n patternElements.push(element);\n } else {\n elements[elementName] = element;\n }\n }\n }\n }\n };\n var setValidElements = function (validElements) {\n elements = {};\n patternElements = [];\n addValidElements(validElements);\n each$4(schemaItems, function (element, name) {\n children[name] = element.children;\n });\n };\n var addCustomElements = function (customElements) {\n var customElementRegExp = /^(~)?(.+)$/;\n if (customElements) {\n mapCache.text_block_elements = mapCache.block_elements = null;\n each$4(split(customElements, ','), function (rule) {\n var matches = customElementRegExp.exec(rule), inline = matches[1] === '~', cloneName = inline ? 'span' : 'div', name = matches[2];\n children[name] = children[cloneName];\n customElementsMap[name] = cloneName;\n if (!inline) {\n blockElementsMap[name.toUpperCase()] = {};\n blockElementsMap[name] = {};\n }\n if (!elements[name]) {\n var customRule = elements[cloneName];\n customRule = extend$1({}, customRule);\n delete customRule.removeEmptyAttrs;\n delete customRule.removeEmpty;\n elements[name] = customRule;\n }\n each$4(children, function (element, elmName) {\n if (element[cloneName]) {\n children[elmName] = element = extend$1({}, children[elmName]);\n element[name] = element[cloneName];\n }\n });\n });\n }\n };\n var addValidChildren = function (validChildren) {\n var childRuleRegExp = /^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;\n mapCache[settings.schema] = null;\n if (validChildren) {\n each$4(split(validChildren, ','), function (rule) {\n var matches = childRuleRegExp.exec(rule);\n var parent, prefix;\n if (matches) {\n prefix = matches[1];\n if (prefix) {\n parent = children[matches[2]];\n } else {\n parent = children[matches[2]] = { '#comment': {} };\n }\n parent = children[matches[2]];\n each$4(split(matches[3], '|'), function (child) {\n if (prefix === '-') {\n delete parent[child];\n } else {\n parent[child] = {};\n }\n });\n }\n });\n }\n };\n var getElementRule = function (name) {\n var element = elements[name], i;\n if (element) {\n return element;\n }\n i = patternElements.length;\n while (i--) {\n element = patternElements[i];\n if (element.pattern.test(name)) {\n return element;\n }\n }\n };\n if (!settings.valid_elements) {\n each$4(schemaItems, function (element, name) {\n elements[name] = {\n attributes: element.attributes,\n attributesOrder: element.attributesOrder\n };\n children[name] = element.children;\n });\n if (settings.schema !== 'html5') {\n each$4(split('strong/b em/i'), function (item) {\n item = split(item, '/');\n elements[item[1]].outputName = item[0];\n });\n }\n each$4(split('ol ul sub sup blockquote span font a table tbody tr strong em b i'), function (name) {\n if (elements[name]) {\n elements[name].removeEmpty = true;\n }\n });\n each$4(split('p h1 h2 h3 h4 h5 h6 th td pre div address caption li'), function (name) {\n elements[name].paddEmpty = true;\n });\n each$4(split('span'), function (name) {\n elements[name].removeEmptyAttrs = true;\n });\n } else {\n setValidElements(settings.valid_elements);\n }\n addCustomElements(settings.custom_elements);\n addValidChildren(settings.valid_children);\n addValidElements(settings.extended_valid_elements);\n addValidChildren('+ol[ul|ol],+ul[ul|ol]');\n each$4({\n dd: 'dl',\n dt: 'dl',\n li: 'ul ol',\n td: 'tr',\n th: 'tr',\n tr: 'tbody thead tfoot',\n tbody: 'table',\n thead: 'table',\n tfoot: 'table',\n legend: 'fieldset',\n area: 'map',\n param: 'video audio object'\n }, function (parents, item) {\n if (elements[item]) {\n elements[item].parentsRequired = split(parents);\n }\n });\n if (settings.invalid_elements) {\n each$4(explode$1(settings.invalid_elements), function (item) {\n if (elements[item]) {\n delete elements[item];\n }\n });\n }\n if (!getElementRule('span')) {\n addValidElements('span[!data-mce-type|*]');\n }\n var getValidStyles = function () {\n return validStyles;\n };\n var getInvalidStyles = function () {\n return invalidStyles;\n };\n var getValidClasses = function () {\n return validClasses;\n };\n var getBoolAttrs = function () {\n return boolAttrMap;\n };\n var getBlockElements = function () {\n return blockElementsMap;\n };\n var getTextBlockElements = function () {\n return textBlockElementsMap;\n };\n var getTextInlineElements = function () {\n return textInlineElementsMap;\n };\n var getShortEndedElements = function () {\n return shortEndedElementsMap;\n };\n var getSelfClosingElements = function () {\n return selfClosingElementsMap;\n };\n var getNonEmptyElements = function () {\n return nonEmptyElementsMap;\n };\n var getMoveCaretBeforeOnEnterElements = function () {\n return moveCaretBeforeOnEnterElementsMap;\n };\n var getWhiteSpaceElements = function () {\n return whiteSpaceElementsMap;\n };\n var getSpecialElements = function () {\n return specialElements;\n };\n var isValidChild = function (name, child) {\n var parent = children[name.toLowerCase()];\n return !!(parent && parent[child.toLowerCase()]);\n };\n var isValid = function (name, attr) {\n var attrPatterns, i;\n var rule = getElementRule(name);\n if (rule) {\n if (attr) {\n if (rule.attributes[attr]) {\n return true;\n }\n attrPatterns = rule.attributePatterns;\n if (attrPatterns) {\n i = attrPatterns.length;\n while (i--) {\n if (attrPatterns[i].pattern.test(name)) {\n return true;\n }\n }\n }\n } else {\n return true;\n }\n }\n return false;\n };\n var getCustomElements = function () {\n return customElementsMap;\n };\n return {\n children: children,\n elements: elements,\n getValidStyles: getValidStyles,\n getValidClasses: getValidClasses,\n getBlockElements: getBlockElements,\n getInvalidStyles: getInvalidStyles,\n getShortEndedElements: getShortEndedElements,\n getTextBlockElements: getTextBlockElements,\n getTextInlineElements: getTextInlineElements,\n getBoolAttrs: getBoolAttrs,\n getElementRule: getElementRule,\n getSelfClosingElements: getSelfClosingElements,\n getNonEmptyElements: getNonEmptyElements,\n getMoveCaretBeforeOnEnterElements: getMoveCaretBeforeOnEnterElements,\n getWhiteSpaceElements: getWhiteSpaceElements,\n getSpecialElements: getSpecialElements,\n isValidChild: isValidChild,\n isValid: isValid,\n getCustomElements: getCustomElements,\n addValidElements: addValidElements,\n setValidElements: setValidElements,\n addCustomElements: addCustomElements,\n addValidChildren: addValidChildren\n };\n }\n\n var toHex = function (match, r, g, b) {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n function Styles(settings, schema) {\n var rgbRegExp = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi;\n var urlOrStrRegExp = /(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi;\n var styleRegExp = /\\s*([^:]+):\\s*([^;]+);?/g;\n var trimRightRegExp = /\\s+$/;\n var i;\n var encodingLookup = {};\n var encodingItems;\n var validStyles;\n var invalidStyles;\n var invisibleChar = '\\uFEFF';\n settings = settings || {};\n if (schema) {\n validStyles = schema.getValidStyles();\n invalidStyles = schema.getInvalidStyles();\n }\n encodingItems = ('\\\\\" \\\\\\' \\\\; \\\\: ; : ' + invisibleChar).split(' ');\n for (i = 0; i < encodingItems.length; i++) {\n encodingLookup[encodingItems[i]] = invisibleChar + i;\n encodingLookup[invisibleChar + i] = encodingItems[i];\n }\n return {\n toHex: function (color) {\n return color.replace(rgbRegExp, toHex);\n },\n parse: function (css) {\n var styles = {};\n var matches, name, value, isEncoded;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope || this;\n var compress = function (prefix, suffix, noJoin) {\n var top, right, bottom, left;\n top = styles[prefix + '-top' + suffix];\n if (!top) {\n return;\n }\n right = styles[prefix + '-right' + suffix];\n if (!right) {\n return;\n }\n bottom = styles[prefix + '-bottom' + suffix];\n if (!bottom) {\n return;\n }\n left = styles[prefix + '-left' + suffix];\n if (!left) {\n return;\n }\n var box = [\n top,\n right,\n bottom,\n left\n ];\n i = box.length - 1;\n while (i--) {\n if (box[i] !== box[i + 1]) {\n break;\n }\n }\n if (i > -1 && noJoin) {\n return;\n }\n styles[prefix + suffix] = i === -1 ? box[0] : box.join(' ');\n delete styles[prefix + '-top' + suffix];\n delete styles[prefix + '-right' + suffix];\n delete styles[prefix + '-bottom' + suffix];\n delete styles[prefix + '-left' + suffix];\n };\n var canCompress = function (key) {\n var value = styles[key], i;\n if (!value) {\n return;\n }\n value = value.split(' ');\n i = value.length;\n while (i--) {\n if (value[i] !== value[0]) {\n return false;\n }\n }\n styles[key] = value[0];\n return true;\n };\n var compress2 = function (target, a, b, c) {\n if (!canCompress(a)) {\n return;\n }\n if (!canCompress(b)) {\n return;\n }\n if (!canCompress(c)) {\n return;\n }\n styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];\n delete styles[a];\n delete styles[b];\n delete styles[c];\n };\n var encode = function (str) {\n isEncoded = true;\n return encodingLookup[str];\n };\n var decode = function (str, keepSlashes) {\n if (isEncoded) {\n str = str.replace(/\\uFEFF[0-9]/g, function (str) {\n return encodingLookup[str];\n });\n }\n if (!keepSlashes) {\n str = str.replace(/\\\\([\\'\\\";:])/g, '$1');\n }\n return str;\n };\n var decodeSingleHexSequence = function (escSeq) {\n return String.fromCharCode(parseInt(escSeq.slice(1), 16));\n };\n var decodeHexSequences = function (value) {\n return value.replace(/\\\\[0-9a-f]+/gi, decodeSingleHexSequence);\n };\n var processUrl = function (match, url, url2, url3, str, str2) {\n str = str || str2;\n if (str) {\n str = decode(str);\n return '\\'' + str.replace(/\\'/g, '\\\\\\'') + '\\'';\n }\n url = decode(url || url2 || url3);\n if (!settings.allow_script_urls) {\n var scriptUrl = url.replace(/[\\s\\r\\n]+/g, '');\n if (/(java|vb)script:/i.test(scriptUrl)) {\n return '';\n }\n if (!settings.allow_svg_data_urls && /^data:image\\/svg/i.test(scriptUrl)) {\n return '';\n }\n }\n if (urlConverter) {\n url = urlConverter.call(urlConverterScope, url, 'style');\n }\n return 'url(\\'' + url.replace(/\\'/g, '\\\\\\'') + '\\')';\n };\n if (css) {\n css = css.replace(/[\\u0000-\\u001F]/g, '');\n css = css.replace(/\\\\[\\\"\\';:\\uFEFF]/g, encode).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g, function (str) {\n return str.replace(/[;:]/g, encode);\n });\n while (matches = styleRegExp.exec(css)) {\n styleRegExp.lastIndex = matches.index + matches[0].length;\n name = matches[1].replace(trimRightRegExp, '').toLowerCase();\n value = matches[2].replace(trimRightRegExp, '');\n if (name && value) {\n name = decodeHexSequences(name);\n value = decodeHexSequences(value);\n if (name.indexOf(invisibleChar) !== -1 || name.indexOf('\"') !== -1) {\n continue;\n }\n if (!settings.allow_script_urls && (name === 'behavior' || /expression\\s*\\(|\\/\\*|\\*\\//.test(value))) {\n continue;\n }\n if (name === 'font-weight' && value === '700') {\n value = 'bold';\n } else if (name === 'color' || name === 'background-color') {\n value = value.toLowerCase();\n }\n value = value.replace(rgbRegExp, toHex);\n value = value.replace(urlOrStrRegExp, processUrl);\n styles[name] = isEncoded ? decode(value, true) : value;\n }\n }\n compress('border', '', true);\n compress('border', '-width');\n compress('border', '-color');\n compress('border', '-style');\n compress('padding', '');\n compress('margin', '');\n compress2('border', 'border-width', 'border-style', 'border-color');\n if (styles.border === 'medium none') {\n delete styles.border;\n }\n if (styles['border-image'] === 'none') {\n delete styles['border-image'];\n }\n }\n return styles;\n },\n serialize: function (styles, elementName) {\n var css = '', name, value;\n var serializeStyles = function (name) {\n var styleList, i, l, value;\n styleList = validStyles[name];\n if (styleList) {\n for (i = 0, l = styleList.length; i < l; i++) {\n name = styleList[i];\n value = styles[name];\n if (value) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n };\n var isValid = function (name, elementName) {\n var styleMap;\n styleMap = invalidStyles['*'];\n if (styleMap && styleMap[name]) {\n return false;\n }\n styleMap = invalidStyles[elementName];\n if (styleMap && styleMap[name]) {\n return false;\n }\n return true;\n };\n if (elementName && validStyles) {\n serializeStyles('*');\n serializeStyles(elementName);\n } else {\n for (name in styles) {\n value = styles[name];\n if (value && (!invalidStyles || isValid(name, elementName))) {\n css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';\n }\n }\n }\n return css;\n }\n };\n }\n\n var each$5 = Tools.each;\n var grep$1 = Tools.grep;\n var isIE = Env.ie;\n var simpleSelectorRe = /^([a-z0-9],?)+$/i;\n var whiteSpaceRegExp$2 = /^[ \\t\\r\\n]*$/;\n var setupAttrHooks = function (styles, settings, getContext) {\n var attrHooks = {};\n var keepValues = settings.keep_values;\n var keepUrlHook = {\n set: function ($elm, value, name) {\n if (settings.url_converter) {\n value = settings.url_converter.call(settings.url_converter_scope || getContext(), value, name, $elm[0]);\n }\n $elm.attr('data-mce-' + name, value).attr(name, value);\n },\n get: function ($elm, name) {\n return $elm.attr('data-mce-' + name) || $elm.attr(name);\n }\n };\n attrHooks = {\n style: {\n set: function ($elm, value) {\n if (value !== null && typeof value === 'object') {\n $elm.css(value);\n return;\n }\n if (keepValues) {\n $elm.attr('data-mce-style', value);\n }\n $elm.attr('style', value);\n },\n get: function ($elm) {\n var value = $elm.attr('data-mce-style') || $elm.attr('style');\n value = styles.serialize(styles.parse(value), $elm[0].nodeName);\n return value;\n }\n }\n };\n if (keepValues) {\n attrHooks.href = attrHooks.src = keepUrlHook;\n }\n return attrHooks;\n };\n var updateInternalStyleAttr = function (styles, $elm) {\n var rawValue = $elm.attr('style');\n var value = styles.serialize(styles.parse(rawValue), $elm[0].nodeName);\n if (!value) {\n value = null;\n }\n $elm.attr('data-mce-style', value);\n };\n var findNodeIndex = function (node, normalized) {\n var idx = 0, lastNodeType, nodeType;\n if (node) {\n for (lastNodeType = node.nodeType, node = node.previousSibling; node; node = node.previousSibling) {\n nodeType = node.nodeType;\n if (normalized && nodeType === 3) {\n if (nodeType === lastNodeType || !node.nodeValue.length) {\n continue;\n }\n }\n idx++;\n lastNodeType = nodeType;\n }\n }\n return idx;\n };\n function DOMUtils(doc, settings) {\n var _this = this;\n if (settings === void 0) {\n settings = {};\n }\n var attrHooks;\n var addedStyles = {};\n var win = domGlobals.window;\n var files = {};\n var counter = 0;\n var stdMode = true;\n var boxModel = true;\n var styleSheetLoader = StyleSheetLoader(doc, { contentCssCors: settings.contentCssCors });\n var boundEvents = [];\n var schema = settings.schema ? settings.schema : Schema({});\n var styles = Styles({\n url_converter: settings.url_converter,\n url_converter_scope: settings.url_converter_scope\n }, settings.schema);\n var events = settings.ownEvents ? new EventUtils(settings.proxy) : EventUtils.Event;\n var blockElementsMap = schema.getBlockElements();\n var $ = DomQuery.overrideDefaults(function () {\n return {\n context: doc,\n element: self.getRoot()\n };\n });\n var isBlock = function (node) {\n if (typeof node === 'string') {\n return !!blockElementsMap[node];\n } else if (node) {\n var type = node.nodeType;\n if (type) {\n return !!(type === 1 && blockElementsMap[node.nodeName]);\n }\n }\n return false;\n };\n var get = function (elm) {\n if (elm && doc && typeof elm === 'string') {\n var node = doc.getElementById(elm);\n if (node && node.id !== elm) {\n return doc.getElementsByName(elm)[1];\n } else {\n return node;\n }\n }\n return elm;\n };\n var $$ = function (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n return $(elm);\n };\n var getAttrib = function (elm, name, defaultVal) {\n var hook, value;\n var $elm = $$(elm);\n if ($elm.length) {\n hook = attrHooks[name];\n if (hook && hook.get) {\n value = hook.get($elm, name);\n } else {\n value = $elm.attr(name);\n }\n }\n if (typeof value === 'undefined') {\n value = defaultVal || '';\n }\n return value;\n };\n var getAttribs = function (elm) {\n var node = get(elm);\n if (!node) {\n return [];\n }\n return node.attributes;\n };\n var setAttrib = function (elm, name, value) {\n var originalValue, hook;\n if (value === '') {\n value = null;\n }\n var $elm = $$(elm);\n originalValue = $elm.attr(name);\n if (!$elm.length) {\n return;\n }\n hook = attrHooks[name];\n if (hook && hook.set) {\n hook.set($elm, value, name);\n } else {\n $elm.attr(name, value);\n }\n if (originalValue !== value && settings.onSetAttrib) {\n settings.onSetAttrib({\n attrElm: $elm,\n attrName: name,\n attrValue: value\n });\n }\n };\n var clone = function (node, deep) {\n if (!isIE || node.nodeType !== 1 || deep) {\n return node.cloneNode(deep);\n }\n if (!deep) {\n var clone_1 = doc.createElement(node.nodeName);\n each$5(getAttribs(node), function (attr) {\n setAttrib(clone_1, attr.nodeName, getAttrib(node, attr.nodeName));\n });\n return clone_1;\n }\n return null;\n };\n var getRoot = function () {\n return settings.root_element || doc.body;\n };\n var getViewPort = function (argWin) {\n var actWin = !argWin ? win : argWin;\n var doc = actWin.document;\n var rootElm = doc.documentElement ;\n return {\n x: actWin.pageXOffset || rootElm.scrollLeft,\n y: actWin.pageYOffset || rootElm.scrollTop,\n w: actWin.innerWidth || rootElm.clientWidth,\n h: actWin.innerHeight || rootElm.clientHeight\n };\n };\n var getPos = function (elm, rootElm) {\n return Position.getPos(doc.body, get(elm), rootElm);\n };\n var setStyle = function (elm, name, value) {\n var $elm = $$(elm).css(name, value);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var setStyles = function (elm, stylesArg) {\n var $elm = $$(elm).css(stylesArg);\n if (settings.update_styles) {\n updateInternalStyleAttr(styles, $elm);\n }\n };\n var getStyle = function (elm, name, computed) {\n var $elm = $$(elm);\n if (computed) {\n return $elm.css(name);\n }\n name = name.replace(/-(\\D)/g, function (a, b) {\n return b.toUpperCase();\n });\n if (name === 'float') {\n name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';\n }\n return $elm[0] && $elm[0].style ? $elm[0].style[name] : undefined;\n };\n var getSize = function (elm) {\n var w, h;\n elm = get(elm);\n w = getStyle(elm, 'width');\n h = getStyle(elm, 'height');\n if (w.indexOf('px') === -1) {\n w = 0;\n }\n if (h.indexOf('px') === -1) {\n h = 0;\n }\n return {\n w: parseInt(w, 10) || elm.offsetWidth || elm.clientWidth,\n h: parseInt(h, 10) || elm.offsetHeight || elm.clientHeight\n };\n };\n var getRect = function (elm) {\n var pos, size;\n elm = get(elm);\n pos = getPos(elm);\n size = getSize(elm);\n return {\n x: pos.x,\n y: pos.y,\n w: size.w,\n h: size.h\n };\n };\n var is = function (elm, selector) {\n var i;\n if (!elm) {\n return false;\n }\n if (!Array.isArray(elm)) {\n if (selector === '*') {\n return elm.nodeType === 1;\n }\n if (simpleSelectorRe.test(selector)) {\n var selectors = selector.toLowerCase().split(/,/);\n var elmName = elm.nodeName.toLowerCase();\n for (i = selectors.length - 1; i >= 0; i--) {\n if (selectors[i] === elmName) {\n return true;\n }\n }\n return false;\n }\n if (elm.nodeType && elm.nodeType !== 1) {\n return false;\n }\n }\n var elms = !Array.isArray(elm) ? [elm] : elm;\n return Sizzle(selector, elms[0].ownerDocument || elms[0], null, elms).length > 0;\n };\n var getParents = function (elm, selector, root, collect) {\n var result = [];\n var selectorVal;\n var node = get(elm);\n collect = collect === undefined;\n root = root || (getRoot().nodeName !== 'BODY' ? getRoot().parentNode : null);\n if (Tools.is(selector, 'string')) {\n selectorVal = selector;\n if (selector === '*') {\n selector = function (node) {\n return node.nodeType === 1;\n };\n } else {\n selector = function (node) {\n return is(node, selectorVal);\n };\n }\n }\n while (node) {\n if (node === root || !node.nodeType || node.nodeType === 9) {\n break;\n }\n if (!selector || typeof selector === 'function' && selector(node)) {\n if (collect) {\n result.push(node);\n } else {\n return [node];\n }\n }\n node = node.parentNode;\n }\n return collect ? result : null;\n };\n var getParent = function (node, selector, root) {\n var parents = getParents(node, selector, root, false);\n return parents && parents.length > 0 ? parents[0] : null;\n };\n var _findSib = function (node, selector, name) {\n var func = selector;\n if (node) {\n if (typeof selector === 'string') {\n func = function (node) {\n return is(node, selector);\n };\n }\n for (node = node[name]; node; node = node[name]) {\n if (typeof func === 'function' && func(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getNext = function (node, selector) {\n return _findSib(node, selector, 'nextSibling');\n };\n var getPrev = function (node, selector) {\n return _findSib(node, selector, 'previousSibling');\n };\n var select = function (selector, scope) {\n return Sizzle(selector, get(scope) || settings.root_element || doc, []);\n };\n var run = function (elm, func, scope) {\n var result;\n var node = typeof elm === 'string' ? get(elm) : elm;\n if (!node) {\n return false;\n }\n if (Tools.isArray(node) && (node.length || node.length === 0)) {\n result = [];\n each$5(node, function (elm, i) {\n if (elm) {\n if (typeof elm === 'string') {\n elm = get(elm);\n }\n result.push(func.call(scope, elm, i));\n }\n });\n return result;\n }\n var context = scope ? scope : _this;\n return func.call(context, node);\n };\n var setAttribs = function (elm, attrs) {\n $$(elm).each(function (i, node) {\n each$5(attrs, function (value, name) {\n setAttrib(node, name, value);\n });\n });\n };\n var setHTML = function (elm, html) {\n var $elm = $$(elm);\n if (isIE) {\n $elm.each(function (i, target) {\n if (target.canHaveHTML === false) {\n return;\n }\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n try {\n target.innerHTML = '
' + html;\n target.removeChild(target.firstChild);\n } catch (ex) {\n DomQuery('
').html('
' + html).contents().slice(1).appendTo(target);\n }\n return html;\n });\n } else {\n $elm.html(html);\n }\n };\n var add = function (parentElm, name, attrs, html, create) {\n return run(parentElm, function (parentElm) {\n var newElm = typeof name === 'string' ? doc.createElement(name) : name;\n setAttribs(newElm, attrs);\n if (html) {\n if (typeof html !== 'string' && html.nodeType) {\n newElm.appendChild(html);\n } else if (typeof html === 'string') {\n setHTML(newElm, html);\n }\n }\n return !create ? parentElm.appendChild(newElm) : newElm;\n });\n };\n var create = function (name, attrs, html) {\n return add(doc.createElement(name), name, attrs, html, true);\n };\n var decode = Entities.decode;\n var encode = Entities.encodeAllRaw;\n var createHTML = function (name, attrs, html) {\n var outHtml = '', key;\n outHtml += '<' + name;\n for (key in attrs) {\n if (attrs.hasOwnProperty(key) && attrs[key] !== null && typeof attrs[key] !== 'undefined') {\n outHtml += ' ' + key + '=\"' + encode(attrs[key]) + '\"';\n }\n }\n if (typeof html !== 'undefined') {\n return outHtml + '>' + html + '';\n }\n return outHtml + ' />';\n };\n var createFragment = function (html) {\n var node;\n var container = doc.createElement('div');\n var frag = doc.createDocumentFragment();\n frag.appendChild(container);\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n frag.removeChild(container);\n return frag;\n };\n var remove = function (node, keepChildren) {\n var $node = $$(node);\n if (keepChildren) {\n $node.each(function () {\n var child;\n while (child = this.firstChild) {\n if (child.nodeType === 3 && child.data.length === 0) {\n this.removeChild(child);\n } else {\n this.parentNode.insertBefore(child, this);\n }\n }\n }).remove();\n } else {\n $node.remove();\n }\n return $node.length > 1 ? $node.toArray() : $node[0];\n };\n var removeAllAttribs = function (e) {\n return run(e, function (e) {\n var i;\n var attrs = e.attributes;\n for (i = attrs.length - 1; i >= 0; i--) {\n e.removeAttributeNode(attrs.item(i));\n }\n });\n };\n var parseStyle = function (cssText) {\n return styles.parse(cssText);\n };\n var serializeStyle = function (stylesArg, name) {\n return styles.serialize(stylesArg, name);\n };\n var addStyle = function (cssText) {\n var head, styleElm;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n if (addedStyles[cssText]) {\n return;\n }\n addedStyles[cssText] = true;\n }\n styleElm = doc.getElementById('mceDefaultStyles');\n if (!styleElm) {\n styleElm = doc.createElement('style');\n styleElm.id = 'mceDefaultStyles';\n styleElm.type = 'text/css';\n head = doc.getElementsByTagName('head')[0];\n if (head.firstChild) {\n head.insertBefore(styleElm, head.firstChild);\n } else {\n head.appendChild(styleElm);\n }\n }\n if (styleElm.styleSheet) {\n styleElm.styleSheet.cssText += cssText;\n } else {\n styleElm.appendChild(doc.createTextNode(cssText));\n }\n };\n var loadCSS = function (url) {\n var head;\n if (self !== DOMUtils.DOM && doc === domGlobals.document) {\n DOMUtils.DOM.loadCSS(url);\n return;\n }\n if (!url) {\n url = '';\n }\n head = doc.getElementsByTagName('head')[0];\n each$5(url.split(','), function (url) {\n var link;\n url = Tools._addCacheSuffix(url);\n if (files[url]) {\n return;\n }\n files[url] = true;\n link = create('link', {\n rel: 'stylesheet',\n href: url\n });\n head.appendChild(link);\n });\n };\n var toggleClass = function (elm, cls, state) {\n $$(elm).toggleClass(cls, state).each(function () {\n if (this.className === '') {\n DomQuery(this).attr('class', null);\n }\n });\n };\n var addClass = function (elm, cls) {\n $$(elm).addClass(cls);\n };\n var removeClass = function (elm, cls) {\n toggleClass(elm, cls, false);\n };\n var hasClass = function (elm, cls) {\n return $$(elm).hasClass(cls);\n };\n var show = function (elm) {\n $$(elm).show();\n };\n var hide = function (elm) {\n $$(elm).hide();\n };\n var isHidden = function (elm) {\n return $$(elm).css('display') === 'none';\n };\n var uniqueId = function (prefix) {\n return (!prefix ? 'mce_' : prefix) + counter++;\n };\n var getOuterHTML = function (elm) {\n var node = typeof elm === 'string' ? get(elm) : elm;\n return NodeType.isElement(node) ? node.outerHTML : DomQuery('
').append(DomQuery(node).clone()).html();\n };\n var setOuterHTML = function (elm, html) {\n $$(elm).each(function () {\n try {\n if ('outerHTML' in this) {\n this.outerHTML = html;\n return;\n }\n } catch (ex) {\n }\n remove(DomQuery(this).html(html), true);\n });\n };\n var insertAfter = function (node, reference) {\n var referenceNode = get(reference);\n return run(node, function (node) {\n var parent, nextSibling;\n parent = referenceNode.parentNode;\n nextSibling = referenceNode.nextSibling;\n if (nextSibling) {\n parent.insertBefore(node, nextSibling);\n } else {\n parent.appendChild(node);\n }\n return node;\n });\n };\n var replace = function (newElm, oldElm, keepChildren) {\n return run(oldElm, function (oldElm) {\n if (Tools.is(oldElm, 'array')) {\n newElm = newElm.cloneNode(true);\n }\n if (keepChildren) {\n each$5(grep$1(oldElm.childNodes), function (node) {\n newElm.appendChild(node);\n });\n }\n return oldElm.parentNode.replaceChild(newElm, oldElm);\n });\n };\n var rename = function (elm, name) {\n var newElm;\n if (elm.nodeName !== name.toUpperCase()) {\n newElm = create(name);\n each$5(getAttribs(elm), function (attrNode) {\n setAttrib(newElm, attrNode.nodeName, getAttrib(elm, attrNode.nodeName));\n });\n replace(newElm, elm, true);\n }\n return newElm || elm;\n };\n var findCommonAncestor = function (a, b) {\n var ps = a, pe;\n while (ps) {\n pe = b;\n while (pe && ps !== pe) {\n pe = pe.parentNode;\n }\n if (ps === pe) {\n break;\n }\n ps = ps.parentNode;\n }\n if (!ps && a.ownerDocument) {\n return a.ownerDocument.documentElement;\n }\n return ps;\n };\n var toHex = function (rgbVal) {\n return styles.toHex(Tools.trim(rgbVal));\n };\n var isEmpty = function (node, elements) {\n var i, attributes, type, whitespace, walker, name, brCount = 0;\n node = node.firstChild;\n if (node) {\n walker = new TreeWalker(node, node.parentNode);\n elements = elements || (schema ? schema.getNonEmptyElements() : null);\n whitespace = schema ? schema.getWhiteSpaceElements() : {};\n do {\n type = node.nodeType;\n if (NodeType.isElement(node)) {\n var bogusVal = node.getAttribute('data-mce-bogus');\n if (bogusVal) {\n node = walker.next(bogusVal === 'all');\n continue;\n }\n name = node.nodeName.toLowerCase();\n if (elements && elements[name]) {\n if (name === 'br') {\n brCount++;\n node = walker.next();\n continue;\n }\n return false;\n }\n attributes = getAttribs(node);\n i = attributes.length;\n while (i--) {\n name = attributes[i].nodeName;\n if (name === 'name' || name === 'data-mce-bookmark') {\n return false;\n }\n }\n }\n if (type === 8) {\n return false;\n }\n if (type === 3 && !whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n if (type === 3 && node.parentNode && whitespace[node.parentNode.nodeName] && whiteSpaceRegExp$2.test(node.nodeValue)) {\n return false;\n }\n node = walker.next();\n } while (node);\n }\n return brCount <= 1;\n };\n var createRng = function () {\n return doc.createRange();\n };\n var split = function (parentElm, splitElm, replacementElm) {\n var r = createRng(), bef, aft, pa;\n if (parentElm && splitElm) {\n r.setStart(parentElm.parentNode, findNodeIndex(parentElm));\n r.setEnd(splitElm.parentNode, findNodeIndex(splitElm));\n bef = r.extractContents();\n r = createRng();\n r.setStart(splitElm.parentNode, findNodeIndex(splitElm) + 1);\n r.setEnd(parentElm.parentNode, findNodeIndex(parentElm) + 1);\n aft = r.extractContents();\n pa = parentElm.parentNode;\n pa.insertBefore(TrimNode.trimNode(self, bef), parentElm);\n if (replacementElm) {\n pa.insertBefore(replacementElm, parentElm);\n } else {\n pa.insertBefore(splitElm, parentElm);\n }\n pa.insertBefore(TrimNode.trimNode(self, aft), parentElm);\n remove(parentElm);\n return replacementElm || splitElm;\n }\n };\n var bind = function (target, name, func, scope) {\n if (Tools.isArray(target)) {\n var i = target.length;\n while (i--) {\n target[i] = bind(target[i], name, func, scope);\n }\n return target;\n }\n if (settings.collect && (target === doc || target === win)) {\n boundEvents.push([\n target,\n name,\n func,\n scope\n ]);\n }\n return events.bind(target, name, func, scope || self);\n };\n var unbind = function (target, name, func) {\n var i;\n if (Tools.isArray(target)) {\n i = target.length;\n while (i--) {\n target[i] = unbind(target[i], name, func);\n }\n return target;\n }\n if (boundEvents && (target === doc || target === win)) {\n i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n if (target === item[0] && (!name || name === item[1]) && (!func || func === item[2])) {\n events.unbind(item[0], item[1], item[2]);\n }\n }\n }\n return events.unbind(target, name, func);\n };\n var fire = function (target, name, evt) {\n return events.fire(target, name, evt);\n };\n var getContentEditable = function (node) {\n if (node && NodeType.isElement(node)) {\n var contentEditable = node.getAttribute('data-mce-contenteditable');\n if (contentEditable && contentEditable !== 'inherit') {\n return contentEditable;\n }\n return node.contentEditable !== 'inherit' ? node.contentEditable : null;\n } else {\n return null;\n }\n };\n var getContentEditableParent = function (node) {\n var root = getRoot();\n var state = null;\n for (; node && node !== root; node = node.parentNode) {\n state = getContentEditable(node);\n if (state !== null) {\n break;\n }\n }\n return state;\n };\n var destroy = function () {\n if (boundEvents) {\n var i = boundEvents.length;\n while (i--) {\n var item = boundEvents[i];\n events.unbind(item[0], item[1], item[2]);\n }\n }\n if (Sizzle.setDocument) {\n Sizzle.setDocument();\n }\n };\n var isChildOf = function (node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var dumpRng = function (r) {\n return 'startContainer: ' + r.startContainer.nodeName + ', startOffset: ' + r.startOffset + ', endContainer: ' + r.endContainer.nodeName + ', endOffset: ' + r.endOffset;\n };\n var self = {\n doc: doc,\n settings: settings,\n win: win,\n files: files,\n stdMode: stdMode,\n boxModel: boxModel,\n styleSheetLoader: styleSheetLoader,\n boundEvents: boundEvents,\n styles: styles,\n schema: schema,\n events: events,\n isBlock: isBlock,\n $: $,\n $$: $$,\n root: null,\n clone: clone,\n getRoot: getRoot,\n getViewPort: getViewPort,\n getRect: getRect,\n getSize: getSize,\n getParent: getParent,\n getParents: getParents,\n get: get,\n getNext: getNext,\n getPrev: getPrev,\n select: select,\n is: is,\n add: add,\n create: create,\n createHTML: createHTML,\n createFragment: createFragment,\n remove: remove,\n setStyle: setStyle,\n getStyle: getStyle,\n setStyles: setStyles,\n removeAllAttribs: removeAllAttribs,\n setAttrib: setAttrib,\n setAttribs: setAttribs,\n getAttrib: getAttrib,\n getPos: getPos,\n parseStyle: parseStyle,\n serializeStyle: serializeStyle,\n addStyle: addStyle,\n loadCSS: loadCSS,\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n show: show,\n hide: hide,\n isHidden: isHidden,\n uniqueId: uniqueId,\n setHTML: setHTML,\n getOuterHTML: getOuterHTML,\n setOuterHTML: setOuterHTML,\n decode: decode,\n encode: encode,\n insertAfter: insertAfter,\n replace: replace,\n rename: rename,\n findCommonAncestor: findCommonAncestor,\n toHex: toHex,\n run: run,\n getAttribs: getAttribs,\n isEmpty: isEmpty,\n createRng: createRng,\n nodeIndex: findNodeIndex,\n split: split,\n bind: bind,\n unbind: unbind,\n fire: fire,\n getContentEditable: getContentEditable,\n getContentEditableParent: getContentEditableParent,\n destroy: destroy,\n isChildOf: isChildOf,\n dumpRng: dumpRng\n };\n attrHooks = setupAttrHooks(styles, settings, function () {\n return self;\n });\n return self;\n }\n (function (DOMUtils) {\n DOMUtils.DOM = DOMUtils(domGlobals.document);\n DOMUtils.nodeIndex = findNodeIndex;\n }(DOMUtils || (DOMUtils = {})));\n var DOMUtils$1 = DOMUtils;\n\n var DOM = DOMUtils$1.DOM;\n var each$6 = Tools.each, grep$2 = Tools.grep;\n var isFunction$1 = function (f) {\n return typeof f === 'function';\n };\n var ScriptLoader = function () {\n var QUEUED = 0;\n var LOADING = 1;\n var LOADED = 2;\n var FAILED = 3;\n var states = {};\n var queue = [];\n var scriptLoadedCallbacks = {};\n var queueLoadedCallbacks = [];\n var loading = 0;\n var loadScript = function (url, success, failure) {\n var dom = DOM;\n var elm, id;\n var done = function () {\n dom.remove(id);\n if (elm) {\n elm.onreadystatechange = elm.onload = elm = null;\n }\n success();\n };\n var error = function () {\n if (isFunction$1(failure)) {\n failure();\n } else {\n if (typeof console !== 'undefined' && console.log) {\n console.log('Failed to load script: ' + url);\n }\n }\n };\n id = dom.uniqueId();\n elm = domGlobals.document.createElement('script');\n elm.id = id;\n elm.type = 'text/javascript';\n elm.src = Tools._addCacheSuffix(url);\n elm.onload = done;\n elm.onerror = error;\n (domGlobals.document.getElementsByTagName('head')[0] || domGlobals.document.body).appendChild(elm);\n };\n this.isDone = function (url) {\n return states[url] === LOADED;\n };\n this.markDone = function (url) {\n states[url] = LOADED;\n };\n this.add = this.load = function (url, success, scope, failure) {\n var state = states[url];\n if (state === undefined) {\n queue.push(url);\n states[url] = QUEUED;\n }\n if (success) {\n if (!scriptLoadedCallbacks[url]) {\n scriptLoadedCallbacks[url] = [];\n }\n scriptLoadedCallbacks[url].push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n }\n };\n this.remove = function (url) {\n delete states[url];\n delete scriptLoadedCallbacks[url];\n };\n this.loadQueue = function (success, scope, failure) {\n this.loadScripts(queue, success, scope, failure);\n };\n this.loadScripts = function (scripts, success, scope, failure) {\n var loadScripts;\n var failures = [];\n var execCallbacks = function (name, url) {\n each$6(scriptLoadedCallbacks[url], function (callback) {\n if (isFunction$1(callback[name])) {\n callback[name].call(callback.scope);\n }\n });\n scriptLoadedCallbacks[url] = undefined;\n };\n queueLoadedCallbacks.push({\n success: success,\n failure: failure,\n scope: scope || this\n });\n loadScripts = function () {\n var loadingScripts = grep$2(scripts);\n scripts.length = 0;\n each$6(loadingScripts, function (url) {\n if (states[url] === LOADED) {\n execCallbacks('success', url);\n return;\n }\n if (states[url] === FAILED) {\n execCallbacks('failure', url);\n return;\n }\n if (states[url] !== LOADING) {\n states[url] = LOADING;\n loading++;\n loadScript(url, function () {\n states[url] = LOADED;\n loading--;\n execCallbacks('success', url);\n loadScripts();\n }, function () {\n states[url] = FAILED;\n loading--;\n failures.push(url);\n execCallbacks('failure', url);\n loadScripts();\n });\n }\n });\n if (!loading) {\n var notifyCallbacks = queueLoadedCallbacks.slice(0);\n queueLoadedCallbacks.length = 0;\n each$6(notifyCallbacks, function (callback) {\n if (failures.length === 0) {\n if (isFunction$1(callback.success)) {\n callback.success.call(callback.scope);\n }\n } else {\n if (isFunction$1(callback.failure)) {\n callback.failure.call(callback.scope, failures);\n }\n }\n });\n }\n };\n loadScripts();\n };\n };\n ScriptLoader.ScriptLoader = new ScriptLoader();\n\n var each$7 = Tools.each;\n function AddOnManager() {\n var _this = this;\n var items = [];\n var urls = {};\n var lookup = {};\n var _listeners = [];\n var get = function (name) {\n if (lookup[name]) {\n return lookup[name].instance;\n }\n return undefined;\n };\n var dependencies = function (name) {\n var result;\n if (lookup[name]) {\n result = lookup[name].dependencies;\n }\n return result || [];\n };\n var requireLangPack = function (name, languages) {\n var language = AddOnManager.language;\n if (language && AddOnManager.languageLoad !== false) {\n if (languages) {\n languages = ',' + languages + ',';\n if (languages.indexOf(',' + language.substr(0, 2) + ',') !== -1) {\n language = language.substr(0, 2);\n } else if (languages.indexOf(',' + language + ',') === -1) {\n return;\n }\n }\n ScriptLoader.ScriptLoader.add(urls[name] + '/langs/' + language + '.js');\n }\n };\n var add = function (id, addOn, dependencies) {\n items.push(addOn);\n lookup[id] = {\n instance: addOn,\n dependencies: dependencies\n };\n var result = partition(_listeners, function (listener) {\n return listener.name === id;\n });\n _listeners = result.fail;\n each$7(result.pass, function (listener) {\n listener.callback();\n });\n return addOn;\n };\n var remove = function (name) {\n delete urls[name];\n delete lookup[name];\n };\n var createUrl = function (baseUrl, dep) {\n if (typeof dep === 'object') {\n return dep;\n }\n return typeof baseUrl === 'string' ? {\n prefix: '',\n resource: dep,\n suffix: ''\n } : {\n prefix: baseUrl.prefix,\n resource: dep,\n suffix: baseUrl.suffix\n };\n };\n var addComponents = function (pluginName, scripts) {\n var pluginUrl = _this.urls[pluginName];\n each$7(scripts, function (script) {\n ScriptLoader.ScriptLoader.add(pluginUrl + '/' + script);\n });\n };\n var loadDependencies = function (name, addOnUrl, success, scope) {\n var deps = dependencies(name);\n each$7(deps, function (dep) {\n var newUrl = createUrl(addOnUrl, dep);\n load(newUrl.resource, newUrl, undefined, undefined);\n });\n if (success) {\n if (scope) {\n success.call(scope);\n } else {\n success.call(ScriptLoader);\n }\n }\n };\n var load = function (name, addOnUrl, success, scope, failure) {\n if (urls[name]) {\n return;\n }\n var urlString = typeof addOnUrl === 'string' ? addOnUrl : addOnUrl.prefix + addOnUrl.resource + addOnUrl.suffix;\n if (urlString.indexOf('/') !== 0 && urlString.indexOf('://') === -1) {\n urlString = AddOnManager.baseURL + '/' + urlString;\n }\n urls[name] = urlString.substring(0, urlString.lastIndexOf('/'));\n if (lookup[name]) {\n loadDependencies(name, addOnUrl, success, scope);\n } else {\n ScriptLoader.ScriptLoader.add(urlString, function () {\n return loadDependencies(name, addOnUrl, success, scope);\n }, scope, failure);\n }\n };\n var waitFor = function (name, callback) {\n if (lookup.hasOwnProperty(name)) {\n callback();\n } else {\n _listeners.push({\n name: name,\n callback: callback\n });\n }\n };\n return {\n items: items,\n urls: urls,\n lookup: lookup,\n _listeners: _listeners,\n get: get,\n dependencies: dependencies,\n requireLangPack: requireLangPack,\n add: add,\n remove: remove,\n createUrl: createUrl,\n addComponents: addComponents,\n load: load,\n waitFor: waitFor\n };\n }\n (function (AddOnManager) {\n AddOnManager.PluginManager = AddOnManager();\n AddOnManager.ThemeManager = AddOnManager();\n }(AddOnManager || (AddOnManager = {})));\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap$1 = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$1(rogue);\n });\n };\n var remove$1 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$1(wrapper);\n };\n\n var first = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer === null) {\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n }\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$2 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$2 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$3 = function (element, clazz) {\n return remove$2(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$2(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$4 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$3(element, clazz);\n }\n cleanClass(element);\n };\n var has$2 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is$1(e, selector);\n }, isRoot);\n };\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is$1, ancestor$1, scope, selector, isRoot);\n };\n\n var annotation = constant('mce-annotation');\n var dataAnnotation = constant('data-mce-annotation');\n var dataAnnotationId = constant('data-mce-annotation-uid');\n\n var identify = function (editor, annotationName) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var root = Element.fromDom(editor.getBody());\n var selector = annotationName.fold(function () {\n return '.' + annotation();\n }, function (an) {\n return '[' + dataAnnotation() + '=\"' + an + '\"]';\n });\n var newStart = child(start, rng.startOffset).getOr(start);\n var closest = closest$1(newStart, selector, function (n) {\n return eq(n, root);\n });\n var getAttr = function (c, property) {\n if (has$1(c, property)) {\n return Option.some(get(c, property));\n } else {\n return Option.none();\n }\n };\n return closest.bind(function (c) {\n return getAttr(c, '' + dataAnnotationId()).bind(function (uid) {\n return getAttr(c, '' + dataAnnotation()).map(function (name) {\n var elements = findMarkers(editor, uid);\n return {\n uid: uid,\n name: name,\n elements: elements\n };\n });\n });\n });\n };\n var isAnnotation = function (elem) {\n return isElement(elem) && has$2(elem, annotation());\n };\n var findMarkers = function (editor, uid) {\n var body = Element.fromDom(editor.getBody());\n return descendants$1(body, '[' + dataAnnotationId() + '=\"' + uid + '\"]');\n };\n var findAll = function (editor, name) {\n var body = Element.fromDom(editor.getBody());\n var markers = descendants$1(body, '[' + dataAnnotation() + '=\"' + name + '\"]');\n var directory = {};\n each(markers, function (m) {\n var uid = get(m, dataAnnotationId());\n var nodesAlready = directory.hasOwnProperty(uid) ? directory[uid] : [];\n directory[uid] = nodesAlready.concat([m]);\n });\n return directory;\n };\n\n var setup = function (editor, registry) {\n var changeCallbacks = Cell({});\n var initData = function () {\n return {\n listeners: [],\n previous: Cell(Option.none())\n };\n };\n var withCallbacks = function (name, f) {\n updateCallbacks(name, function (data) {\n f(data);\n return data;\n });\n };\n var updateCallbacks = function (name, f) {\n var callbackMap = changeCallbacks.get();\n var data = callbackMap.hasOwnProperty(name) ? callbackMap[name] : initData();\n var outputData = f(data);\n callbackMap[name] = outputData;\n changeCallbacks.set(callbackMap);\n };\n var fireCallbacks = function (name, uid, elements) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(true, name, {\n uid: uid,\n nodes: map(elements, function (elem) {\n return elem.dom();\n })\n });\n });\n });\n };\n var fireNoAnnotation = function (name) {\n withCallbacks(name, function (data) {\n each(data.listeners, function (f) {\n return f(false, name);\n });\n });\n };\n var onNodeChange = last$2(function () {\n var callbackMap = changeCallbacks.get();\n var annotations = sort(keys(callbackMap));\n each(annotations, function (name) {\n updateCallbacks(name, function (data) {\n var prev = data.previous.get();\n identify(editor, Option.some(name)).fold(function () {\n if (prev.isSome()) {\n fireNoAnnotation(name);\n data.previous.set(Option.none());\n }\n }, function (_a) {\n var uid = _a.uid, name = _a.name, elements = _a.elements;\n if (!prev.is(uid)) {\n fireCallbacks(name, uid, elements);\n data.previous.set(Option.some(uid));\n }\n });\n return {\n previous: data.previous,\n listeners: data.listeners\n };\n });\n });\n }, 30);\n editor.on('remove', function () {\n onNodeChange.cancel();\n });\n editor.on('nodeChange', function () {\n onNodeChange.throttle();\n });\n var addListener = function (name, f) {\n updateCallbacks(name, function (data) {\n return {\n previous: data.previous,\n listeners: data.listeners.concat([f])\n };\n });\n };\n return { addListener: addListener };\n };\n\n var setup$1 = function (editor, registry) {\n var identifyParserNode = function (span) {\n var optAnnotation = Option.from(span.attributes.map[dataAnnotation()]);\n return optAnnotation.bind(registry.lookup);\n };\n editor.on('init', function () {\n editor.serializer.addNodeFilter('span', function (spans) {\n each(spans, function (span) {\n identifyParserNode(span).each(function (settings) {\n if (settings.persistent === false) {\n span.unwrap();\n }\n });\n });\n });\n });\n };\n\n var create$1 = function () {\n var annotations = {};\n var register = function (name, settings) {\n annotations[name] = {\n name: name,\n settings: settings\n };\n };\n var lookup = function (name) {\n return annotations.hasOwnProperty(name) ? Option.from(annotations[name]).map(function (a) {\n return a.settings;\n }) : Option.none();\n };\n return {\n register: register,\n lookup: lookup\n };\n };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n function __rest(s, e) {\n var t = {};\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === 'function')\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n }\n function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++)\n s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n }\n\n var unique = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique++;\n return prefix + '_' + random + unique + String(time);\n };\n\n var add$3 = function (element, classes) {\n each(classes, function (x) {\n add$2(element, x);\n });\n };\n\n var clone = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone(original, false);\n };\n var deep = function (original) {\n return clone(original, true);\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var get$3 = function (element) {\n return element.dom().innerHTML;\n };\n var set$1 = function (element, content) {\n var owner$1 = owner(element);\n var docDom = owner$1.dom();\n var fragment = Element.fromDom(docDom.createDocumentFragment());\n var contentElements = fromHtml$1(content, docDom);\n append$1(fragment, contentElements);\n empty(element);\n append(element, fragment);\n };\n\n var ZWSP = '\\uFEFF';\n var isZwsp = function (chr) {\n return chr === ZWSP;\n };\n var trim$3 = function (text) {\n return text.replace(new RegExp(ZWSP, 'g'), '');\n };\n var Zwsp = {\n isZwsp: isZwsp,\n ZWSP: ZWSP,\n trim: trim$3\n };\n\n var isElement$2 = NodeType.isElement;\n var isText$2 = NodeType.isText;\n var isCaretContainerBlock = function (node) {\n if (isText$2(node)) {\n node = node.parentNode;\n }\n return isElement$2(node) && node.hasAttribute('data-mce-caret');\n };\n var isCaretContainerInline = function (node) {\n return isText$2(node) && Zwsp.isZwsp(node.data);\n };\n var isCaretContainer = function (node) {\n return isCaretContainerBlock(node) || isCaretContainerInline(node);\n };\n var hasContent = function (node) {\n return node.firstChild !== node.lastChild || !NodeType.isBr(node.firstChild);\n };\n var insertInline = function (node, before) {\n var doc, sibling, textNode, parentNode;\n doc = node.ownerDocument;\n textNode = doc.createTextNode(Zwsp.ZWSP);\n parentNode = node.parentNode;\n if (!before) {\n sibling = node.nextSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (startsWithCaretContainer(sibling)) {\n sibling.splitText(1);\n return sibling;\n }\n }\n if (node.nextSibling) {\n parentNode.insertBefore(textNode, node.nextSibling);\n } else {\n parentNode.appendChild(textNode);\n }\n } else {\n sibling = node.previousSibling;\n if (isText$2(sibling)) {\n if (isCaretContainer(sibling)) {\n return sibling;\n }\n if (endsWithCaretContainer(sibling)) {\n return sibling.splitText(sibling.data.length - 1);\n }\n }\n parentNode.insertBefore(textNode, node);\n }\n return textNode;\n };\n var isBeforeInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset()) === Zwsp.ZWSP || pos.isAtStart() && isCaretContainerInline(container.previousSibling);\n };\n var isAfterInline = function (pos) {\n var container = pos.container();\n if (!pos || !NodeType.isText(container)) {\n return false;\n }\n return container.data.charAt(pos.offset() - 1) === Zwsp.ZWSP || pos.isAtEnd() && isCaretContainerInline(container.nextSibling);\n };\n var createBogusBr = function () {\n var br = domGlobals.document.createElement('br');\n br.setAttribute('data-mce-bogus', '1');\n return br;\n };\n var insertBlock = function (blockName, node, before) {\n var doc, blockNode, parentNode;\n doc = node.ownerDocument;\n blockNode = doc.createElement(blockName);\n blockNode.setAttribute('data-mce-caret', before ? 'before' : 'after');\n blockNode.setAttribute('data-mce-bogus', 'all');\n blockNode.appendChild(createBogusBr());\n parentNode = node.parentNode;\n if (!before) {\n if (node.nextSibling) {\n parentNode.insertBefore(blockNode, node.nextSibling);\n } else {\n parentNode.appendChild(blockNode);\n }\n } else {\n parentNode.insertBefore(blockNode, node);\n }\n return blockNode;\n };\n var startsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer = function (node) {\n return isText$2(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var trimBogusBr = function (elm) {\n var brs = elm.getElementsByTagName('br');\n var lastBr = brs[brs.length - 1];\n if (NodeType.isBogus(lastBr)) {\n lastBr.parentNode.removeChild(lastBr);\n }\n };\n var showCaretContainerBlock = function (caretContainer) {\n if (caretContainer && caretContainer.hasAttribute('data-mce-caret')) {\n trimBogusBr(caretContainer);\n caretContainer.removeAttribute('data-mce-caret');\n caretContainer.removeAttribute('data-mce-bogus');\n caretContainer.removeAttribute('style');\n caretContainer.removeAttribute('_moz_abspos');\n return caretContainer;\n }\n return null;\n };\n var isRangeInCaretContainerBlock = function (range) {\n return isCaretContainerBlock(range.startContainer);\n };\n\n var isContentEditableTrue$1 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$1 = NodeType.isContentEditableFalse;\n var isBr$2 = NodeType.isBr;\n var isText$3 = NodeType.isText;\n var isInvalidTextElement = NodeType.matchNodeNames('script style textarea');\n var isAtomicInline = NodeType.matchNodeNames('img input textarea hr iframe video audio object');\n var isTable$1 = NodeType.matchNodeNames('table');\n var isCaretContainer$1 = isCaretContainer;\n var isCaretCandidate = function (node) {\n if (isCaretContainer$1(node)) {\n return false;\n }\n if (isText$3(node)) {\n if (isInvalidTextElement(node.parentNode)) {\n return false;\n }\n return true;\n }\n return isAtomicInline(node) || isBr$2(node) || isTable$1(node) || isNonUiContentEditableFalse(node);\n };\n var isUnselectable = function (node) {\n return NodeType.isElement(node) && node.getAttribute('unselectable') === 'true';\n };\n var isNonUiContentEditableFalse = function (node) {\n return isUnselectable(node) === false && isContentEditableFalse$1(node);\n };\n var isInEditable = function (node, root) {\n for (node = node.parentNode; node && node !== root; node = node.parentNode) {\n if (isNonUiContentEditableFalse(node)) {\n return false;\n }\n if (isContentEditableTrue$1(node)) {\n return true;\n }\n }\n return true;\n };\n var isAtomicContentEditableFalse = function (node) {\n if (!isNonUiContentEditableFalse(node)) {\n return false;\n }\n return foldl(from$1(node.getElementsByTagName('*')), function (result, elm) {\n return result || isContentEditableTrue$1(elm);\n }, false) !== true;\n };\n var isAtomic = function (node) {\n return isAtomicInline(node) || isAtomicContentEditableFalse(node);\n };\n var isEditableCaretCandidate = function (node, root) {\n return isCaretCandidate(node) && isInEditable(node, root);\n };\n\n var round = Math.round;\n var clone$1 = function (rect) {\n if (!rect) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n return {\n left: round(rect.left),\n top: round(rect.top),\n bottom: round(rect.bottom),\n right: round(rect.right),\n width: round(rect.width),\n height: round(rect.height)\n };\n };\n var collapse = function (rect, toStart) {\n rect = clone$1(rect);\n if (toStart) {\n rect.right = rect.left;\n } else {\n rect.left = rect.left + rect.width;\n rect.right = rect.left;\n }\n rect.width = 0;\n return rect;\n };\n var isEqual = function (rect1, rect2) {\n return rect1.left === rect2.left && rect1.top === rect2.top && rect1.bottom === rect2.bottom && rect1.right === rect2.right;\n };\n var isValidOverflow = function (overflowY, rect1, rect2) {\n return overflowY >= 0 && overflowY <= Math.min(rect1.height, rect2.height) / 2;\n };\n var isAbove = function (rect1, rect2) {\n var halfHeight = Math.min(rect2.height / 2, rect1.height / 2);\n if (rect1.bottom - halfHeight < rect2.top) {\n return true;\n }\n if (rect1.top > rect2.bottom) {\n return false;\n }\n return isValidOverflow(rect2.top - rect1.bottom, rect1, rect2);\n };\n var isBelow = function (rect1, rect2) {\n if (rect1.top > rect2.bottom) {\n return true;\n }\n if (rect1.bottom < rect2.top) {\n return false;\n }\n return isValidOverflow(rect2.bottom - rect1.top, rect1, rect2);\n };\n var containsXY = function (rect, clientX, clientY) {\n return clientX >= rect.left && clientX <= rect.right && clientY >= rect.top && clientY <= rect.bottom;\n };\n var overflowX = function (outer, inner) {\n if (inner.left > outer.left && inner.right < outer.right) {\n return 0;\n } else {\n return inner.left < outer.left ? inner.left - outer.left : inner.right - outer.right;\n }\n };\n var overflowY = function (outer, inner) {\n if (inner.top > outer.top && inner.bottom < outer.bottom) {\n return 0;\n } else {\n return inner.top < outer.top ? inner.top - outer.top : inner.bottom - outer.bottom;\n }\n };\n var getOverflow = function (outer, inner) {\n return {\n x: overflowX(outer, inner),\n y: overflowY(outer, inner)\n };\n };\n\n var getSelectedNode = function (range) {\n var startContainer = range.startContainer, startOffset = range.startOffset;\n if (startContainer.hasChildNodes() && range.endOffset === startOffset + 1) {\n return startContainer.childNodes[startOffset];\n }\n return null;\n };\n var getNode = function (container, offset) {\n if (container.nodeType === 1 && container.hasChildNodes()) {\n if (offset >= container.childNodes.length) {\n offset = container.childNodes.length - 1;\n }\n container = container.childNodes[offset];\n }\n return container;\n };\n\n var extendingChars = new RegExp('[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a' + '\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0' + '\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c' + '\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3' + '\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc' + '\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57' + '\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56' + '\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44' + '\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9' + '\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97' + '\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074' + '\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5' + '\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18' + '\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1ABE\\u1b00-\\u1b03\\u1b34' + '\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9' + '\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9' + '\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20DD-\\u20E0\\u20e1\\u20E2-\\u20E4\\u20e5-\\u20f0\\u2cef-\\u2cf1' + '\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\uA670-\\uA672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1' + '\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc' + '\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1' + '\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]');\n var isExtendingChar = function (ch) {\n return typeof ch === 'string' && ch.charCodeAt(0) >= 768 && extendingChars.test(ch);\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n var lift3 = function (oa, ob, oc, f) {\n return oa.isSome() && ob.isSome() && oc.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie(), oc.getOrDie())) : Option.none();\n };\n\n var slice$2 = [].slice;\n var or = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (args[i](x)) {\n return true;\n }\n }\n return false;\n };\n };\n var and = function () {\n var x = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n x[_i] = arguments[_i];\n }\n var args = slice$2.call(arguments);\n return function (x) {\n for (var i = 0; i < args.length; i++) {\n if (!args[i](x)) {\n return false;\n }\n }\n return true;\n };\n };\n var Predicate = {\n and: and,\n or: or\n };\n\n var isElement$3 = NodeType.isElement;\n var isCaretCandidate$1 = isCaretCandidate;\n var isBlock$1 = NodeType.matchStyleValues('display', 'block table');\n var isFloated = NodeType.matchStyleValues('float', 'left right');\n var isValidElementCaretCandidate = Predicate.and(isElement$3, isCaretCandidate$1, not(isFloated));\n var isNotPre = not(NodeType.matchStyleValues('white-space', 'pre pre-line pre-wrap'));\n var isText$4 = NodeType.isText;\n var isBr$3 = NodeType.isBr;\n var nodeIndex = DOMUtils$1.nodeIndex;\n var resolveIndex = getNode;\n var createRange = function (doc) {\n return 'createRange' in doc ? doc.createRange() : DOMUtils$1.DOM.createRng();\n };\n var isWhiteSpace = function (chr) {\n return chr && /[\\r\\n\\t ]/.test(chr);\n };\n var isRange = function (rng) {\n return !!rng.setStart && !!rng.setEnd;\n };\n var isHiddenWhiteSpaceRange = function (range) {\n var container = range.startContainer;\n var offset = range.startOffset;\n var text;\n if (isWhiteSpace(range.toString()) && isNotPre(container.parentNode) && NodeType.isText(container)) {\n text = container.data;\n if (isWhiteSpace(text[offset - 1]) || isWhiteSpace(text[offset + 1])) {\n return true;\n }\n }\n return false;\n };\n var getBrClientRect = function (brNode) {\n var doc = brNode.ownerDocument;\n var rng = createRange(doc);\n var nbsp = doc.createTextNode('\\xA0');\n var parentNode = brNode.parentNode;\n var clientRect;\n parentNode.insertBefore(nbsp, brNode);\n rng.setStart(nbsp, 0);\n rng.setEnd(nbsp, 1);\n clientRect = clone$1(rng.getBoundingClientRect());\n parentNode.removeChild(nbsp);\n return clientRect;\n };\n var getBoundingClientRectWebKitText = function (rng) {\n var sc = rng.startContainer;\n var ec = rng.endContainer;\n var so = rng.startOffset;\n var eo = rng.endOffset;\n if (sc === ec && NodeType.isText(ec) && so === 0 && eo === 1) {\n var newRng = rng.cloneRange();\n newRng.setEndAfter(ec);\n return getBoundingClientRect(newRng);\n } else {\n return null;\n }\n };\n var isZeroRect = function (r) {\n return r.left === 0 && r.right === 0 && r.top === 0 && r.bottom === 0;\n };\n var getBoundingClientRect = function (item) {\n var clientRect, clientRects;\n clientRects = item.getClientRects();\n if (clientRects.length > 0) {\n clientRect = clone$1(clientRects[0]);\n } else {\n clientRect = clone$1(item.getBoundingClientRect());\n }\n if (!isRange(item) && isBr$3(item) && isZeroRect(clientRect)) {\n return getBrClientRect(item);\n }\n if (isZeroRect(clientRect) && isRange(item)) {\n return getBoundingClientRectWebKitText(item);\n }\n return clientRect;\n };\n var collapseAndInflateWidth = function (clientRect, toStart) {\n var newClientRect = collapse(clientRect, toStart);\n newClientRect.width = 1;\n newClientRect.right = newClientRect.left + 1;\n return newClientRect;\n };\n var getCaretPositionClientRects = function (caretPosition) {\n var clientRects = [];\n var beforeNode, node;\n var addUniqueAndValidRect = function (clientRect) {\n if (clientRect.height === 0) {\n return;\n }\n if (clientRects.length > 0) {\n if (isEqual(clientRect, clientRects[clientRects.length - 1])) {\n return;\n }\n }\n clientRects.push(clientRect);\n };\n var addCharacterOffset = function (container, offset) {\n var range = createRange(container.ownerDocument);\n if (offset < container.data.length) {\n if (isExtendingChar(container.data[offset])) {\n return clientRects;\n }\n if (isExtendingChar(container.data[offset - 1])) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n return clientRects;\n }\n }\n }\n if (offset > 0) {\n range.setStart(container, offset - 1);\n range.setEnd(container, offset);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), false));\n }\n }\n if (offset < container.data.length) {\n range.setStart(container, offset);\n range.setEnd(container, offset + 1);\n if (!isHiddenWhiteSpaceRange(range)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(range), true));\n }\n }\n };\n if (isText$4(caretPosition.container())) {\n addCharacterOffset(caretPosition.container(), caretPosition.offset());\n return clientRects;\n }\n if (isElement$3(caretPosition.container())) {\n if (caretPosition.isAtEnd()) {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, node.data.length);\n }\n if (isValidElementCaretCandidate(node) && !isBr$3(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n }\n } else {\n node = resolveIndex(caretPosition.container(), caretPosition.offset());\n if (isText$4(node)) {\n addCharacterOffset(node, 0);\n }\n if (isValidElementCaretCandidate(node) && caretPosition.isAtEnd()) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), false));\n return clientRects;\n }\n beforeNode = resolveIndex(caretPosition.container(), caretPosition.offset() - 1);\n if (isValidElementCaretCandidate(beforeNode) && !isBr$3(beforeNode)) {\n if (isBlock$1(beforeNode) || isBlock$1(node) || !isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(beforeNode), false));\n }\n }\n if (isValidElementCaretCandidate(node)) {\n addUniqueAndValidRect(collapseAndInflateWidth(getBoundingClientRect(node), true));\n }\n }\n }\n return clientRects;\n };\n function CaretPosition(container, offset, clientRects) {\n var isAtStart = function () {\n if (isText$4(container)) {\n return offset === 0;\n }\n return offset === 0;\n };\n var isAtEnd = function () {\n if (isText$4(container)) {\n return offset >= container.data.length;\n }\n return offset >= container.childNodes.length;\n };\n var toRange = function () {\n var range;\n range = createRange(container.ownerDocument);\n range.setStart(container, offset);\n range.setEnd(container, offset);\n return range;\n };\n var getClientRects = function () {\n if (!clientRects) {\n clientRects = getCaretPositionClientRects(CaretPosition(container, offset));\n }\n return clientRects;\n };\n var isVisible = function () {\n return getClientRects().length > 0;\n };\n var isEqual = function (caretPosition) {\n return caretPosition && container === caretPosition.container() && offset === caretPosition.offset();\n };\n var getNode = function (before) {\n return resolveIndex(container, before ? offset - 1 : offset);\n };\n return {\n container: constant(container),\n offset: constant(offset),\n toRange: toRange,\n getClientRects: getClientRects,\n isVisible: isVisible,\n isAtStart: isAtStart,\n isAtEnd: isAtEnd,\n isEqual: isEqual,\n getNode: getNode\n };\n }\n (function (CaretPosition) {\n CaretPosition.fromRangeStart = function (range) {\n return CaretPosition(range.startContainer, range.startOffset);\n };\n CaretPosition.fromRangeEnd = function (range) {\n return CaretPosition(range.endContainer, range.endOffset);\n };\n CaretPosition.after = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node) + 1);\n };\n CaretPosition.before = function (node) {\n return CaretPosition(node.parentNode, nodeIndex(node));\n };\n CaretPosition.isAbove = function (pos1, pos2) {\n return lift2(head(pos2.getClientRects()), last(pos1.getClientRects()), isAbove).getOr(false);\n };\n CaretPosition.isBelow = function (pos1, pos2) {\n return lift2(last(pos2.getClientRects()), head(pos1.getClientRects()), isBelow).getOr(false);\n };\n CaretPosition.isAtStart = function (pos) {\n return pos ? pos.isAtStart() : false;\n };\n CaretPosition.isAtEnd = function (pos) {\n return pos ? pos.isAtEnd() : false;\n };\n CaretPosition.isTextPosition = function (pos) {\n return pos ? NodeType.isText(pos.container()) : false;\n };\n CaretPosition.isElementPosition = function (pos) {\n return CaretPosition.isTextPosition(pos) === false;\n };\n }(CaretPosition || (CaretPosition = {})));\n var CaretPosition$1 = CaretPosition;\n\n var isText$5 = NodeType.isText;\n var isBogus$1 = NodeType.isBogus;\n var nodeIndex$1 = DOMUtils$1.nodeIndex;\n var normalizedParent = function (node) {\n var parentNode = node.parentNode;\n if (isBogus$1(parentNode)) {\n return normalizedParent(parentNode);\n }\n return parentNode;\n };\n var getChildNodes = function (node) {\n if (!node) {\n return [];\n }\n return ArrUtils.reduce(node.childNodes, function (result, node) {\n if (isBogus$1(node) && node.nodeName !== 'BR') {\n result = result.concat(getChildNodes(node));\n } else {\n result.push(node);\n }\n return result;\n }, []);\n };\n var normalizedTextOffset = function (node, offset) {\n while (node = node.previousSibling) {\n if (!isText$5(node)) {\n break;\n }\n offset += node.data.length;\n }\n return offset;\n };\n var equal = function (a) {\n return function (b) {\n return a === b;\n };\n };\n var normalizedNodeIndex = function (node) {\n var nodes, index, numTextFragments;\n nodes = getChildNodes(normalizedParent(node));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n nodes = nodes.slice(0, index + 1);\n numTextFragments = ArrUtils.reduce(nodes, function (result, node, i) {\n if (isText$5(node) && isText$5(nodes[i - 1])) {\n result++;\n }\n return result;\n }, 0);\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(node.nodeName));\n index = ArrUtils.findIndex(nodes, equal(node), node);\n return index - numTextFragments;\n };\n var createPathItem = function (node) {\n var name;\n if (isText$5(node)) {\n name = 'text()';\n } else {\n name = node.nodeName.toLowerCase();\n }\n return name + '[' + normalizedNodeIndex(node) + ']';\n };\n var parentsUntil = function (root, node, predicate) {\n var parents = [];\n for (node = node.parentNode; node !== root; node = node.parentNode) {\n if (predicate && predicate(node)) {\n break;\n }\n parents.push(node);\n }\n return parents;\n };\n var create$2 = function (root, caretPosition) {\n var container, offset, path = [], outputOffset, childNodes, parents;\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (isText$5(container)) {\n outputOffset = normalizedTextOffset(container, offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length) {\n outputOffset = 'after';\n offset = childNodes.length - 1;\n } else {\n outputOffset = 'before';\n }\n container = childNodes[offset];\n }\n path.push(createPathItem(container));\n parents = parentsUntil(root, container);\n parents = ArrUtils.filter(parents, not(NodeType.isBogus));\n path = path.concat(ArrUtils.map(parents, function (node) {\n return createPathItem(node);\n }));\n return path.reverse().join('/') + ',' + outputOffset;\n };\n var resolvePathItem = function (node, name, index) {\n var nodes = getChildNodes(node);\n nodes = ArrUtils.filter(nodes, function (node, index) {\n return !isText$5(node) || !isText$5(nodes[index - 1]);\n });\n nodes = ArrUtils.filter(nodes, NodeType.matchNodeNames(name));\n return nodes[index];\n };\n var findTextPosition = function (container, offset) {\n var node = container, targetOffset = 0, dataLen;\n while (isText$5(node)) {\n dataLen = node.data.length;\n if (offset >= targetOffset && offset <= targetOffset + dataLen) {\n container = node;\n offset = offset - targetOffset;\n break;\n }\n if (!isText$5(node.nextSibling)) {\n container = node;\n offset = dataLen;\n break;\n }\n targetOffset += dataLen;\n node = node.nextSibling;\n }\n if (isText$5(container) && offset > container.data.length) {\n offset = container.data.length;\n }\n return CaretPosition$1(container, offset);\n };\n var resolve$2 = function (root, path) {\n var parts, container, offset;\n if (!path) {\n return null;\n }\n parts = path.split(',');\n path = parts[0].split('/');\n offset = parts.length > 1 ? parts[1] : 'before';\n container = ArrUtils.reduce(path, function (result, value) {\n value = /([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(value);\n if (!value) {\n return null;\n }\n if (value[1] === 'text()') {\n value[1] = '#text';\n }\n return resolvePathItem(result, value[1], parseInt(value[2], 10));\n }, root);\n if (!container) {\n return null;\n }\n if (!isText$5(container)) {\n if (offset === 'after') {\n offset = nodeIndex$1(container) + 1;\n } else {\n offset = nodeIndex$1(container);\n }\n return CaretPosition$1(container.parentNode, offset);\n }\n return findTextPosition(container, parseInt(offset, 10));\n };\n\n var trimEmptyTextNode = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var insertNode = function (dom, rng, node) {\n rng.insertNode(node);\n trimEmptyTextNode(dom, node.previousSibling);\n trimEmptyTextNode(dom, node.nextSibling);\n };\n var insertFragment = function (dom, rng, frag) {\n var firstChild = Option.from(frag.firstChild);\n var lastChild = Option.from(frag.lastChild);\n rng.insertNode(frag);\n firstChild.each(function (child) {\n return trimEmptyTextNode(dom, child.previousSibling);\n });\n lastChild.each(function (child) {\n return trimEmptyTextNode(dom, child.nextSibling);\n });\n };\n var rangeInsertNode = function (dom, rng, node) {\n if (NodeType.isDocumentFragment(node)) {\n insertFragment(dom, rng, node);\n } else {\n insertNode(dom, rng, node);\n }\n };\n\n var isContentEditableFalse$2 = NodeType.isContentEditableFalse;\n var getNormalizedTextOffset = function (trim, container, offset) {\n var node, trimmedOffset;\n trimmedOffset = trim(container.data.slice(0, offset)).length;\n for (node = container.previousSibling; node && NodeType.isText(node); node = node.previousSibling) {\n trimmedOffset += trim(node.data).length;\n }\n return trimmedOffset;\n };\n var getPoint = function (dom, trim, normalized, rng, start) {\n var container = rng[start ? 'startContainer' : 'endContainer'];\n var offset = rng[start ? 'startOffset' : 'endOffset'];\n var point = [];\n var childNodes, after = 0;\n var root = dom.getRoot();\n if (NodeType.isText(container)) {\n point.push(normalized ? getNormalizedTextOffset(trim, container, offset) : offset);\n } else {\n childNodes = container.childNodes;\n if (offset >= childNodes.length && childNodes.length) {\n after = 1;\n offset = Math.max(0, childNodes.length - 1);\n }\n point.push(dom.nodeIndex(childNodes[offset], normalized) + after);\n }\n for (; container && container !== root; container = container.parentNode) {\n point.push(dom.nodeIndex(container, normalized));\n }\n return point;\n };\n var getLocation = function (trim, selection, normalized, rng) {\n var dom = selection.dom, bookmark = {};\n bookmark.start = getPoint(dom, trim, normalized, rng, true);\n if (!selection.isCollapsed()) {\n bookmark.end = getPoint(dom, trim, normalized, rng, false);\n }\n return bookmark;\n };\n var findIndex$2 = function (dom, name, element) {\n var count = 0;\n Tools.each(dom.select(name), function (node) {\n if (node.getAttribute('data-mce-bogus') === 'all') {\n return;\n }\n if (node === element) {\n return false;\n }\n count++;\n });\n return count;\n };\n var moveEndPoint = function (rng, start) {\n var container, offset, childNodes;\n var prefix = start ? 'start' : 'end';\n container = rng[prefix + 'Container'];\n offset = rng[prefix + 'Offset'];\n if (NodeType.isElement(container) && container.nodeName === 'TR') {\n childNodes = container.childNodes;\n container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];\n if (container) {\n offset = start ? 0 : container.childNodes.length;\n rng['set' + (start ? 'Start' : 'End')](container, offset);\n }\n }\n };\n var normalizeTableCellSelection = function (rng) {\n moveEndPoint(rng, true);\n moveEndPoint(rng, false);\n return rng;\n };\n var findSibling = function (node, offset) {\n var sibling;\n if (NodeType.isElement(node)) {\n node = getNode(node, offset);\n if (isContentEditableFalse$2(node)) {\n return node;\n }\n }\n if (isCaretContainer(node)) {\n if (NodeType.isText(node) && isCaretContainerBlock(node)) {\n node = node.parentNode;\n }\n sibling = node.previousSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n sibling = node.nextSibling;\n if (isContentEditableFalse$2(sibling)) {\n return sibling;\n }\n }\n };\n var findAdjacentContentEditableFalseElm = function (rng) {\n return findSibling(rng.startContainer, rng.startOffset) || findSibling(rng.endContainer, rng.endOffset);\n };\n var getOffsetBookmark = function (trim, normalized, selection) {\n var element = selection.getNode();\n var name = element ? element.nodeName : null;\n var rng = selection.getRng();\n if (isContentEditableFalse$2(element) || name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(selection.dom, name, element)\n };\n }\n var sibling = findAdjacentContentEditableFalseElm(rng);\n if (sibling) {\n name = sibling.tagName;\n return {\n name: name,\n index: findIndex$2(selection.dom, name, sibling)\n };\n }\n return getLocation(trim, selection, normalized, rng);\n };\n var getCaretBookmark = function (selection) {\n var rng = selection.getRng();\n return {\n start: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeStart(rng)),\n end: create$2(selection.dom.getRoot(), CaretPosition$1.fromRangeEnd(rng))\n };\n };\n var getRangeBookmark = function (selection) {\n return { rng: selection.getRng() };\n };\n var createBookmarkSpan = function (dom, id, filled) {\n var args = {\n 'data-mce-type': 'bookmark',\n 'id': id,\n 'style': 'overflow:hidden;line-height:0px'\n };\n return filled ? dom.create('span', args, '') : dom.create('span', args);\n };\n var getPersistentBookmark = function (selection, filled) {\n var dom = selection.dom;\n var rng = selection.getRng();\n var id = dom.uniqueId();\n var collapsed = selection.isCollapsed();\n var element = selection.getNode();\n var name = element.nodeName;\n if (name === 'IMG') {\n return {\n name: name,\n index: findIndex$2(dom, name, element)\n };\n }\n var rng2 = normalizeTableCellSelection(rng.cloneRange());\n if (!collapsed) {\n rng2.collapse(false);\n var endBookmarkNode = createBookmarkSpan(dom, id + '_end', filled);\n rangeInsertNode(dom, rng2, endBookmarkNode);\n }\n rng = normalizeTableCellSelection(rng);\n rng.collapse(true);\n var startBookmarkNode = createBookmarkSpan(dom, id + '_start', filled);\n rangeInsertNode(dom, rng, startBookmarkNode);\n selection.moveToBookmark({\n id: id,\n keep: 1\n });\n return { id: id };\n };\n var getBookmark = function (selection, type, normalized) {\n if (type === 2) {\n return getOffsetBookmark(Zwsp.trim, normalized, selection);\n } else if (type === 3) {\n return getCaretBookmark(selection);\n } else if (type) {\n return getRangeBookmark(selection);\n } else {\n return getPersistentBookmark(selection, false);\n }\n };\n var GetBookmark = {\n getBookmark: getBookmark,\n getUndoBookmark: curry(getOffsetBookmark, identity, true),\n getPersistentBookmark: getPersistentBookmark\n };\n\n var CARET_ID = '_mce_caret';\n var isCaretNode = function (node) {\n return NodeType.isElement(node) && node.id === CARET_ID;\n };\n var getParentCaretContainer = function (body, node) {\n while (node && node !== body) {\n if (node.id === CARET_ID) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n\n var isElement$4 = NodeType.isElement;\n var isText$6 = NodeType.isText;\n var removeNode = function (node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n };\n var getNodeValue = function (node) {\n try {\n return node.nodeValue;\n } catch (ex) {\n return '';\n }\n };\n var setNodeValue = function (node, text) {\n if (text.length === 0) {\n removeNode(node);\n } else {\n node.nodeValue = text;\n }\n };\n var trimCount = function (text) {\n var trimmedText = Zwsp.trim(text);\n return {\n count: text.length - trimmedText.length,\n text: trimmedText\n };\n };\n var removeUnchanged = function (caretContainer, pos) {\n remove$5(caretContainer);\n return pos;\n };\n var removeTextAndReposition = function (caretContainer, pos) {\n var before = trimCount(caretContainer.data.substr(0, pos.offset()));\n var after = trimCount(caretContainer.data.substr(pos.offset()));\n var text = before.text + after.text;\n if (text.length > 0) {\n setNodeValue(caretContainer, text);\n return CaretPosition$1(caretContainer, pos.offset() - before.count);\n } else {\n return pos;\n }\n };\n var removeElementAndReposition = function (caretContainer, pos) {\n var parentNode = pos.container();\n var newPosition = indexOf(from$1(parentNode.childNodes), caretContainer).map(function (index) {\n return index < pos.offset() ? CaretPosition$1(parentNode, pos.offset() - 1) : pos;\n }).getOr(pos);\n remove$5(caretContainer);\n return newPosition;\n };\n var removeTextCaretContainer = function (caretContainer, pos) {\n return isText$6(caretContainer) && pos.container() === caretContainer ? removeTextAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeElementCaretContainer = function (caretContainer, pos) {\n return pos.container() === caretContainer.parentNode ? removeElementAndReposition(caretContainer, pos) : removeUnchanged(caretContainer, pos);\n };\n var removeAndReposition = function (container, pos) {\n return CaretPosition$1.isTextPosition(pos) ? removeTextCaretContainer(container, pos) : removeElementCaretContainer(container, pos);\n };\n var remove$5 = function (caretContainerNode) {\n if (isElement$4(caretContainerNode) && isCaretContainer(caretContainerNode)) {\n if (hasContent(caretContainerNode)) {\n caretContainerNode.removeAttribute('data-mce-caret');\n } else {\n removeNode(caretContainerNode);\n }\n }\n if (isText$6(caretContainerNode)) {\n var text = Zwsp.trim(getNodeValue(caretContainerNode));\n setNodeValue(caretContainerNode, text);\n }\n };\n var CaretContainerRemove = {\n removeAndReposition: removeAndReposition,\n remove: remove$5\n };\n\n var browser$2 = PlatformDetection$1.detect().browser;\n var isContentEditableFalse$3 = NodeType.isContentEditableFalse;\n var isTableCell$1 = function (node) {\n return NodeType.isElement(node) && /^(TD|TH)$/i.test(node.tagName);\n };\n var getAbsoluteClientRect = function (root, element, before) {\n var clientRect = collapse(element.getBoundingClientRect(), before);\n var docElm, scrollX, scrollY, margin, rootRect;\n if (root.tagName === 'BODY') {\n docElm = root.ownerDocument.documentElement;\n scrollX = root.scrollLeft || docElm.scrollLeft;\n scrollY = root.scrollTop || docElm.scrollTop;\n } else {\n rootRect = root.getBoundingClientRect();\n scrollX = root.scrollLeft - rootRect.left;\n scrollY = root.scrollTop - rootRect.top;\n }\n clientRect.left += scrollX;\n clientRect.right += scrollX;\n clientRect.top += scrollY;\n clientRect.bottom += scrollY;\n clientRect.width = 1;\n margin = element.offsetWidth - element.clientWidth;\n if (margin > 0) {\n if (before) {\n margin *= -1;\n }\n clientRect.left += margin;\n clientRect.right += margin;\n }\n return clientRect;\n };\n var trimInlineCaretContainers = function (root) {\n var contentEditableFalseNodes, node, sibling, i, data;\n contentEditableFalseNodes = DomQuery('*[contentEditable=false]', root);\n for (i = 0; i < contentEditableFalseNodes.length; i++) {\n node = contentEditableFalseNodes[i];\n sibling = node.previousSibling;\n if (endsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(data.length - 1, 1);\n }\n }\n sibling = node.nextSibling;\n if (startsWithCaretContainer(sibling)) {\n data = sibling.data;\n if (data.length === 1) {\n sibling.parentNode.removeChild(sibling);\n } else {\n sibling.deleteData(0, 1);\n }\n }\n }\n };\n var FakeCaret = function (root, isBlock, hasFocus) {\n var lastVisualCaret = Cell(Option.none());\n var cursorInterval, caretContainerNode;\n var show = function (before, element) {\n var clientRect, rng;\n hide();\n if (isTableCell$1(element)) {\n return null;\n }\n if (isBlock(element)) {\n caretContainerNode = insertBlock('p', element, before);\n clientRect = getAbsoluteClientRect(root, element, before);\n DomQuery(caretContainerNode).css('top', clientRect.top);\n var caret = DomQuery('
').css(clientRect).appendTo(root)[0];\n lastVisualCaret.set(Option.some({\n caret: caret,\n element: element,\n before: before\n }));\n lastVisualCaret.get().each(function (caretState) {\n if (before) {\n DomQuery(caretState.caret).addClass('mce-visual-caret-before');\n }\n });\n startBlink();\n rng = element.ownerDocument.createRange();\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n caretContainerNode = insertInline(element, before);\n rng = element.ownerDocument.createRange();\n if (isContentEditableFalse$3(caretContainerNode.nextSibling)) {\n rng.setStart(caretContainerNode, 0);\n rng.setEnd(caretContainerNode, 0);\n } else {\n rng.setStart(caretContainerNode, 1);\n rng.setEnd(caretContainerNode, 1);\n }\n return rng;\n }\n return rng;\n };\n var hide = function () {\n trimInlineCaretContainers(root);\n if (caretContainerNode) {\n CaretContainerRemove.remove(caretContainerNode);\n caretContainerNode = null;\n }\n lastVisualCaret.get().each(function (caretState) {\n DomQuery(caretState.caret).remove();\n lastVisualCaret.set(Option.none());\n });\n clearInterval(cursorInterval);\n };\n var startBlink = function () {\n cursorInterval = Delay.setInterval(function () {\n if (hasFocus()) {\n DomQuery('div.mce-visual-caret', root).toggleClass('mce-visual-caret-hidden');\n } else {\n DomQuery('div.mce-visual-caret', root).addClass('mce-visual-caret-hidden');\n }\n }, 500);\n };\n var reposition = function () {\n lastVisualCaret.get().each(function (caretState) {\n var clientRect = getAbsoluteClientRect(root, caretState.element, caretState.before);\n DomQuery(caretState.caret).css(clientRect);\n });\n };\n var destroy = function () {\n return Delay.clearInterval(cursorInterval);\n };\n var getCss = function () {\n return '.mce-visual-caret {' + 'position: absolute;' + 'background-color: black;' + 'background-color: currentcolor;' + '}' + '.mce-visual-caret-hidden {' + 'display: none;' + '}' + '*[data-mce-caret] {' + 'position: absolute;' + 'left: -1000px;' + 'right: auto;' + 'top: 0;' + 'margin: 0;' + 'padding: 0;' + '}';\n };\n return {\n show: show,\n hide: hide,\n getCss: getCss,\n reposition: reposition,\n destroy: destroy\n };\n };\n var isFakeCaretTableBrowser = function () {\n return browser$2.isIE() || browser$2.isEdge() || browser$2.isFirefox();\n };\n var isFakeCaretTarget = function (node) {\n return isContentEditableFalse$3(node) || NodeType.isTable(node) && isFakeCaretTableBrowser();\n };\n\n var isContentEditableFalse$4 = NodeType.isContentEditableFalse;\n var isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item');\n var isCaretContainer$2 = isCaretContainer;\n var isCaretContainerBlock$1 = isCaretContainerBlock;\n var isElement$5 = NodeType.isElement;\n var isCaretCandidate$2 = isCaretCandidate;\n var isForwards = function (direction) {\n return direction > 0;\n };\n var isBackwards = function (direction) {\n return direction < 0;\n };\n var skipCaretContainers = function (walk, shallow) {\n var node;\n while (node = walk(shallow)) {\n if (!isCaretContainerBlock$1(node)) {\n return node;\n }\n }\n return null;\n };\n var findNode = function (node, direction, predicateFn, rootNode, shallow) {\n var walker = new TreeWalker(node, rootNode);\n if (isBackwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.prev, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.prev, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n if (isForwards(direction)) {\n if (isContentEditableFalse$4(node) || isCaretContainerBlock$1(node)) {\n node = skipCaretContainers(walker.next, true);\n if (predicateFn(node)) {\n return node;\n }\n }\n while (node = skipCaretContainers(walker.next, shallow)) {\n if (predicateFn(node)) {\n return node;\n }\n }\n }\n return null;\n };\n var getParentBlock = function (node, rootNode) {\n while (node && node !== rootNode) {\n if (isBlockLike(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var isInSameBlock = function (caretPosition1, caretPosition2, rootNode) {\n return getParentBlock(caretPosition1.container(), rootNode) === getParentBlock(caretPosition2.container(), rootNode);\n };\n var getChildNodeAtRelativeOffset = function (relativeOffset, caretPosition) {\n var container, offset;\n if (!caretPosition) {\n return null;\n }\n container = caretPosition.container();\n offset = caretPosition.offset();\n if (!isElement$5(container)) {\n return null;\n }\n return container.childNodes[offset + relativeOffset];\n };\n var beforeAfter = function (before, node) {\n var range = node.ownerDocument.createRange();\n if (before) {\n range.setStartBefore(node);\n range.setEndBefore(node);\n } else {\n range.setStartAfter(node);\n range.setEndAfter(node);\n }\n return range;\n };\n var isNodesInSameBlock = function (root, node1, node2) {\n return getParentBlock(node1, root) === getParentBlock(node2, root);\n };\n var lean = function (left, root, node) {\n var sibling, siblingName;\n if (left) {\n siblingName = 'previousSibling';\n } else {\n siblingName = 'nextSibling';\n }\n while (node && node !== root) {\n sibling = node[siblingName];\n if (isCaretContainer$2(sibling)) {\n sibling = sibling[siblingName];\n }\n if (isContentEditableFalse$4(sibling)) {\n if (isNodesInSameBlock(root, sibling, node)) {\n return sibling;\n }\n break;\n }\n if (isCaretCandidate$2(sibling)) {\n break;\n }\n node = node.parentNode;\n }\n return null;\n };\n var before$2 = curry(beforeAfter, true);\n var after$1 = curry(beforeAfter, false);\n var normalizeRange = function (direction, root, range) {\n var node, container, offset, location;\n var leanLeft = curry(lean, true, root);\n var leanRight = curry(lean, false, root);\n container = range.startContainer;\n offset = range.startOffset;\n if (isCaretContainerBlock(container)) {\n if (!isElement$5(container)) {\n container = container.parentNode;\n }\n location = container.getAttribute('data-mce-caret');\n if (location === 'before') {\n node = container.nextSibling;\n if (isFakeCaretTarget(node)) {\n return before$2(node);\n }\n }\n if (location === 'after') {\n node = container.previousSibling;\n if (isFakeCaretTarget(node)) {\n return after$1(node);\n }\n }\n }\n if (!range.collapsed) {\n return range;\n }\n if (NodeType.isText(container)) {\n if (isCaretContainer$2(container)) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (endsWithCaretContainer(container) && offset >= container.data.length - 1) {\n if (direction === 1) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n }\n return range;\n }\n if (startsWithCaretContainer(container) && offset <= 1) {\n if (direction === -1) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n }\n return range;\n }\n if (offset === container.data.length) {\n node = leanRight(container);\n if (node) {\n return before$2(node);\n }\n return range;\n }\n if (offset === 0) {\n node = leanLeft(container);\n if (node) {\n return after$1(node);\n }\n return range;\n }\n }\n return range;\n };\n var getRelativeCefElm = function (forward, caretPosition) {\n return Option.from(getChildNodeAtRelativeOffset(forward ? 0 : -1, caretPosition)).filter(isContentEditableFalse$4);\n };\n var getNormalizedRangeEndPoint = function (direction, root, range) {\n var normalizedRange = normalizeRange(direction, root, range);\n if (direction === -1) {\n return CaretPosition.fromRangeStart(normalizedRange);\n }\n return CaretPosition.fromRangeEnd(normalizedRange);\n };\n var getElementFromPosition = function (pos) {\n return Option.from(pos.getNode()).map(Element.fromDom);\n };\n var getElementFromPrevPosition = function (pos) {\n return Option.from(pos.getNode(true)).map(Element.fromDom);\n };\n var getVisualCaretPosition = function (walkFn, caretPosition) {\n while (caretPosition = walkFn(caretPosition)) {\n if (caretPosition.isVisible()) {\n return caretPosition;\n }\n }\n return caretPosition;\n };\n var isMoveInsideSameBlock = function (from, to) {\n var inSameBlock = isInSameBlock(from, to);\n if (!inSameBlock && NodeType.isBr(from.getNode())) {\n return true;\n }\n return inSameBlock;\n };\n\n var HDirection;\n (function (HDirection) {\n HDirection[HDirection['Backwards'] = -1] = 'Backwards';\n HDirection[HDirection['Forwards'] = 1] = 'Forwards';\n }(HDirection || (HDirection = {})));\n var isContentEditableFalse$5 = NodeType.isContentEditableFalse;\n var isText$7 = NodeType.isText;\n var isElement$6 = NodeType.isElement;\n var isBr$4 = NodeType.isBr;\n var isCaretCandidate$3 = isCaretCandidate;\n var isAtomic$1 = isAtomic;\n var isEditableCaretCandidate$1 = isEditableCaretCandidate;\n var getParents = function (node, root) {\n var parents = [];\n while (node && node !== root) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n };\n var nodeAtIndex = function (container, offset) {\n if (container.hasChildNodes() && offset < container.childNodes.length) {\n return container.childNodes[offset];\n }\n return null;\n };\n var getCaretCandidatePosition = function (direction, node) {\n if (isForwards(direction)) {\n if (isCaretCandidate$3(node.previousSibling) && !isText$7(node.previousSibling)) {\n return CaretPosition$1.before(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, 0);\n }\n }\n if (isBackwards(direction)) {\n if (isCaretCandidate$3(node.nextSibling) && !isText$7(node.nextSibling)) {\n return CaretPosition$1.after(node);\n }\n if (isText$7(node)) {\n return CaretPosition$1(node, node.data.length);\n }\n }\n if (isBackwards(direction)) {\n if (isBr$4(node)) {\n return CaretPosition$1.before(node);\n }\n return CaretPosition$1.after(node);\n }\n return CaretPosition$1.before(node);\n };\n var moveForwardFromBr = function (root, nextNode) {\n var nextSibling = nextNode.nextSibling;\n if (nextSibling && isCaretCandidate$3(nextSibling)) {\n if (isText$7(nextSibling)) {\n return CaretPosition$1(nextSibling, 0);\n } else {\n return CaretPosition$1.before(nextSibling);\n }\n } else {\n return findCaretPosition(HDirection.Forwards, CaretPosition$1.after(nextNode), root);\n }\n };\n var findCaretPosition = function (direction, startPos, root) {\n var node, nextNode, innerNode;\n var rootContentEditableFalseElm, caretPosition;\n if (!isElement$6(root) || !startPos) {\n return null;\n }\n if (startPos.isEqual(CaretPosition$1.after(root)) && root.lastChild) {\n caretPosition = CaretPosition$1.after(root.lastChild);\n if (isBackwards(direction) && isCaretCandidate$3(root.lastChild) && isElement$6(root.lastChild)) {\n return isBr$4(root.lastChild) ? CaretPosition$1.before(root.lastChild) : caretPosition;\n }\n } else {\n caretPosition = startPos;\n }\n var container = caretPosition.container();\n var offset = caretPosition.offset();\n if (isText$7(container)) {\n if (isBackwards(direction) && offset > 0) {\n return CaretPosition$1(container, --offset);\n }\n if (isForwards(direction) && offset < container.length) {\n return CaretPosition$1(container, ++offset);\n }\n node = container;\n } else {\n if (isBackwards(direction) && offset > 0) {\n nextNode = nodeAtIndex(container, offset - 1);\n if (isCaretCandidate$3(nextNode)) {\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, innerNode.data.length);\n }\n return CaretPosition$1.after(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, nextNode.data.length);\n }\n return CaretPosition$1.before(nextNode);\n }\n }\n if (isForwards(direction) && offset < container.childNodes.length) {\n nextNode = nodeAtIndex(container, offset);\n if (isCaretCandidate$3(nextNode)) {\n if (isBr$4(nextNode)) {\n return moveForwardFromBr(root, nextNode);\n }\n if (!isAtomic$1(nextNode)) {\n innerNode = findNode(nextNode, direction, isEditableCaretCandidate$1, nextNode);\n if (innerNode) {\n if (isText$7(innerNode)) {\n return CaretPosition$1(innerNode, 0);\n }\n return CaretPosition$1.before(innerNode);\n }\n }\n if (isText$7(nextNode)) {\n return CaretPosition$1(nextNode, 0);\n }\n return CaretPosition$1.after(nextNode);\n }\n }\n node = nextNode ? nextNode : caretPosition.getNode();\n }\n if (isForwards(direction) && caretPosition.isAtEnd() || isBackwards(direction) && caretPosition.isAtStart()) {\n node = findNode(node, direction, constant(true), root, true);\n if (isEditableCaretCandidate$1(node, root)) {\n return getCaretCandidatePosition(direction, node);\n }\n }\n nextNode = findNode(node, direction, isEditableCaretCandidate$1, root);\n rootContentEditableFalseElm = ArrUtils.last(filter(getParents(container, root), isContentEditableFalse$5));\n if (rootContentEditableFalseElm && (!nextNode || !rootContentEditableFalseElm.contains(nextNode))) {\n if (isForwards(direction)) {\n caretPosition = CaretPosition$1.after(rootContentEditableFalseElm);\n } else {\n caretPosition = CaretPosition$1.before(rootContentEditableFalseElm);\n }\n return caretPosition;\n }\n if (nextNode) {\n return getCaretCandidatePosition(direction, nextNode);\n }\n return null;\n };\n var CaretWalker = function (root) {\n return {\n next: function (caretPosition) {\n return findCaretPosition(HDirection.Forwards, caretPosition, root);\n },\n prev: function (caretPosition) {\n return findCaretPosition(HDirection.Backwards, caretPosition, root);\n }\n };\n };\n\n var walkToPositionIn = function (forward, root, start) {\n var position = forward ? CaretPosition$1.before(start) : CaretPosition$1.after(start);\n return fromPosition(forward, root, position);\n };\n var afterElement = function (node) {\n return NodeType.isBr(node) ? CaretPosition$1.before(node) : CaretPosition$1.after(node);\n };\n var isBeforeOrStart = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n return position.offset() === 0;\n } else {\n return isCaretCandidate(position.getNode());\n }\n };\n var isAfterOrEnd = function (position) {\n if (CaretPosition$1.isTextPosition(position)) {\n var container = position.container();\n return position.offset() === container.data.length;\n } else {\n return isCaretCandidate(position.getNode(true));\n }\n };\n var isBeforeAfterSameElement = function (from, to) {\n return !CaretPosition$1.isTextPosition(from) && !CaretPosition$1.isTextPosition(to) && from.getNode() === to.getNode(true);\n };\n var isAtBr = function (position) {\n return !CaretPosition$1.isTextPosition(position) && NodeType.isBr(position.getNode());\n };\n var shouldSkipPosition = function (forward, from, to) {\n if (forward) {\n return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);\n } else {\n return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);\n }\n };\n var fromPosition = function (forward, root, pos) {\n var walker = CaretWalker(root);\n return Option.from(forward ? walker.next(pos) : walker.prev(pos));\n };\n var navigate = function (forward, root, from) {\n return fromPosition(forward, root, from).bind(function (to) {\n if (isInSameBlock(from, to, root) && shouldSkipPosition(forward, from, to)) {\n return fromPosition(forward, root, to);\n } else {\n return Option.some(to);\n }\n });\n };\n var navigateIgnore = function (forward, root, from, ignoreFilter) {\n return navigate(forward, root, from).bind(function (pos) {\n return ignoreFilter(pos) ? navigateIgnore(forward, root, pos, ignoreFilter) : Option.some(pos);\n });\n };\n var positionIn = function (forward, element) {\n var startNode = forward ? element.firstChild : element.lastChild;\n if (NodeType.isText(startNode)) {\n return Option.some(CaretPosition$1(startNode, forward ? 0 : startNode.data.length));\n } else if (startNode) {\n if (isCaretCandidate(startNode)) {\n return Option.some(forward ? CaretPosition$1.before(startNode) : afterElement(startNode));\n } else {\n return walkToPositionIn(forward, element, startNode);\n }\n } else {\n return Option.none();\n }\n };\n var nextPosition = curry(fromPosition, true);\n var prevPosition = curry(fromPosition, false);\n var CaretFinder = {\n fromPosition: fromPosition,\n nextPosition: nextPosition,\n prevPosition: prevPosition,\n navigate: navigate,\n navigateIgnore: navigateIgnore,\n positionIn: positionIn,\n firstPositionIn: curry(positionIn, true),\n lastPositionIn: curry(positionIn, false)\n };\n\n var isStringPathBookmark = function (bookmark) {\n return typeof bookmark.start === 'string';\n };\n var isRangeBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('rng');\n };\n var isIdBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('id');\n };\n var isIndexBookmark = function (bookmark) {\n return bookmark.hasOwnProperty('name');\n };\n var isPathBookmark = function (bookmark) {\n return Tools.isArray(bookmark.start);\n };\n\n var addBogus = function (dom, node) {\n if (NodeType.isElement(node) && dom.isBlock(node) && !node.innerHTML && !Env.ie) {\n node.innerHTML = '
';\n }\n return node;\n };\n var resolveCaretPositionBookmark = function (dom, bookmark) {\n var rng, pos;\n rng = dom.createRng();\n pos = resolve$2(dom.getRoot(), bookmark.start);\n rng.setStart(pos.container(), pos.offset());\n pos = resolve$2(dom.getRoot(), bookmark.end);\n rng.setEnd(pos.container(), pos.offset());\n return rng;\n };\n var insertZwsp = function (node, rng) {\n var textNode = node.ownerDocument.createTextNode(Zwsp.ZWSP);\n node.appendChild(textNode);\n rng.setStart(textNode, 0);\n rng.setEnd(textNode, 0);\n };\n var isEmpty = function (node) {\n return node.hasChildNodes() === false;\n };\n var tryFindRangePosition = function (node, rng) {\n return CaretFinder.lastPositionIn(node).fold(function () {\n return false;\n }, function (pos) {\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n return true;\n });\n };\n var padEmptyCaretContainer = function (root, node, rng) {\n if (isEmpty(node) && getParentCaretContainer(root, node)) {\n insertZwsp(node, rng);\n return true;\n } else {\n return false;\n }\n };\n var setEndPoint = function (dom, start, bookmark, rng) {\n var point = bookmark[start ? 'start' : 'end'];\n var i, node, offset, children;\n var root = dom.getRoot();\n if (point) {\n offset = point[0];\n for (node = root, i = point.length - 1; i >= 1; i--) {\n children = node.childNodes;\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n if (point[i] > children.length - 1) {\n if (padEmptyCaretContainer(root, node, rng)) {\n return true;\n }\n return tryFindRangePosition(node, rng);\n }\n node = children[point[i]];\n }\n if (node.nodeType === 3) {\n offset = Math.min(point[0], node.nodeValue.length);\n }\n if (node.nodeType === 1) {\n offset = Math.min(point[0], node.childNodes.length);\n }\n if (start) {\n rng.setStart(node, offset);\n } else {\n rng.setEnd(node, offset);\n }\n }\n return true;\n };\n var isValidTextNode = function (node) {\n return NodeType.isText(node) && node.data.length > 0;\n };\n var restoreEndPoint = function (dom, suffix, bookmark) {\n var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev;\n var keep = bookmark.keep;\n var container, offset;\n if (marker) {\n node = marker.parentNode;\n if (suffix === 'start') {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.nextSibling)) {\n node = marker.nextSibling;\n idx = 0;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker) + 1;\n }\n }\n container = node;\n offset = idx;\n } else {\n if (!keep) {\n idx = dom.nodeIndex(marker);\n } else {\n if (marker.hasChildNodes()) {\n node = marker.firstChild;\n idx = 1;\n } else if (isValidTextNode(marker.previousSibling)) {\n node = marker.previousSibling;\n idx = marker.previousSibling.data.length;\n } else {\n node = marker.parentNode;\n idx = dom.nodeIndex(marker);\n }\n }\n container = node;\n offset = idx;\n }\n if (!keep) {\n prev = marker.previousSibling;\n next = marker.nextSibling;\n Tools.each(Tools.grep(marker.childNodes), function (node) {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/\\uFEFF/g, '');\n }\n });\n while (marker = dom.get(bookmark.id + '_' + suffix)) {\n dom.remove(marker, true);\n }\n if (prev && next && prev.nodeType === next.nodeType && NodeType.isText(prev) && !Env.opera) {\n idx = prev.nodeValue.length;\n prev.appendData(next.nodeValue);\n dom.remove(next);\n if (suffix === 'start') {\n container = prev;\n offset = idx;\n } else {\n container = prev;\n offset = idx;\n }\n }\n }\n return Option.some(CaretPosition$1(container, offset));\n } else {\n return Option.none();\n }\n };\n var alt = function (o1, o2) {\n return o1.isSome() ? o1 : o2;\n };\n var resolvePaths = function (dom, bookmark) {\n var rng = dom.createRng();\n if (setEndPoint(dom, true, bookmark, rng) && setEndPoint(dom, false, bookmark, rng)) {\n return Option.some(rng);\n } else {\n return Option.none();\n }\n };\n var resolveId = function (dom, bookmark) {\n var startPos = restoreEndPoint(dom, 'start', bookmark);\n var endPos = restoreEndPoint(dom, 'end', bookmark);\n return lift2(startPos, alt(endPos, startPos), function (spos, epos) {\n var rng = dom.createRng();\n rng.setStart(addBogus(dom, spos.container()), spos.offset());\n rng.setEnd(addBogus(dom, epos.container()), epos.offset());\n return rng;\n });\n };\n var resolveIndex$1 = function (dom, bookmark) {\n return Option.from(dom.select(bookmark.name)[bookmark.index]).map(function (elm) {\n var rng = dom.createRng();\n rng.selectNode(elm);\n return rng;\n });\n };\n var resolve$3 = function (selection, bookmark) {\n var dom = selection.dom;\n if (bookmark) {\n if (isPathBookmark(bookmark)) {\n return resolvePaths(dom, bookmark);\n } else if (isStringPathBookmark(bookmark)) {\n return Option.some(resolveCaretPositionBookmark(dom, bookmark));\n } else if (isIdBookmark(bookmark)) {\n return resolveId(dom, bookmark);\n } else if (isIndexBookmark(bookmark)) {\n return resolveIndex$1(dom, bookmark);\n } else if (isRangeBookmark(bookmark)) {\n return Option.some(bookmark.rng);\n }\n }\n return Option.none();\n };\n var ResolveBookmark = { resolve: resolve$3 };\n\n var getBookmark$1 = function (selection, type, normalized) {\n return GetBookmark.getBookmark(selection, type, normalized);\n };\n var moveToBookmark = function (selection, bookmark) {\n ResolveBookmark.resolve(selection, bookmark).each(function (rng) {\n selection.setRng(rng);\n });\n };\n var isBookmarkNode$1 = function (node) {\n return NodeType.isElement(node) && node.tagName === 'SPAN' && node.getAttribute('data-mce-type') === 'bookmark';\n };\n var Bookmarks = {\n getBookmark: getBookmark$1,\n moveToBookmark: moveToBookmark,\n isBookmarkNode: isBookmarkNode$1\n };\n\n var isInlineBlock = function (node) {\n return node && /^(IMG)$/.test(node.nodeName);\n };\n var moveStart = function (dom, selection, rng) {\n var offset = rng.startOffset;\n var container = rng.startContainer, walker, node, nodes;\n if (rng.startContainer === rng.endContainer) {\n if (isInlineBlock(rng.startContainer.childNodes[rng.startOffset])) {\n return;\n }\n }\n if (container.nodeType === 1) {\n nodes = container.childNodes;\n if (offset < nodes.length) {\n container = nodes[offset];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n } else {\n container = nodes[nodes.length - 1];\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock));\n walker.next(true);\n }\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3 && !isWhiteSpaceNode(node)) {\n rng.setStart(node, 0);\n selection.setRng(rng);\n return;\n }\n }\n }\n };\n var getNonWhiteSpaceSibling = function (node, next, inc) {\n if (node) {\n next = next ? 'nextSibling' : 'previousSibling';\n for (node = inc ? node : node[next]; node; node = node[next]) {\n if (node.nodeType === 1 || !isWhiteSpaceNode(node)) {\n return node;\n }\n }\n }\n };\n var isTextBlock$1 = function (editor, name) {\n if (name.nodeType) {\n name = name.nodeName;\n }\n return !!editor.schema.getTextBlockElements()[name.toLowerCase()];\n };\n var isValid = function (ed, parent, child) {\n return ed.schema.isValidChild(parent, child);\n };\n var isWhiteSpaceNode = function (node) {\n return node && node.nodeType === 3 && /^([\\t \\r\\n]+|)$/.test(node.nodeValue);\n };\n var replaceVars = function (value, vars) {\n if (typeof value !== 'string') {\n value = value(vars);\n } else if (vars) {\n value = value.replace(/%(\\w+)/g, function (str, name) {\n return vars[name] || str;\n });\n }\n return value;\n };\n var isEq = function (str1, str2) {\n str1 = str1 || '';\n str2 = str2 || '';\n str1 = '' + (str1.nodeName || str1);\n str2 = '' + (str2.nodeName || str2);\n return str1.toLowerCase() === str2.toLowerCase();\n };\n var normalizeStyleValue = function (dom, value, name) {\n if (name === 'color' || name === 'backgroundColor') {\n value = dom.toHex(value);\n }\n if (name === 'fontWeight' && value === 700) {\n value = 'bold';\n }\n if (name === 'fontFamily') {\n value = value.replace(/[\\'\\\"]/g, '').replace(/,\\s+/g, ',');\n }\n return '' + value;\n };\n var getStyle = function (dom, node, name) {\n return normalizeStyleValue(dom, dom.getStyle(node, name), name);\n };\n var getTextDecoration = function (dom, node) {\n var decoration;\n dom.getParent(node, function (n) {\n decoration = dom.getStyle(n, 'text-decoration');\n return decoration && decoration !== 'none';\n });\n return decoration;\n };\n var getParents$1 = function (dom, node, selector) {\n return dom.getParents(node, selector, dom.getRoot());\n };\n var FormatUtils = {\n isInlineBlock: isInlineBlock,\n moveStart: moveStart,\n getNonWhiteSpaceSibling: getNonWhiteSpaceSibling,\n isTextBlock: isTextBlock$1,\n isValid: isValid,\n isWhiteSpaceNode: isWhiteSpaceNode,\n replaceVars: replaceVars,\n isEq: isEq,\n normalizeStyleValue: normalizeStyleValue,\n getStyle: getStyle,\n getTextDecoration: getTextDecoration,\n getParents: getParents$1\n };\n\n var isBookmarkNode$2 = Bookmarks.isBookmarkNode;\n var getParents$2 = FormatUtils.getParents, isWhiteSpaceNode$1 = FormatUtils.isWhiteSpaceNode, isTextBlock$2 = FormatUtils.isTextBlock;\n var findLeaf = function (node, offset) {\n if (typeof offset === 'undefined') {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n while (node && node.hasChildNodes()) {\n node = node.childNodes[offset];\n if (node) {\n offset = node.nodeType === 3 ? node.length : node.childNodes.length;\n }\n }\n return {\n node: node,\n offset: offset\n };\n };\n var excludeTrailingWhitespace = function (endContainer, endOffset) {\n var leaf = findLeaf(endContainer, endOffset);\n if (leaf.node) {\n while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling) {\n leaf = findLeaf(leaf.node.previousSibling);\n }\n if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 && leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {\n if (leaf.offset > 1) {\n endContainer = leaf.node;\n endContainer.splitText(leaf.offset - 1);\n }\n }\n }\n return endContainer;\n };\n var isBogusBr = function (node) {\n return node.nodeName === 'BR' && node.getAttribute('data-mce-bogus') && !node.nextSibling;\n };\n var findParentContentEditable = function (dom, node) {\n var parent = node;\n while (parent) {\n if (parent.nodeType === 1 && dom.getContentEditable(parent)) {\n return dom.getContentEditable(parent) === 'false' ? parent : node;\n }\n parent = parent.parentNode;\n }\n return node;\n };\n var findSpace = function (start, remove, node, offset) {\n var pos, pos2;\n var str = node.nodeValue;\n if (typeof offset === 'undefined') {\n offset = start ? str.length : 0;\n }\n if (start) {\n pos = str.lastIndexOf(' ', offset);\n pos2 = str.lastIndexOf('\\xA0', offset);\n pos = pos > pos2 ? pos : pos2;\n if (pos !== -1 && !remove && (pos < offset || !start) && pos <= str.length) {\n pos++;\n }\n } else {\n pos = str.indexOf(' ', offset);\n pos2 = str.indexOf('\\xA0', offset);\n pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;\n }\n return pos;\n };\n var findWordEndPoint = function (dom, body, container, offset, start, remove) {\n var walker, node, pos, lastTextNode;\n if (container.nodeType === 3) {\n pos = findSpace(start, remove, container, offset);\n if (pos !== -1) {\n return {\n container: container,\n offset: pos\n };\n }\n lastTextNode = container;\n }\n walker = new TreeWalker(container, dom.getParent(container, dom.isBlock) || body);\n while (node = walker[start ? 'prev' : 'next']()) {\n if (node.nodeType === 3 && !isBookmarkNode$2(node.parentNode)) {\n lastTextNode = node;\n pos = findSpace(start, remove, node);\n if (pos !== -1) {\n return {\n container: node,\n offset: pos\n };\n }\n } else if (dom.isBlock(node) || FormatUtils.isEq(node, 'BR')) {\n break;\n }\n }\n if (lastTextNode) {\n if (start) {\n offset = 0;\n } else {\n offset = lastTextNode.length;\n }\n return {\n container: lastTextNode,\n offset: offset\n };\n }\n };\n var findSelectorEndPoint = function (dom, format, rng, container, siblingName) {\n var parents, i, y, curFormat;\n if (container.nodeType === 3 && container.nodeValue.length === 0 && container[siblingName]) {\n container = container[siblingName];\n }\n parents = getParents$2(dom, container);\n for (i = 0; i < parents.length; i++) {\n for (y = 0; y < format.length; y++) {\n curFormat = format[y];\n if ('collapsed' in curFormat && curFormat.collapsed !== rng.collapsed) {\n continue;\n }\n if (dom.is(parents[i], curFormat.selector)) {\n return parents[i];\n }\n }\n }\n return container;\n };\n var findBlockEndPoint = function (editor, format, container, siblingName) {\n var node;\n var dom = editor.dom;\n var root = dom.getRoot();\n if (!format[0].wrapper) {\n node = dom.getParent(container, format[0].block, root);\n }\n if (!node) {\n var scopeRoot = dom.getParent(container, 'LI,TD,TH');\n node = dom.getParent(container.nodeType === 3 ? container.parentNode : container, function (node) {\n return node !== root && isTextBlock$2(editor, node);\n }, scopeRoot);\n }\n if (node && format[0].wrapper) {\n node = getParents$2(dom, node, 'ul,ol').reverse()[0] || node;\n }\n if (!node) {\n node = container;\n while (node[siblingName] && !dom.isBlock(node[siblingName])) {\n node = node[siblingName];\n if (FormatUtils.isEq(node, 'br')) {\n break;\n }\n }\n }\n return node || container;\n };\n var findParentContainer = function (dom, format, startContainer, startOffset, endContainer, endOffset, start) {\n var container, parent, sibling, siblingName, root;\n container = parent = start ? startContainer : endContainer;\n siblingName = start ? 'previousSibling' : 'nextSibling';\n root = dom.getRoot();\n if (container.nodeType === 3 && !isWhiteSpaceNode$1(container)) {\n if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {\n return container;\n }\n }\n while (true) {\n if (!format[0].block_expand && dom.isBlock(parent)) {\n return parent;\n }\n for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {\n if (!isBookmarkNode$2(sibling) && !isWhiteSpaceNode$1(sibling) && !isBogusBr(sibling)) {\n return parent;\n }\n }\n if (parent === root || parent.parentNode === root) {\n container = parent;\n break;\n }\n parent = parent.parentNode;\n }\n return container;\n };\n var expandRng = function (editor, rng, format, remove) {\n var endPoint, startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n var dom = editor.dom;\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = getNode(startContainer, startOffset);\n if (startContainer.nodeType === 3) {\n startOffset = 0;\n }\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getNode(endContainer, rng.collapsed ? endOffset : endOffset - 1);\n if (endContainer.nodeType === 3) {\n endOffset = endContainer.nodeValue.length;\n }\n }\n startContainer = findParentContentEditable(dom, startContainer);\n endContainer = findParentContentEditable(dom, endContainer);\n if (isBookmarkNode$2(startContainer.parentNode) || isBookmarkNode$2(startContainer)) {\n startContainer = isBookmarkNode$2(startContainer) ? startContainer : startContainer.parentNode;\n if (rng.collapsed) {\n startContainer = startContainer.previousSibling || startContainer;\n } else {\n startContainer = startContainer.nextSibling || startContainer;\n }\n if (startContainer.nodeType === 3) {\n startOffset = rng.collapsed ? startContainer.length : 0;\n }\n }\n if (isBookmarkNode$2(endContainer.parentNode) || isBookmarkNode$2(endContainer)) {\n endContainer = isBookmarkNode$2(endContainer) ? endContainer : endContainer.parentNode;\n if (rng.collapsed) {\n endContainer = endContainer.nextSibling || endContainer;\n } else {\n endContainer = endContainer.previousSibling || endContainer;\n }\n if (endContainer.nodeType === 3) {\n endOffset = rng.collapsed ? 0 : endContainer.length;\n }\n }\n if (rng.collapsed) {\n endPoint = findWordEndPoint(dom, editor.getBody(), startContainer, startOffset, true, remove);\n if (endPoint) {\n startContainer = endPoint.container;\n startOffset = endPoint.offset;\n }\n endPoint = findWordEndPoint(dom, editor.getBody(), endContainer, endOffset, false, remove);\n if (endPoint) {\n endContainer = endPoint.container;\n endOffset = endPoint.offset;\n }\n }\n if (format[0].inline) {\n endContainer = remove ? endContainer : excludeTrailingWhitespace(endContainer, endOffset);\n }\n if (format[0].inline || format[0].block_expand) {\n if (!format[0].inline || (startContainer.nodeType !== 3 || startOffset === 0)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!format[0].inline || (endContainer.nodeType !== 3 || endOffset === endContainer.nodeValue.length)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n if (format[0].selector && format[0].expand !== false && !format[0].inline) {\n startContainer = findSelectorEndPoint(dom, format, rng, startContainer, 'previousSibling');\n endContainer = findSelectorEndPoint(dom, format, rng, endContainer, 'nextSibling');\n }\n if (format[0].block || format[0].selector) {\n startContainer = findBlockEndPoint(editor, format, startContainer, 'previousSibling');\n endContainer = findBlockEndPoint(editor, format, endContainer, 'nextSibling');\n if (format[0].block) {\n if (!dom.isBlock(startContainer)) {\n startContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, true);\n }\n if (!dom.isBlock(endContainer)) {\n endContainer = findParentContainer(dom, format, startContainer, startOffset, endContainer, endOffset, false);\n }\n }\n }\n if (startContainer.nodeType === 1) {\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (endContainer.nodeType === 1) {\n endOffset = dom.nodeIndex(endContainer) + 1;\n endContainer = endContainer.parentNode;\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var ExpandRange = { expandRng: expandRng };\n\n var each$8 = Tools.each;\n var getEndChild = function (container, index) {\n var childNodes = container.childNodes;\n index--;\n if (index > childNodes.length - 1) {\n index = childNodes.length - 1;\n } else if (index < 0) {\n index = 0;\n }\n return childNodes[index] || container;\n };\n var walk$1 = function (dom, rng, callback) {\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n var ancestor;\n var startPoint;\n var endPoint;\n var node;\n var parent;\n var siblings;\n var nodes;\n nodes = dom.select('td[data-mce-selected],th[data-mce-selected]');\n if (nodes.length > 0) {\n each$8(nodes, function (node) {\n callback([node]);\n });\n return;\n }\n var exclude = function (nodes) {\n var node;\n node = nodes[0];\n if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {\n nodes.splice(0, 1);\n }\n node = nodes[nodes.length - 1];\n if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {\n nodes.splice(nodes.length - 1, 1);\n }\n return nodes;\n };\n var collectSiblings = function (node, name, endNode) {\n var siblings = [];\n for (; node && node !== endNode; node = node[name]) {\n siblings.push(node);\n }\n return siblings;\n };\n var findEndPoint = function (node, root) {\n do {\n if (node.parentNode === root) {\n return node;\n }\n node = node.parentNode;\n } while (node);\n };\n var walkBoundary = function (startNode, endNode, next) {\n var siblingName = next ? 'nextSibling' : 'previousSibling';\n for (node = startNode, parent = node.parentNode; node && node !== endNode; node = parent) {\n parent = node.parentNode;\n siblings = collectSiblings(node === startNode ? node : node[siblingName], siblingName);\n if (siblings.length) {\n if (!next) {\n siblings.reverse();\n }\n callback(exclude(siblings));\n }\n }\n };\n if (startContainer.nodeType === 1 && startContainer.hasChildNodes()) {\n startContainer = startContainer.childNodes[startOffset];\n }\n if (endContainer.nodeType === 1 && endContainer.hasChildNodes()) {\n endContainer = getEndChild(endContainer, endOffset);\n }\n if (startContainer === endContainer) {\n return callback(exclude([startContainer]));\n }\n ancestor = dom.findCommonAncestor(startContainer, endContainer);\n for (node = startContainer; node; node = node.parentNode) {\n if (node === endContainer) {\n return walkBoundary(startContainer, ancestor, true);\n }\n if (node === ancestor) {\n break;\n }\n }\n for (node = endContainer; node; node = node.parentNode) {\n if (node === startContainer) {\n return walkBoundary(endContainer, ancestor);\n }\n if (node === ancestor) {\n break;\n }\n }\n startPoint = findEndPoint(startContainer, ancestor) || startContainer;\n endPoint = findEndPoint(endContainer, ancestor) || endContainer;\n walkBoundary(startContainer, startPoint, true);\n siblings = collectSiblings(startPoint === startContainer ? startPoint : startPoint.nextSibling, 'nextSibling', endPoint === endContainer ? endPoint.nextSibling : endPoint);\n if (siblings.length) {\n callback(exclude(siblings));\n }\n walkBoundary(endContainer, endPoint);\n };\n var RangeWalk = { walk: walk$1 };\n\n var zeroWidth = function () {\n return '\\uFEFF';\n };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$4 = function (element) {\n return api.get(element);\n };\n\n var isZeroWidth = function (elem) {\n return isText(elem) && get$4(elem) === zeroWidth();\n };\n var context = function (editor, elem, wrapName, nodeName) {\n return parent(elem).fold(function () {\n return 'skipping';\n }, function (parent) {\n if (nodeName === 'br' || isZeroWidth(elem)) {\n return 'valid';\n } else if (isAnnotation(elem)) {\n return 'existing';\n } else if (isCaretNode(elem)) {\n return 'caret';\n } else if (!FormatUtils.isValid(editor, wrapName, nodeName) || !FormatUtils.isValid(editor, name(parent), wrapName)) {\n return 'invalid-child';\n } else {\n return 'valid';\n }\n });\n };\n\n var shouldApplyToTrailingSpaces = function (rng) {\n return rng.startContainer.nodeType === 3 && rng.startContainer.nodeValue.length >= rng.startOffset && rng.startContainer.nodeValue[rng.startOffset] === '\\xA0';\n };\n var applyWordGrab = function (editor, rng) {\n var r = ExpandRange.expandRng(editor, rng, [{ inline: true }], shouldApplyToTrailingSpaces(rng));\n rng.setStart(r.startContainer, r.startOffset);\n rng.setEnd(r.endContainer, r.endOffset);\n editor.selection.setRng(rng);\n };\n var makeAnnotation = function (eDoc, _a, annotationName, decorate) {\n var _b = _a.uid, uid = _b === void 0 ? generate('mce-annotation') : _b, data = __rest(_a, ['uid']);\n var master = Element.fromTag('span', eDoc);\n add$2(master, annotation());\n set(master, '' + dataAnnotationId(), uid);\n set(master, '' + dataAnnotation(), annotationName);\n var _c = decorate(uid, data), _d = _c.attributes, attributes = _d === void 0 ? {} : _d, _e = _c.classes, classes = _e === void 0 ? [] : _e;\n setAll(master, attributes);\n add$3(master, classes);\n return master;\n };\n var annotate = function (editor, rng, annotationName, decorate, data) {\n var newWrappers = [];\n var master = makeAnnotation(editor.getDoc(), data, annotationName, decorate);\n var wrapper = Cell(Option.none());\n var finishWrapper = function () {\n wrapper.set(Option.none());\n };\n var getOrOpenWrapper = function () {\n return wrapper.get().getOrThunk(function () {\n var nu = shallow(master);\n newWrappers.push(nu);\n wrapper.set(Option.some(nu));\n return nu;\n });\n };\n var processElements = function (elems) {\n each(elems, processElement);\n };\n var processElement = function (elem) {\n var ctx = context(editor, elem, 'span', name(elem));\n switch (ctx) {\n case 'invalid-child': {\n finishWrapper();\n var children$1 = children(elem);\n processElements(children$1);\n finishWrapper();\n break;\n }\n case 'valid': {\n var w = getOrOpenWrapper();\n wrap$1(elem, w);\n break;\n }\n case 'skipping':\n case 'existing':\n case 'caret':\n }\n };\n var processNodes = function (nodes) {\n var elems = map(nodes, Element.fromDom);\n processElements(elems);\n };\n RangeWalk.walk(editor.dom, rng, function (nodes) {\n finishWrapper();\n processNodes(nodes);\n });\n return newWrappers;\n };\n var annotateWithBookmark = function (editor, name, settings, data) {\n editor.undoManager.transact(function () {\n var initialRng = editor.selection.getRng();\n if (initialRng.collapsed) {\n applyWordGrab(editor, initialRng);\n }\n if (editor.selection.getRng().collapsed) {\n var wrapper = makeAnnotation(editor.getDoc(), data, name, settings.decorate);\n set$1(wrapper, '\\xA0');\n editor.selection.getRng().insertNode(wrapper.dom());\n editor.selection.select(wrapper.dom());\n } else {\n var bookmark = GetBookmark.getPersistentBookmark(editor.selection, false);\n var rng = editor.selection.getRng();\n annotate(editor, rng, name, settings.decorate, data);\n editor.selection.moveToBookmark(bookmark);\n }\n });\n };\n\n function Annotator (editor) {\n var registry = create$1();\n setup$1(editor, registry);\n var changes = setup(editor);\n return {\n register: function (name, settings) {\n registry.register(name, settings);\n },\n annotate: function (name, data) {\n registry.lookup(name).each(function (settings) {\n annotateWithBookmark(editor, name, settings, data);\n });\n },\n annotationChanged: function (name, callback) {\n changes.addListener(name, callback);\n },\n remove: function (name) {\n identify(editor, Option.some(name)).each(function (_a) {\n var elements = _a.elements;\n each(elements, unwrap);\n });\n },\n getAll: function (name) {\n var directory = findAll(editor, name);\n return map$2(directory, function (elems) {\n return map(elems, function (elem) {\n return elem.dom();\n });\n });\n }\n };\n }\n\n var hasOnlyOneChild = function (node) {\n return node.firstChild && node.firstChild === node.lastChild;\n };\n var isPaddingNode = function (node) {\n return node.name === 'br' || node.value === '\\xA0';\n };\n var isPaddedEmptyBlock = function (schema, node) {\n var blockElements = schema.getBlockElements();\n return blockElements[node.name] && hasOnlyOneChild(node) && isPaddingNode(node.firstChild);\n };\n var isEmptyFragmentElement = function (schema, node) {\n var nonEmptyElements = schema.getNonEmptyElements();\n return node && (node.isEmpty(nonEmptyElements) || isPaddedEmptyBlock(schema, node));\n };\n var isListFragment = function (schema, fragment) {\n var firstChild = fragment.firstChild;\n var lastChild = fragment.lastChild;\n if (firstChild && firstChild.name === 'meta') {\n firstChild = firstChild.next;\n }\n if (lastChild && lastChild.attr('id') === 'mce_marker') {\n lastChild = lastChild.prev;\n }\n if (isEmptyFragmentElement(schema, lastChild)) {\n lastChild = lastChild.prev;\n }\n if (!firstChild || firstChild !== lastChild) {\n return false;\n }\n return firstChild.name === 'ul' || firstChild.name === 'ol';\n };\n var cleanupDomFragment = function (domFragment) {\n var firstChild = domFragment.firstChild;\n var lastChild = domFragment.lastChild;\n if (firstChild && firstChild.nodeName === 'META') {\n firstChild.parentNode.removeChild(firstChild);\n }\n if (lastChild && lastChild.id === 'mce_marker') {\n lastChild.parentNode.removeChild(lastChild);\n }\n return domFragment;\n };\n var toDomFragment = function (dom, serializer, fragment) {\n var html = serializer.serialize(fragment);\n var domFragment = dom.createFragment(html);\n return cleanupDomFragment(domFragment);\n };\n var listItems$1 = function (elm) {\n return Tools.grep(elm.childNodes, function (child) {\n return child.nodeName === 'LI';\n });\n };\n var isPadding = function (node) {\n return node.data === '\\xA0' || NodeType.isBr(node);\n };\n var isListItemPadded = function (node) {\n return node && node.firstChild && node.firstChild === node.lastChild && isPadding(node.firstChild);\n };\n var isEmptyOrPadded = function (elm) {\n return !elm.firstChild || isListItemPadded(elm);\n };\n var trimListItems = function (elms) {\n return elms.length > 0 && isEmptyOrPadded(elms[elms.length - 1]) ? elms.slice(0, -1) : elms;\n };\n var getParentLi = function (dom, node) {\n var parentBlock = dom.getParent(node, dom.isBlock);\n return parentBlock && parentBlock.nodeName === 'LI' ? parentBlock : null;\n };\n var isParentBlockLi = function (dom, node) {\n return !!getParentLi(dom, node);\n };\n var getSplit = function (parentNode, rng) {\n var beforeRng = rng.cloneRange();\n var afterRng = rng.cloneRange();\n beforeRng.setStartBefore(parentNode);\n afterRng.setEndAfter(parentNode);\n return [\n beforeRng.cloneContents(),\n afterRng.cloneContents()\n ];\n };\n var findFirstIn = function (node, rootNode) {\n var caretPos = CaretPosition$1.before(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.next(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var findLastOf = function (node, rootNode) {\n var caretPos = CaretPosition$1.after(node);\n var caretWalker = CaretWalker(rootNode);\n var newCaretPos = caretWalker.prev(caretPos);\n return newCaretPos ? newCaretPos.toRange() : null;\n };\n var insertMiddle = function (target, elms, rootNode, rng) {\n var parts = getSplit(target, rng);\n var parentElm = target.parentNode;\n parentElm.insertBefore(parts[0], target);\n Tools.each(elms, function (li) {\n parentElm.insertBefore(li, target);\n });\n parentElm.insertBefore(parts[1], target);\n parentElm.removeChild(target);\n return findLastOf(elms[elms.length - 1], rootNode);\n };\n var insertBefore = function (target, elms, rootNode) {\n var parentElm = target.parentNode;\n Tools.each(elms, function (elm) {\n parentElm.insertBefore(elm, target);\n });\n return findFirstIn(target, rootNode);\n };\n var insertAfter = function (target, elms, rootNode, dom) {\n dom.insertAfter(elms.reverse(), target);\n return findLastOf(elms[0], rootNode);\n };\n var insertAtCaret = function (serializer, dom, rng, fragment) {\n var domFragment = toDomFragment(dom, serializer, fragment);\n var liTarget = getParentLi(dom, rng.startContainer);\n var liElms = trimListItems(listItems$1(domFragment.firstChild));\n var BEGINNING = 1, END = 2;\n var rootNode = dom.getRoot();\n var isAt = function (location) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(dom.getRoot());\n var newPos = location === BEGINNING ? caretWalker.prev(caretPos) : caretWalker.next(caretPos);\n return newPos ? getParentLi(dom, newPos.getNode()) !== liTarget : true;\n };\n if (isAt(BEGINNING)) {\n return insertBefore(liTarget, liElms, rootNode);\n } else if (isAt(END)) {\n return insertAfter(liTarget, liElms, rootNode, dom);\n }\n return insertMiddle(liTarget, liElms, rootNode, rng);\n };\n var InsertList = {\n isListFragment: isListFragment,\n insertAtCaret: insertAtCaret,\n isParentBlockLi: isParentBlockLi,\n trimListItems: trimListItems,\n listItems: listItems$1\n };\n\n var each$9 = Tools.each;\n var ElementUtils = function (dom) {\n this.compare = function (node1, node2) {\n if (node1.nodeName !== node2.nodeName) {\n return false;\n }\n var getAttribs = function (node) {\n var attribs = {};\n each$9(dom.getAttribs(node), function (attr) {\n var name = attr.nodeName.toLowerCase();\n if (name.indexOf('_') !== 0 && name !== 'style' && name.indexOf('data-') !== 0) {\n attribs[name] = dom.getAttrib(node, name);\n }\n });\n return attribs;\n };\n var compareObjects = function (obj1, obj2) {\n var value, name;\n for (name in obj1) {\n if (obj1.hasOwnProperty(name)) {\n value = obj2[name];\n if (typeof value === 'undefined') {\n return false;\n }\n if (obj1[name] !== value) {\n return false;\n }\n delete obj2[name];\n }\n }\n for (name in obj2) {\n if (obj2.hasOwnProperty(name)) {\n return false;\n }\n }\n return true;\n };\n if (!compareObjects(getAttribs(node1), getAttribs(node2))) {\n return false;\n }\n if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style')))) {\n return false;\n }\n return !Bookmarks.isBookmarkNode(node1) && !Bookmarks.isBookmarkNode(node2);\n };\n };\n\n var getLastChildren = function (elm) {\n var children = [];\n var rawNode = elm.dom();\n while (rawNode) {\n children.push(Element.fromDom(rawNode));\n rawNode = rawNode.lastChild;\n }\n return children;\n };\n var removeTrailingBr = function (elm) {\n var allBrs = descendants$1(elm, 'br');\n var brs = filter(getLastChildren(elm).slice(-1), isBr);\n if (allBrs.length === brs.length) {\n each(brs, remove$1);\n }\n };\n var fillWithPaddingBr = function (elm) {\n empty(elm);\n append(elm, Element.fromHtml('
'));\n };\n var isPaddingContents = function (elm) {\n return isText(elm) ? get$4(elm) === '\\xA0' : isBr(elm);\n };\n var isPaddedElement = function (elm) {\n return filter(children(elm), isPaddingContents).length === 1;\n };\n var trimBlockTrailingBr = function (elm) {\n lastChild(elm).each(function (lastChild) {\n prevSibling(lastChild).each(function (lastChildPrevSibling) {\n if (isBlock(elm) && isBr(lastChild) && isBlock(lastChildPrevSibling)) {\n remove$1(lastChild);\n }\n });\n });\n };\n var PaddingBr = {\n removeTrailingBr: removeTrailingBr,\n fillWithPaddingBr: fillWithPaddingBr,\n isPaddedElement: isPaddedElement,\n trimBlockTrailingBr: trimBlockTrailingBr\n };\n\n var makeMap$3 = Tools.makeMap;\n function Writer (settings) {\n var html = [];\n var indent, indentBefore, indentAfter, encode, htmlOutput;\n settings = settings || {};\n indent = settings.indent;\n indentBefore = makeMap$3(settings.indent_before || '');\n indentAfter = makeMap$3(settings.indent_after || '');\n encode = Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);\n htmlOutput = settings.element_format === 'html';\n return {\n start: function (name, attrs, empty) {\n var i, l, attr, value;\n if (indent && indentBefore[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n html.push('<', name);\n if (attrs) {\n for (i = 0, l = attrs.length; i < l; i++) {\n attr = attrs[i];\n html.push(' ', attr.name, '=\"', encode(attr.value, true), '\"');\n }\n }\n if (!empty || htmlOutput) {\n html[html.length] = '>';\n } else {\n html[html.length] = ' />';\n }\n if (empty && indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n end: function (name) {\n var value;\n html.push('');\n if (indent && indentAfter[name] && html.length > 0) {\n value = html[html.length - 1];\n if (value.length > 0 && value !== '\\n') {\n html.push('\\n');\n }\n }\n },\n text: function (text, raw) {\n if (text.length > 0) {\n html[html.length] = raw ? text : encode(text);\n }\n },\n cdata: function (text) {\n html.push('');\n },\n comment: function (text) {\n html.push('');\n },\n pi: function (name, text) {\n if (text) {\n html.push('');\n } else {\n html.push('');\n }\n if (indent) {\n html.push('\\n');\n }\n },\n doctype: function (text) {\n html.push('', indent ? '\\n' : '');\n },\n reset: function () {\n html.length = 0;\n },\n getContent: function () {\n return html.join('').replace(/\\n$/, '');\n }\n };\n }\n\n function HtmlSerializer (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var writer = Writer(settings);\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n var serialize = function (node) {\n var handlers, validate;\n validate = settings.validate;\n handlers = {\n 3: function (node) {\n writer.text(node.value, node.raw);\n },\n 8: function (node) {\n writer.comment(node.value);\n },\n 7: function (node) {\n writer.pi(node.name, node.value);\n },\n 10: function (node) {\n writer.doctype(node.value);\n },\n 4: function (node) {\n writer.cdata(node.value);\n },\n 11: function (node) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n }\n };\n writer.reset();\n var walk = function (node) {\n var handler = handlers[node.type];\n var name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;\n if (!handler) {\n name = node.name;\n isEmpty = node.shortEnded;\n attrs = node.attributes;\n if (validate && attrs && attrs.length > 1) {\n sortedAttrs = [];\n sortedAttrs.map = {};\n elementRule = schema.getElementRule(node.name);\n if (elementRule) {\n for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {\n attrName = elementRule.attributesOrder[i];\n if (attrName in attrs.map) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n for (i = 0, l = attrs.length; i < l; i++) {\n attrName = attrs[i].name;\n if (!(attrName in sortedAttrs.map)) {\n attrValue = attrs.map[attrName];\n sortedAttrs.map[attrName] = attrValue;\n sortedAttrs.push({\n name: attrName,\n value: attrValue\n });\n }\n }\n attrs = sortedAttrs;\n }\n }\n writer.start(node.name, attrs, isEmpty);\n if (!isEmpty) {\n if (node = node.firstChild) {\n do {\n walk(node);\n } while (node = node.next);\n }\n writer.end(name);\n }\n } else {\n handler(node);\n }\n };\n if (node.type === 1 && !settings.inner) {\n walk(node);\n } else {\n handlers[11](node);\n }\n return writer.getContent();\n };\n return { serialize: serialize };\n }\n\n var createRange$1 = function (sc, so, ec, eo) {\n var rng = domGlobals.document.createRange();\n rng.setStart(sc, so);\n rng.setEnd(ec, eo);\n return rng;\n };\n var normalizeBlockSelectionRange = function (rng) {\n var startPos = CaretPosition$1.fromRangeStart(rng);\n var endPos = CaretPosition$1.fromRangeEnd(rng);\n var rootNode = rng.commonAncestorContainer;\n return CaretFinder.fromPosition(false, rootNode, endPos).map(function (newEndPos) {\n if (!isInSameBlock(startPos, endPos, rootNode) && isInSameBlock(startPos, newEndPos, rootNode)) {\n return createRange$1(startPos.container(), startPos.offset(), newEndPos.container(), newEndPos.offset());\n } else {\n return rng;\n }\n }).getOr(rng);\n };\n var normalize = function (rng) {\n return rng.collapsed ? rng : normalizeBlockSelectionRange(rng);\n };\n var RangeNormalizer = { normalize: normalize };\n\n var isAfterNbsp = function (container, offset) {\n return NodeType.isText(container) && container.nodeValue[offset - 1] === '\\xA0';\n };\n var trimOrPadLeftRight = function (rng, html) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n var hasSiblingText = function (siblingName) {\n return container[siblingName] && container[siblingName].nodeType === 3;\n };\n if (container.nodeType === 3) {\n if (offset > 0) {\n html = html.replace(/^ /, ' ');\n } else if (!hasSiblingText('previousSibling')) {\n html = html.replace(/^ /, ' ');\n }\n if (offset < container.length) {\n html = html.replace(/ (
|)$/, ' ');\n } else if (!hasSiblingText('nextSibling')) {\n html = html.replace(/( | )(
|)$/, ' ');\n }\n }\n return html;\n };\n var trimNbspAfterDeleteAndPadValue = function (rng, value) {\n var container, offset;\n container = rng.startContainer;\n offset = rng.startOffset;\n if (container.nodeType === 3 && rng.collapsed) {\n if (container.data[offset] === '\\xA0') {\n container.deleteData(offset, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value += ' ';\n }\n } else if (container.data[offset - 1] === '\\xA0') {\n container.deleteData(offset - 1, 1);\n if (!/[\\u00a0| ]$/.test(value)) {\n value = ' ' + value;\n }\n }\n }\n return value;\n };\n\n var isTableCell$2 = NodeType.matchNodeNames('td th');\n var selectionSetContent = function (editor, content) {\n var rng = editor.selection.getRng();\n var container = rng.startContainer;\n var offset = rng.startOffset;\n if (rng.collapsed && isAfterNbsp(container, offset) && NodeType.isText(container)) {\n container.insertData(offset - 1, ' ');\n container.deleteData(offset, 1);\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n editor.selection.setRng(rng);\n }\n editor.selection.setContent(content);\n };\n var validInsertion = function (editor, value, parentNode) {\n if (parentNode.getAttribute('data-mce-bogus') === 'all') {\n parentNode.parentNode.insertBefore(editor.dom.createFragment(value), parentNode);\n } else {\n var node = parentNode.firstChild;\n var node2 = parentNode.lastChild;\n if (!node || node === node2 && node.nodeName === 'BR') {\n editor.dom.setHTML(parentNode, value);\n } else {\n selectionSetContent(editor, value);\n }\n }\n };\n var trimBrsFromTableCell = function (dom, elm) {\n Option.from(dom.getParent(elm, 'td,th')).map(Element.fromDom).each(PaddingBr.trimBlockTrailingBr);\n };\n var reduceInlineTextElements = function (editor, merge) {\n var textInlineElements = editor.schema.getTextInlineElements();\n var dom = editor.dom;\n if (merge) {\n var root_1 = editor.getBody(), elementUtils_1 = new ElementUtils(dom);\n Tools.each(dom.select('*[data-mce-fragment]'), function (node) {\n for (var testNode = node.parentNode; testNode && testNode !== root_1; testNode = testNode.parentNode) {\n if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils_1.compare(testNode, node)) {\n dom.remove(node, true);\n }\n }\n });\n }\n };\n var markFragmentElements = function (fragment) {\n var node = fragment;\n while (node = node.walk()) {\n if (node.type === 1) {\n node.attr('data-mce-fragment', '1');\n }\n }\n };\n var umarkFragmentElements = function (elm) {\n Tools.each(elm.getElementsByTagName('*'), function (elm) {\n elm.removeAttribute('data-mce-fragment');\n });\n };\n var isPartOfFragment = function (node) {\n return !!node.getAttribute('data-mce-fragment');\n };\n var canHaveChildren = function (editor, node) {\n return node && !editor.schema.getShortEndedElements()[node.nodeName];\n };\n var moveSelectionToMarker = function (editor, marker) {\n var parentEditableFalseElm, parentBlock, nextRng;\n var dom = editor.dom, selection = editor.selection;\n var node, node2;\n var getContentEditableFalseParent = function (node) {\n var root = editor.getBody();\n for (; node && node !== root; node = node.parentNode) {\n if (editor.dom.getContentEditable(node) === 'false') {\n return node;\n }\n }\n return null;\n };\n if (!marker) {\n return;\n }\n editor.selection.scrollIntoView(marker);\n parentEditableFalseElm = getContentEditableFalseParent(marker);\n if (parentEditableFalseElm) {\n dom.remove(marker);\n selection.select(parentEditableFalseElm);\n return;\n }\n var rng = dom.createRng();\n node = marker.previousSibling;\n if (node && node.nodeType === 3) {\n rng.setStart(node, node.nodeValue.length);\n if (!Env.ie) {\n node2 = marker.nextSibling;\n if (node2 && node2.nodeType === 3) {\n node.appendData(node2.data);\n node2.parentNode.removeChild(node2);\n }\n }\n } else {\n rng.setStartBefore(marker);\n rng.setEndBefore(marker);\n }\n var findNextCaretRng = function (rng) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n var caretWalker = CaretWalker(editor.getBody());\n caretPos = caretWalker.next(caretPos);\n if (caretPos) {\n return caretPos.toRange();\n }\n };\n parentBlock = dom.getParent(marker, dom.isBlock);\n dom.remove(marker);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n editor.$(parentBlock).empty();\n rng.setStart(parentBlock, 0);\n rng.setEnd(parentBlock, 0);\n if (!isTableCell$2(parentBlock) && !isPartOfFragment(parentBlock) && (nextRng = findNextCaretRng(rng))) {\n rng = nextRng;\n dom.remove(parentBlock);\n } else {\n dom.add(parentBlock, dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n selection.setRng(rng);\n };\n var insertHtmlAtCaret = function (editor, value, details) {\n var parser, serializer, parentNode, rootNode, fragment, args;\n var marker, rng, node, bookmarkHtml, merge;\n var selection = editor.selection, dom = editor.dom;\n if (/^ | $/.test(value)) {\n value = trimOrPadLeftRight(selection.getRng(), value);\n }\n parser = editor.parser;\n merge = details.merge;\n serializer = HtmlSerializer({ validate: editor.settings.validate }, editor.schema);\n bookmarkHtml = '​';\n args = {\n content: value,\n format: 'html',\n selection: true,\n paste: details.paste\n };\n args = editor.fire('BeforeSetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('SetContent', {\n content: args.content,\n format: 'html',\n selection: true,\n paste: details.paste\n });\n return;\n }\n value = args.content;\n if (value.indexOf('{$caret}') === -1) {\n value += '{$caret}';\n }\n value = value.replace(/\\{\\$caret\\}/, bookmarkHtml);\n rng = selection.getRng();\n var caretElement = rng.startContainer || (rng.parentElement ? rng.parentElement() : null);\n var body = editor.getBody();\n if (caretElement === body && selection.isCollapsed()) {\n if (dom.isBlock(body.firstChild) && canHaveChildren(editor, body.firstChild) && dom.isEmpty(body.firstChild)) {\n rng = dom.createRng();\n rng.setStart(body.firstChild, 0);\n rng.setEnd(body.firstChild, 0);\n selection.setRng(rng);\n }\n }\n if (!selection.isCollapsed()) {\n editor.selection.setRng(RangeNormalizer.normalize(editor.selection.getRng()));\n editor.getDoc().execCommand('Delete', false, null);\n value = trimNbspAfterDeleteAndPadValue(editor.selection.getRng(), value);\n }\n parentNode = selection.getNode();\n var parserArgs = {\n context: parentNode.nodeName.toLowerCase(),\n data: details.data,\n insert: true\n };\n fragment = parser.parse(value, parserArgs);\n if (details.paste === true && InsertList.isListFragment(editor.schema, fragment) && InsertList.isParentBlockLi(dom, parentNode)) {\n rng = InsertList.insertAtCaret(serializer, dom, editor.selection.getRng(), fragment);\n editor.selection.setRng(rng);\n editor.fire('SetContent', args);\n return;\n }\n markFragmentElements(fragment);\n node = fragment.lastChild;\n if (node.attr('id') === 'mce_marker') {\n marker = node;\n for (node = node.prev; node; node = node.walk(true)) {\n if (node.type === 3 || !dom.isBlock(node.name)) {\n if (editor.schema.isValidChild(node.parent.name, 'span')) {\n node.parent.insert(marker, node, node.name === 'br');\n }\n break;\n }\n }\n }\n editor._selectionOverrides.showBlockCaretContainer(parentNode);\n if (!parserArgs.invalid) {\n value = serializer.serialize(fragment);\n validInsertion(editor, value, parentNode);\n } else {\n selectionSetContent(editor, bookmarkHtml);\n parentNode = selection.getNode();\n rootNode = editor.getBody();\n if (parentNode.nodeType === 9) {\n parentNode = node = rootNode;\n } else {\n node = parentNode;\n }\n while (node !== rootNode) {\n parentNode = node;\n node = node.parentNode;\n }\n value = parentNode === rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);\n value = serializer.serialize(parser.parse(value.replace(//i, function () {\n return serializer.serialize(fragment);\n })));\n if (parentNode === rootNode) {\n dom.setHTML(rootNode, value);\n } else {\n dom.setOuterHTML(parentNode, value);\n }\n }\n reduceInlineTextElements(editor, merge);\n moveSelectionToMarker(editor, dom.get('mce_marker'));\n umarkFragmentElements(editor.getBody());\n trimBrsFromTableCell(editor.dom, editor.selection.getStart());\n editor.fire('SetContent', args);\n editor.addVisual();\n };\n var processValue = function (value) {\n var details;\n if (typeof value !== 'string') {\n details = Tools.extend({\n paste: value.paste,\n data: { paste: value.paste }\n }, value);\n return {\n content: value.content,\n details: details\n };\n }\n return {\n content: value,\n details: {}\n };\n };\n var insertAtCaret$1 = function (editor, value) {\n var result = processValue(value);\n insertHtmlAtCaret(editor, result.content, result.details);\n };\n var InsertContent = { insertAtCaret: insertAtCaret$1 };\n\n var strongRtl = /[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/;\n var hasStrongRtl = function (text) {\n return strongRtl.test(text);\n };\n\n var getBodySetting = function (editor, name, defaultValue) {\n var value = editor.getParam(name, defaultValue);\n if (value.indexOf('=') !== -1) {\n var bodyObj = editor.getParam(name, '', 'hash');\n return bodyObj.hasOwnProperty(editor.id) ? bodyObj[editor.id] : defaultValue;\n } else {\n return value;\n }\n };\n var getIframeAttrs = function (editor) {\n return editor.getParam('iframe_attrs', {});\n };\n var getDocType = function (editor) {\n return editor.getParam('doctype', '');\n };\n var getDocumentBaseUrl = function (editor) {\n return editor.getParam('document_base_url', '');\n };\n var getBodyId = function (editor) {\n return getBodySetting(editor, 'body_id', 'tinymce');\n };\n var getBodyClass = function (editor) {\n return getBodySetting(editor, 'body_class', '');\n };\n var getContentSecurityPolicy = function (editor) {\n return editor.getParam('content_security_policy', '');\n };\n var shouldPutBrInPre = function (editor) {\n return editor.getParam('br_in_pre', true);\n };\n var getForcedRootBlock = function (editor) {\n if (editor.getParam('force_p_newlines', false)) {\n return 'p';\n }\n var block = editor.getParam('forced_root_block', 'p');\n return block === false ? '' : block;\n };\n var getForcedRootBlockAttrs = function (editor) {\n return editor.getParam('forced_root_block_attrs', {});\n };\n var getBrNewLineSelector = function (editor) {\n return editor.getParam('br_newline_selector', '.mce-toc h2,figcaption,caption');\n };\n var getNoNewLineSelector = function (editor) {\n return editor.getParam('no_newline_selector', '');\n };\n var shouldKeepStyles = function (editor) {\n return editor.getParam('keep_styles', true);\n };\n var shouldEndContainerOnEmptyBlock = function (editor) {\n return editor.getParam('end_container_on_empty_block', false);\n };\n var getFontStyleValues = function (editor) {\n return Tools.explode(editor.getParam('font_size_style_values', ''));\n };\n var getFontSizeClasses = function (editor) {\n return Tools.explode(editor.getParam('font_size_classes', ''));\n };\n var getImagesDataImgFilter = function (editor) {\n return editor.getParam('images_dataimg_filter', constant(true), 'function');\n };\n var isAutomaticUploadsEnabled = function (editor) {\n return editor.getParam('automatic_uploads', true, 'boolean');\n };\n var shouldReuseFileName = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n var shouldReplaceBlobUris = function (editor) {\n return editor.getParam('images_replace_blob_uris', true, 'boolean');\n };\n var getImageUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', '', 'string');\n };\n var getImageUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path', '', 'string');\n };\n var getImagesUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials', false, 'boolean');\n };\n var getImagesUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', null, 'function');\n };\n var shouldUseContentCssCors = function (editor) {\n return editor.getParam('content_css_cors', false, 'boolean');\n };\n var getInlineBoundarySelector = function (editor) {\n return editor.getParam('inline_boundaries_selector', 'a[href],code,.mce-annotation', 'string');\n };\n var Settings = {\n getIframeAttrs: getIframeAttrs,\n getDocType: getDocType,\n getDocumentBaseUrl: getDocumentBaseUrl,\n getBodyId: getBodyId,\n getBodyClass: getBodyClass,\n getContentSecurityPolicy: getContentSecurityPolicy,\n shouldPutBrInPre: shouldPutBrInPre,\n getForcedRootBlock: getForcedRootBlock,\n getForcedRootBlockAttrs: getForcedRootBlockAttrs,\n getBrNewLineSelector: getBrNewLineSelector,\n getNoNewLineSelector: getNoNewLineSelector,\n shouldKeepStyles: shouldKeepStyles,\n shouldEndContainerOnEmptyBlock: shouldEndContainerOnEmptyBlock,\n getFontStyleValues: getFontStyleValues,\n getFontSizeClasses: getFontSizeClasses,\n getImagesDataImgFilter: getImagesDataImgFilter,\n isAutomaticUploadsEnabled: isAutomaticUploadsEnabled,\n shouldReuseFileName: shouldReuseFileName,\n shouldReplaceBlobUris: shouldReplaceBlobUris,\n getImageUploadUrl: getImageUploadUrl,\n getImageUploadBasePath: getImageUploadBasePath,\n getImagesUploadCredentials: getImagesUploadCredentials,\n getImagesUploadHandler: getImagesUploadHandler,\n shouldUseContentCssCors: shouldUseContentCssCors,\n getInlineBoundarySelector: getInlineBoundarySelector\n };\n\n var isInlineTarget = function (editor, elm) {\n return is$1(Element.fromDom(elm), Settings.getInlineBoundarySelector(editor));\n };\n var isRtl = function (element) {\n return DOMUtils$1.DOM.getStyle(element, 'direction', true) === 'rtl' || hasStrongRtl(element.textContent);\n };\n var findInlineParents = function (isInlineTarget, rootNode, pos) {\n return filter(DOMUtils$1.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);\n };\n var findRootInline = function (isInlineTarget, rootNode, pos) {\n var parents = findInlineParents(isInlineTarget, rootNode, pos);\n return Option.from(parents[parents.length - 1]);\n };\n var hasSameParentBlock = function (rootNode, node1, node2) {\n var block1 = getParentBlock(node1, rootNode);\n var block2 = getParentBlock(node2, rootNode);\n return block1 && block1 === block2;\n };\n var isAtZwsp = function (pos) {\n return isBeforeInline(pos) || isAfterInline(pos);\n };\n var normalizePosition = function (forward, pos) {\n if (!pos) {\n return pos;\n }\n var container = pos.container(), offset = pos.offset();\n if (forward) {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.nextSibling)) {\n return CaretPosition$1(container.nextSibling, 0);\n } else {\n return CaretPosition$1.after(container);\n }\n } else {\n return isBeforeInline(pos) ? CaretPosition$1(container, offset + 1) : pos;\n }\n } else {\n if (isCaretContainerInline(container)) {\n if (NodeType.isText(container.previousSibling)) {\n return CaretPosition$1(container.previousSibling, container.previousSibling.data.length);\n } else {\n return CaretPosition$1.before(container);\n }\n } else {\n return isAfterInline(pos) ? CaretPosition$1(container, offset - 1) : pos;\n }\n }\n };\n var normalizeForwards = curry(normalizePosition, true);\n var normalizeBackwards = curry(normalizePosition, false);\n var InlineUtils = {\n isInlineTarget: isInlineTarget,\n findRootInline: findRootInline,\n isRtl: isRtl,\n isAtZwsp: isAtZwsp,\n normalizePosition: normalizePosition,\n normalizeForwards: normalizeForwards,\n normalizeBackwards: normalizeBackwards,\n hasSameParentBlock: hasSameParentBlock\n };\n\n var isBeforeRoot = function (rootNode) {\n return function (elm) {\n return eq(rootNode, Element.fromDom(elm.dom().parentNode));\n };\n };\n var getParentBlock$1 = function (rootNode, elm) {\n return contains$3(rootNode, elm) ? closest(elm, function (element) {\n return isTextBlock(element) || isListItem(element);\n }, isBeforeRoot(rootNode)) : Option.none();\n };\n var placeCaretInEmptyBody = function (editor) {\n var body = editor.getBody();\n var node = body.firstChild && editor.dom.isBlock(body.firstChild) ? body.firstChild : body;\n editor.selection.setCursorLocation(node, 0);\n };\n var paddEmptyBody = function (editor) {\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n placeCaretInEmptyBody(editor);\n }\n };\n var willDeleteLastPositionInElement = function (forward, fromPos, elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n var normalizedFromPos = InlineUtils.normalizePosition(false, fromPos);\n if (forward) {\n return CaretFinder.nextPosition(elm, normalizedFromPos).map(function (nextPos) {\n return nextPos.isEqual(normalizedLastPos) && fromPos.isEqual(normalizedFirstPos);\n }).getOr(false);\n } else {\n return CaretFinder.prevPosition(elm, normalizedFromPos).map(function (prevPos) {\n return prevPos.isEqual(normalizedFirstPos) && fromPos.isEqual(normalizedLastPos);\n }).getOr(false);\n }\n }).getOr(true);\n };\n var DeleteUtils = {\n getParentBlock: getParentBlock$1,\n paddEmptyBody: paddEmptyBody,\n willDeleteLastPositionInElement: willDeleteLastPositionInElement\n };\n\n var ancestor$2 = function (scope, selector, isRoot) {\n return ancestor$1(scope, selector, isRoot).isSome();\n };\n\n var hasWhitespacePreserveParent = function (rootNode, node) {\n var rootElement = Element.fromDom(rootNode);\n var startNode = Element.fromDom(node);\n return ancestor$2(startNode, 'pre,code', curry(eq, rootElement));\n };\n var isWhitespace = function (rootNode, node) {\n return NodeType.isText(node) && /^[ \\t\\r\\n]*$/.test(node.data) && hasWhitespacePreserveParent(rootNode, node) === false;\n };\n var isNamedAnchor = function (node) {\n return NodeType.isElement(node) && node.nodeName === 'A' && node.hasAttribute('name');\n };\n var isContent = function (rootNode, node) {\n return isCaretCandidate(node) && isWhitespace(rootNode, node) === false || isNamedAnchor(node) || isBookmark(node);\n };\n var isBookmark = NodeType.hasAttribute('data-mce-bookmark');\n var isBogus$2 = NodeType.hasAttribute('data-mce-bogus');\n var isBogusAll$1 = NodeType.hasAttributeValue('data-mce-bogus', 'all');\n var isEmptyNode = function (targetNode) {\n var walker, node, brCount = 0;\n if (isContent(targetNode, targetNode)) {\n return false;\n } else {\n node = targetNode.firstChild;\n if (!node) {\n return true;\n }\n walker = new TreeWalker(node, targetNode);\n do {\n if (isBogusAll$1(node)) {\n node = walker.next(true);\n continue;\n }\n if (isBogus$2(node)) {\n node = walker.next();\n continue;\n }\n if (NodeType.isBr(node)) {\n brCount++;\n node = walker.next();\n continue;\n }\n if (isContent(targetNode, node)) {\n return false;\n }\n node = walker.next();\n } while (node);\n return brCount <= 1;\n }\n };\n var isEmpty$1 = function (elm) {\n return isEmptyNode(elm.dom());\n };\n var Empty = { isEmpty: isEmpty$1 };\n\n var BlockPosition = Immutable('block', 'position');\n var BlockBoundary = Immutable('from', 'to');\n var getBlockPosition = function (rootNode, pos) {\n var rootElm = Element.fromDom(rootNode);\n var containerElm = Element.fromDom(pos.container());\n return DeleteUtils.getParentBlock(rootElm, containerElm).map(function (block) {\n return BlockPosition(block, pos);\n });\n };\n var isDifferentBlocks = function (blockBoundary) {\n return eq(blockBoundary.from().block(), blockBoundary.to().block()) === false;\n };\n var hasSameParent = function (blockBoundary) {\n return parent(blockBoundary.from().block()).bind(function (parent1) {\n return parent(blockBoundary.to().block()).filter(function (parent2) {\n return eq(parent1, parent2);\n });\n }).isSome();\n };\n var isEditable = function (blockBoundary) {\n return NodeType.isContentEditableFalse(blockBoundary.from().block().dom()) === false && NodeType.isContentEditableFalse(blockBoundary.to().block().dom()) === false;\n };\n var skipLastBr = function (rootNode, forward, blockPosition) {\n if (NodeType.isBr(blockPosition.position().getNode()) && Empty.isEmpty(blockPosition.block()) === false) {\n return CaretFinder.positionIn(false, blockPosition.block().dom()).bind(function (lastPositionInBlock) {\n if (lastPositionInBlock.isEqual(blockPosition.position())) {\n return CaretFinder.fromPosition(forward, rootNode, lastPositionInBlock).bind(function (to) {\n return getBlockPosition(rootNode, to);\n });\n } else {\n return Option.some(blockPosition);\n }\n }).getOr(blockPosition);\n } else {\n return blockPosition;\n }\n };\n var readFromRange = function (rootNode, forward, rng) {\n var fromBlockPos = getBlockPosition(rootNode, CaretPosition$1.fromRangeStart(rng));\n var toBlockPos = fromBlockPos.bind(function (blockPos) {\n return CaretFinder.fromPosition(forward, rootNode, blockPos.position()).bind(function (to) {\n return getBlockPosition(rootNode, to).map(function (blockPos) {\n return skipLastBr(rootNode, forward, blockPos);\n });\n });\n });\n return lift2(fromBlockPos, toBlockPos, BlockBoundary).filter(function (blockBoundary) {\n return isDifferentBlocks(blockBoundary) && hasSameParent(blockBoundary) && isEditable(blockBoundary);\n });\n };\n var read$1 = function (rootNode, forward, rng) {\n return rng.collapsed ? readFromRange(rootNode, forward, rng) : Option.none();\n };\n var BlockMergeBoundary = { read: read$1 };\n\n var dropLast = function (xs) {\n return xs.slice(0, -1);\n };\n var parentsUntil$1 = function (start, root, predicate) {\n if (contains$3(root, start)) {\n return dropLast(parents(start, function (elm) {\n return predicate(elm) || eq(elm, root);\n }));\n } else {\n return [];\n }\n };\n var parents$1 = function (start, root) {\n return parentsUntil$1(start, root, constant(false));\n };\n var parentsAndSelf = function (start, root) {\n return [start].concat(parents$1(start, root));\n };\n var Parents = {\n parentsUntil: parentsUntil$1,\n parents: parents$1,\n parentsAndSelf: parentsAndSelf\n };\n\n var getChildrenUntilBlockBoundary = function (block) {\n var children$1 = children(block);\n return findIndex(children$1, isBlock).fold(function () {\n return children$1;\n }, function (index) {\n return children$1.slice(0, index);\n });\n };\n var extractChildren = function (block) {\n var children = getChildrenUntilBlockBoundary(block);\n each(children, remove$1);\n return children;\n };\n var removeEmptyRoot = function (rootNode, block) {\n var parents = Parents.parentsAndSelf(block, rootNode);\n return find(parents.reverse(), Empty.isEmpty).each(remove$1);\n };\n var isEmptyBefore = function (el) {\n return filter(prevSiblings(el), function (el) {\n return !Empty.isEmpty(el);\n }).length === 0;\n };\n var nestedBlockMerge = function (rootNode, fromBlock, toBlock, insertionPoint) {\n if (Empty.isEmpty(toBlock)) {\n PaddingBr.fillWithPaddingBr(toBlock);\n return CaretFinder.firstPositionIn(toBlock.dom());\n }\n if (isEmptyBefore(insertionPoint) && Empty.isEmpty(fromBlock)) {\n before(insertionPoint, Element.fromTag('br'));\n }\n var position = CaretFinder.prevPosition(toBlock.dom(), CaretPosition$1.before(insertionPoint.dom()));\n each(extractChildren(fromBlock), function (child) {\n before(insertionPoint, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var sidelongBlockMerge = function (rootNode, fromBlock, toBlock) {\n if (Empty.isEmpty(toBlock)) {\n remove$1(toBlock);\n if (Empty.isEmpty(fromBlock)) {\n PaddingBr.fillWithPaddingBr(fromBlock);\n }\n return CaretFinder.firstPositionIn(fromBlock.dom());\n }\n var position = CaretFinder.lastPositionIn(toBlock.dom());\n each(extractChildren(fromBlock), function (child) {\n append(toBlock, child);\n });\n removeEmptyRoot(rootNode, fromBlock);\n return position;\n };\n var findInsertionPoint = function (toBlock, block) {\n var parentsAndSelf = Parents.parentsAndSelf(block, toBlock);\n return Option.from(parentsAndSelf[parentsAndSelf.length - 1]);\n };\n var getInsertionPoint = function (fromBlock, toBlock) {\n return contains$3(toBlock, fromBlock) ? findInsertionPoint(toBlock, fromBlock) : Option.none();\n };\n var trimBr = function (first, block) {\n CaretFinder.positionIn(first, block.dom()).map(function (position) {\n return position.getNode();\n }).map(Element.fromDom).filter(isBr).each(remove$1);\n };\n var mergeBlockInto = function (rootNode, fromBlock, toBlock) {\n trimBr(true, fromBlock);\n trimBr(false, toBlock);\n return getInsertionPoint(fromBlock, toBlock).fold(curry(sidelongBlockMerge, rootNode, fromBlock, toBlock), curry(nestedBlockMerge, rootNode, fromBlock, toBlock));\n };\n var mergeBlocks = function (rootNode, forward, block1, block2) {\n return forward ? mergeBlockInto(rootNode, block2, block1) : mergeBlockInto(rootNode, block1, block2);\n };\n var MergeBlocks = { mergeBlocks: mergeBlocks };\n\n var backspaceDelete = function (editor, forward) {\n var position;\n var rootNode = Element.fromDom(editor.getBody());\n position = BlockMergeBoundary.read(rootNode.dom(), forward, editor.selection.getRng()).bind(function (blockBoundary) {\n return MergeBlocks.mergeBlocks(rootNode, forward, blockBoundary.from().block(), blockBoundary.to().block());\n });\n position.each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n return position.isSome();\n };\n var BlockBoundaryDelete = { backspaceDelete: backspaceDelete };\n\n var deleteRangeMergeBlocks = function (rootNode, selection) {\n var rng = selection.getRng();\n return lift2(DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.startContainer)), DeleteUtils.getParentBlock(rootNode, Element.fromDom(rng.endContainer)), function (block1, block2) {\n if (eq(block1, block2) === false) {\n rng.deleteContents();\n MergeBlocks.mergeBlocks(rootNode, true, block1, block2).each(function (pos) {\n selection.setRng(pos.toRange());\n });\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var isRawNodeInTable = function (root, rawNode) {\n var node = Element.fromDom(rawNode);\n var isRoot = curry(eq, root);\n return ancestor(node, isTableCell, isRoot).isSome();\n };\n var isSelectionInTable = function (root, rng) {\n return isRawNodeInTable(root, rng.startContainer) || isRawNodeInTable(root, rng.endContainer);\n };\n var isEverythingSelected = function (root, rng) {\n var noPrevious = CaretFinder.prevPosition(root.dom(), CaretPosition$1.fromRangeStart(rng)).isNone();\n var noNext = CaretFinder.nextPosition(root.dom(), CaretPosition$1.fromRangeEnd(rng)).isNone();\n return !isSelectionInTable(root, rng) && noPrevious && noNext;\n };\n var emptyEditor = function (editor) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n return true;\n };\n var deleteRange = function (editor) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n return isEverythingSelected(rootNode, rng) ? emptyEditor(editor) : deleteRangeMergeBlocks(rootNode, editor.selection);\n };\n var backspaceDelete$1 = function (editor, forward) {\n return editor.selection.isCollapsed() ? false : deleteRange(editor);\n };\n var BlockRangeDelete = { backspaceDelete: backspaceDelete$1 };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var isBr$5 = function (pos) {\n return getElementFromPosition(pos).exists(isBr);\n };\n var findBr = function (forward, root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n var scope = head(parentBlocks).getOr(root);\n return CaretFinder.fromPosition(forward, scope.dom(), pos).filter(isBr$5);\n };\n var isBeforeBr = function (root, pos) {\n return getElementFromPosition(pos).exists(isBr) || findBr(true, root, pos).isSome();\n };\n var isAfterBr = function (root, pos) {\n return getElementFromPrevPosition(pos).exists(isBr) || findBr(false, root, pos).isSome();\n };\n var findPreviousBr = curry(findBr, false);\n var findNextBr = curry(findBr, true);\n\n var is$2 = function (expected) {\n return function (actual) {\n return expected === actual;\n };\n };\n var isNbsp = is$2('\\xA0');\n var isWhiteSpace$1 = function (chr) {\n return /^[\\r\\n\\t ]$/.test(chr);\n };\n var isContent$1 = function (chr) {\n return !isWhiteSpace$1(chr) && !isNbsp(chr);\n };\n\n var isChar = function (forward, predicate, pos) {\n return Option.from(pos.container()).filter(NodeType.isText).exists(function (text) {\n var delta = forward ? 0 : -1;\n return predicate(text.data.charAt(pos.offset() + delta));\n });\n };\n var isBeforeSpace = curry(isChar, true, isWhiteSpace$1);\n var isAfterSpace = curry(isChar, false, isWhiteSpace$1);\n var isEmptyText = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && container.data.length === 0;\n };\n var isNextToContentEditableFalse = function (relativeOffset, caretPosition) {\n var node = getChildNodeAtRelativeOffset(relativeOffset, caretPosition);\n return NodeType.isContentEditableFalse(node) && !NodeType.isBogusAll(node);\n };\n var isBeforeContentEditableFalse = curry(isNextToContentEditableFalse, 0);\n var isAfterContentEditableFalse = curry(isNextToContentEditableFalse, -1);\n var isNextToTable = function (relativeOffset, caretPosition) {\n return NodeType.isTable(getChildNodeAtRelativeOffset(relativeOffset, caretPosition));\n };\n var isBeforeTable = curry(isNextToTable, 0);\n var isAfterTable = curry(isNextToTable, -1);\n\n var isCompoundElement = function (node) {\n return isTableCell(Element.fromDom(node)) || isListItem(Element.fromDom(node));\n };\n var DeleteAction = Adt.generate([\n { remove: ['element'] },\n { moveToElement: ['element'] },\n { moveToPosition: ['position'] }\n ]);\n var isAtContentEditableBlockCaret = function (forward, from) {\n var elm = from.getNode(forward === false);\n var caretLocation = forward ? 'after' : 'before';\n return NodeType.isElement(elm) && elm.getAttribute('data-mce-caret') === caretLocation;\n };\n var isDeleteFromCefDifferentBlocks = function (root, forward, from, to) {\n var inSameBlock = function (elm) {\n return isInline(Element.fromDom(elm)) && !isInSameBlock(from, to, root);\n };\n return getRelativeCefElm(!forward, from).fold(function () {\n return getRelativeCefElm(forward, to).fold(constant(false), inSameBlock);\n }, inSameBlock);\n };\n var deleteEmptyBlockOrMoveToCef = function (root, forward, from, to) {\n var toCefElm = to.getNode(forward === false);\n return DeleteUtils.getParentBlock(Element.fromDom(root), Element.fromDom(from.getNode())).map(function (blockElm) {\n return Empty.isEmpty(blockElm) ? DeleteAction.remove(blockElm.dom()) : DeleteAction.moveToElement(toCefElm);\n }).orThunk(function () {\n return Option.some(DeleteAction.moveToElement(toCefElm));\n });\n };\n var findCefPosition = function (root, forward, from) {\n return CaretFinder.fromPosition(forward, root, from).bind(function (to) {\n if (isCompoundElement(to.getNode())) {\n return Option.none();\n } else if (isDeleteFromCefDifferentBlocks(root, forward, from, to)) {\n return Option.none();\n } else if (forward && NodeType.isContentEditableFalse(to.getNode())) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward === false && NodeType.isContentEditableFalse(to.getNode(true))) {\n return deleteEmptyBlockOrMoveToCef(root, forward, from, to);\n } else if (forward && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else if (forward === false && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.moveToPosition(to));\n } else {\n return Option.none();\n }\n });\n };\n var getContentEditableBlockAction = function (forward, elm) {\n if (forward && NodeType.isContentEditableFalse(elm.nextSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.nextSibling));\n } else if (forward === false && NodeType.isContentEditableFalse(elm.previousSibling)) {\n return Option.some(DeleteAction.moveToElement(elm.previousSibling));\n } else {\n return Option.none();\n }\n };\n var skipMoveToActionFromInlineCefToContent = function (root, from, deleteAction) {\n return deleteAction.fold(function (elm) {\n return Option.some(DeleteAction.remove(elm));\n }, function (elm) {\n return Option.some(DeleteAction.moveToElement(elm));\n }, function (to) {\n if (isInSameBlock(from, to, root)) {\n return Option.none();\n } else {\n return Option.some(DeleteAction.moveToPosition(to));\n }\n });\n };\n var getContentEditableAction = function (root, forward, from) {\n if (isAtContentEditableBlockCaret(forward, from)) {\n return getContentEditableBlockAction(forward, from.getNode(forward === false)).fold(function () {\n return findCefPosition(root, forward, from);\n }, Option.some);\n } else {\n return findCefPosition(root, forward, from).bind(function (deleteAction) {\n return skipMoveToActionFromInlineCefToContent(root, from, deleteAction);\n });\n }\n };\n var read$2 = function (root, forward, rng) {\n var normalizedRange = normalizeRange(forward ? 1 : -1, root, rng);\n var from = CaretPosition$1.fromRangeStart(normalizedRange);\n var rootElement = Element.fromDom(root);\n if (forward === false && isAfterContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode(true)));\n } else if (forward && isBeforeContentEditableFalse(from)) {\n return Option.some(DeleteAction.remove(from.getNode()));\n } else if (forward === false && isBeforeContentEditableFalse(from) && isAfterBr(rootElement, from)) {\n return findPreviousBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else if (forward && isAfterContentEditableFalse(from) && isBeforeBr(rootElement, from)) {\n return findNextBr(rootElement, from).map(function (br) {\n return DeleteAction.remove(br.getNode());\n });\n } else {\n return getContentEditableAction(root, forward, from);\n }\n };\n\n var isCollapsibleWhitespace = function (c) {\n return ' \\f\\n\\r\\t\\x0B'.indexOf(c) !== -1;\n };\n var normalizeContent = function (content, isStartOfContent, isEndOfContent) {\n var result = foldl(content.split(''), function (acc, c) {\n if (isCollapsibleWhitespace(c) || c === '\\xA0') {\n if (acc.previousCharIsSpace || acc.str === '' && isStartOfContent || acc.str.length === content.length - 1 && isEndOfContent) {\n return {\n previousCharIsSpace: false,\n str: acc.str + '\\xA0'\n };\n } else {\n return {\n previousCharIsSpace: true,\n str: acc.str + ' '\n };\n }\n } else {\n return {\n previousCharIsSpace: false,\n str: acc.str + c\n };\n }\n }, {\n previousCharIsSpace: false,\n str: ''\n });\n return result.str;\n };\n var normalize$1 = function (node, offset, count) {\n if (count === 0) {\n return;\n }\n var whitespace = node.data.slice(offset, offset + count);\n var isEndOfContent = offset + count >= node.data.length;\n var isStartOfContent = offset === 0;\n node.replaceData(offset, count, normalizeContent(whitespace, isStartOfContent, isEndOfContent));\n };\n var normalizeWhitespaceAfter = function (node, offset) {\n var content = node.data.slice(offset);\n var whitespaceCount = content.length - lTrim(content).length;\n return normalize$1(node, offset, whitespaceCount);\n };\n var normalizeWhitespaceBefore = function (node, offset) {\n var content = node.data.slice(0, offset);\n var whitespaceCount = content.length - rTrim(content).length;\n return normalize$1(node, offset - whitespaceCount, whitespaceCount);\n };\n var mergeTextNodes = function (prevNode, nextNode, normalizeWhitespace) {\n var whitespaceOffset = rTrim(prevNode.data).length;\n prevNode.appendData(nextNode.data);\n remove$1(Element.fromDom(nextNode));\n if (normalizeWhitespace) {\n normalizeWhitespaceAfter(prevNode, whitespaceOffset);\n }\n return prevNode;\n };\n\n var needsReposition = function (pos, elm) {\n var container = pos.container();\n var offset = pos.offset();\n return CaretPosition$1.isTextPosition(pos) === false && container === elm.parentNode && offset > CaretPosition$1.before(elm).offset();\n };\n var reposition = function (elm, pos) {\n return needsReposition(pos, elm) ? CaretPosition$1(pos.container(), pos.offset() - 1) : pos;\n };\n var beforeOrStartOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, 0) : CaretPosition$1.before(node);\n };\n var afterOrEndOf = function (node) {\n return NodeType.isText(node) ? CaretPosition$1(node, node.data.length) : CaretPosition$1.after(node);\n };\n var getPreviousSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.previousSibling)) {\n return Option.some(afterOrEndOf(elm.previousSibling));\n } else {\n return elm.previousSibling ? CaretFinder.lastPositionIn(elm.previousSibling) : Option.none();\n }\n };\n var getNextSiblingCaretPosition = function (elm) {\n if (isCaretCandidate(elm.nextSibling)) {\n return Option.some(beforeOrStartOf(elm.nextSibling));\n } else {\n return elm.nextSibling ? CaretFinder.firstPositionIn(elm.nextSibling) : Option.none();\n }\n };\n var findCaretPositionBackwardsFromElm = function (rootElement, elm) {\n var startPosition = CaretPosition$1.before(elm.previousSibling ? elm.previousSibling : elm.parentNode);\n return CaretFinder.prevPosition(rootElement, startPosition).fold(function () {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm));\n }, Option.some);\n };\n var findCaretPositionForwardsFromElm = function (rootElement, elm) {\n return CaretFinder.nextPosition(rootElement, CaretPosition$1.after(elm)).fold(function () {\n return CaretFinder.prevPosition(rootElement, CaretPosition$1.before(elm));\n }, Option.some);\n };\n var findCaretPositionBackwards = function (rootElement, elm) {\n return getPreviousSiblingCaretPosition(elm).orThunk(function () {\n return getNextSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionBackwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPositionForward = function (rootElement, elm) {\n return getNextSiblingCaretPosition(elm).orThunk(function () {\n return getPreviousSiblingCaretPosition(elm);\n }).orThunk(function () {\n return findCaretPositionForwardsFromElm(rootElement, elm);\n });\n };\n var findCaretPosition$1 = function (forward, rootElement, elm) {\n return forward ? findCaretPositionForward(rootElement, elm) : findCaretPositionBackwards(rootElement, elm);\n };\n var findCaretPosOutsideElmAfterDelete = function (forward, rootElement, elm) {\n return findCaretPosition$1(forward, rootElement, elm).map(curry(reposition, elm));\n };\n var setSelection = function (editor, forward, pos) {\n pos.fold(function () {\n editor.focus();\n }, function (pos) {\n editor.selection.setRng(pos.toRange(), forward);\n });\n };\n var eqRawNode = function (rawNode) {\n return function (elm) {\n return elm.dom() === rawNode;\n };\n };\n var isBlock$2 = function (editor, elm) {\n return elm && editor.schema.getBlockElements().hasOwnProperty(name(elm));\n };\n var paddEmptyBlock = function (elm) {\n if (Empty.isEmpty(elm)) {\n var br = Element.fromHtml('
');\n empty(elm);\n append(elm, br);\n return Option.some(CaretPosition$1.before(br.dom()));\n } else {\n return Option.none();\n }\n };\n var deleteNormalized = function (elm, afterDeletePosOpt, normalizeWhitespace) {\n var prevTextOpt = prevSibling(elm).filter(isText);\n var nextTextOpt = nextSibling(elm).filter(isText);\n remove$1(elm);\n return lift3(prevTextOpt, nextTextOpt, afterDeletePosOpt, function (prev, next, pos) {\n var prevNode = prev.dom(), nextNode = next.dom();\n var offset = prevNode.data.length;\n mergeTextNodes(prevNode, nextNode, normalizeWhitespace);\n return pos.container() === nextNode ? CaretPosition$1(prevNode, offset) : pos;\n }).orThunk(function () {\n if (normalizeWhitespace) {\n prevTextOpt.each(function (elm) {\n return normalizeWhitespaceBefore(elm.dom(), elm.dom().length);\n });\n nextTextOpt.each(function (elm) {\n return normalizeWhitespaceAfter(elm.dom(), 0);\n });\n }\n return afterDeletePosOpt;\n });\n };\n var isInlineElement = function (editor, element) {\n return has(editor.schema.getTextInlineElements(), name(element));\n };\n var deleteElement = function (editor, forward, elm, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var afterDeletePos = findCaretPosOutsideElmAfterDelete(forward, editor.getBody(), elm.dom());\n var parentBlock = ancestor(elm, curry(isBlock$2, editor), eqRawNode(editor.getBody()));\n var normalizedAfterDeletePos = deleteNormalized(elm, afterDeletePos, isInlineElement(editor, elm));\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n } else {\n parentBlock.bind(paddEmptyBlock).fold(function () {\n if (moveCaret) {\n setSelection(editor, forward, normalizedAfterDeletePos);\n }\n }, function (paddPos) {\n if (moveCaret) {\n setSelection(editor, forward, Option.some(paddPos));\n }\n });\n }\n };\n var DeleteElement = { deleteElement: deleteElement };\n\n var deleteElement$1 = function (editor, forward) {\n return function (element) {\n editor._selectionOverrides.hideFakeCaret();\n DeleteElement.deleteElement(editor, forward, Element.fromDom(element));\n return true;\n };\n };\n var moveToElement = function (editor, forward) {\n return function (element) {\n var pos = forward ? CaretPosition$1.before(element) : CaretPosition$1.after(element);\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var moveToPosition = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n };\n };\n var backspaceDeleteCaret = function (editor, forward) {\n var result = read$2(editor.getBody(), forward, editor.selection.getRng()).map(function (deleteAction) {\n return deleteAction.fold(deleteElement$1(editor, forward), moveToElement(editor, forward), moveToPosition(editor));\n });\n return result.getOr(false);\n };\n var deleteOffscreenSelection = function (rootElement) {\n each(descendants$1(rootElement, '.mce-offscreen-selection'), remove$1);\n };\n var backspaceDeleteRange = function (editor, forward) {\n var selectedElement = editor.selection.getNode();\n if (NodeType.isContentEditableFalse(selectedElement)) {\n deleteOffscreenSelection(Element.fromDom(editor.getBody()));\n DeleteElement.deleteElement(editor, forward, Element.fromDom(editor.selection.getNode()));\n DeleteUtils.paddEmptyBody(editor);\n return true;\n } else {\n return false;\n }\n };\n var getContentEditableRoot = function (root, node) {\n while (node && node !== root) {\n if (NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var paddEmptyElement = function (editor) {\n var br;\n var ceRoot = getContentEditableRoot(editor.getBody(), editor.selection.getNode());\n if (NodeType.isContentEditableTrue(ceRoot) && editor.dom.isBlock(ceRoot) && editor.dom.isEmpty(ceRoot)) {\n br = editor.dom.create('br', { 'data-mce-bogus': '1' });\n editor.dom.setHTML(ceRoot, '');\n ceRoot.appendChild(br);\n editor.selection.setRng(CaretPosition$1.before(br).toRange());\n }\n return true;\n };\n var backspaceDelete$2 = function (editor, forward) {\n if (editor.selection.isCollapsed()) {\n return backspaceDeleteCaret(editor, forward);\n } else {\n return backspaceDeleteRange(editor, forward);\n }\n };\n var CefDelete = {\n backspaceDelete: backspaceDelete$2,\n paddEmptyElement: paddEmptyElement\n };\n\n var isText$8 = NodeType.isText;\n var startsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[0] === Zwsp.ZWSP;\n };\n var endsWithCaretContainer$1 = function (node) {\n return isText$8(node) && node.data[node.data.length - 1] === Zwsp.ZWSP;\n };\n var createZwsp = function (node) {\n return node.ownerDocument.createTextNode(Zwsp.ZWSP);\n };\n var insertBefore$1 = function (node) {\n if (isText$8(node.previousSibling)) {\n if (endsWithCaretContainer$1(node.previousSibling)) {\n return node.previousSibling;\n } else {\n node.previousSibling.appendData(Zwsp.ZWSP);\n return node.previousSibling;\n }\n } else if (isText$8(node)) {\n if (startsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.insertData(0, Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n node.parentNode.insertBefore(newNode, node);\n return newNode;\n }\n };\n var insertAfter$1 = function (node) {\n if (isText$8(node.nextSibling)) {\n if (startsWithCaretContainer$1(node.nextSibling)) {\n return node.nextSibling;\n } else {\n node.nextSibling.insertData(0, Zwsp.ZWSP);\n return node.nextSibling;\n }\n } else if (isText$8(node)) {\n if (endsWithCaretContainer$1(node)) {\n return node;\n } else {\n node.appendData(Zwsp.ZWSP);\n return node;\n }\n } else {\n var newNode = createZwsp(node);\n if (node.nextSibling) {\n node.parentNode.insertBefore(newNode, node.nextSibling);\n } else {\n node.parentNode.appendChild(newNode);\n }\n return newNode;\n }\n };\n var insertInline$1 = function (before, node) {\n return before ? insertBefore$1(node) : insertAfter$1(node);\n };\n var insertInlineBefore = curry(insertInline$1, true);\n var insertInlineAfter = curry(insertInline$1, false);\n\n var insertInlinePos = function (pos, before) {\n if (NodeType.isText(pos.container())) {\n return insertInline$1(before, pos.container());\n } else {\n return insertInline$1(before, pos.getNode());\n }\n };\n var isPosCaretContainer = function (pos, caret) {\n var caretNode = caret.get();\n return caretNode && pos.container() === caretNode && isCaretContainerInline(caretNode);\n };\n var renderCaret = function (caret, location) {\n return location.fold(function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineBefore(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, text.length - 1));\n }, function (element) {\n return CaretFinder.firstPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, true);\n caret.set(text);\n return CaretPosition$1(text, 1);\n } else {\n return CaretPosition$1(caret.get(), 1);\n }\n });\n }, function (element) {\n return CaretFinder.lastPositionIn(element).map(function (pos) {\n if (!isPosCaretContainer(pos, caret)) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlinePos(pos, false);\n caret.set(text);\n return CaretPosition$1(text, text.length - 1);\n } else {\n return CaretPosition$1(caret.get(), caret.get().length - 1);\n }\n });\n }, function (element) {\n CaretContainerRemove.remove(caret.get());\n var text = insertInlineAfter(element);\n caret.set(text);\n return Option.some(CaretPosition$1(text, 1));\n });\n };\n var BoundaryCaret = { renderCaret: renderCaret };\n\n var evaluateUntil = function (fns, args) {\n for (var i = 0; i < fns.length; i++) {\n var result = fns[i].apply(null, args);\n if (result.isSome()) {\n return result;\n }\n }\n return Option.none();\n };\n var LazyEvaluator = { evaluateUntil: evaluateUntil };\n\n var Location = Adt.generate([\n { before: ['element'] },\n { start: ['element'] },\n { end: ['element'] },\n { after: ['element'] }\n ]);\n var rescope = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var before$3 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.nextPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.before(inline);\n });\n }, Option.none);\n };\n var isNotInsideFormatCaretContainer = function (rootNode, elm) {\n return getParentCaretContainer(rootNode, elm) === null;\n };\n var findInsideRootInline = function (isInlineTarget, rootNode, pos) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, pos).filter(curry(isNotInsideFormatCaretContainer, rootNode));\n };\n var start = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var prevPos = CaretFinder.prevPosition(inline, nPos);\n return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();\n });\n };\n var end = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeForwards(pos);\n return findInsideRootInline(isInlineTarget, rootNode, nPos).bind(function (inline) {\n var nextPos = CaretFinder.nextPosition(inline, nPos);\n return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();\n });\n };\n var after$2 = function (isInlineTarget, rootNode, pos) {\n var nPos = InlineUtils.normalizeBackwards(pos);\n var scope = rescope(rootNode, nPos.container());\n return InlineUtils.findRootInline(isInlineTarget, scope, nPos).fold(function () {\n return CaretFinder.prevPosition(scope, nPos).bind(curry(InlineUtils.findRootInline, isInlineTarget, scope)).map(function (inline) {\n return Location.after(inline);\n });\n }, Option.none);\n };\n var isValidLocation = function (location) {\n return InlineUtils.isRtl(getElement(location)) === false;\n };\n var readLocation = function (isInlineTarget, rootNode, pos) {\n var location = LazyEvaluator.evaluateUntil([\n before$3,\n start,\n end,\n after$2\n ], [\n isInlineTarget,\n rootNode,\n pos\n ]);\n return location.filter(isValidLocation);\n };\n var getElement = function (location) {\n return location.fold(identity, identity, identity, identity);\n };\n var getName = function (location) {\n return location.fold(constant('before'), constant('start'), constant('end'), constant('after'));\n };\n var outside = function (location) {\n return location.fold(Location.before, Location.before, Location.after, Location.after);\n };\n var inside = function (location) {\n return location.fold(Location.start, Location.start, Location.end, Location.end);\n };\n var isEq$1 = function (location1, location2) {\n return getName(location1) === getName(location2) && getElement(location1) === getElement(location2);\n };\n var betweenInlines = function (forward, isInlineTarget, rootNode, from, to, location) {\n return lift2(InlineUtils.findRootInline(isInlineTarget, rootNode, from), InlineUtils.findRootInline(isInlineTarget, rootNode, to), function (fromInline, toInline) {\n if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {\n return Location.after(forward ? fromInline : toInline);\n } else {\n return location;\n }\n }).getOr(location);\n };\n var skipNoMovement = function (fromLocation, toLocation) {\n return fromLocation.fold(constant(true), function (fromLocation) {\n return !isEq$1(fromLocation, toLocation);\n });\n };\n var findLocationTraverse = function (forward, isInlineTarget, rootNode, fromLocation, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var to = CaretFinder.fromPosition(forward, rootNode, from).map(curry(InlineUtils.normalizePosition, forward));\n var location = to.fold(function () {\n return fromLocation.map(outside);\n }, function (to) {\n return readLocation(isInlineTarget, rootNode, to).map(curry(betweenInlines, forward, isInlineTarget, rootNode, from, to)).filter(curry(skipNoMovement, fromLocation));\n });\n return location.filter(isValidLocation);\n };\n var findLocationSimple = function (forward, location) {\n if (forward) {\n return location.fold(compose(Option.some, Location.start), Option.none, compose(Option.some, Location.after), Option.none);\n } else {\n return location.fold(Option.none, compose(Option.some, Location.before), Option.none, compose(Option.some, Location.end));\n }\n };\n var findLocation = function (forward, isInlineTarget, rootNode, pos) {\n var from = InlineUtils.normalizePosition(forward, pos);\n var fromLocation = readLocation(isInlineTarget, rootNode, from);\n return readLocation(isInlineTarget, rootNode, from).bind(curry(findLocationSimple, forward)).orThunk(function () {\n return findLocationTraverse(forward, isInlineTarget, rootNode, fromLocation, pos);\n });\n };\n var BoundaryLocation = {\n readLocation: readLocation,\n findLocation: findLocation,\n prevLocation: curry(findLocation, false),\n nextLocation: curry(findLocation, true),\n getElement: getElement,\n outside: outside,\n inside: inside\n };\n\n var hasSelectionModifyApi = function (editor) {\n return isFunction(editor.selection.getSel().modify);\n };\n var moveRel = function (forward, selection, pos) {\n var delta = forward ? 1 : -1;\n selection.setRng(CaretPosition$1(pos.container(), pos.offset() + delta).toRange());\n selection.getSel().modify('move', forward ? 'forward' : 'backward', 'word');\n return true;\n };\n var moveByWord = function (forward, editor) {\n var rng = editor.selection.getRng();\n var pos = forward ? CaretPosition$1.fromRangeEnd(rng) : CaretPosition$1.fromRangeStart(rng);\n if (!hasSelectionModifyApi(editor)) {\n return false;\n } else if (forward && isBeforeInline(pos)) {\n return moveRel(true, editor.selection, pos);\n } else if (!forward && isAfterInline(pos)) {\n return moveRel(false, editor.selection, pos);\n } else {\n return false;\n }\n };\n var WordSelection = {\n hasSelectionModifyApi: hasSelectionModifyApi,\n moveByWord: moveByWord\n };\n\n var setCaretPosition = function (editor, pos) {\n var rng = editor.dom.createRng();\n rng.setStart(pos.container(), pos.offset());\n rng.setEnd(pos.container(), pos.offset());\n editor.selection.setRng(rng);\n };\n var isFeatureEnabled = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var setSelected = function (state, elm) {\n if (state) {\n elm.setAttribute('data-mce-selected', 'inline-boundary');\n } else {\n elm.removeAttribute('data-mce-selected');\n }\n };\n var renderCaretLocation = function (editor, caret, location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n setCaretPosition(editor, pos);\n return location;\n });\n };\n var findLocation$1 = function (editor, caret, forward) {\n var rootNode = editor.getBody();\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var location = BoundaryLocation.findLocation(forward, isInlineTarget, rootNode, from);\n return location.bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n };\n var toggleInlines = function (isInlineTarget, dom, elms) {\n var selectedInlines = filter(dom.select('*[data-mce-selected=\"inline-boundary\"]'), isInlineTarget);\n var targetInlines = filter(elms, isInlineTarget);\n each(difference(selectedInlines, targetInlines), curry(setSelected, false));\n each(difference(targetInlines, selectedInlines), curry(setSelected, true));\n };\n var safeRemoveCaretContainer = function (editor, caret) {\n if (editor.selection.isCollapsed() && editor.composing !== true && caret.get()) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (CaretPosition$1.isTextPosition(pos) && InlineUtils.isAtZwsp(pos) === false) {\n setCaretPosition(editor, CaretContainerRemove.removeAndReposition(caret.get(), pos));\n caret.set(null);\n }\n }\n };\n var renderInsideInlineCaret = function (isInlineTarget, editor, caret, elms) {\n if (editor.selection.isCollapsed()) {\n var inlines = filter(elms, isInlineTarget);\n each(inlines, function (inline) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), pos).bind(function (location) {\n return renderCaretLocation(editor, caret, location);\n });\n });\n }\n };\n var move = function (editor, caret, forward) {\n return function () {\n return isFeatureEnabled(editor) ? findLocation$1(editor, caret, forward).isSome() : false;\n };\n };\n var moveWord = function (forward, editor, caret) {\n return function () {\n return isFeatureEnabled(editor) ? WordSelection.moveByWord(forward, editor) : false;\n };\n };\n var setupSelectedState = function (editor) {\n var caret = Cell(null);\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.on('NodeChange', function (e) {\n if (isFeatureEnabled(editor)) {\n toggleInlines(isInlineTarget, editor.dom, e.parents);\n safeRemoveCaretContainer(editor, caret);\n renderInsideInlineCaret(isInlineTarget, editor, caret, e.parents);\n }\n });\n return caret;\n };\n var moveNextWord = curry(moveWord, true);\n var movePrevWord = curry(moveWord, false);\n var BoundarySelection = {\n move: move,\n moveNextWord: moveNextWord,\n movePrevWord: movePrevWord,\n setupSelectedState: setupSelectedState,\n setCaretPosition: setCaretPosition\n };\n\n var isFeatureEnabled$1 = function (editor) {\n return editor.settings.inline_boundaries !== false;\n };\n var rangeFromPositions = function (from, to) {\n var range = domGlobals.document.createRange();\n range.setStart(from.container(), from.offset());\n range.setEnd(to.container(), to.offset());\n return range;\n };\n var hasOnlyTwoOrLessPositionsLeft = function (elm) {\n return lift2(CaretFinder.firstPositionIn(elm), CaretFinder.lastPositionIn(elm), function (firstPos, lastPos) {\n var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);\n var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);\n return CaretFinder.nextPosition(elm, normalizedFirstPos).map(function (pos) {\n return pos.isEqual(normalizedLastPos);\n }).getOr(true);\n }).getOr(true);\n };\n var setCaretLocation = function (editor, caret) {\n return function (location) {\n return BoundaryCaret.renderCaret(caret, location).map(function (pos) {\n BoundarySelection.setCaretPosition(editor, pos);\n return true;\n }).getOr(false);\n };\n };\n var deleteFromTo = function (editor, caret, from, to) {\n var rootNode = editor.getBody();\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n editor.undoManager.ignore(function () {\n editor.selection.setRng(rangeFromPositions(from, to));\n editor.execCommand('Delete');\n BoundaryLocation.readLocation(isInlineTarget, rootNode, CaretPosition$1.fromRangeStart(editor.selection.getRng())).map(BoundaryLocation.inside).map(setCaretLocation(editor, caret));\n });\n editor.nodeChanged();\n };\n var rescope$1 = function (rootNode, node) {\n var parentBlock = getParentBlock(node, rootNode);\n return parentBlock ? parentBlock : rootNode;\n };\n var backspaceDeleteCollapsed = function (editor, caret, forward, from) {\n var rootNode = rescope$1(editor.getBody(), from.container());\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var fromLocation = BoundaryLocation.readLocation(isInlineTarget, rootNode, from);\n return fromLocation.bind(function (location) {\n if (forward) {\n return location.fold(constant(Option.some(BoundaryLocation.inside(location))), Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none);\n } else {\n return location.fold(Option.none, constant(Option.some(BoundaryLocation.outside(location))), Option.none, constant(Option.some(BoundaryLocation.inside(location))));\n }\n }).map(setCaretLocation(editor, caret)).getOrThunk(function () {\n var toPosition = CaretFinder.navigate(forward, rootNode, from);\n var toLocation = toPosition.bind(function (pos) {\n return BoundaryLocation.readLocation(isInlineTarget, rootNode, pos);\n });\n if (fromLocation.isSome() && toLocation.isSome()) {\n return InlineUtils.findRootInline(isInlineTarget, rootNode, from).map(function (elm) {\n if (hasOnlyTwoOrLessPositionsLeft(elm)) {\n DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n } else {\n return toLocation.bind(function (_) {\n return toPosition.map(function (to) {\n if (forward) {\n deleteFromTo(editor, caret, from, to);\n } else {\n deleteFromTo(editor, caret, to, from);\n }\n return true;\n });\n }).getOr(false);\n }\n });\n };\n var backspaceDelete$3 = function (editor, caret, forward) {\n if (editor.selection.isCollapsed() && isFeatureEnabled$1(editor)) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return backspaceDeleteCollapsed(editor, caret, forward, from);\n }\n return false;\n };\n var InlineBoundaryDelete = { backspaceDelete: backspaceDelete$3 };\n\n var tableCellRng = Immutable('start', 'end');\n var tableSelection = Immutable('rng', 'table', 'cells');\n var deleteAction = Adt.generate([\n { removeTable: ['element'] },\n { emptyCells: ['cells'] }\n ]);\n var isRootFromElement = function (root) {\n return curry(eq, root);\n };\n var getClosestCell = function (container, isRoot) {\n return closest$1(Element.fromDom(container), 'td,th', isRoot);\n };\n var getClosestTable = function (cell, isRoot) {\n return ancestor$1(cell, 'table', isRoot);\n };\n var isExpandedCellRng = function (cellRng) {\n return eq(cellRng.start(), cellRng.end()) === false;\n };\n var getTableFromCellRng = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (startParentTable) {\n return getClosestTable(cellRng.end(), isRoot).bind(function (endParentTable) {\n return eq(startParentTable, endParentTable) ? Option.some(startParentTable) : Option.none();\n });\n });\n };\n var getTableCells = function (table) {\n return descendants$1(table, 'td,th');\n };\n var getCellRangeFromStartTable = function (cellRng, isRoot) {\n return getClosestTable(cellRng.start(), isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(cellRng.start(), endCell);\n });\n });\n };\n var partialSelection = function (isRoot, rng) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return rng.collapsed ? Option.none() : lift2(startCell, endCell, tableCellRng).fold(function () {\n return startCell.fold(function () {\n return endCell.bind(function (endCell) {\n return getClosestTable(endCell, isRoot).bind(function (table) {\n return head(getTableCells(table)).map(function (startCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (startCell) {\n return getClosestTable(startCell, isRoot).bind(function (table) {\n return last(getTableCells(table)).map(function (endCell) {\n return tableCellRng(startCell, endCell);\n });\n });\n });\n }, function (cellRng) {\n return isWithinSameTable(isRoot, cellRng) ? Option.none() : getCellRangeFromStartTable(cellRng, isRoot);\n });\n };\n var isWithinSameTable = function (isRoot, cellRng) {\n return getTableFromCellRng(cellRng, isRoot).isSome();\n };\n var getCellRng = function (rng, isRoot) {\n var startCell = getClosestCell(rng.startContainer, isRoot);\n var endCell = getClosestCell(rng.endContainer, isRoot);\n return lift2(startCell, endCell, tableCellRng).filter(isExpandedCellRng).filter(function (cellRng) {\n return isWithinSameTable(isRoot, cellRng);\n }).orThunk(function () {\n return partialSelection(isRoot, rng);\n });\n };\n var getTableSelectionFromCellRng = function (cellRng, isRoot) {\n return getTableFromCellRng(cellRng, isRoot).map(function (table) {\n return tableSelection(cellRng, table, getTableCells(table));\n });\n };\n var getTableSelectionFromRng = function (root, rng) {\n var isRoot = isRootFromElement(root);\n return getCellRng(rng, isRoot).bind(function (cellRng) {\n return getTableSelectionFromCellRng(cellRng, isRoot);\n });\n };\n var getCellIndex = function (cells, cell) {\n return findIndex(cells, function (x) {\n return eq(x, cell);\n });\n };\n var getSelectedCells = function (tableSelection) {\n return lift2(getCellIndex(tableSelection.cells(), tableSelection.rng().start()), getCellIndex(tableSelection.cells(), tableSelection.rng().end()), function (startIndex, endIndex) {\n return tableSelection.cells().slice(startIndex, endIndex + 1);\n });\n };\n var getAction = function (tableSelection) {\n return getSelectedCells(tableSelection).map(function (selected) {\n var cells = tableSelection.cells();\n return selected.length === cells.length ? deleteAction.removeTable(tableSelection.table()) : deleteAction.emptyCells(selected);\n });\n };\n var getActionFromCells = function (cells) {\n return deleteAction.emptyCells(cells);\n };\n var getActionFromRange = function (root, rng) {\n return getTableSelectionFromRng(root, rng).bind(getAction);\n };\n var TableDeleteAction = {\n getActionFromRange: getActionFromRange,\n getActionFromCells: getActionFromCells\n };\n\n var getRanges = function (selection) {\n var ranges = [];\n if (selection) {\n for (var i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n }\n return ranges;\n };\n var getSelectedNodes = function (ranges) {\n return bind(ranges, function (range) {\n var node = getSelectedNode(range);\n return node ? [Element.fromDom(node)] : [];\n });\n };\n var hasMultipleRanges = function (selection) {\n return getRanges(selection).length > 1;\n };\n var MultiRange = {\n getRanges: getRanges,\n getSelectedNodes: getSelectedNodes,\n hasMultipleRanges: hasMultipleRanges\n };\n\n var getCellsFromRanges = function (ranges) {\n return filter(MultiRange.getSelectedNodes(ranges), isTableCell);\n };\n var getCellsFromElement = function (elm) {\n var selectedCells = descendants$1(elm, 'td[data-mce-selected],th[data-mce-selected]');\n return selectedCells;\n };\n var getCellsFromElementOrRanges = function (ranges, element) {\n var selectedCells = getCellsFromElement(element);\n var rangeCells = getCellsFromRanges(ranges);\n return selectedCells.length > 0 ? selectedCells : rangeCells;\n };\n var getCellsFromEditor = function (editor) {\n return getCellsFromElementOrRanges(MultiRange.getRanges(editor.selection.getSel()), Element.fromDom(editor.getBody()));\n };\n var TableCellSelection = {\n getCellsFromRanges: getCellsFromRanges,\n getCellsFromElement: getCellsFromElement,\n getCellsFromElementOrRanges: getCellsFromElementOrRanges,\n getCellsFromEditor: getCellsFromEditor\n };\n\n var emptyCells = function (editor, cells) {\n each(cells, PaddingBr.fillWithPaddingBr);\n editor.selection.setCursorLocation(cells[0].dom(), 0);\n return true;\n };\n var deleteTableElement = function (editor, table) {\n DeleteElement.deleteElement(editor, false, table);\n return true;\n };\n var deleteCellRange = function (editor, rootElm, rng) {\n return TableDeleteAction.getActionFromRange(rootElm, rng).map(function (action) {\n return action.fold(curry(deleteTableElement, editor), curry(emptyCells, editor));\n });\n };\n var deleteCaptionRange = function (editor, caption) {\n return emptyElement(editor, caption);\n };\n var deleteTableRange = function (editor, rootElm, rng, startElm) {\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCellRange(editor, rootElm, rng);\n }, function (caption) {\n return deleteCaptionRange(editor, caption);\n }).getOr(false);\n };\n var deleteRange$1 = function (editor, startElm) {\n var rootNode = Element.fromDom(editor.getBody());\n var rng = editor.selection.getRng();\n var selectedCells = TableCellSelection.getCellsFromEditor(editor);\n return selectedCells.length !== 0 ? emptyCells(editor, selectedCells) : deleteTableRange(editor, rootNode, rng, startElm);\n };\n var getParentCell = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), isTableCell);\n };\n var getParentCaption = function (rootElm, elm) {\n return find(Parents.parentsAndSelf(elm, rootElm), function (elm) {\n return name(elm) === 'caption';\n });\n };\n var deleteBetweenCells = function (editor, rootElm, forward, fromCell, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return getParentCell(rootElm, Element.fromDom(to.getNode())).map(function (toCell) {\n return eq(toCell, fromCell) === false;\n });\n });\n };\n var emptyElement = function (editor, elm) {\n PaddingBr.fillWithPaddingBr(elm);\n editor.selection.setCursorLocation(elm.dom(), 0);\n return Option.some(true);\n };\n var isDeleteOfLastCharPos = function (fromCaption, forward, from, to) {\n return CaretFinder.firstPositionIn(fromCaption.dom()).bind(function (first) {\n return CaretFinder.lastPositionIn(fromCaption.dom()).map(function (last) {\n return forward ? from.isEqual(first) && to.isEqual(last) : from.isEqual(last) && to.isEqual(first);\n });\n }).getOr(true);\n };\n var emptyCaretCaption = function (editor, elm) {\n return emptyElement(editor, elm);\n };\n var validateCaretCaption = function (rootElm, fromCaption, to) {\n return getParentCaption(rootElm, Element.fromDom(to.getNode())).map(function (toCaption) {\n return eq(toCaption, fromCaption) === false;\n });\n };\n var deleteCaretInsideCaption = function (editor, rootElm, forward, fromCaption, from) {\n return CaretFinder.navigate(forward, editor.getBody(), from).bind(function (to) {\n return isDeleteOfLastCharPos(fromCaption, forward, from, to) ? emptyCaretCaption(editor, fromCaption) : validateCaretCaption(rootElm, fromCaption, to);\n }).or(Option.some(true));\n };\n var deleteCaretCells = function (editor, forward, rootElm, startElm) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return getParentCell(rootElm, startElm).bind(function (fromCell) {\n return Empty.isEmpty(fromCell) ? emptyElement(editor, fromCell) : deleteBetweenCells(editor, rootElm, forward, fromCell, from);\n });\n };\n var deleteCaretCaption = function (editor, forward, rootElm, fromCaption) {\n var from = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return Empty.isEmpty(fromCaption) ? emptyElement(editor, fromCaption) : deleteCaretInsideCaption(editor, rootElm, forward, fromCaption, from);\n };\n var deleteCaret = function (editor, forward, startElm) {\n var rootElm = Element.fromDom(editor.getBody());\n return getParentCaption(rootElm, startElm).fold(function () {\n return deleteCaretCells(editor, forward, rootElm, startElm);\n }, function (fromCaption) {\n return deleteCaretCaption(editor, forward, rootElm, fromCaption);\n }).getOr(false);\n };\n var backspaceDelete$4 = function (editor, forward) {\n var startElm = Element.fromDom(editor.selection.getStart(true));\n var cells = TableCellSelection.getCellsFromEditor(editor);\n return editor.selection.isCollapsed() && cells.length === 0 ? deleteCaret(editor, forward, startElm) : deleteRange$1(editor, startElm);\n };\n var TableDelete = { backspaceDelete: backspaceDelete$4 };\n\n var isEq$2 = FormatUtils.isEq;\n var matchesUnInheritedFormatSelector = function (ed, node, name) {\n var formatList = ed.formatter.get(name);\n if (formatList) {\n for (var i = 0; i < formatList.length; i++) {\n if (formatList[i].inherit === false && ed.dom.is(node, formatList[i].selector)) {\n return true;\n }\n }\n }\n return false;\n };\n var matchParents = function (editor, node, name, vars) {\n var root = editor.dom.getRoot();\n if (node === root) {\n return false;\n }\n node = editor.dom.getParent(node, function (node) {\n if (matchesUnInheritedFormatSelector(editor, node, name)) {\n return true;\n }\n return node.parentNode === root || !!matchNode(editor, node, name, vars, true);\n });\n return matchNode(editor, node, name, vars);\n };\n var matchName = function (dom, node, format) {\n if (isEq$2(node, format.inline)) {\n return true;\n }\n if (isEq$2(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return node.nodeType === 1 && dom.is(node, format.selector);\n }\n };\n var matchItems = function (dom, node, format, itemName, similar, vars) {\n var key, value;\n var items = format[itemName];\n var i;\n if (format.onmatch) {\n return format.onmatch(node, format, itemName);\n }\n if (items) {\n if (typeof items.length === 'undefined') {\n for (key in items) {\n if (items.hasOwnProperty(key)) {\n if (itemName === 'attributes') {\n value = dom.getAttrib(node, key);\n } else {\n value = FormatUtils.getStyle(dom, node, key);\n }\n if (similar && !value && !format.exact) {\n return;\n }\n if ((!similar || format.exact) && !isEq$2(value, FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(items[key], vars), key))) {\n return;\n }\n }\n }\n } else {\n for (i = 0; i < items.length; i++) {\n if (itemName === 'attributes' ? dom.getAttrib(node, items[i]) : FormatUtils.getStyle(dom, node, items[i])) {\n return format;\n }\n }\n }\n }\n return format;\n };\n var matchNode = function (ed, node, name, vars, similar) {\n var formatList = ed.formatter.get(name);\n var format, i, x, classes;\n var dom = ed.dom;\n if (formatList && node) {\n for (i = 0; i < formatList.length; i++) {\n format = formatList[i];\n if (matchName(ed.dom, node, format) && matchItems(dom, node, format, 'attributes', similar, vars) && matchItems(dom, node, format, 'styles', similar, vars)) {\n if (classes = format.classes) {\n for (x = 0; x < classes.length; x++) {\n if (!ed.dom.hasClass(node, classes[x])) {\n return;\n }\n }\n }\n return format;\n }\n }\n }\n };\n var match = function (editor, name, vars, node) {\n var startNode;\n if (node) {\n return matchParents(editor, node, name, vars);\n }\n node = editor.selection.getNode();\n if (matchParents(editor, node, name, vars)) {\n return true;\n }\n startNode = editor.selection.getStart();\n if (startNode !== node) {\n if (matchParents(editor, startNode, name, vars)) {\n return true;\n }\n }\n return false;\n };\n var matchAll = function (editor, names, vars) {\n var startElement;\n var matchedFormatNames = [];\n var checkedMap = {};\n startElement = editor.selection.getStart();\n editor.dom.getParent(startElement, function (node) {\n var i, name;\n for (i = 0; i < names.length; i++) {\n name = names[i];\n if (!checkedMap[name] && matchNode(editor, node, name, vars)) {\n checkedMap[name] = true;\n matchedFormatNames.push(name);\n }\n }\n }, editor.dom.getRoot());\n return matchedFormatNames;\n };\n var canApply = function (editor, name) {\n var formatList = editor.formatter.get(name);\n var startNode, parents, i, x, selector;\n var dom = editor.dom;\n if (formatList) {\n startNode = editor.selection.getStart();\n parents = FormatUtils.getParents(dom, startNode);\n for (x = formatList.length - 1; x >= 0; x--) {\n selector = formatList[x].selector;\n if (!selector || formatList[x].defaultBlock) {\n return true;\n }\n for (i = parents.length - 1; i >= 0; i--) {\n if (dom.is(parents[i], selector)) {\n return true;\n }\n }\n }\n }\n return false;\n };\n var MatchFormat = {\n matchNode: matchNode,\n matchName: matchName,\n match: match,\n matchAll: matchAll,\n canApply: canApply,\n matchesUnInheritedFormatSelector: matchesUnInheritedFormatSelector\n };\n\n var splitText = function (node, offset) {\n return node.splitText(offset);\n };\n var split$1 = function (rng) {\n var startContainer = rng.startContainer, startOffset = rng.startOffset, endContainer = rng.endContainer, endOffset = rng.endOffset;\n if (startContainer === endContainer && NodeType.isText(startContainer)) {\n if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n endContainer = splitText(startContainer, startOffset);\n startContainer = endContainer.previousSibling;\n if (endOffset > startOffset) {\n endOffset = endOffset - startOffset;\n startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n startOffset = 0;\n } else {\n endOffset = 0;\n }\n }\n } else {\n if (NodeType.isText(startContainer) && startOffset > 0 && startOffset < startContainer.nodeValue.length) {\n startContainer = splitText(startContainer, startOffset);\n startOffset = 0;\n }\n if (NodeType.isText(endContainer) && endOffset > 0 && endOffset < endContainer.nodeValue.length) {\n endContainer = splitText(endContainer, endOffset).previousSibling;\n endOffset = endContainer.nodeValue.length;\n }\n }\n return {\n startContainer: startContainer,\n startOffset: startOffset,\n endContainer: endContainer,\n endOffset: endOffset\n };\n };\n var SplitRange = { split: split$1 };\n\n var ZWSP$1 = Zwsp.ZWSP, CARET_ID$1 = '_mce_caret';\n var importNode = function (ownerDocument, node) {\n return ownerDocument.importNode(node, true);\n };\n var getEmptyCaretContainers = function (node) {\n var nodes = [];\n while (node) {\n if (node.nodeType === 3 && node.nodeValue !== ZWSP$1 || node.childNodes.length > 1) {\n return [];\n }\n if (node.nodeType === 1) {\n nodes.push(node);\n }\n node = node.firstChild;\n }\n return nodes;\n };\n var isCaretContainerEmpty = function (node) {\n return getEmptyCaretContainers(node).length > 0;\n };\n var findFirstTextNode = function (node) {\n var walker;\n if (node) {\n walker = new TreeWalker(node, node);\n for (node = walker.current(); node; node = walker.next()) {\n if (node.nodeType === 3) {\n return node;\n }\n }\n }\n return null;\n };\n var createCaretContainer = function (fill) {\n var caretContainer = Element.fromTag('span');\n setAll(caretContainer, {\n 'id': CARET_ID$1,\n 'data-mce-bogus': '1',\n 'data-mce-type': 'format-caret'\n });\n if (fill) {\n append(caretContainer, Element.fromText(ZWSP$1));\n }\n return caretContainer;\n };\n var trimZwspFromCaretContainer = function (caretContainerNode) {\n var textNode = findFirstTextNode(caretContainerNode);\n if (textNode && textNode.nodeValue.charAt(0) === ZWSP$1) {\n textNode.deleteData(0, 1);\n }\n return textNode;\n };\n var removeCaretContainerNode = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (isCaretContainerEmpty(node)) {\n DeleteElement.deleteElement(editor, false, Element.fromDom(node), moveCaret);\n } else {\n var rng = selection.getRng();\n var block = dom.getParent(node, dom.isBlock);\n var textNode = trimZwspFromCaretContainer(node);\n if (rng.startContainer === textNode && rng.startOffset > 0) {\n rng.setStart(textNode, rng.startOffset - 1);\n }\n if (rng.endContainer === textNode && rng.endOffset > 0) {\n rng.setEnd(textNode, rng.endOffset - 1);\n }\n dom.remove(node, true);\n if (block && dom.isEmpty(block)) {\n PaddingBr.fillWithPaddingBr(Element.fromDom(block));\n }\n selection.setRng(rng);\n }\n };\n var removeCaretContainer = function (editor, node, moveCaret) {\n if (moveCaret === void 0) {\n moveCaret = true;\n }\n var dom = editor.dom, selection = editor.selection;\n if (!node) {\n node = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (!node) {\n while (node = dom.get(CARET_ID$1)) {\n removeCaretContainerNode(editor, node, false);\n }\n }\n } else {\n removeCaretContainerNode(editor, node, moveCaret);\n }\n };\n var insertCaretContainerNode = function (editor, caretContainer, formatNode) {\n var dom = editor.dom, block = dom.getParent(formatNode, curry(FormatUtils.isTextBlock, editor));\n if (block && dom.isEmpty(block)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n PaddingBr.removeTrailingBr(Element.fromDom(formatNode));\n if (dom.isEmpty(formatNode)) {\n formatNode.parentNode.replaceChild(caretContainer, formatNode);\n } else {\n dom.insertAfter(caretContainer, formatNode);\n }\n }\n };\n var appendNode = function (parentNode, node) {\n parentNode.appendChild(node);\n return node;\n };\n var insertFormatNodesIntoCaretContainer = function (formatNodes, caretContainer) {\n var innerMostFormatNode = foldr(formatNodes, function (parentNode, formatNode) {\n return appendNode(parentNode, formatNode.cloneNode(false));\n }, caretContainer);\n return appendNode(innerMostFormatNode, innerMostFormatNode.ownerDocument.createTextNode(ZWSP$1));\n };\n var applyCaretFormat = function (editor, name, vars) {\n var rng, caretContainer, textNode, offset, bookmark, container, text;\n var selection = editor.selection;\n rng = selection.getRng(true);\n offset = rng.startOffset;\n container = rng.startContainer;\n text = container.nodeValue;\n caretContainer = getParentCaretContainer(editor.getBody(), selection.getStart());\n if (caretContainer) {\n textNode = findFirstTextNode(caretContainer);\n }\n var wordcharRegex = /[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;\n if (text && offset > 0 && offset < text.length && wordcharRegex.test(text.charAt(offset)) && wordcharRegex.test(text.charAt(offset - 1))) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n rng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name));\n rng = SplitRange.split(rng);\n editor.formatter.apply(name, vars, rng);\n selection.moveToBookmark(bookmark);\n } else {\n if (!caretContainer || textNode.nodeValue !== ZWSP$1) {\n caretContainer = importNode(editor.getDoc(), createCaretContainer(true).dom());\n textNode = caretContainer.firstChild;\n rng.insertNode(caretContainer);\n offset = 1;\n editor.formatter.apply(name, vars, caretContainer);\n } else {\n editor.formatter.apply(name, vars, caretContainer);\n }\n selection.setCursorLocation(textNode, offset);\n }\n };\n var removeCaretFormat = function (editor, name, vars, similar) {\n var dom = editor.dom, selection = editor.selection;\n var container, offset, bookmark;\n var hasContentAfter, node, formatNode;\n var parents = [], rng = selection.getRng();\n var caretContainer;\n container = rng.startContainer;\n offset = rng.startOffset;\n node = container;\n if (container.nodeType === 3) {\n if (offset !== container.nodeValue.length) {\n hasContentAfter = true;\n }\n node = node.parentNode;\n }\n while (node) {\n if (MatchFormat.matchNode(editor, node, name, vars, similar)) {\n formatNode = node;\n break;\n }\n if (node.nextSibling) {\n hasContentAfter = true;\n }\n parents.push(node);\n node = node.parentNode;\n }\n if (!formatNode) {\n return;\n }\n if (hasContentAfter) {\n bookmark = selection.getBookmark();\n rng.collapse(true);\n var expandedRng = ExpandRange.expandRng(editor, rng, editor.formatter.get(name), true);\n expandedRng = SplitRange.split(expandedRng);\n editor.formatter.remove(name, vars, expandedRng);\n selection.moveToBookmark(bookmark);\n } else {\n caretContainer = getParentCaretContainer(editor.getBody(), formatNode);\n var newCaretContainer = createCaretContainer(false).dom();\n var caretNode = insertFormatNodesIntoCaretContainer(parents, newCaretContainer);\n if (caretContainer) {\n insertCaretContainerNode(editor, newCaretContainer, caretContainer);\n } else {\n insertCaretContainerNode(editor, newCaretContainer, formatNode);\n }\n removeCaretContainerNode(editor, caretContainer, false);\n selection.setCursorLocation(caretNode, 1);\n if (dom.isEmpty(formatNode)) {\n dom.remove(formatNode);\n }\n }\n };\n var disableCaretContainer = function (editor, keyCode) {\n var selection = editor.selection, body = editor.getBody();\n removeCaretContainer(editor, null, false);\n if ((keyCode === 8 || keyCode === 46) && selection.isCollapsed() && selection.getStart().innerHTML === ZWSP$1) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n if (keyCode === 37 || keyCode === 39) {\n removeCaretContainer(editor, getParentCaretContainer(body, selection.getStart()));\n }\n };\n var setup$2 = function (editor) {\n editor.on('mouseup keydown', function (e) {\n disableCaretContainer(editor, e.keyCode);\n });\n };\n var replaceWithCaretFormat = function (targetNode, formatNodes) {\n var caretContainer = createCaretContainer(false);\n var innerMost = insertFormatNodesIntoCaretContainer(formatNodes, caretContainer.dom());\n before(Element.fromDom(targetNode), caretContainer);\n remove$1(Element.fromDom(targetNode));\n return CaretPosition$1(innerMost, 0);\n };\n var isFormatElement = function (editor, element) {\n var inlineElements = editor.schema.getTextInlineElements();\n return inlineElements.hasOwnProperty(name(element)) && !isCaretNode(element.dom()) && !NodeType.isBogus(element.dom());\n };\n var isEmptyCaretFormatElement = function (element) {\n return isCaretNode(element.dom()) && isCaretContainerEmpty(element.dom());\n };\n\n var getParentInlines = function (rootElm, startElm) {\n var parents = Parents.parentsAndSelf(startElm, rootElm);\n return findIndex(parents, isBlock).fold(constant(parents), function (index) {\n return parents.slice(0, index);\n });\n };\n var hasOnlyOneChild$1 = function (elm) {\n return children(elm).length === 1;\n };\n var deleteLastPosition = function (forward, editor, target, parentInlines) {\n var isFormatElement$1 = curry(isFormatElement, editor);\n var formatNodes = map(filter(parentInlines, isFormatElement$1), function (elm) {\n return elm.dom();\n });\n if (formatNodes.length === 0) {\n DeleteElement.deleteElement(editor, forward, target);\n } else {\n var pos = replaceWithCaretFormat(target.dom(), formatNodes);\n editor.selection.setRng(pos.toRange());\n }\n };\n var deleteCaret$1 = function (editor, forward) {\n var rootElm = Element.fromDom(editor.getBody());\n var startElm = Element.fromDom(editor.selection.getStart());\n var parentInlines = filter(getParentInlines(rootElm, startElm), hasOnlyOneChild$1);\n return last(parentInlines).map(function (target) {\n var fromPos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n if (DeleteUtils.willDeleteLastPositionInElement(forward, fromPos, target.dom()) && !isEmptyCaretFormatElement(target)) {\n deleteLastPosition(forward, editor, target, parentInlines);\n return true;\n } else {\n return false;\n }\n }).getOr(false);\n };\n var backspaceDelete$5 = function (editor, forward) {\n return editor.selection.isCollapsed() ? deleteCaret$1(editor, forward) : false;\n };\n var InlineFormatDelete = { backspaceDelete: backspaceDelete$5 };\n\n var getPos$1 = function (elm) {\n var x = 0, y = 0;\n var offsetParent = elm;\n while (offsetParent && offsetParent.nodeType) {\n x += offsetParent.offsetLeft || 0;\n y += offsetParent.offsetTop || 0;\n offsetParent = offsetParent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n };\n var fireScrollIntoViewEvent = function (editor, elm, alignToTop) {\n var scrollEvent = {\n elm: elm,\n alignToTop: alignToTop\n };\n editor.fire('scrollIntoView', scrollEvent);\n return scrollEvent.isDefaultPrevented();\n };\n var scrollElementIntoView = function (editor, elm, alignToTop) {\n var y, viewPort;\n var dom = editor.dom;\n var root = dom.getRoot();\n var viewPortY, viewPortH, offsetY = 0;\n if (fireScrollIntoViewEvent(editor, elm, alignToTop)) {\n return;\n }\n if (!NodeType.isElement(elm)) {\n return;\n }\n if (alignToTop === false) {\n offsetY = elm.offsetHeight;\n }\n if (root.nodeName !== 'BODY') {\n var scrollContainer = editor.selection.getScrollContainer();\n if (scrollContainer) {\n y = getPos$1(elm).y - getPos$1(scrollContainer).y + offsetY;\n viewPortH = scrollContainer.clientHeight;\n viewPortY = scrollContainer.scrollTop;\n if (y < viewPortY || y + 25 > viewPortY + viewPortH) {\n scrollContainer.scrollTop = y < viewPortY ? y : y - viewPortH + 25;\n }\n return;\n }\n }\n viewPort = dom.getViewPort(editor.getWin());\n y = dom.getPos(elm).y + offsetY;\n viewPortY = viewPort.y;\n viewPortH = viewPort.h;\n if (y < viewPort.y || y + 25 > viewPortY + viewPortH) {\n editor.getWin().scrollTo(0, y < viewPortY ? y : y - viewPortH + 25);\n }\n };\n var getViewPortRect = function (editor) {\n if (editor.inline) {\n return editor.getBody().getBoundingClientRect();\n } else {\n var win = editor.getWin();\n return {\n left: 0,\n right: win.innerWidth,\n top: 0,\n bottom: win.innerHeight,\n width: win.innerWidth,\n height: win.innerHeight\n };\n }\n };\n var scrollBy = function (editor, dx, dy) {\n if (editor.inline) {\n editor.getBody().scrollLeft += dx;\n editor.getBody().scrollTop += dy;\n } else {\n editor.getWin().scrollBy(dx, dy);\n }\n };\n var scrollRangeIntoView = function (editor, rng) {\n head(CaretPosition.fromRangeStart(rng).getClientRects()).each(function (rngRect) {\n var bodyRect = getViewPortRect(editor);\n var overflow = getOverflow(bodyRect, rngRect);\n var margin = 4;\n var dx = overflow.x > 0 ? overflow.x + margin : overflow.x - margin;\n var dy = overflow.y > 0 ? overflow.y + margin : overflow.y - margin;\n scrollBy(editor, overflow.x !== 0 ? dx : 0, overflow.y !== 0 ? dy : 0);\n });\n };\n var ScrollIntoView = {\n scrollElementIntoView: scrollElementIntoView,\n scrollRangeIntoView: scrollRangeIntoView\n };\n\n var isContentEditableTrue$2 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$6 = NodeType.isContentEditableFalse;\n var showCaret = function (direction, editor, node, before, scrollIntoView) {\n return editor._selectionOverrides.showCaret(direction, node, before, scrollIntoView);\n };\n var getNodeRange = function (node) {\n var rng = node.ownerDocument.createRange();\n rng.selectNode(node);\n return rng;\n };\n var selectNode = function (editor, node) {\n var e = editor.fire('BeforeObjectSelected', { target: node });\n if (e.isDefaultPrevented()) {\n return null;\n }\n return getNodeRange(node);\n };\n var renderCaretAtRange = function (editor, range, scrollIntoView) {\n var normalizedRange = normalizeRange(1, editor.getBody(), range);\n var caretPosition = CaretPosition$1.fromRangeStart(normalizedRange);\n var caretPositionNode = caretPosition.getNode();\n if (isContentEditableFalse$6(caretPositionNode)) {\n return showCaret(1, editor, caretPositionNode, !caretPosition.isAtEnd(), false);\n }\n var caretPositionBeforeNode = caretPosition.getNode(true);\n if (isContentEditableFalse$6(caretPositionBeforeNode)) {\n return showCaret(1, editor, caretPositionBeforeNode, false, false);\n }\n var ceRoot = editor.dom.getParent(caretPosition.getNode(), function (node) {\n return isContentEditableFalse$6(node) || isContentEditableTrue$2(node);\n });\n if (isContentEditableFalse$6(ceRoot)) {\n return showCaret(1, editor, ceRoot, false, scrollIntoView);\n }\n return null;\n };\n var renderRangeCaret = function (editor, range, scrollIntoView) {\n if (!range || !range.collapsed) {\n return range;\n }\n var caretRange = renderCaretAtRange(editor, range, scrollIntoView);\n if (caretRange) {\n return caretRange;\n }\n return range;\n };\n var moveToRange = function (editor, rng) {\n editor.selection.setRng(rng);\n ScrollIntoView.scrollRangeIntoView(editor, editor.selection.getRng());\n };\n\n var trimEmptyTextNode$1 = function (dom, node) {\n if (NodeType.isText(node) && node.data.length === 0) {\n dom.remove(node);\n }\n };\n var deleteContentAndShowCaret = function (editor, range, node, direction, forward, peekCaretPosition) {\n var caretRange = showCaret(direction, editor, peekCaretPosition.getNode(!forward), forward, true);\n if (range.collapsed) {\n var deleteRange = range.cloneRange();\n if (forward) {\n deleteRange.setEnd(caretRange.startContainer, caretRange.startOffset);\n } else {\n deleteRange.setStart(caretRange.endContainer, caretRange.endOffset);\n }\n deleteRange.deleteContents();\n } else {\n range.deleteContents();\n }\n editor.selection.setRng(caretRange);\n trimEmptyTextNode$1(editor.dom, node);\n return true;\n };\n var deleteCefBoundaryText = function (editor, forward) {\n var range = editor.selection.getRng();\n if (!NodeType.isText(range.commonAncestorContainer)) {\n return false;\n }\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var isBeforeContentEditableFalseFn = forward ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n var nextCaretPosition = InlineUtils.normalizePosition(forward, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n return false;\n } else if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, nextCaretPosition);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return deleteContentAndShowCaret(editor, range, caretPosition.getNode(), direction, forward, peekCaretPosition);\n }\n }\n return false;\n };\n var backspaceDelete$6 = function (editor, forward) {\n return deleteCefBoundaryText(editor, forward);\n };\n var CefBoundaryDelete = { backspaceDelete: backspaceDelete$6 };\n\n var nativeCommand = function (editor, command) {\n editor.getDoc().execCommand(command, false, null);\n };\n var deleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, false)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, false)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, false)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, false)) {\n return;\n } else {\n nativeCommand(editor, 'Delete');\n DeleteUtils.paddEmptyBody(editor);\n }\n };\n var forwardDeleteCommand = function (editor) {\n if (CefDelete.backspaceDelete(editor, true)) {\n return;\n } else if (CefBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (BlockBoundaryDelete.backspaceDelete(editor, true)) {\n return;\n } else if (TableDelete.backspaceDelete(editor)) {\n return;\n } else if (BlockRangeDelete.backspaceDelete(editor, true)) {\n return;\n } else if (InlineFormatDelete.backspaceDelete(editor, true)) {\n return;\n } else {\n nativeCommand(editor, 'ForwardDelete');\n }\n };\n var DeleteCommands = {\n deleteCommand: deleteCommand,\n forwardDeleteCommand: forwardDeleteCommand\n };\n\n var getSpecifiedFontProp = function (propName, rootElm, elm) {\n var getProperty = function (elm) {\n return getRaw(elm, propName);\n };\n var isRoot = function (elm) {\n return eq(Element.fromDom(rootElm), elm);\n };\n return closest(Element.fromDom(elm), function (elm) {\n return getProperty(elm).isSome();\n }, isRoot).bind(getProperty);\n };\n var round$1 = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round$1(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var normalizeFontFamily = function (fontFamily) {\n return fontFamily.replace(/[\\'\\\"\\\\]/g, '').replace(/,\\s+/g, ',');\n };\n var getComputedFontProp = function (propName, elm) {\n return Option.from(DOMUtils$1.DOM.getStyle(elm, propName, true));\n };\n var getFontProp = function (propName) {\n return function (rootElm, elm) {\n return Option.from(elm).map(Element.fromDom).filter(isElement).bind(function (element) {\n return getSpecifiedFontProp(propName, rootElm, element.dom()).or(getComputedFontProp(propName, element.dom()));\n }).getOr('');\n };\n };\n var FontInfo = {\n getFontSize: getFontProp('font-size'),\n getFontFamily: compose(normalizeFontFamily, getFontProp('font-family')),\n toPt: toPt\n };\n\n var findFirstCaretElement = function (editor) {\n return CaretFinder.firstPositionIn(editor.getBody()).map(function (caret) {\n var container = caret.container();\n return NodeType.isText(container) ? container.parentNode : container;\n });\n };\n var isRangeAtStartOfNode = function (rng, root) {\n return rng.startContainer === root && rng.startOffset === 0;\n };\n var getCaretElement = function (editor) {\n return Option.from(editor.selection.getRng()).bind(function (rng) {\n var root = editor.getBody();\n return isRangeAtStartOfNode(rng, root) ? Option.none() : Option.from(editor.selection.getStart(true));\n });\n };\n var fromFontSizeNumber = function (editor, value) {\n if (/^[0-9\\.]+$/.test(value)) {\n var fontSizeNumber = parseInt(value, 10);\n if (fontSizeNumber >= 1 && fontSizeNumber <= 7) {\n var fontSizes = Settings.getFontStyleValues(editor);\n var fontClasses = Settings.getFontSizeClasses(editor);\n if (fontClasses) {\n return fontClasses[fontSizeNumber - 1] || value;\n } else {\n return fontSizes[fontSizeNumber - 1] || value;\n }\n } else {\n return value;\n }\n } else {\n return value;\n }\n };\n var fontNameAction = function (editor, value) {\n editor.formatter.toggle('fontname', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontNameQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontFamily(editor.getBody(), caretElement);\n });\n };\n var fontSizeAction = function (editor, value) {\n editor.formatter.toggle('fontsize', { value: fromFontSizeNumber(editor, value) });\n editor.nodeChanged();\n };\n var fontSizeQuery = function (editor) {\n return getCaretElement(editor).fold(function () {\n return findFirstCaretElement(editor).map(function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n }).getOr('');\n }, function (caretElement) {\n return FontInfo.getFontSize(editor.getBody(), caretElement);\n });\n };\n\n var isEq$3 = function (rng1, rng2) {\n return rng1 && rng2 && (rng1.startContainer === rng2.startContainer && rng1.startOffset === rng2.startOffset) && (rng1.endContainer === rng2.endContainer && rng1.endOffset === rng2.endOffset);\n };\n var RangeCompare = { isEq: isEq$3 };\n\n var findParent = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var hasParent = function (node, rootNode, predicate) {\n return findParent(node, rootNode, predicate) !== null;\n };\n var hasParentWithName = function (node, rootNode, name) {\n return hasParent(node, rootNode, function (node) {\n return node.nodeName === name;\n });\n };\n var isTable$2 = function (node) {\n return node && node.nodeName === 'TABLE';\n };\n var isTableCell$3 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var isCeFalseCaretContainer = function (node, rootNode) {\n return isCaretContainer(node) && hasParent(node, rootNode, isCaretNode) === false;\n };\n var hasBrBeforeAfter = function (dom, node, left) {\n var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || dom.getRoot());\n while (node = walker[left ? 'prev' : 'next']()) {\n if (NodeType.isBr(node)) {\n return true;\n }\n }\n };\n var isPrevNode = function (node, name) {\n return node.previousSibling && node.previousSibling.nodeName === name;\n };\n var hasContentEditableFalseParent = function (body, node) {\n while (node && node !== body) {\n if (NodeType.isContentEditableFalse(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n var findTextNodeRelative = function (dom, isAfterNode, collapsed, left, startNode) {\n var walker, lastInlineElement, parentBlockContainer;\n var body = dom.getRoot();\n var node;\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n parentBlockContainer = dom.getParent(startNode.parentNode, dom.isBlock) || body;\n if (left && NodeType.isBr(startNode) && isAfterNode && dom.isEmpty(parentBlockContainer)) {\n return Option.some(CaretPosition(startNode.parentNode, dom.nodeIndex(startNode)));\n }\n walker = new TreeWalker(startNode, parentBlockContainer);\n while (node = walker[left ? 'prev' : 'next']()) {\n if (dom.getContentEditableParent(node) === 'false' || isCeFalseCaretContainer(node, body)) {\n return Option.none();\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n if (hasParentWithName(node, body, 'A') === false) {\n return Option.some(CaretPosition(node, left ? node.nodeValue.length : 0));\n }\n return Option.none();\n }\n if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n return Option.none();\n }\n lastInlineElement = node;\n }\n if (collapsed && lastInlineElement) {\n return Option.some(CaretPosition(lastInlineElement, 0));\n }\n return Option.none();\n };\n var normalizeEndPoint = function (dom, collapsed, start, rng) {\n var container, offset, walker;\n var body = dom.getRoot();\n var node, nonEmptyElementsMap;\n var directionLeft, isAfterNode, normalized = false;\n container = rng[(start ? 'start' : 'end') + 'Container'];\n offset = rng[(start ? 'start' : 'end') + 'Offset'];\n isAfterNode = NodeType.isElement(container) && offset === container.childNodes.length;\n nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n directionLeft = start;\n if (isCaretContainer(container)) {\n return Option.none();\n }\n if (NodeType.isElement(container) && offset > container.childNodes.length - 1) {\n directionLeft = false;\n }\n if (NodeType.isDocument(container)) {\n container = body;\n offset = 0;\n }\n if (container === body) {\n if (directionLeft) {\n node = container.childNodes[offset > 0 ? offset - 1 : 0];\n if (node) {\n if (isCaretContainer(node)) {\n return Option.none();\n }\n if (nonEmptyElementsMap[node.nodeName] || isTable$2(node)) {\n return Option.none();\n }\n }\n }\n if (container.hasChildNodes()) {\n offset = Math.min(!directionLeft && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1);\n container = container.childNodes[offset];\n offset = NodeType.isText(container) && isAfterNode ? container.data.length : 0;\n if (!collapsed && container === body.lastChild && isTable$2(container)) {\n return Option.none();\n }\n if (hasContentEditableFalseParent(body, container) || isCaretContainer(container)) {\n return Option.none();\n }\n if (container.hasChildNodes() && isTable$2(container) === false) {\n node = container;\n walker = new TreeWalker(container, body);\n do {\n if (NodeType.isContentEditableFalse(node) || isCaretContainer(node)) {\n normalized = false;\n break;\n }\n if (NodeType.isText(node) && node.nodeValue.length > 0) {\n offset = directionLeft ? 0 : node.nodeValue.length;\n container = node;\n normalized = true;\n break;\n }\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] && !isTableCell$3(node)) {\n offset = dom.nodeIndex(node);\n container = node.parentNode;\n if (!directionLeft) {\n offset++;\n }\n normalized = true;\n break;\n }\n } while (node = directionLeft ? walker.next() : walker.prev());\n }\n }\n }\n if (collapsed) {\n if (NodeType.isText(container) && offset === 0) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n if (NodeType.isElement(container)) {\n node = container.childNodes[offset];\n if (!node) {\n node = container.childNodes[offset - 1];\n }\n if (node && NodeType.isBr(node) && !isPrevNode(node, 'A') && !hasBrBeforeAfter(dom, node, false) && !hasBrBeforeAfter(dom, node, true)) {\n findTextNodeRelative(dom, isAfterNode, collapsed, true, node).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n }\n }\n if (directionLeft && !collapsed && NodeType.isText(container) && offset === container.nodeValue.length) {\n findTextNodeRelative(dom, isAfterNode, collapsed, false, container).each(function (pos) {\n container = pos.container();\n offset = pos.offset();\n normalized = true;\n });\n }\n return normalized ? Option.some(CaretPosition(container, offset)) : Option.none();\n };\n var normalize$2 = function (dom, rng) {\n var collapsed = rng.collapsed, normRng = rng.cloneRange();\n var startPos = CaretPosition.fromRangeStart(rng);\n normalizeEndPoint(dom, collapsed, true, normRng).each(function (pos) {\n if (!collapsed || !CaretPosition.isAbove(startPos, pos)) {\n normRng.setStart(pos.container(), pos.offset());\n }\n });\n if (!collapsed) {\n normalizeEndPoint(dom, collapsed, false, normRng).each(function (pos) {\n normRng.setEnd(pos.container(), pos.offset());\n });\n }\n if (collapsed) {\n normRng.collapse(true);\n }\n return RangeCompare.isEq(rng, normRng) ? Option.none() : Option.some(normRng);\n };\n var NormalizeRange = { normalize: normalize$2 };\n\n var hasRightSideContent = function (schema, container, parentBlock) {\n var walker = new TreeWalker(container, parentBlock);\n var node;\n var nonEmptyElementsMap = schema.getNonEmptyElements();\n while (node = walker.next()) {\n if (nonEmptyElementsMap[node.nodeName.toLowerCase()] || node.length > 0) {\n return true;\n }\n }\n };\n var scrollToBr = function (dom, selection, brElm) {\n var marker = dom.create('span', {}, ' ');\n brElm.parentNode.insertBefore(marker, brElm);\n selection.scrollIntoView(marker);\n dom.remove(marker);\n };\n var moveSelectionToBr = function (dom, selection, brElm, extraBr) {\n var rng = dom.createRng();\n if (!extraBr) {\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n } else {\n rng.setStartBefore(brElm);\n rng.setEndBefore(brElm);\n }\n selection.setRng(rng);\n };\n var insertBrAtCaret = function (editor, evt) {\n var selection = editor.selection;\n var dom = editor.dom;\n var rng = selection.getRng();\n var brElm;\n var extraBr;\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n var offset = rng.startOffset;\n var container = rng.startContainer;\n if (container.nodeType === 1 && container.hasChildNodes()) {\n var isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && container.nodeType === 3) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n var parentBlock = dom.getParent(container, dom.isBlock);\n var containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n var containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n var isControlKey = evt && evt.ctrlKey;\n if (containerBlockName === 'LI' && !isControlKey) {\n parentBlock = containerBlock;\n }\n if (container && container.nodeType === 3 && offset >= container.nodeValue.length) {\n if (!hasRightSideContent(editor.schema, container, parentBlock)) {\n brElm = dom.create('br');\n rng.insertNode(brElm);\n rng.setStartAfter(brElm);\n rng.setEndAfter(brElm);\n extraBr = true;\n }\n }\n brElm = dom.create('br');\n rangeInsertNode(dom, rng, brElm);\n scrollToBr(dom, selection, brElm);\n moveSelectionToBr(dom, selection, brElm, extraBr);\n editor.undoManager.add();\n };\n var insertBrBefore = function (editor, inline) {\n var br = Element.fromTag('br');\n before(Element.fromDom(inline), br);\n editor.undoManager.add();\n };\n var insertBrAfter = function (editor, inline) {\n if (!hasBrAfter(editor.getBody(), inline)) {\n after(Element.fromDom(inline), Element.fromTag('br'));\n }\n var br = Element.fromTag('br');\n after(Element.fromDom(inline), br);\n scrollToBr(editor.dom, editor.selection, br.dom());\n moveSelectionToBr(editor.dom, editor.selection, br.dom(), false);\n editor.undoManager.add();\n };\n var isBeforeBr$1 = function (pos) {\n return NodeType.isBr(pos.getNode());\n };\n var hasBrAfter = function (rootNode, startNode) {\n if (isBeforeBr$1(CaretPosition$1.after(startNode))) {\n return true;\n } else {\n return CaretFinder.nextPosition(rootNode, CaretPosition$1.after(startNode)).map(function (pos) {\n return NodeType.isBr(pos.getNode());\n }).getOr(false);\n }\n };\n var isAnchorLink = function (elm) {\n return elm && elm.nodeName === 'A' && 'href' in elm;\n };\n var isInsideAnchor = function (location) {\n return location.fold(constant(false), isAnchorLink, isAnchorLink, constant(false));\n };\n var readInlineAnchorLocation = function (editor) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var position = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), position).filter(isInsideAnchor);\n };\n var insertBrOutsideAnchor = function (editor, location) {\n location.fold(noop, curry(insertBrBefore, editor), curry(insertBrAfter, editor), noop);\n };\n var insert = function (editor, evt) {\n var anchorLocation = readInlineAnchorLocation(editor);\n if (anchorLocation.isSome()) {\n anchorLocation.each(curry(insertBrOutsideAnchor, editor));\n } else {\n insertBrAtCaret(editor, evt);\n }\n };\n var InsertBr = { insert: insert };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$4 = adt.before;\n var on = adt.on;\n var after$3 = adt.after;\n var Situ = {\n before: before$4,\n on: on,\n after: after$3,\n cata: cata,\n getStart: getStart\n };\n\n var adt$1 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$1.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$1.domRange;\n var relative = adt$1.relative;\n var exact = adt$1.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range\n };\n\n var browser$3 = PlatformDetection$1.detect().browser;\n var clamp = function (offset, element) {\n var max = isText(element) ? get$4(element).length : children(element).length + 1;\n if (offset > max) {\n return max;\n } else if (offset < 0) {\n return 0;\n }\n return offset;\n };\n var normalizeRng = function (rng) {\n return Selection.range(rng.start(), clamp(rng.soffset(), rng.start()), rng.finish(), clamp(rng.foffset(), rng.finish()));\n };\n var isOrContains = function (root, elm) {\n return !NodeType.isRestrictedNode(elm.dom()) && (contains$3(root, elm) || eq(root, elm));\n };\n var isRngInRoot = function (root) {\n return function (rng) {\n return isOrContains(root, rng.start()) && isOrContains(root, rng.finish());\n };\n };\n var shouldStore = function (editor) {\n return editor.inline === true || browser$3.isIE();\n };\n var nativeRangeToSelectionRange = function (r) {\n return Selection.range(Element.fromDom(r.startContainer), r.startOffset, Element.fromDom(r.endContainer), r.endOffset);\n };\n var readRange = function (win) {\n var selection = win.getSelection();\n var rng = !selection || selection.rangeCount === 0 ? Option.none() : Option.from(selection.getRangeAt(0));\n return rng.map(nativeRangeToSelectionRange);\n };\n var getBookmark$2 = function (root) {\n var win = defaultView(root);\n return readRange(win.dom()).filter(isRngInRoot(root));\n };\n var validate = function (root, bookmark) {\n return Option.from(bookmark).filter(isRngInRoot(root)).map(normalizeRng);\n };\n var bookmarkToNativeRng = function (bookmark) {\n var rng = domGlobals.document.createRange();\n try {\n rng.setStart(bookmark.start().dom(), bookmark.soffset());\n rng.setEnd(bookmark.finish().dom(), bookmark.foffset());\n return Option.some(rng);\n } catch (_) {\n return Option.none();\n }\n };\n var store = function (editor) {\n var newBookmark = shouldStore(editor) ? getBookmark$2(Element.fromDom(editor.getBody())) : Option.none();\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var storeNative = function (editor, rng) {\n var root = Element.fromDom(editor.getBody());\n var range = shouldStore(editor) ? Option.from(rng) : Option.none();\n var newBookmark = range.map(nativeRangeToSelectionRange).filter(isRngInRoot(root));\n editor.bookmark = newBookmark.isSome() ? newBookmark : editor.bookmark;\n };\n var getRng = function (editor) {\n var bookmark = editor.bookmark ? editor.bookmark : Option.none();\n return bookmark.bind(curry(validate, Element.fromDom(editor.getBody()))).bind(bookmarkToNativeRng);\n };\n var restore = function (editor) {\n getRng(editor).each(function (rng) {\n editor.selection.setRng(rng);\n });\n };\n var SelectionBookmark = {\n store: store,\n storeNative: storeNative,\n readRange: readRange,\n restore: restore,\n getRng: getRng,\n getBookmark: getBookmark$2,\n validate: validate\n };\n\n var indentElement = function (dom, command, useMargin, value, unit, element) {\n if (dom.getContentEditable(element) === 'false') {\n return;\n }\n var indentStyleName = useMargin ? 'margin' : 'padding';\n indentStyleName = element.nodeName === 'TABLE' ? 'margin' : indentStyleName;\n indentStyleName += dom.getStyle(element, 'direction', true) === 'rtl' ? 'Right' : 'Left';\n if (command === 'outdent') {\n var styleValue = Math.max(0, parseInt(element.style[indentStyleName] || 0, 10) - value);\n dom.setStyle(element, indentStyleName, styleValue ? styleValue + unit : '');\n } else {\n var styleValue = parseInt(element.style[indentStyleName] || 0, 10) + value + unit;\n dom.setStyle(element, indentStyleName, styleValue);\n }\n };\n var isListComponent = function (el) {\n return isList(el) || isListItem(el);\n };\n var parentIsListComponent = function (el) {\n return parent(el).map(isListComponent).getOr(false);\n };\n var getBlocksToIndent = function (editor) {\n return filter(map(editor.selection.getSelectedBlocks(), Element.fromDom), function (el) {\n return !isListComponent(el) && !parentIsListComponent(el);\n });\n };\n var handle = function (editor, command) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection, formatter = editor.formatter;\n var indentUnit = /[a-z%]+$/i.exec(settings.indentation)[0];\n var indentValue = parseInt(settings.indentation, 10);\n var useMargin = editor.getParam('indent_use_margin', false);\n if (!editor.queryCommandState('InsertUnorderedList') && !editor.queryCommandState('InsertOrderedList')) {\n if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {\n formatter.apply('div');\n }\n }\n each(getBlocksToIndent(editor), function (block) {\n indentElement(dom, command, useMargin, indentValue, indentUnit, block.dom());\n });\n };\n\n var each$a = Tools.each, extend$2 = Tools.extend;\n var map$3 = Tools.map, inArray$2 = Tools.inArray;\n function EditorCommands (editor) {\n var dom, selection, formatter;\n var commands = {\n state: {},\n exec: {},\n value: {}\n };\n var settings = editor.settings, bookmark;\n editor.on('PreInit', function () {\n dom = editor.dom;\n selection = editor.selection;\n settings = editor.settings;\n formatter = editor.formatter;\n });\n var execCommand = function (command, ui, value, args) {\n var func, customCommand, state = false;\n if (editor.removed) {\n return;\n }\n if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(command) && (!args || !args.skip_focus)) {\n editor.focus();\n } else {\n SelectionBookmark.restore(editor);\n }\n args = editor.fire('BeforeExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n if (args.isDefaultPrevented()) {\n return false;\n }\n customCommand = command.toLowerCase();\n if (func = commands.exec[customCommand]) {\n func(customCommand, ui, value);\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n each$a(editor.plugins, function (p) {\n if (p.execCommand && p.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n state = true;\n return false;\n }\n });\n if (state) {\n return state;\n }\n if (editor.theme && editor.theme.execCommand && editor.theme.execCommand(command, ui, value)) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n try {\n state = editor.getDoc().execCommand(command, ui, value);\n } catch (ex) {\n }\n if (state) {\n editor.fire('ExecCommand', {\n command: command,\n ui: ui,\n value: value\n });\n return true;\n }\n return false;\n };\n var queryCommandState = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.state[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandState(command);\n } catch (ex) {\n }\n return false;\n };\n var queryCommandValue = function (command) {\n var func;\n if (editor.quirks.isHidden() || editor.removed) {\n return;\n }\n command = command.toLowerCase();\n if (func = commands.value[command]) {\n return func(command);\n }\n try {\n return editor.getDoc().queryCommandValue(command);\n } catch (ex) {\n }\n };\n var addCommands = function (commandList, type) {\n type = type || 'exec';\n each$a(commandList, function (callback, command) {\n each$a(command.toLowerCase().split(','), function (command) {\n commands[type][command] = callback;\n });\n });\n };\n var addCommand = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.exec[command] = function (command, ui, value, args) {\n return callback.call(scope || editor, ui, value, args);\n };\n };\n var queryCommandSupported = function (command) {\n command = command.toLowerCase();\n if (commands.exec[command]) {\n return true;\n }\n try {\n return editor.getDoc().queryCommandSupported(command);\n } catch (ex) {\n }\n return false;\n };\n var addQueryStateHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.state[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var addQueryValueHandler = function (command, callback, scope) {\n command = command.toLowerCase();\n commands.value[command] = function () {\n return callback.call(scope || editor);\n };\n };\n var hasCustomCommand = function (command) {\n command = command.toLowerCase();\n return !!commands.exec[command];\n };\n extend$2(this, {\n execCommand: execCommand,\n queryCommandState: queryCommandState,\n queryCommandValue: queryCommandValue,\n queryCommandSupported: queryCommandSupported,\n addCommands: addCommands,\n addCommand: addCommand,\n addQueryStateHandler: addQueryStateHandler,\n addQueryValueHandler: addQueryValueHandler,\n hasCustomCommand: hasCustomCommand\n });\n var execNativeCommand = function (command, ui, value) {\n if (ui === undefined) {\n ui = false;\n }\n if (value === undefined) {\n value = null;\n }\n return editor.getDoc().execCommand(command, ui, value);\n };\n var isFormatMatch = function (name) {\n return formatter.match(name);\n };\n var toggleFormat = function (name, value) {\n formatter.toggle(name, value ? { value: value } : undefined);\n editor.nodeChanged();\n };\n var storeSelection = function (type) {\n bookmark = selection.getBookmark(type);\n };\n var restoreSelection = function () {\n selection.moveToBookmark(bookmark);\n };\n addCommands({\n 'mceResetDesignMode,mceBeginUndoLevel': function () {\n },\n 'mceEndUndoLevel,mceAddUndoLevel': function () {\n editor.undoManager.add();\n },\n 'Cut,Copy,Paste': function (command) {\n var doc = editor.getDoc();\n var failed;\n try {\n execNativeCommand(command);\n } catch (ex) {\n failed = true;\n }\n if (command === 'paste' && !doc.queryCommandEnabled(command)) {\n failed = true;\n }\n if (failed || !doc.queryCommandSupported(command)) {\n var msg = editor.translate('Your browser doesn\\'t support direct access to the clipboard. ' + 'Please use the Ctrl+X/C/V keyboard shortcuts instead.');\n if (Env.mac) {\n msg = msg.replace(/Ctrl\\+/g, '\\u2318+');\n }\n editor.notificationManager.open({\n text: msg,\n type: 'error'\n });\n }\n },\n 'unlink': function () {\n if (selection.isCollapsed()) {\n var elm = editor.dom.getParent(editor.selection.getStart(), 'a');\n if (elm) {\n editor.dom.remove(elm, true);\n }\n return;\n }\n formatter.remove('link');\n },\n 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone': function (command) {\n var align = command.substring(7);\n if (align === 'full') {\n align = 'justify';\n }\n each$a('left,center,right,justify'.split(','), function (name) {\n if (align !== name) {\n formatter.remove('align' + name);\n }\n });\n if (align !== 'none') {\n toggleFormat('align' + align);\n }\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var listElm, listParent;\n execNativeCommand(command);\n listElm = dom.getParent(selection.getNode(), 'ol,ul');\n if (listElm) {\n listParent = listElm.parentNode;\n if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\n storeSelection();\n dom.split(listParent, listElm);\n restoreSelection();\n }\n }\n },\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n toggleFormat(command);\n },\n 'ForeColor,HiliteColor': function (command, ui, value) {\n toggleFormat(command, value);\n },\n 'FontName': function (command, ui, value) {\n fontNameAction(editor, value);\n },\n 'FontSize': function (command, ui, value) {\n fontSizeAction(editor, value);\n },\n 'RemoveFormat': function (command) {\n formatter.remove(command);\n },\n 'mceBlockQuote': function () {\n toggleFormat('blockquote');\n },\n 'FormatBlock': function (command, ui, value) {\n return toggleFormat(value || 'p');\n },\n 'mceCleanup': function () {\n var bookmark = selection.getBookmark();\n editor.setContent(editor.getContent());\n selection.moveToBookmark(bookmark);\n },\n 'mceRemoveNode': function (command, ui, value) {\n var node = value || selection.getNode();\n if (node !== editor.getBody()) {\n storeSelection();\n editor.dom.remove(node, true);\n restoreSelection();\n }\n },\n 'mceSelectNodeDepth': function (command, ui, value) {\n var counter = 0;\n dom.getParent(selection.getNode(), function (node) {\n if (node.nodeType === 1 && counter++ === value) {\n selection.select(node);\n return false;\n }\n }, editor.getBody());\n },\n 'mceSelectNode': function (command, ui, value) {\n selection.select(value);\n },\n 'mceInsertContent': function (command, ui, value) {\n InsertContent.insertAtCaret(editor, value);\n },\n 'mceInsertRawHTML': function (command, ui, value) {\n selection.setContent('tiny_mce_marker');\n var content = editor.getContent();\n editor.setContent(content.replace(/tiny_mce_marker/g, function () {\n return value;\n }));\n },\n 'mceToggleFormat': function (command, ui, value) {\n toggleFormat(value);\n },\n 'mceSetContent': function (command, ui, value) {\n editor.setContent(value);\n },\n 'Indent,Outdent': function (command) {\n handle(editor, command);\n },\n 'mceRepaint': function () {\n },\n 'InsertHorizontalRule': function () {\n editor.execCommand('mceInsertContent', false, '
');\n },\n 'mceToggleVisualAid': function () {\n editor.hasVisual = !editor.hasVisual;\n editor.addVisual();\n },\n 'mceReplaceContent': function (command, ui, value) {\n editor.execCommand('mceInsertContent', false, value.replace(/\\{\\$selection\\}/g, selection.getContent({ format: 'text' })));\n },\n 'mceInsertLink': function (command, ui, value) {\n var anchor;\n if (typeof value === 'string') {\n value = { href: value };\n }\n anchor = dom.getParent(selection.getNode(), 'a');\n value.href = value.href.replace(' ', '%20');\n if (!anchor || !value.href) {\n formatter.remove('link');\n }\n if (value.href) {\n formatter.apply('link', value, anchor);\n }\n },\n 'selectAll': function () {\n var editingHost = dom.getParent(selection.getStart(), NodeType.isContentEditableTrue);\n if (editingHost) {\n var rng = dom.createRng();\n rng.selectNodeContents(editingHost);\n selection.setRng(rng);\n }\n },\n 'delete': function () {\n DeleteCommands.deleteCommand(editor);\n },\n 'forwardDelete': function () {\n DeleteCommands.forwardDeleteCommand(editor);\n },\n 'mceNewDocument': function () {\n editor.setContent('');\n },\n 'InsertLineBreak': function (command, ui, value) {\n InsertBr.insert(editor, value);\n return true;\n }\n });\n var alignStates = function (name) {\n return function () {\n var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();\n var matches = map$3(nodes, function (node) {\n return !!formatter.matchNode(node, name);\n });\n return inArray$2(matches, true) !== -1;\n };\n };\n addCommands({\n 'JustifyLeft': alignStates('alignleft'),\n 'JustifyCenter': alignStates('aligncenter'),\n 'JustifyRight': alignStates('alignright'),\n 'JustifyFull': alignStates('alignjustify'),\n 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript': function (command) {\n return isFormatMatch(command);\n },\n 'mceBlockQuote': function () {\n return isFormatMatch('blockquote');\n },\n 'Outdent': function () {\n var node;\n if (settings.inline_styles) {\n if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft, 10) > 0) {\n return true;\n }\n }\n return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || !settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE');\n },\n 'InsertUnorderedList,InsertOrderedList': function (command) {\n var list = dom.getParent(selection.getNode(), 'ul,ol');\n return list && (command === 'insertunorderedlist' && list.tagName === 'UL' || command === 'insertorderedlist' && list.tagName === 'OL');\n }\n }, 'state');\n addCommands({\n Undo: function () {\n editor.undoManager.undo();\n },\n Redo: function () {\n editor.undoManager.redo();\n }\n });\n addQueryValueHandler('FontName', function () {\n return fontNameQuery(editor);\n }, this);\n addQueryValueHandler('FontSize', function () {\n return fontSizeQuery(editor);\n }, this);\n }\n\n var nativeEvents = Tools.makeMap('focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange ' + 'mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover ' + 'draggesture dragdrop drop drag submit ' + 'compositionstart compositionend compositionupdate touchstart touchmove touchend', ' ');\n var Dispatcher = function (settings) {\n var self = this;\n var scope, bindings = {}, toggleEvent;\n var returnFalse = function () {\n return false;\n };\n var returnTrue = function () {\n return true;\n };\n settings = settings || {};\n scope = settings.scope || self;\n toggleEvent = settings.toggleEvent || returnFalse;\n var fire = function (name, args) {\n var handlers, i, l, callback;\n name = name.toLowerCase();\n args = args || {};\n args.type = name;\n if (!args.target) {\n args.target = scope;\n }\n if (!args.preventDefault) {\n args.preventDefault = function () {\n args.isDefaultPrevented = returnTrue;\n };\n args.stopPropagation = function () {\n args.isPropagationStopped = returnTrue;\n };\n args.stopImmediatePropagation = function () {\n args.isImmediatePropagationStopped = returnTrue;\n };\n args.isDefaultPrevented = returnFalse;\n args.isPropagationStopped = returnFalse;\n args.isImmediatePropagationStopped = returnFalse;\n }\n if (settings.beforeFire) {\n settings.beforeFire(args);\n }\n handlers = bindings[name];\n if (handlers) {\n for (i = 0, l = handlers.length; i < l; i++) {\n callback = handlers[i];\n if (callback.once) {\n off(name, callback.func);\n }\n if (args.isImmediatePropagationStopped()) {\n args.stopPropagation();\n return args;\n }\n if (callback.func.call(scope, args) === false) {\n args.preventDefault();\n return args;\n }\n }\n }\n return args;\n };\n var on = function (name, callback, prepend, extra) {\n var handlers, names, i;\n if (callback === false) {\n callback = returnFalse;\n }\n if (callback) {\n callback = { func: callback };\n if (extra) {\n Tools.extend(callback, extra);\n }\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!handlers) {\n handlers = bindings[name] = [];\n toggleEvent(name, true);\n }\n if (prepend) {\n handlers.unshift(callback);\n } else {\n handlers.push(callback);\n }\n }\n }\n return self;\n };\n var off = function (name, callback) {\n var i, handlers, bindingName, names, hi;\n if (name) {\n names = name.toLowerCase().split(' ');\n i = names.length;\n while (i--) {\n name = names[i];\n handlers = bindings[name];\n if (!name) {\n for (bindingName in bindings) {\n toggleEvent(bindingName, false);\n delete bindings[bindingName];\n }\n return self;\n }\n if (handlers) {\n if (!callback) {\n handlers.length = 0;\n } else {\n hi = handlers.length;\n while (hi--) {\n if (handlers[hi].func === callback) {\n handlers = handlers.slice(0, hi).concat(handlers.slice(hi + 1));\n bindings[name] = handlers;\n }\n }\n }\n if (!handlers.length) {\n toggleEvent(name, false);\n delete bindings[name];\n }\n }\n }\n } else {\n for (name in bindings) {\n toggleEvent(name, false);\n }\n bindings = {};\n }\n return self;\n };\n var once = function (name, callback, prepend) {\n return on(name, callback, prepend, { once: true });\n };\n var has = function (name) {\n name = name.toLowerCase();\n return !(!bindings[name] || bindings[name].length === 0);\n };\n self.fire = fire;\n self.on = on;\n self.off = off;\n self.once = once;\n self.has = has;\n };\n Dispatcher.isNative = function (name) {\n return !!nativeEvents[name.toLowerCase()];\n };\n\n var getEventDispatcher = function (obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new Dispatcher({\n scope: obj,\n toggleEvent: function (name, state) {\n if (Dispatcher.isNative(name) && obj.toggleNativeEvent) {\n obj.toggleNativeEvent(name, state);\n }\n }\n });\n }\n return obj._eventDispatcher;\n };\n var Observable = {\n fire: function (name, args, bubble) {\n var self = this;\n if (self.removed && name !== 'remove' && name !== 'detach') {\n return args;\n }\n args = getEventDispatcher(self).fire(name, args, bubble);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n on: function (name, callback, prepend) {\n return getEventDispatcher(this).on(name, callback, prepend);\n },\n off: function (name, callback) {\n return getEventDispatcher(this).off(name, callback);\n },\n once: function (name, callback) {\n return getEventDispatcher(this).once(name, callback);\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n }\n };\n\n var firePreProcess = function (editor, args) {\n return editor.fire('PreProcess', args);\n };\n var firePostProcess = function (editor, args) {\n return editor.fire('PostProcess', args);\n };\n var fireRemove = function (editor) {\n return editor.fire('remove');\n };\n var fireDetach = function (editor) {\n return editor.fire('detach');\n };\n var fireSwitchMode = function (editor, mode) {\n return editor.fire('SwitchMode', { mode: mode });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n var Events = {\n firePreProcess: firePreProcess,\n firePostProcess: firePostProcess,\n fireRemove: fireRemove,\n fireDetach: fireDetach,\n fireSwitchMode: fireSwitchMode,\n fireObjectResizeStart: fireObjectResizeStart,\n fireObjectResized: fireObjectResized\n };\n\n var setEditorCommandState = function (editor, cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var toggleClass = function (elm, cls, state) {\n if (has$2(elm, cls) && state === false) {\n remove$4(elm, cls);\n } else if (state) {\n add$2(elm, cls);\n }\n };\n var toggleReadOnly = function (editor, state) {\n toggleClass(Element.fromDom(editor.getBody()), 'mce-content-readonly', state);\n if (state) {\n editor.selection.controlSelection.hideResizeRect();\n editor.readonly = true;\n editor.getBody().contentEditable = 'false';\n } else {\n editor.readonly = false;\n editor.getBody().contentEditable = 'true';\n setEditorCommandState(editor, 'StyleWithCSS', false);\n setEditorCommandState(editor, 'enableInlineTableEditing', false);\n setEditorCommandState(editor, 'enableObjectResizing', false);\n editor.focus();\n editor.nodeChanged();\n }\n };\n var setMode = function (editor, mode) {\n if (mode === getMode(editor)) {\n return;\n }\n if (editor.initialized) {\n toggleReadOnly(editor, mode === 'readonly');\n } else {\n editor.on('init', function () {\n toggleReadOnly(editor, mode === 'readonly');\n });\n }\n Events.fireSwitchMode(editor, mode);\n };\n var getMode = function (editor) {\n return editor.readonly ? 'readonly' : 'design';\n };\n var isReadOnly = function (editor) {\n return editor.readonly === true;\n };\n\n var DOM$1 = DOMUtils$1.DOM;\n var customEventRootDelegates;\n var getEventTarget = function (editor, eventName) {\n if (eventName === 'selectionchange') {\n return editor.getDoc();\n }\n if (!editor.inline && /^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(eventName)) {\n return editor.getDoc().documentElement;\n }\n if (editor.settings.event_root) {\n if (!editor.eventRoot) {\n editor.eventRoot = DOM$1.select(editor.settings.event_root)[0];\n }\n return editor.eventRoot;\n }\n return editor.getBody();\n };\n var isListening = function (editor) {\n return !editor.hidden && !editor.readonly;\n };\n var fireEvent = function (editor, eventName, e) {\n if (isListening(editor)) {\n editor.fire(eventName, e);\n } else if (isReadOnly(editor)) {\n e.preventDefault();\n }\n };\n var bindEventDelegate = function (editor, eventName) {\n var eventRootElm, delegate;\n if (!editor.delegates) {\n editor.delegates = {};\n }\n if (editor.delegates[eventName] || editor.removed) {\n return;\n }\n eventRootElm = getEventTarget(editor, eventName);\n if (editor.settings.event_root) {\n if (!customEventRootDelegates) {\n customEventRootDelegates = {};\n editor.editorManager.on('removeEditor', function () {\n var name;\n if (!editor.editorManager.activeEditor) {\n if (customEventRootDelegates) {\n for (name in customEventRootDelegates) {\n editor.dom.unbind(getEventTarget(editor, name));\n }\n customEventRootDelegates = null;\n }\n }\n });\n }\n if (customEventRootDelegates[eventName]) {\n return;\n }\n delegate = function (e) {\n var target = e.target;\n var editors = editor.editorManager.get();\n var i = editors.length;\n while (i--) {\n var body = editors[i].getBody();\n if (body === target || DOM$1.isChildOf(target, body)) {\n fireEvent(editors[i], eventName, e);\n }\n }\n };\n customEventRootDelegates[eventName] = delegate;\n DOM$1.bind(eventRootElm, eventName, delegate);\n } else {\n delegate = function (e) {\n fireEvent(editor, eventName, e);\n };\n DOM$1.bind(eventRootElm, eventName, delegate);\n editor.delegates[eventName] = delegate;\n }\n };\n var EditorObservable = {\n bindPendingEventDelegates: function () {\n var self = this;\n Tools.each(self._pendingNativeEvents, function (name) {\n bindEventDelegate(self, name);\n });\n },\n toggleNativeEvent: function (name, state) {\n var self = this;\n if (name === 'focus' || name === 'blur') {\n return;\n }\n if (state) {\n if (self.initialized) {\n bindEventDelegate(self, name);\n } else {\n if (!self._pendingNativeEvents) {\n self._pendingNativeEvents = [name];\n } else {\n self._pendingNativeEvents.push(name);\n }\n }\n } else if (self.initialized) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n delete self.delegates[name];\n }\n },\n unbindAllNativeEvents: function () {\n var self = this;\n var body = self.getBody();\n var dom = self.dom;\n var name;\n if (self.delegates) {\n for (name in self.delegates) {\n self.dom.unbind(getEventTarget(self, name), name, self.delegates[name]);\n }\n delete self.delegates;\n }\n if (!self.inline && body && dom) {\n body.onload = null;\n dom.unbind(self.getWin());\n dom.unbind(self.getDoc());\n }\n if (dom) {\n dom.unbind(body);\n dom.unbind(self.getContainer());\n }\n }\n };\n EditorObservable = Tools.extend({}, Observable, EditorObservable);\n var EditorObservable$1 = EditorObservable;\n\n var sectionResult = Immutable('sections', 'settings');\n var detection = PlatformDetection$1.detect();\n var isTouch = detection.deviceType.isTouch();\n var mobilePlugins = [\n 'lists',\n 'autolink',\n 'autosave'\n ];\n var defaultMobileSettings = { theme: 'mobile' };\n var normalizePlugins = function (plugins) {\n var pluginNames = isArray(plugins) ? plugins.join(' ') : plugins;\n var trimmedPlugins = map(isString(pluginNames) ? pluginNames.split(' ') : [], trim$2);\n return filter(trimmedPlugins, function (item) {\n return item.length > 0;\n });\n };\n var filterMobilePlugins = function (plugins) {\n return filter(plugins, curry(contains, mobilePlugins));\n };\n var extractSections = function (keys, settings) {\n var result = bifilter(settings, function (value, key) {\n return contains(keys, key);\n });\n return sectionResult(result.t, result.f);\n };\n var getSection = function (sectionResult, name, defaults) {\n var sections = sectionResult.sections();\n var sectionSettings = sections.hasOwnProperty(name) ? sections[name] : {};\n return Tools.extend({}, defaults, sectionSettings);\n };\n var hasSection = function (sectionResult, name) {\n return sectionResult.sections().hasOwnProperty(name);\n };\n var getDefaultSettings = function (id, documentBaseUrl, editor) {\n return {\n id: id,\n theme: 'modern',\n delta_width: 0,\n delta_height: 0,\n popup_css: '',\n plugins: '',\n document_base_url: documentBaseUrl,\n add_form_submit_trigger: true,\n submit_patch: true,\n add_unload_trigger: true,\n convert_urls: true,\n relative_urls: true,\n remove_script_host: true,\n object_resizing: true,\n doctype: '',\n visual: true,\n font_size_style_values: 'xx-small,x-small,small,medium,large,x-large,xx-large',\n font_size_legacy_values: 'xx-small,small,medium,large,x-large,xx-large,300%',\n forced_root_block: 'p',\n hidden_input: true,\n render_ui: true,\n indentation: '40px',\n inline_styles: true,\n convert_fonts_to_spans: true,\n indent: 'simple',\n indent_before: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n indent_after: 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,' + 'tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist',\n entity_encoding: 'named',\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n ie7_compat: true\n };\n };\n var getExternalPlugins = function (overrideSettings, settings) {\n var userDefinedExternalPlugins = settings.external_plugins ? settings.external_plugins : {};\n if (overrideSettings && overrideSettings.external_plugins) {\n return Tools.extend({}, overrideSettings.external_plugins, userDefinedExternalPlugins);\n } else {\n return userDefinedExternalPlugins;\n }\n };\n var combinePlugins = function (forcedPlugins, plugins) {\n return [].concat(normalizePlugins(forcedPlugins)).concat(normalizePlugins(plugins));\n };\n var processPlugins = function (isTouchDevice, sectionResult, defaultOverrideSettings, settings) {\n var forcedPlugins = normalizePlugins(defaultOverrideSettings.forced_plugins);\n var plugins = normalizePlugins(settings.plugins);\n var platformPlugins = isTouchDevice && hasSection(sectionResult, 'mobile') ? filterMobilePlugins(plugins) : plugins;\n var combinedPlugins = combinePlugins(forcedPlugins, platformPlugins);\n return Tools.extend(settings, { plugins: combinedPlugins.join(' ') });\n };\n var isOnMobile = function (isTouchDevice, sectionResult) {\n var isInline = sectionResult.settings().inline;\n return isTouchDevice && hasSection(sectionResult, 'mobile') && !isInline;\n };\n var combineSettings = function (isTouchDevice, defaultSettings, defaultOverrideSettings, settings) {\n var sectionResult = extractSections(['mobile'], settings);\n var extendedSettings = Tools.extend(defaultSettings, defaultOverrideSettings, sectionResult.settings(), isOnMobile(isTouchDevice, sectionResult) ? getSection(sectionResult, 'mobile', defaultMobileSettings) : {}, {\n validate: true,\n content_editable: sectionResult.settings().inline,\n external_plugins: getExternalPlugins(defaultOverrideSettings, sectionResult.settings())\n });\n return processPlugins(isTouchDevice, sectionResult, defaultOverrideSettings, extendedSettings);\n };\n var getEditorSettings = function (editor, id, documentBaseUrl, defaultOverrideSettings, settings) {\n var defaultSettings = getDefaultSettings(id, documentBaseUrl, editor);\n return combineSettings(isTouch, defaultSettings, defaultOverrideSettings, settings);\n };\n var getFiltered = function (predicate, editor, name) {\n return Option.from(editor.settings[name]).filter(predicate);\n };\n var getParamObject = function (value) {\n var output = {};\n if (typeof value === 'string') {\n each(value.indexOf('=') > 0 ? value.split(/[;,](?![^=;,]*(?:[;,]|$))/) : value.split(','), function (val) {\n var arr = val.split('=');\n if (arr.length > 1) {\n output[Tools.trim(arr[0])] = Tools.trim(arr[1]);\n } else {\n output[Tools.trim(arr[0])] = Tools.trim(arr);\n }\n });\n } else {\n output = value;\n }\n return output;\n };\n var isArrayOf = function (p) {\n return function (a) {\n return isArray(a) && forall(a, p);\n };\n };\n var getParam = function (editor, name, defaultVal, type) {\n var value = name in editor.settings ? editor.settings[name] : defaultVal;\n if (type === 'hash') {\n return getParamObject(value);\n } else if (type === 'string') {\n return getFiltered(isString, editor, name).getOr(defaultVal);\n } else if (type === 'number') {\n return getFiltered(isNumber, editor, name).getOr(defaultVal);\n } else if (type === 'boolean') {\n return getFiltered(isBoolean, editor, name).getOr(defaultVal);\n } else if (type === 'object') {\n return getFiltered(isObject, editor, name).getOr(defaultVal);\n } else if (type === 'array') {\n return getFiltered(isArray, editor, name).getOr(defaultVal);\n } else if (type === 'string[]') {\n return getFiltered(isArrayOf(isString), editor, name).getOr(defaultVal);\n } else if (type === 'function') {\n return getFiltered(isFunction, editor, name).getOr(defaultVal);\n } else {\n return value;\n }\n };\n\n var each$b = Tools.each, explode$2 = Tools.explode;\n var keyCodeLookup = {\n f1: 112,\n f2: 113,\n f3: 114,\n f4: 115,\n f5: 116,\n f6: 117,\n f7: 118,\n f8: 119,\n f9: 120,\n f10: 121,\n f11: 122,\n f12: 123\n };\n var modifierNames = Tools.makeMap('alt,ctrl,shift,meta,access');\n function Shortcuts (editor) {\n var self = this;\n var shortcuts = {};\n var pendingPatterns = [];\n var parseShortcut = function (pattern) {\n var id, key;\n var shortcut = {};\n each$b(explode$2(pattern, '+'), function (value) {\n if (value in modifierNames) {\n shortcut[value] = true;\n } else {\n if (/^[0-9]{2,}$/.test(value)) {\n shortcut.keyCode = parseInt(value, 10);\n } else {\n shortcut.charCode = value.charCodeAt(0);\n shortcut.keyCode = keyCodeLookup[value] || value.toUpperCase().charCodeAt(0);\n }\n }\n });\n id = [shortcut.keyCode];\n for (key in modifierNames) {\n if (shortcut[key]) {\n id.push(key);\n } else {\n shortcut[key] = false;\n }\n }\n shortcut.id = id.join(',');\n if (shortcut.access) {\n shortcut.alt = true;\n if (Env.mac) {\n shortcut.ctrl = true;\n } else {\n shortcut.shift = true;\n }\n }\n if (shortcut.meta) {\n if (Env.mac) {\n shortcut.meta = true;\n } else {\n shortcut.ctrl = true;\n shortcut.meta = false;\n }\n }\n return shortcut;\n };\n var createShortcut = function (pattern, desc, cmdFunc, scope) {\n var shortcuts;\n shortcuts = Tools.map(explode$2(pattern, '>'), parseShortcut);\n shortcuts[shortcuts.length - 1] = Tools.extend(shortcuts[shortcuts.length - 1], {\n func: cmdFunc,\n scope: scope || editor\n });\n return Tools.extend(shortcuts[0], {\n desc: editor.translate(desc),\n subpatterns: shortcuts.slice(1)\n });\n };\n var hasModifier = function (e) {\n return e.altKey || e.ctrlKey || e.metaKey;\n };\n var isFunctionKey = function (e) {\n return e.type === 'keydown' && e.keyCode >= 112 && e.keyCode <= 123;\n };\n var matchShortcut = function (e, shortcut) {\n if (!shortcut) {\n return false;\n }\n if (shortcut.ctrl !== e.ctrlKey || shortcut.meta !== e.metaKey) {\n return false;\n }\n if (shortcut.alt !== e.altKey || shortcut.shift !== e.shiftKey) {\n return false;\n }\n if (e.keyCode === shortcut.keyCode || e.charCode && e.charCode === shortcut.charCode) {\n e.preventDefault();\n return true;\n }\n return false;\n };\n var executeShortcutAction = function (shortcut) {\n return shortcut.func ? shortcut.func.call(shortcut.scope) : null;\n };\n editor.on('keyup keypress keydown', function (e) {\n if ((hasModifier(e) || isFunctionKey(e)) && !e.isDefaultPrevented()) {\n each$b(shortcuts, function (shortcut) {\n if (matchShortcut(e, shortcut)) {\n pendingPatterns = shortcut.subpatterns.slice(0);\n if (e.type === 'keydown') {\n executeShortcutAction(shortcut);\n }\n return true;\n }\n });\n if (matchShortcut(e, pendingPatterns[0])) {\n if (pendingPatterns.length === 1) {\n if (e.type === 'keydown') {\n executeShortcutAction(pendingPatterns[0]);\n }\n }\n pendingPatterns.shift();\n }\n }\n });\n self.add = function (pattern, desc, cmdFunc, scope) {\n var cmd;\n cmd = cmdFunc;\n if (typeof cmdFunc === 'string') {\n cmdFunc = function () {\n editor.execCommand(cmd, false, null);\n };\n } else if (Tools.isArray(cmd)) {\n cmdFunc = function () {\n editor.execCommand(cmd[0], cmd[1], cmd[2]);\n };\n }\n each$b(explode$2(Tools.trim(pattern.toLowerCase())), function (pattern) {\n var shortcut = createShortcut(pattern, desc, cmdFunc, scope);\n shortcuts[shortcut.id] = shortcut;\n });\n return true;\n };\n self.remove = function (pattern) {\n var shortcut = createShortcut(pattern);\n if (shortcuts[shortcut.id]) {\n delete shortcuts[shortcut.id];\n return true;\n }\n return false;\n };\n }\n\n var hasFocus = function (element) {\n var doc = owner(element).dom();\n return element.dom() === doc.activeElement;\n };\n var active = function (_doc) {\n var doc = _doc !== undefined ? _doc.dom() : domGlobals.document;\n return Option.from(doc.activeElement).map(Element.fromDom);\n };\n var search = function (element) {\n return active(owner(element)).filter(function (e) {\n return element.dom().contains(e.dom());\n });\n };\n\n var getContentEditableHost = function (editor, node) {\n return editor.dom.getParent(node, function (node) {\n return editor.dom.getContentEditable(node) === 'true';\n });\n };\n var getCollapsedNode = function (rng) {\n return rng.collapsed ? Option.from(getNode(rng.startContainer, rng.startOffset)).map(Element.fromDom) : Option.none();\n };\n var getFocusInElement = function (root, rng) {\n return getCollapsedNode(rng).bind(function (node) {\n if (isTableSection(node)) {\n return Option.some(node);\n } else if (contains$3(root, node) === false) {\n return Option.some(root);\n } else {\n return Option.none();\n }\n });\n };\n var normalizeSelection = function (editor, rng) {\n getFocusInElement(Element.fromDom(editor.getBody()), rng).bind(function (elm) {\n return CaretFinder.firstPositionIn(elm.dom());\n }).fold(function () {\n editor.selection.normalize();\n return;\n }, function (caretPos) {\n return editor.selection.setRng(caretPos.toRange());\n });\n };\n var focusBody = function (body) {\n if (body.setActive) {\n try {\n body.setActive();\n } catch (ex) {\n body.focus();\n }\n } else {\n body.focus();\n }\n };\n var hasElementFocus = function (elm) {\n return hasFocus(elm) || search(elm).isSome();\n };\n var hasIframeFocus = function (editor) {\n return editor.iframeElement && hasFocus(Element.fromDom(editor.iframeElement));\n };\n var hasInlineFocus = function (editor) {\n var rawBody = editor.getBody();\n return rawBody && hasElementFocus(Element.fromDom(rawBody));\n };\n var hasFocus$1 = function (editor) {\n return editor.inline ? hasInlineFocus(editor) : hasIframeFocus(editor);\n };\n var focusEditor = function (editor) {\n var selection = editor.selection, contentEditable = editor.settings.content_editable;\n var body = editor.getBody();\n var rng = selection.getRng();\n editor.quirks.refreshContentEditable();\n var contentEditableHost = getContentEditableHost(editor, selection.getNode());\n if (editor.$.contains(body, contentEditableHost)) {\n focusBody(contentEditableHost);\n normalizeSelection(editor, rng);\n activateEditor(editor);\n return;\n }\n if (editor.bookmark !== undefined && hasFocus$1(editor) === false) {\n SelectionBookmark.getRng(editor).each(function (bookmarkRng) {\n editor.selection.setRng(bookmarkRng);\n rng = bookmarkRng;\n });\n }\n if (!contentEditable) {\n if (!Env.opera) {\n focusBody(body);\n }\n editor.getWin().focus();\n }\n if (Env.gecko || contentEditable) {\n focusBody(body);\n normalizeSelection(editor, rng);\n }\n activateEditor(editor);\n };\n var activateEditor = function (editor) {\n return editor.editorManager.setActive(editor);\n };\n var focus = function (editor, skipFocus) {\n if (editor.removed) {\n return;\n }\n skipFocus ? activateEditor(editor) : focusEditor(editor);\n };\n var EditorFocus = {\n focus: focus,\n hasFocus: hasFocus$1\n };\n\n var getProp = function (propName, elm) {\n var rawElm = elm.dom();\n return rawElm[propName];\n };\n var getComputedSizeProp = function (propName, elm) {\n return parseInt(get$1(elm, propName), 10);\n };\n var getClientWidth = curry(getProp, 'clientWidth');\n var getClientHeight = curry(getProp, 'clientHeight');\n var getMarginTop = curry(getComputedSizeProp, 'margin-top');\n var getMarginLeft = curry(getComputedSizeProp, 'margin-left');\n var getBoundingClientRect$1 = function (elm) {\n return elm.dom().getBoundingClientRect();\n };\n var isInsideElementContentArea = function (bodyElm, clientX, clientY) {\n var clientWidth = getClientWidth(bodyElm);\n var clientHeight = getClientHeight(bodyElm);\n return clientX >= 0 && clientY >= 0 && clientX <= clientWidth && clientY <= clientHeight;\n };\n var transpose = function (inline, elm, clientX, clientY) {\n var clientRect = getBoundingClientRect$1(elm);\n var deltaX = inline ? clientRect.left + elm.dom().clientLeft + getMarginLeft(elm) : 0;\n var deltaY = inline ? clientRect.top + elm.dom().clientTop + getMarginTop(elm) : 0;\n var x = clientX - deltaX;\n var y = clientY - deltaY;\n return {\n x: x,\n y: y\n };\n };\n var isXYInContentArea = function (editor, clientX, clientY) {\n var bodyElm = Element.fromDom(editor.getBody());\n var targetElm = editor.inline ? bodyElm : documentElement(bodyElm);\n var transposedPoint = transpose(editor.inline, targetElm, clientX, clientY);\n return isInsideElementContentArea(targetElm, transposedPoint.x, transposedPoint.y);\n };\n var fromDomSafe = function (node) {\n return Option.from(node).map(Element.fromDom);\n };\n var isEditorAttachedToDom = function (editor) {\n var rawContainer = editor.inline ? editor.getBody() : editor.getContentAreaContainer();\n return fromDomSafe(rawContainer).map(function (container) {\n return contains$3(owner(container), container);\n }).getOr(false);\n };\n var EditorView = {\n isXYInContentArea: isXYInContentArea,\n isEditorAttachedToDom: isEditorAttachedToDom\n };\n\n function NotificationManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a NotificationManager implementation.');\n };\n return {\n open: unimplemented,\n close: unimplemented,\n reposition: unimplemented,\n getArgs: unimplemented\n };\n }\n\n function NotificationManager (editor) {\n var notifications = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getNotificationManagerImpl ? theme.getNotificationManagerImpl() : NotificationManagerImpl();\n };\n var getTopNotification = function () {\n return Option.from(notifications[0]);\n };\n var isEqual = function (a, b) {\n return a.type === b.type && a.text === b.text && !a.progressBar && !a.timeout && !b.progressBar && !b.timeout;\n };\n var reposition = function () {\n if (notifications.length > 0) {\n getImplementation().reposition(notifications);\n }\n };\n var addNotification = function (notification) {\n notifications.push(notification);\n };\n var closeNotification = function (notification) {\n findIndex(notifications, function (otherNotification) {\n return otherNotification === notification;\n }).each(function (index) {\n notifications.splice(index, 1);\n });\n };\n var open = function (args) {\n if (editor.removed || !EditorView.isEditorAttachedToDom(editor)) {\n return;\n }\n return find(notifications, function (notification) {\n return isEqual(getImplementation().getArgs(notification), args);\n }).getOrThunk(function () {\n editor.editorManager.setActive(editor);\n var notification = getImplementation().open(args, function () {\n closeNotification(notification);\n reposition();\n });\n addNotification(notification);\n reposition();\n return notification;\n });\n };\n var close = function () {\n getTopNotification().each(function (notification) {\n getImplementation().close(notification);\n closeNotification(notification);\n reposition();\n });\n };\n var getNotifications = function () {\n return notifications;\n };\n var registerEvents = function (editor) {\n editor.on('SkinLoaded', function () {\n var serviceMessage = editor.settings.service_message;\n if (serviceMessage) {\n open({\n text: serviceMessage,\n type: 'warning',\n timeout: 0,\n icon: ''\n });\n }\n });\n editor.on('ResizeEditor ResizeWindow', function () {\n Delay.requestAnimationFrame(reposition);\n });\n editor.on('remove', function () {\n each(notifications.slice(), function (notification) {\n getImplementation().close(notification);\n });\n });\n };\n registerEvents(editor);\n return {\n open: open,\n close: close,\n getNotifications: getNotifications\n };\n }\n\n function WindowManagerImpl () {\n var unimplemented = function () {\n throw new Error('Theme did not provide a WindowManager implementation.');\n };\n return {\n open: unimplemented,\n alert: unimplemented,\n confirm: unimplemented,\n close: unimplemented,\n getParams: unimplemented,\n setParams: unimplemented\n };\n }\n\n function WindowManager (editor) {\n var windows = [];\n var getImplementation = function () {\n var theme = editor.theme;\n return theme && theme.getWindowManagerImpl ? theme.getWindowManagerImpl() : WindowManagerImpl();\n };\n var funcBind = function (scope, f) {\n return function () {\n return f ? f.apply(scope, arguments) : undefined;\n };\n };\n var fireOpenEvent = function (win) {\n editor.fire('OpenWindow', { win: win });\n };\n var fireCloseEvent = function (win) {\n editor.fire('CloseWindow', { win: win });\n };\n var addWindow = function (win) {\n windows.push(win);\n fireOpenEvent(win);\n };\n var closeWindow = function (win) {\n findIndex(windows, function (otherWindow) {\n return otherWindow === win;\n }).each(function (index) {\n windows.splice(index, 1);\n fireCloseEvent(win);\n if (windows.length === 0) {\n editor.focus();\n }\n });\n };\n var getTopWindow = function () {\n return Option.from(windows[windows.length - 1]);\n };\n var open = function (args, params) {\n editor.editorManager.setActive(editor);\n SelectionBookmark.store(editor);\n var win = getImplementation().open(args, params, closeWindow);\n addWindow(win);\n return win;\n };\n var alert = function (message, callback, scope) {\n var win = getImplementation().alert(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var confirm = function (message, callback, scope) {\n var win = getImplementation().confirm(message, funcBind(scope ? scope : this, callback), closeWindow);\n addWindow(win);\n };\n var close = function () {\n getTopWindow().each(function (win) {\n getImplementation().close(win);\n closeWindow(win);\n });\n };\n var getParams = function () {\n return getTopWindow().map(getImplementation().getParams).getOr(null);\n };\n var setParams = function (params) {\n getTopWindow().each(function (win) {\n getImplementation().setParams(win, params);\n });\n };\n var getWindows = function () {\n return windows;\n };\n editor.on('remove', function () {\n each(windows.slice(0), function (win) {\n getImplementation().close(win);\n });\n });\n return {\n windows: windows,\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams,\n getWindows: getWindows\n };\n }\n\n var data = {};\n var code = 'en';\n var I18n = {\n setCode: function (newCode) {\n if (newCode) {\n code = newCode;\n this.rtl = this.data[newCode] ? this.data[newCode]._dir === 'rtl' : false;\n }\n },\n getCode: function () {\n return code;\n },\n rtl: false,\n add: function (code, items) {\n var langData = data[code];\n if (!langData) {\n data[code] = langData = {};\n }\n for (var name in items) {\n langData[name] = items[name];\n }\n this.setCode(code);\n },\n translate: function (text) {\n var langData = data[code] || {};\n var toString = function (obj) {\n if (Tools.is(obj, 'function')) {\n return Object.prototype.toString.call(obj);\n }\n return !isEmpty(obj) ? '' + obj : '';\n };\n var isEmpty = function (text) {\n return text === '' || text === null || Tools.is(text, 'undefined');\n };\n var getLangData = function (text) {\n text = toString(text);\n return Tools.hasOwn(langData, text) ? toString(langData[text]) : text;\n };\n if (isEmpty(text)) {\n return '';\n }\n if (Tools.is(text, 'object') && Tools.hasOwn(text, 'raw')) {\n return toString(text.raw);\n }\n if (Tools.is(text, 'array')) {\n var values_1 = text.slice(1);\n text = getLangData(text[0]).replace(/\\{([0-9]+)\\}/g, function ($1, $2) {\n return Tools.hasOwn(values_1, $2) ? toString(values_1[$2]) : $1;\n });\n }\n return getLangData(text).replace(/{context:\\w+}$/, '');\n },\n data: data\n };\n\n var PluginManager = AddOnManager.PluginManager;\n var resolvePluginName = function (targetUrl, suffix) {\n for (var name in PluginManager.urls) {\n var matchUrl = PluginManager.urls[name] + '/plugin' + suffix + '.js';\n if (matchUrl === targetUrl) {\n return name;\n }\n }\n return null;\n };\n var pluginUrlToMessage = function (editor, url) {\n var plugin = resolvePluginName(url, editor.suffix);\n return plugin ? I18n.translate([\n 'Failed to load plugin: {0} from url {1}',\n plugin,\n url\n ]) : I18n.translate([\n 'Failed to load plugin url: {0}',\n url\n ]);\n };\n var displayNotification = function (editor, message) {\n editor.notificationManager.open({\n type: 'error',\n text: message\n });\n };\n var displayError = function (editor, message) {\n if (editor._skinLoaded) {\n displayNotification(editor, message);\n } else {\n editor.on('SkinLoaded', function () {\n displayNotification(editor, message);\n });\n }\n };\n var uploadError = function (editor, message) {\n displayError(editor, I18n.translate([\n 'Failed to upload image: {0}',\n message\n ]));\n };\n var pluginLoadError = function (editor, url) {\n displayError(editor, pluginUrlToMessage(editor, url));\n };\n var pluginInitError = function (editor, name, err) {\n var message = I18n.translate([\n 'Failed to initialize plugin: {0}',\n name\n ]);\n initError(message, err);\n displayError(editor, message);\n };\n var initError = function (message) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var console = domGlobals.window.console;\n if (console) {\n if (console.error) {\n console.error.apply(console, arguments);\n } else {\n console.log.apply(console, arguments);\n }\n }\n };\n var ErrorReporter = {\n pluginLoadError: pluginLoadError,\n pluginInitError: pluginInitError,\n uploadError: uploadError,\n displayError: displayError,\n initError: initError\n };\n\n var PluginManager$1 = AddOnManager.PluginManager;\n\n var ThemeManager = AddOnManager.ThemeManager;\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n function Uploader (uploadStatus, settings) {\n var pendingPromises = {};\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var noUpload = function () {\n return new promiseObj(function (resolve) {\n resolve([]);\n });\n };\n var handlerSuccess = function (blobInfo, url) {\n return {\n url: url,\n blobInfo: blobInfo,\n status: true\n };\n };\n var handlerFailure = function (blobInfo, error) {\n return {\n url: '',\n blobInfo: blobInfo,\n status: false,\n error: error\n };\n };\n var resolvePending = function (blobUri, result) {\n Tools.each(pendingPromises[blobUri], function (resolve) {\n resolve(result);\n });\n delete pendingPromises[blobUri];\n };\n var uploadBlobInfo = function (blobInfo, handler, openNotification) {\n uploadStatus.markPending(blobInfo.blobUri());\n return new promiseObj(function (resolve) {\n var notification, progress;\n var noop = function () {\n };\n try {\n var closeNotification_1 = function () {\n if (notification) {\n notification.close();\n progress = noop;\n }\n };\n var success = function (url) {\n closeNotification_1();\n uploadStatus.markUploaded(blobInfo.blobUri(), url);\n resolvePending(blobInfo.blobUri(), handlerSuccess(blobInfo, url));\n resolve(handlerSuccess(blobInfo, url));\n };\n var failure = function (error) {\n closeNotification_1();\n uploadStatus.removeFailed(blobInfo.blobUri());\n resolvePending(blobInfo.blobUri(), handlerFailure(blobInfo, error));\n resolve(handlerFailure(blobInfo, error));\n };\n progress = function (percent) {\n if (percent < 0 || percent > 100) {\n return;\n }\n if (!notification) {\n notification = openNotification();\n }\n notification.progressBar.value(percent);\n };\n handler(blobInfo, success, failure, progress);\n } catch (ex) {\n resolve(handlerFailure(blobInfo, ex.message));\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var pendingUploadBlobInfo = function (blobInfo) {\n var blobUri = blobInfo.blobUri();\n return new promiseObj(function (resolve) {\n pendingPromises[blobUri] = pendingPromises[blobUri] || [];\n pendingPromises[blobUri].push(resolve);\n });\n };\n var uploadBlobs = function (blobInfos, openNotification) {\n blobInfos = Tools.grep(blobInfos, function (blobInfo) {\n return !uploadStatus.isUploaded(blobInfo.blobUri());\n });\n return promiseObj.all(Tools.map(blobInfos, function (blobInfo) {\n return uploadStatus.isPending(blobInfo.blobUri()) ? pendingUploadBlobInfo(blobInfo) : uploadBlobInfo(blobInfo, settings.handler, openNotification);\n }));\n };\n var upload = function (blobInfos, openNotification) {\n return !settings.url && isDefaultHandler(settings.handler) ? noUpload() : uploadBlobs(blobInfos, openNotification);\n };\n if (isFunction(settings.handler) === false) {\n settings.handler = defaultHandler;\n }\n return { upload: upload };\n }\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n function Uint8Array (arr) {\n var f = Global$1.getOrDie('Uint8Array');\n return new f(arr);\n }\n\n var requestAnimationFrame$1 = function (callback) {\n var f = Global$1.getOrDie('requestAnimationFrame');\n f(callback);\n };\n var atob = function (base64) {\n var f = Global$1.getOrDie('atob');\n return f(base64);\n };\n var Window = {\n atob: atob,\n requestAnimationFrame: requestAnimationFrame$1\n };\n\n var blobUriToBlob = function (url) {\n return new promiseObj(function (resolve, reject) {\n var rejectWithError = function () {\n reject('Cannot convert ' + url + ' to Blob. Resource might not exist or is inaccessible.');\n };\n try {\n var xhr = XMLHttpRequest();\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n rejectWithError();\n }\n };\n xhr.onerror = rejectWithError;\n xhr.send();\n } catch (ex) {\n rejectWithError();\n }\n });\n };\n var parseDataUri = function (uri) {\n var type, matches;\n var uriParts = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uriParts[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uriParts[1]\n };\n };\n var dataUriToBlob = function (uri) {\n return new promiseObj(function (resolve) {\n var str, arr, i;\n var uriParts = parseDataUri(uri);\n try {\n str = Window.atob(uriParts.data);\n } catch (e) {\n resolve(new domGlobals.Blob([]));\n return;\n }\n arr = Uint8Array(str.length);\n for (i = 0; i < arr.length; i++) {\n arr[i] = str.charCodeAt(i);\n }\n resolve(new domGlobals.Blob([arr], { type: uriParts.type }));\n });\n };\n var uriToBlob = function (url) {\n if (url.indexOf('blob:') === 0) {\n return blobUriToBlob(url);\n }\n if (url.indexOf('data:') === 0) {\n return dataUriToBlob(url);\n }\n return null;\n };\n var blobToDataUri = function (blob) {\n return new promiseObj(function (resolve) {\n var reader = FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Conversions = {\n uriToBlob: uriToBlob,\n blobToDataUri: blobToDataUri,\n parseDataUri: parseDataUri\n };\n\n var count = 0;\n var uniqueId = function (prefix) {\n return (prefix || 'blobid') + count++;\n };\n var imageToBlobInfo = function (blobCache, img, resolve, reject) {\n var base64, blobInfo;\n if (img.src.indexOf('blob:') === 0) {\n blobInfo = blobCache.getByUri(img.src);\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n Conversions.blobToDataUri(blob).then(function (dataUri) {\n base64 = Conversions.parseDataUri(dataUri).data;\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n });\n }, function (err) {\n reject(err);\n });\n }\n return;\n }\n base64 = Conversions.parseDataUri(img.src).data;\n blobInfo = blobCache.findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.base64() === base64;\n });\n if (blobInfo) {\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n } else {\n Conversions.uriToBlob(img.src).then(function (blob) {\n blobInfo = blobCache.create(uniqueId(), blob, base64);\n blobCache.add(blobInfo);\n resolve({\n image: img,\n blobInfo: blobInfo\n });\n }, function (err) {\n reject(err);\n });\n }\n };\n var getAllImages = function (elm) {\n return elm ? from$1(elm.getElementsByTagName('img')) : [];\n };\n function ImageScanner (uploadStatus, blobCache) {\n var cachedPromises = {};\n var findAll = function (elm, predicate) {\n var images;\n if (!predicate) {\n predicate = constant(true);\n }\n images = filter(getAllImages(elm), function (img) {\n var src = img.src;\n if (!Env.fileApi) {\n return false;\n }\n if (img.hasAttribute('data-mce-bogus')) {\n return false;\n }\n if (img.hasAttribute('data-mce-placeholder')) {\n return false;\n }\n if (!src || src === Env.transparentSrc) {\n return false;\n }\n if (src.indexOf('blob:') === 0) {\n return !uploadStatus.isUploaded(src) && predicate(img);\n }\n if (src.indexOf('data:') === 0) {\n return predicate(img);\n }\n return false;\n });\n var promises = map(images, function (img) {\n if (cachedPromises[img.src]) {\n return new promiseObj(function (resolve) {\n cachedPromises[img.src].then(function (imageInfo) {\n if (typeof imageInfo === 'string') {\n return imageInfo;\n }\n resolve({\n image: img,\n blobInfo: imageInfo.blobInfo\n });\n });\n });\n }\n var newPromise = new promiseObj(function (resolve, reject) {\n imageToBlobInfo(blobCache, img, resolve, reject);\n }).then(function (result) {\n delete cachedPromises[result.image.src];\n return result;\n }).catch(function (error) {\n delete cachedPromises[img.src];\n return error;\n });\n cachedPromises[img.src] = newPromise;\n return newPromise;\n });\n return promiseObj.all(promises);\n };\n return { findAll: findAll };\n }\n\n var count$1 = 0;\n var seed = function () {\n var rnd = function () {\n return Math.round(Math.random() * 4294967295).toString(36);\n };\n var now = new Date().getTime();\n return 's' + now.toString(36) + rnd() + rnd() + rnd();\n };\n var uuid = function (prefix) {\n return prefix + count$1++ + seed();\n };\n var Uuid = { uuid: uuid };\n\n function BlobCache () {\n var cache = [];\n var mimeToExt = function (mime) {\n var mimes = {\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/gif': 'gif',\n 'image/png': 'png'\n };\n return mimes[mime.toLowerCase()] || 'dat';\n };\n var create = function (o, blob, base64, filename) {\n if (isString(o)) {\n var id = o;\n return toBlobInfo({\n id: id,\n name: filename,\n blob: blob,\n base64: base64\n });\n } else if (isObject(o)) {\n return toBlobInfo(o);\n } else {\n throw new Error('Unknown input type');\n }\n };\n var toBlobInfo = function (o) {\n var id, name;\n if (!o.blob || !o.base64) {\n throw new Error('blob and base64 representations of the image are required for BlobInfo to be created');\n }\n id = o.id || Uuid.uuid('blobid');\n name = o.name || id;\n return {\n id: constant(id),\n name: constant(name),\n filename: constant(name + '.' + mimeToExt(o.blob.type)),\n blob: constant(o.blob),\n base64: constant(o.base64),\n blobUri: constant(o.blobUri || URL.createObjectURL(o.blob)),\n uri: constant(o.uri)\n };\n };\n var add = function (blobInfo) {\n if (!get(blobInfo.id())) {\n cache.push(blobInfo);\n }\n };\n var get = function (id) {\n return findFirst(function (cachedBlobInfo) {\n return cachedBlobInfo.id() === id;\n });\n };\n var findFirst = function (predicate) {\n return filter(cache, predicate)[0];\n };\n var getByUri = function (blobUri) {\n return findFirst(function (blobInfo) {\n return blobInfo.blobUri() === blobUri;\n });\n };\n var removeByUri = function (blobUri) {\n cache = filter(cache, function (blobInfo) {\n if (blobInfo.blobUri() === blobUri) {\n URL.revokeObjectURL(blobInfo.blobUri());\n return false;\n }\n return true;\n });\n };\n var destroy = function () {\n each(cache, function (cachedBlobInfo) {\n URL.revokeObjectURL(cachedBlobInfo.blobUri());\n });\n cache = [];\n };\n return {\n create: create,\n add: add,\n get: get,\n getByUri: getByUri,\n findFirst: findFirst,\n removeByUri: removeByUri,\n destroy: destroy\n };\n }\n\n function UploadStatus () {\n var PENDING = 1, UPLOADED = 2;\n var blobUriStatuses = {};\n var createStatus = function (status, resultUri) {\n return {\n status: status,\n resultUri: resultUri\n };\n };\n var hasBlobUri = function (blobUri) {\n return blobUri in blobUriStatuses;\n };\n var getResultUri = function (blobUri) {\n var result = blobUriStatuses[blobUri];\n return result ? result.resultUri : null;\n };\n var isPending = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === PENDING : false;\n };\n var isUploaded = function (blobUri) {\n return hasBlobUri(blobUri) ? blobUriStatuses[blobUri].status === UPLOADED : false;\n };\n var markPending = function (blobUri) {\n blobUriStatuses[blobUri] = createStatus(PENDING, null);\n };\n var markUploaded = function (blobUri, resultUri) {\n blobUriStatuses[blobUri] = createStatus(UPLOADED, resultUri);\n };\n var removeFailed = function (blobUri) {\n delete blobUriStatuses[blobUri];\n };\n var destroy = function () {\n blobUriStatuses = {};\n };\n return {\n hasBlobUri: hasBlobUri,\n getResultUri: getResultUri,\n isPending: isPending,\n isUploaded: isUploaded,\n markPending: markPending,\n markUploaded: markUploaded,\n removeFailed: removeFailed,\n destroy: destroy\n };\n }\n\n function EditorUpload (editor) {\n var blobCache = BlobCache();\n var uploader, imageScanner;\n var uploadStatus = UploadStatus();\n var urlFilters = [];\n var aliveGuard = function (callback) {\n return function (result) {\n if (editor.selection) {\n return callback(result);\n }\n return [];\n };\n };\n var cacheInvalidator = function () {\n return '?' + new Date().getTime();\n };\n var replaceString = function (content, search, replace) {\n var index = 0;\n do {\n index = content.indexOf(search, index);\n if (index !== -1) {\n content = content.substring(0, index) + replace + content.substr(index + search.length);\n index += replace.length - search.length + 1;\n }\n } while (index !== -1);\n return content;\n };\n var replaceImageUrl = function (content, targetUrl, replacementUrl) {\n content = replaceString(content, 'src=\"' + targetUrl + '\"', 'src=\"' + replacementUrl + '\"');\n content = replaceString(content, 'data-mce-src=\"' + targetUrl + '\"', 'data-mce-src=\"' + replacementUrl + '\"');\n return content;\n };\n var replaceUrlInUndoStack = function (targetUrl, replacementUrl) {\n each(editor.undoManager.data, function (level) {\n if (level.type === 'fragmented') {\n level.fragments = map(level.fragments, function (fragment) {\n return replaceImageUrl(fragment, targetUrl, replacementUrl);\n });\n } else {\n level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);\n }\n });\n };\n var openNotification = function () {\n return editor.notificationManager.open({\n text: editor.translate('Image uploading...'),\n type: 'info',\n timeout: -1,\n progressBar: true\n });\n };\n var replaceImageUri = function (image, resultUri) {\n blobCache.removeByUri(image.src);\n replaceUrlInUndoStack(image.src, resultUri);\n editor.$(image).attr({\n 'src': Settings.shouldReuseFileName(editor) ? resultUri + cacheInvalidator() : resultUri,\n 'data-mce-src': editor.convertURL(resultUri, 'src')\n });\n };\n var uploadImages = function (callback) {\n if (!uploader) {\n uploader = Uploader(uploadStatus, {\n url: Settings.getImageUploadUrl(editor),\n basePath: Settings.getImageUploadBasePath(editor),\n credentials: Settings.getImagesUploadCredentials(editor),\n handler: Settings.getImagesUploadHandler(editor)\n });\n }\n return scanForImages().then(aliveGuard(function (imageInfos) {\n var blobInfos;\n blobInfos = map(imageInfos, function (imageInfo) {\n return imageInfo.blobInfo;\n });\n return uploader.upload(blobInfos, openNotification).then(aliveGuard(function (result) {\n var filteredResult = map(result, function (uploadInfo, index) {\n var image = imageInfos[index].image;\n if (uploadInfo.status && Settings.shouldReplaceBlobUris(editor)) {\n replaceImageUri(image, uploadInfo.url);\n } else if (uploadInfo.error) {\n ErrorReporter.uploadError(editor, uploadInfo.error);\n }\n return {\n element: image,\n status: uploadInfo.status\n };\n });\n if (callback) {\n callback(filteredResult);\n }\n return filteredResult;\n }));\n }));\n };\n var uploadImagesAuto = function (callback) {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n return uploadImages(callback);\n }\n };\n var isValidDataUriImage = function (imgElm) {\n if (forall(urlFilters, function (filter) {\n return filter(imgElm);\n }) === false) {\n return false;\n }\n if (imgElm.getAttribute('src').indexOf('data:') === 0) {\n var dataImgFilter = Settings.getImagesDataImgFilter(editor);\n return dataImgFilter(imgElm);\n }\n return true;\n };\n var addFilter = function (filter) {\n urlFilters.push(filter);\n };\n var scanForImages = function () {\n if (!imageScanner) {\n imageScanner = ImageScanner(uploadStatus, blobCache);\n }\n return imageScanner.findAll(editor.getBody(), isValidDataUriImage).then(aliveGuard(function (result) {\n result = filter(result, function (resultItem) {\n if (typeof resultItem === 'string') {\n ErrorReporter.displayError(editor, resultItem);\n return false;\n }\n return true;\n });\n each(result, function (resultItem) {\n replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());\n resultItem.image.src = resultItem.blobInfo.blobUri();\n resultItem.image.removeAttribute('data-mce-src');\n });\n return result;\n }));\n };\n var destroy = function () {\n blobCache.destroy();\n uploadStatus.destroy();\n imageScanner = uploader = null;\n };\n var replaceBlobUris = function (content) {\n return content.replace(/src=\"(blob:[^\"]+)\"/g, function (match, blobUri) {\n var resultUri = uploadStatus.getResultUri(blobUri);\n if (resultUri) {\n return 'src=\"' + resultUri + '\"';\n }\n var blobInfo = blobCache.getByUri(blobUri);\n if (!blobInfo) {\n blobInfo = foldl(editor.editorManager.get(), function (result, editor) {\n return result || editor.editorUpload && editor.editorUpload.blobCache.getByUri(blobUri);\n }, null);\n }\n if (blobInfo) {\n var blob = blobInfo.blob();\n return 'src=\"data:' + blob.type + ';base64,' + blobInfo.base64() + '\"';\n }\n return match;\n });\n };\n editor.on('setContent', function () {\n if (Settings.isAutomaticUploadsEnabled(editor)) {\n uploadImagesAuto();\n } else {\n scanForImages();\n }\n });\n editor.on('RawSaveContent', function (e) {\n e.content = replaceBlobUris(e.content);\n });\n editor.on('getContent', function (e) {\n if (e.source_view || e.format === 'raw') {\n return;\n }\n e.content = replaceBlobUris(e.content);\n });\n editor.on('PostRender', function () {\n editor.parser.addNodeFilter('img', function (images) {\n each(images, function (img) {\n var src = img.attr('src');\n if (blobCache.getByUri(src)) {\n return;\n }\n var resultUri = uploadStatus.getResultUri(src);\n if (resultUri) {\n img.attr('src', resultUri);\n }\n });\n });\n });\n return {\n blobCache: blobCache,\n addFilter: addFilter,\n uploadImages: uploadImages,\n uploadImagesAuto: uploadImagesAuto,\n scanForImages: scanForImages,\n destroy: destroy\n };\n }\n\n var isBlockElement = function (blockElements, node) {\n return blockElements.hasOwnProperty(node.nodeName);\n };\n var isValidTarget = function (blockElements, node) {\n if (NodeType.isText(node)) {\n return true;\n } else if (NodeType.isElement(node)) {\n return !isBlockElement(blockElements, node) && !Bookmarks.isBookmarkNode(node);\n } else {\n return false;\n }\n };\n var hasBlockParent = function (blockElements, root, node) {\n return exists(Parents.parents(Element.fromDom(node), Element.fromDom(root)), function (elm) {\n return isBlockElement(blockElements, elm.dom());\n });\n };\n var shouldRemoveTextNode = function (blockElements, node) {\n if (NodeType.isText(node)) {\n if (node.nodeValue.length === 0) {\n return true;\n } else if (/^\\s+$/.test(node.nodeValue) && (!node.nextSibling || isBlockElement(blockElements, node.nextSibling))) {\n return true;\n }\n }\n return false;\n };\n var addRootBlocks = function (editor) {\n var settings = editor.settings, dom = editor.dom, selection = editor.selection;\n var schema = editor.schema, blockElements = schema.getBlockElements();\n var node = selection.getStart();\n var rootNode = editor.getBody();\n var rng;\n var startContainer, startOffset, endContainer, endOffset, rootBlockNode;\n var tempNode, wrapped, restoreSelection;\n var rootNodeName, forcedRootBlock;\n forcedRootBlock = settings.forced_root_block;\n if (!node || !NodeType.isElement(node) || !forcedRootBlock) {\n return;\n }\n rootNodeName = rootNode.nodeName.toLowerCase();\n if (!schema.isValidChild(rootNodeName, forcedRootBlock.toLowerCase()) || hasBlockParent(blockElements, rootNode, node)) {\n return;\n }\n rng = selection.getRng();\n startContainer = rng.startContainer;\n startOffset = rng.startOffset;\n endContainer = rng.endContainer;\n endOffset = rng.endOffset;\n restoreSelection = EditorFocus.hasFocus(editor);\n node = rootNode.firstChild;\n while (node) {\n if (isValidTarget(blockElements, node)) {\n if (shouldRemoveTextNode(blockElements, node)) {\n tempNode = node;\n node = node.nextSibling;\n dom.remove(tempNode);\n continue;\n }\n if (!rootBlockNode) {\n rootBlockNode = dom.create(forcedRootBlock, editor.settings.forced_root_block_attrs);\n node.parentNode.insertBefore(rootBlockNode, node);\n wrapped = true;\n }\n tempNode = node;\n node = node.nextSibling;\n rootBlockNode.appendChild(tempNode);\n } else {\n rootBlockNode = null;\n node = node.nextSibling;\n }\n }\n if (wrapped && restoreSelection) {\n rng.setStart(startContainer, startOffset);\n rng.setEnd(endContainer, endOffset);\n selection.setRng(rng);\n editor.nodeChanged();\n }\n };\n var setup$3 = function (editor) {\n if (editor.settings.forced_root_block) {\n editor.on('NodeChange', curry(addRootBlocks, editor));\n }\n };\n var ForceBlocks = { setup: setup$3 };\n\n var getStartNode = function (rng) {\n var sc = rng.startContainer, so = rng.startOffset;\n if (NodeType.isText(sc)) {\n return so === 0 ? Option.some(Element.fromDom(sc)) : Option.none();\n } else {\n return Option.from(sc.childNodes[so]).map(Element.fromDom);\n }\n };\n var getEndNode = function (rng) {\n var ec = rng.endContainer, eo = rng.endOffset;\n if (NodeType.isText(ec)) {\n return eo === ec.data.length ? Option.some(Element.fromDom(ec)) : Option.none();\n } else {\n return Option.from(ec.childNodes[eo - 1]).map(Element.fromDom);\n }\n };\n var getFirstChildren = function (node) {\n return firstChild(node).fold(constant([node]), function (child) {\n return [node].concat(getFirstChildren(child));\n });\n };\n var getLastChildren$1 = function (node) {\n return lastChild(node).fold(constant([node]), function (child) {\n if (name(child) === 'br') {\n return prevSibling(child).map(function (sibling) {\n return [node].concat(getLastChildren$1(sibling));\n }).getOr([]);\n } else {\n return [node].concat(getLastChildren$1(child));\n }\n });\n };\n var hasAllContentsSelected = function (elm, rng) {\n return lift2(getStartNode(rng), getEndNode(rng), function (startNode, endNode) {\n var start = find(getFirstChildren(elm), curry(eq, startNode));\n var end = find(getLastChildren$1(elm), curry(eq, endNode));\n return start.isSome() && end.isSome();\n }).getOr(false);\n };\n var moveEndPoint$1 = function (dom, rng, node, start) {\n var root = node, walker = new TreeWalker(node, root);\n var nonEmptyElementsMap = dom.schema.getNonEmptyElements();\n do {\n if (node.nodeType === 3 && Tools.trim(node.nodeValue).length !== 0) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, node.nodeValue.length);\n }\n return;\n }\n if (nonEmptyElementsMap[node.nodeName] && !/^(TD|TH)$/.test(node.nodeName)) {\n if (start) {\n rng.setStartBefore(node);\n } else {\n if (node.nodeName === 'BR') {\n rng.setEndBefore(node);\n } else {\n rng.setEndAfter(node);\n }\n }\n return;\n }\n if (Env.ie && Env.ie < 11 && dom.isBlock(node) && dom.isEmpty(node)) {\n if (start) {\n rng.setStart(node, 0);\n } else {\n rng.setEnd(node, 0);\n }\n return;\n }\n } while (node = start ? walker.next() : walker.prev());\n if (root.nodeName === 'BODY') {\n if (start) {\n rng.setStart(root, 0);\n } else {\n rng.setEnd(root, root.childNodes.length);\n }\n }\n };\n var hasAnyRanges = function (editor) {\n var sel = editor.selection.getSel();\n return sel && sel.rangeCount > 0;\n };\n\n function NodeChange (editor) {\n var lastRng, lastPath = [];\n var isSameElementPath = function (startElm) {\n var i, currentPath;\n currentPath = editor.$(startElm).parentsUntil(editor.getBody()).add(startElm);\n if (currentPath.length === lastPath.length) {\n for (i = currentPath.length; i >= 0; i--) {\n if (currentPath[i] !== lastPath[i]) {\n break;\n }\n }\n if (i === -1) {\n lastPath = currentPath;\n return true;\n }\n }\n lastPath = currentPath;\n return false;\n };\n if (!('onselectionchange' in editor.getDoc())) {\n editor.on('NodeChange Click MouseUp KeyUp Focus', function (e) {\n var nativeRng, fakeRng;\n nativeRng = editor.selection.getRng();\n fakeRng = {\n startContainer: nativeRng.startContainer,\n startOffset: nativeRng.startOffset,\n endContainer: nativeRng.endContainer,\n endOffset: nativeRng.endOffset\n };\n if (e.type === 'nodechange' || !RangeCompare.isEq(fakeRng, lastRng)) {\n editor.fire('SelectionChange');\n }\n lastRng = fakeRng;\n });\n }\n editor.on('contextmenu', function () {\n editor.fire('SelectionChange');\n });\n editor.on('SelectionChange', function () {\n var startElm = editor.selection.getStart(true);\n if (!startElm || !Env.range && editor.selection.isCollapsed()) {\n return;\n }\n if (hasAnyRanges(editor) && !isSameElementPath(startElm) && editor.dom.isChildOf(startElm, editor.getBody())) {\n editor.nodeChanged({ selectionChange: true });\n }\n });\n editor.on('MouseUp', function (e) {\n if (!e.isDefaultPrevented() && hasAnyRanges(editor)) {\n if (editor.selection.getNode().nodeName === 'IMG') {\n Delay.setEditorTimeout(editor, function () {\n editor.nodeChanged();\n });\n } else {\n editor.nodeChanged();\n }\n }\n });\n this.nodeChanged = function (args) {\n var selection = editor.selection;\n var node, parents, root;\n if (editor.initialized && selection && !editor.settings.disable_nodechange && !editor.readonly) {\n root = editor.getBody();\n node = selection.getStart(true) || root;\n if (node.ownerDocument !== editor.getDoc() || !editor.dom.isChildOf(node, root)) {\n node = root;\n }\n parents = [];\n editor.dom.getParent(node, function (node) {\n if (node === root) {\n return true;\n }\n parents.push(node);\n });\n args = args || {};\n args.element = node;\n args.parents = parents;\n editor.fire('NodeChange', args);\n }\n };\n }\n\n var VK = {\n BACKSPACE: 8,\n DELETE: 46,\n DOWN: 40,\n ENTER: 13,\n LEFT: 37,\n RIGHT: 39,\n SPACEBAR: 32,\n TAB: 9,\n UP: 38,\n END: 35,\n HOME: 36,\n modifierPressed: function (e) {\n return e.shiftKey || e.ctrlKey || e.altKey || this.metaKeyPressed(e);\n },\n metaKeyPressed: function (e) {\n return Env.mac ? e.metaKey : e.ctrlKey && !e.altKey;\n }\n };\n\n var getNodeClientRects = function (node) {\n var toArrayWithNode = function (clientRects) {\n return map(clientRects, function (clientRect) {\n clientRect = clone$1(clientRect);\n clientRect.node = node;\n return clientRect;\n });\n };\n if (NodeType.isElement(node)) {\n return toArrayWithNode(node.getClientRects());\n }\n if (NodeType.isText(node)) {\n var rng = node.ownerDocument.createRange();\n rng.setStart(node, 0);\n rng.setEnd(node, node.data.length);\n return toArrayWithNode(rng.getClientRects());\n }\n };\n var getClientRects = function (node) {\n return foldl(node, function (result, node) {\n return result.concat(getNodeClientRects(node));\n }, []);\n };\n\n var VDirection;\n (function (VDirection) {\n VDirection[VDirection['Up'] = -1] = 'Up';\n VDirection[VDirection['Down'] = 1] = 'Down';\n }(VDirection || (VDirection = {})));\n var findUntil = function (direction, root, predicateFn, node) {\n while (node = findNode(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var walkUntil = function (direction, isAboveFn, isBeflowFn, root, predicateFn, caretPosition) {\n var line = 0, node;\n var result = [];\n var targetClientRect;\n var add = function (node) {\n var i, clientRect, clientRects;\n clientRects = getClientRects([node]);\n if (direction === -1) {\n clientRects = clientRects.reverse();\n }\n for (i = 0; i < clientRects.length; i++) {\n clientRect = clientRects[i];\n if (isBeflowFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isAboveFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return true;\n }\n result.push(clientRect);\n }\n };\n targetClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (!targetClientRect) {\n return result;\n }\n node = caretPosition.getNode();\n add(node);\n findUntil(direction, root, add, node);\n return result;\n };\n var aboveLineNumber = function (lineNumber, clientRect) {\n return clientRect.line > lineNumber;\n };\n var isLineNumber = function (lineNumber, clientRect) {\n return clientRect.line === lineNumber;\n };\n var upUntil = curry(walkUntil, VDirection.Up, isAbove, isBelow);\n var downUntil = curry(walkUntil, VDirection.Down, isBelow, isAbove);\n var positionsUntil = function (direction, root, predicateFn, node) {\n var caretWalker = CaretWalker(root);\n var walkFn, isBelowFn, isAboveFn, caretPosition;\n var result = [];\n var line = 0, clientRect, targetClientRect;\n var getClientRect = function (caretPosition) {\n if (direction === 1) {\n return ArrUtils.last(caretPosition.getClientRects());\n }\n return ArrUtils.last(caretPosition.getClientRects());\n };\n if (direction === 1) {\n walkFn = caretWalker.next;\n isBelowFn = isBelow;\n isAboveFn = isAbove;\n caretPosition = CaretPosition$1.after(node);\n } else {\n walkFn = caretWalker.prev;\n isBelowFn = isAbove;\n isAboveFn = isBelow;\n caretPosition = CaretPosition$1.before(node);\n }\n targetClientRect = getClientRect(caretPosition);\n do {\n if (!caretPosition.isVisible()) {\n continue;\n }\n clientRect = getClientRect(caretPosition);\n if (isAboveFn(clientRect, targetClientRect)) {\n continue;\n }\n if (result.length > 0 && isBelowFn(clientRect, ArrUtils.last(result))) {\n line++;\n }\n clientRect = clone$1(clientRect);\n clientRect.position = caretPosition;\n clientRect.line = line;\n if (predicateFn(clientRect)) {\n return result;\n }\n result.push(clientRect);\n } while (caretPosition = walkFn(caretPosition));\n return result;\n };\n var isAboveLine = function (lineNumber) {\n return function (clientRect) {\n return aboveLineNumber(lineNumber, clientRect);\n };\n };\n var isLine = function (lineNumber) {\n return function (clientRect) {\n return isLineNumber(lineNumber, clientRect);\n };\n };\n\n var isContentEditableFalse$7 = NodeType.isContentEditableFalse;\n var findNode$1 = findNode;\n var distanceToRectLeft = function (clientRect, clientX) {\n return Math.abs(clientRect.left - clientX);\n };\n var distanceToRectRight = function (clientRect, clientX) {\n return Math.abs(clientRect.right - clientX);\n };\n var isInside = function (clientX, clientRect) {\n return clientX >= clientRect.left && clientX <= clientRect.right;\n };\n var findClosestClientRect = function (clientRects, clientX) {\n return ArrUtils.reduce(clientRects, function (oldClientRect, clientRect) {\n var oldDistance, newDistance;\n oldDistance = Math.min(distanceToRectLeft(oldClientRect, clientX), distanceToRectRight(oldClientRect, clientX));\n newDistance = Math.min(distanceToRectLeft(clientRect, clientX), distanceToRectRight(clientRect, clientX));\n if (isInside(clientX, clientRect)) {\n return clientRect;\n }\n if (isInside(clientX, oldClientRect)) {\n return oldClientRect;\n }\n if (newDistance === oldDistance && isContentEditableFalse$7(clientRect.node)) {\n return clientRect;\n }\n if (newDistance < oldDistance) {\n return clientRect;\n }\n return oldClientRect;\n });\n };\n var walkUntil$1 = function (direction, root, predicateFn, node) {\n while (node = findNode$1(node, direction, isEditableCaretCandidate, root)) {\n if (predicateFn(node)) {\n return;\n }\n }\n };\n var findLineNodeRects = function (root, targetNodeRect) {\n var clientRects = [];\n var collect = function (checkPosFn, node) {\n var lineRects;\n lineRects = filter(getClientRects([node]), function (clientRect) {\n return !checkPosFn(clientRect, targetNodeRect);\n });\n clientRects = clientRects.concat(lineRects);\n return lineRects.length === 0;\n };\n clientRects.push(targetNodeRect);\n walkUntil$1(VDirection.Up, root, curry(collect, isAbove), targetNodeRect.node);\n walkUntil$1(VDirection.Down, root, curry(collect, isBelow), targetNodeRect.node);\n return clientRects;\n };\n var getFakeCaretTargets = function (root) {\n return filter(from$1(root.getElementsByTagName('*')), isFakeCaretTarget);\n };\n var caretInfo = function (clientRect, clientX) {\n return {\n node: clientRect.node,\n before: distanceToRectLeft(clientRect, clientX) < distanceToRectRight(clientRect, clientX)\n };\n };\n var closestCaret = function (root, clientX, clientY) {\n var closestNodeRect;\n var contentEditableFalseNodeRects = getClientRects(getFakeCaretTargets(root));\n var targetNodeRects = filter(contentEditableFalseNodeRects, function (rect) {\n return clientY >= rect.top && clientY <= rect.bottom;\n });\n closestNodeRect = findClosestClientRect(targetNodeRects, clientX);\n if (closestNodeRect) {\n closestNodeRect = findClosestClientRect(findLineNodeRects(root, closestNodeRect), clientX);\n if (closestNodeRect && isFakeCaretTarget(closestNodeRect.node)) {\n return caretInfo(closestNodeRect, clientX);\n }\n }\n return null;\n };\n\n var isXYWithinRange = function (clientX, clientY, range) {\n if (range.collapsed) {\n return false;\n }\n if (Env.ie && Env.ie <= 11 && range.startOffset === range.endOffset - 1 && range.startContainer === range.endContainer) {\n var elm = range.startContainer.childNodes[range.startOffset];\n if (NodeType.isElement(elm)) {\n return exists(elm.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n }\n }\n return exists(range.getClientRects(), function (rect) {\n return containsXY(rect, clientX, clientY);\n });\n };\n var RangePoint = { isXYWithinRange: isXYWithinRange };\n\n var getAbsolutePosition = function (elm) {\n var doc, docElem, win, clientRect;\n clientRect = elm.getBoundingClientRect();\n doc = elm.ownerDocument;\n docElem = doc.documentElement;\n win = doc.defaultView;\n return {\n top: clientRect.top + win.pageYOffset - docElem.clientTop,\n left: clientRect.left + win.pageXOffset - docElem.clientLeft\n };\n };\n var getBodyPosition = function (editor) {\n return editor.inline ? getAbsolutePosition(editor.getBody()) : {\n left: 0,\n top: 0\n };\n };\n var getScrollPosition = function (editor) {\n var body = editor.getBody();\n return editor.inline ? {\n left: body.scrollLeft,\n top: body.scrollTop\n } : {\n left: 0,\n top: 0\n };\n };\n var getBodyScroll = function (editor) {\n var body = editor.getBody(), docElm = editor.getDoc().documentElement;\n var inlineScroll = {\n left: body.scrollLeft,\n top: body.scrollTop\n };\n var iframeScroll = {\n left: body.scrollLeft || docElm.scrollLeft,\n top: body.scrollTop || docElm.scrollTop\n };\n return editor.inline ? inlineScroll : iframeScroll;\n };\n var getMousePosition = function (editor, event) {\n if (event.target.ownerDocument !== editor.getDoc()) {\n var iframePosition = getAbsolutePosition(editor.getContentAreaContainer());\n var scrollPosition = getBodyScroll(editor);\n return {\n left: event.pageX - iframePosition.left + scrollPosition.left,\n top: event.pageY - iframePosition.top + scrollPosition.top\n };\n }\n return {\n left: event.pageX,\n top: event.pageY\n };\n };\n var calculatePosition = function (bodyPosition, scrollPosition, mousePosition) {\n return {\n pageX: mousePosition.left - bodyPosition.left + scrollPosition.left,\n pageY: mousePosition.top - bodyPosition.top + scrollPosition.top\n };\n };\n var calc = function (editor, event) {\n return calculatePosition(getBodyPosition(editor), getScrollPosition(editor), getMousePosition(editor, event));\n };\n var MousePosition = { calc: calc };\n\n var isContentEditableFalse$8 = NodeType.isContentEditableFalse, isContentEditableTrue$3 = NodeType.isContentEditableTrue;\n var isDraggable = function (rootElm, elm) {\n return isContentEditableFalse$8(elm) && elm !== rootElm;\n };\n var isValidDropTarget = function (editor, targetElement, dragElement) {\n if (targetElement === dragElement || editor.dom.isChildOf(targetElement, dragElement)) {\n return false;\n }\n if (isContentEditableFalse$8(targetElement)) {\n return false;\n }\n return true;\n };\n var cloneElement = function (elm) {\n var cloneElm = elm.cloneNode(true);\n cloneElm.removeAttribute('data-mce-selected');\n return cloneElm;\n };\n var createGhost = function (editor, elm, width, height) {\n var clonedElm = elm.cloneNode(true);\n editor.dom.setStyles(clonedElm, {\n width: width,\n height: height\n });\n editor.dom.setAttrib(clonedElm, 'data-mce-selected', null);\n var ghostElm = editor.dom.create('div', {\n 'class': 'mce-drag-container',\n 'data-mce-bogus': 'all',\n 'unselectable': 'on',\n 'contenteditable': 'false'\n });\n editor.dom.setStyles(ghostElm, {\n position: 'absolute',\n opacity: 0.5,\n overflow: 'hidden',\n border: 0,\n padding: 0,\n margin: 0,\n width: width,\n height: height\n });\n editor.dom.setStyles(clonedElm, {\n margin: 0,\n boxSizing: 'border-box'\n });\n ghostElm.appendChild(clonedElm);\n return ghostElm;\n };\n var appendGhostToBody = function (ghostElm, bodyElm) {\n if (ghostElm.parentNode !== bodyElm) {\n bodyElm.appendChild(ghostElm);\n }\n };\n var moveGhost = function (ghostElm, position, width, height, maxX, maxY) {\n var overflowX = 0, overflowY = 0;\n ghostElm.style.left = position.pageX + 'px';\n ghostElm.style.top = position.pageY + 'px';\n if (position.pageX + width > maxX) {\n overflowX = position.pageX + width - maxX;\n }\n if (position.pageY + height > maxY) {\n overflowY = position.pageY + height - maxY;\n }\n ghostElm.style.width = width - overflowX + 'px';\n ghostElm.style.height = height - overflowY + 'px';\n };\n var removeElement = function (elm) {\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n };\n var isLeftMouseButtonPressed = function (e) {\n return e.button === 0;\n };\n var hasDraggableElement = function (state) {\n return state.element;\n };\n var applyRelPos = function (state, position) {\n return {\n pageX: position.pageX - state.relX,\n pageY: position.pageY + 5\n };\n };\n var start$1 = function (state, editor) {\n return function (e) {\n if (isLeftMouseButtonPressed(e)) {\n var ceElm = find(editor.dom.getParents(e.target), Predicate.or(isContentEditableFalse$8, isContentEditableTrue$3)).getOr(null);\n if (isDraggable(editor.getBody(), ceElm)) {\n var elmPos = editor.dom.getPos(ceElm);\n var bodyElm = editor.getBody();\n var docElm = editor.getDoc().documentElement;\n state.element = ceElm;\n state.screenX = e.screenX;\n state.screenY = e.screenY;\n state.maxX = (editor.inline ? bodyElm.scrollWidth : docElm.offsetWidth) - 2;\n state.maxY = (editor.inline ? bodyElm.scrollHeight : docElm.offsetHeight) - 2;\n state.relX = e.pageX - elmPos.x;\n state.relY = e.pageY - elmPos.y;\n state.width = ceElm.offsetWidth;\n state.height = ceElm.offsetHeight;\n state.ghost = createGhost(editor, ceElm, state.width, state.height);\n }\n }\n };\n };\n var move$1 = function (state, editor) {\n var throttledPlaceCaretAt = Delay.throttle(function (clientX, clientY) {\n editor._selectionOverrides.hideFakeCaret();\n editor.selection.placeCaretAt(clientX, clientY);\n }, 0);\n return function (e) {\n var movement = Math.max(Math.abs(e.screenX - state.screenX), Math.abs(e.screenY - state.screenY));\n if (hasDraggableElement(state) && !state.dragging && movement > 10) {\n var args = editor.fire('dragstart', { target: state.element });\n if (args.isDefaultPrevented()) {\n return;\n }\n state.dragging = true;\n editor.focus();\n }\n if (state.dragging) {\n var targetPos = applyRelPos(state, MousePosition.calc(editor, e));\n appendGhostToBody(state.ghost, editor.getBody());\n moveGhost(state.ghost, targetPos, state.width, state.height, state.maxX, state.maxY);\n throttledPlaceCaretAt(e.clientX, e.clientY);\n }\n };\n };\n var getRawTarget = function (selection) {\n var rng = selection.getSel().getRangeAt(0);\n var startContainer = rng.startContainer;\n return startContainer.nodeType === 3 ? startContainer.parentNode : startContainer;\n };\n var drop = function (state, editor) {\n return function (e) {\n if (state.dragging) {\n if (isValidDropTarget(editor, getRawTarget(editor.selection), state.element)) {\n var targetClone_1 = cloneElement(state.element);\n var args = editor.fire('drop', {\n targetClone: targetClone_1,\n clientX: e.clientX,\n clientY: e.clientY\n });\n if (!args.isDefaultPrevented()) {\n targetClone_1 = args.targetClone;\n editor.undoManager.transact(function () {\n removeElement(state.element);\n editor.insertContent(editor.dom.getOuterHTML(targetClone_1));\n editor._selectionOverrides.hideFakeCaret();\n });\n }\n }\n }\n removeDragState(state);\n };\n };\n var stop = function (state, editor) {\n return function () {\n if (state.dragging) {\n editor.fire('dragend');\n }\n removeDragState(state);\n };\n };\n var removeDragState = function (state) {\n state.dragging = false;\n state.element = null;\n removeElement(state.ghost);\n };\n var bindFakeDragEvents = function (editor) {\n var state = {};\n var pageDom, dragStartHandler, dragHandler, dropHandler, dragEndHandler, rootDocument;\n pageDom = DOMUtils$1.DOM;\n rootDocument = domGlobals.document;\n dragStartHandler = start$1(state, editor);\n dragHandler = move$1(state, editor);\n dropHandler = drop(state, editor);\n dragEndHandler = stop(state, editor);\n editor.on('mousedown', dragStartHandler);\n editor.on('mousemove', dragHandler);\n editor.on('mouseup', dropHandler);\n pageDom.bind(rootDocument, 'mousemove', dragHandler);\n pageDom.bind(rootDocument, 'mouseup', dragEndHandler);\n editor.on('remove', function () {\n pageDom.unbind(rootDocument, 'mousemove', dragHandler);\n pageDom.unbind(rootDocument, 'mouseup', dragEndHandler);\n });\n };\n var blockIeDrop = function (editor) {\n editor.on('drop', function (e) {\n var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;\n if (isContentEditableFalse$8(realTarget) || isContentEditableFalse$8(editor.dom.getContentEditableParent(realTarget))) {\n e.preventDefault();\n }\n });\n };\n var init = function (editor) {\n bindFakeDragEvents(editor);\n blockIeDrop(editor);\n };\n var DragDropOverrides = { init: init };\n\n var setup$4 = function (editor) {\n var renderFocusCaret = first(function () {\n if (!editor.removed) {\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var caretRange = renderRangeCaret(editor, editor.selection.getRng(), false);\n editor.selection.setRng(caretRange);\n }\n }\n }, 0);\n editor.on('focus', function () {\n renderFocusCaret.throttle();\n });\n editor.on('blur', function () {\n renderFocusCaret.cancel();\n });\n };\n var CefFocus = { setup: setup$4 };\n\n var isContentEditableTrue$4 = NodeType.isContentEditableTrue;\n var isContentEditableFalse$9 = NodeType.isContentEditableFalse;\n var getContentEditableRoot$1 = function (editor, node) {\n var root = editor.getBody();\n while (node && node !== root) {\n if (isContentEditableTrue$4(node) || isContentEditableFalse$9(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var SelectionOverrides = function (editor) {\n var isBlock = function (node) {\n return editor.dom.isBlock(node);\n };\n var rootNode = editor.getBody();\n var fakeCaret = FakeCaret(editor.getBody(), isBlock, function () {\n return EditorFocus.hasFocus(editor);\n });\n var realSelectionId = 'sel-' + editor.dom.uniqueId();\n var selectedContentEditableNode;\n var isFakeSelectionElement = function (elm) {\n return editor.dom.hasClass(elm, 'mce-offscreen-selection');\n };\n var getRealSelectionElement = function () {\n var container = editor.dom.get(realSelectionId);\n return container ? container.getElementsByTagName('*')[0] : container;\n };\n var setRange = function (range) {\n if (range) {\n editor.selection.setRng(range);\n }\n };\n var getRange = function () {\n return editor.selection.getRng();\n };\n var showCaret = function (direction, node, before, scrollIntoView) {\n if (scrollIntoView === void 0) {\n scrollIntoView = true;\n }\n var e;\n e = editor.fire('ShowCaret', {\n target: node,\n direction: direction,\n before: before\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n if (scrollIntoView) {\n editor.selection.scrollIntoView(node, direction === -1);\n }\n return fakeCaret.show(before, node);\n };\n var getNormalizedRangeEndPoint = function (direction, range) {\n range = normalizeRange(direction, rootNode, range);\n if (direction === -1) {\n return CaretPosition$1.fromRangeStart(range);\n }\n return CaretPosition$1.fromRangeEnd(range);\n };\n var showBlockCaretContainer = function (blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n setRange(getRange());\n editor.selection.scrollIntoView(blockCaretContainer[0]);\n }\n };\n var registerEvents = function () {\n editor.on('mouseup', function (e) {\n var range = getRange();\n if (range.collapsed && EditorView.isXYInContentArea(editor, e.clientX, e.clientY)) {\n setRange(renderCaretAtRange(editor, range, false));\n }\n });\n editor.on('click', function (e) {\n var contentEditableRoot;\n contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n editor.focus();\n }\n if (isContentEditableTrue$4(contentEditableRoot)) {\n if (editor.dom.isChildOf(contentEditableRoot, editor.selection.getNode())) {\n removeContentEditableSelection();\n }\n }\n }\n });\n editor.on('blur NewBlock', function () {\n removeContentEditableSelection();\n });\n editor.on('ResizeWindow FullscreenStateChanged', function () {\n return fakeCaret.reposition();\n });\n var handleTouchSelect = function (editor) {\n var moved = false;\n editor.on('touchstart', function () {\n moved = false;\n });\n editor.on('touchmove', function () {\n moved = true;\n });\n editor.on('touchend', function (e) {\n var contentEditableRoot = getContentEditableRoot$1(editor, e.target);\n if (isContentEditableFalse$9(contentEditableRoot)) {\n if (!moved) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n }\n }\n });\n };\n var hasNormalCaretPosition = function (elm) {\n var caretWalker = CaretWalker(elm);\n if (!elm.firstChild) {\n return false;\n }\n var startPos = CaretPosition$1.before(elm.firstChild);\n var newPos = caretWalker.next(startPos);\n return newPos && !isBeforeContentEditableFalse(newPos) && !isAfterContentEditableFalse(newPos);\n };\n var isInSameBlock = function (node1, node2) {\n var block1 = editor.dom.getParent(node1, editor.dom.isBlock);\n var block2 = editor.dom.getParent(node2, editor.dom.isBlock);\n return block1 === block2;\n };\n var hasBetterMouseTarget = function (targetNode, caretNode) {\n var targetBlock = editor.dom.getParent(targetNode, editor.dom.isBlock);\n var caretBlock = editor.dom.getParent(caretNode, editor.dom.isBlock);\n if (targetBlock && editor.dom.isChildOf(targetBlock, caretBlock) && isContentEditableFalse$9(getContentEditableRoot$1(editor, targetBlock)) === false) {\n return true;\n }\n return targetBlock && !isInSameBlock(targetBlock, caretBlock) && hasNormalCaretPosition(targetBlock);\n };\n handleTouchSelect(editor);\n editor.on('mousedown', function (e) {\n var contentEditableRoot;\n var targetElm = e.target;\n if (targetElm !== rootNode && targetElm.nodeName !== 'HTML' && !editor.dom.isChildOf(targetElm, rootNode)) {\n return;\n }\n if (EditorView.isXYInContentArea(editor, e.clientX, e.clientY) === false) {\n return;\n }\n contentEditableRoot = getContentEditableRoot$1(editor, targetElm);\n if (contentEditableRoot) {\n if (isContentEditableFalse$9(contentEditableRoot)) {\n e.preventDefault();\n setContentEditableSelection(selectNode(editor, contentEditableRoot));\n } else {\n removeContentEditableSelection();\n if (!(isContentEditableTrue$4(contentEditableRoot) && e.shiftKey) && !RangePoint.isXYWithinRange(e.clientX, e.clientY, editor.selection.getRng())) {\n hideFakeCaret();\n editor.selection.placeCaretAt(e.clientX, e.clientY);\n }\n }\n } else if (isFakeCaretTarget(targetElm) === false) {\n removeContentEditableSelection();\n hideFakeCaret();\n var caretInfo = closestCaret(rootNode, e.clientX, e.clientY);\n if (caretInfo) {\n if (!hasBetterMouseTarget(e.target, caretInfo.node)) {\n e.preventDefault();\n var range = showCaret(1, caretInfo.node, caretInfo.before, false);\n editor.getBody().focus();\n setRange(range);\n }\n }\n }\n });\n editor.on('keypress', function (e) {\n if (VK.modifierPressed(e)) {\n return;\n }\n switch (e.keyCode) {\n default:\n if (isContentEditableFalse$9(editor.selection.getNode())) {\n e.preventDefault();\n }\n break;\n }\n });\n editor.on('getSelectionRange', function (e) {\n var rng = e.range;\n if (selectedContentEditableNode) {\n if (!selectedContentEditableNode.parentNode) {\n selectedContentEditableNode = null;\n return;\n }\n rng = rng.cloneRange();\n rng.selectNode(selectedContentEditableNode);\n e.range = rng;\n }\n });\n editor.on('setSelectionRange', function (e) {\n e.range = normalizeShortEndedElementSelection(e.range);\n var rng = setContentEditableSelection(e.range, e.forward);\n if (rng) {\n e.range = rng;\n }\n });\n var isPasteBin = function (node) {\n return node.id === 'mcepastebin';\n };\n editor.on('AfterSetSelectionRange', function (e) {\n var rng = e.range;\n if (!isRangeInCaretContainer(rng) && !isPasteBin(rng.startContainer.parentNode)) {\n hideFakeCaret();\n }\n if (!isFakeSelectionElement(rng.startContainer.parentNode)) {\n removeContentEditableSelection();\n }\n });\n editor.on('copy', function (e) {\n var clipboardData = e.clipboardData;\n if (!e.isDefaultPrevented() && e.clipboardData && !Env.ie) {\n var realSelectionElement = getRealSelectionElement();\n if (realSelectionElement) {\n e.preventDefault();\n clipboardData.clearData();\n clipboardData.setData('text/html', realSelectionElement.outerHTML);\n clipboardData.setData('text/plain', realSelectionElement.outerText);\n }\n }\n });\n DragDropOverrides.init(editor);\n CefFocus.setup(editor);\n };\n var addCss = function () {\n var styles = editor.contentStyles, rootClass = '.mce-content-body';\n styles.push(fakeCaret.getCss());\n styles.push(rootClass + ' .mce-offscreen-selection {' + 'position: absolute;' + 'left: -9999999999px;' + 'max-width: 1000000px;' + '}' + rootClass + ' *[contentEditable=false] {' + 'cursor: default;' + '}' + rootClass + ' *[contentEditable=true] {' + 'cursor: text;' + '}');\n };\n var isWithinCaretContainer = function (node) {\n return isCaretContainer(node) || startsWithCaretContainer(node) || endsWithCaretContainer(node);\n };\n var isRangeInCaretContainer = function (rng) {\n return isWithinCaretContainer(rng.startContainer) || isWithinCaretContainer(rng.endContainer);\n };\n var normalizeShortEndedElementSelection = function (rng) {\n var shortEndedElements = editor.schema.getShortEndedElements();\n var newRng = editor.dom.createRng();\n var startContainer = rng.startContainer;\n var startOffset = rng.startOffset;\n var endContainer = rng.endContainer;\n var endOffset = rng.endOffset;\n if (has(shortEndedElements, startContainer.nodeName.toLowerCase())) {\n if (startOffset === 0) {\n newRng.setStartBefore(startContainer);\n } else {\n newRng.setStartAfter(startContainer);\n }\n } else {\n newRng.setStart(startContainer, startOffset);\n }\n if (has(shortEndedElements, endContainer.nodeName.toLowerCase())) {\n if (endOffset === 0) {\n newRng.setEndBefore(endContainer);\n } else {\n newRng.setEndAfter(endContainer);\n }\n } else {\n newRng.setEnd(endContainer, endOffset);\n }\n return newRng;\n };\n var setContentEditableSelection = function (range, forward) {\n var node;\n var $ = editor.$;\n var dom = editor.dom;\n var $realSelectionContainer, sel, startContainer, startOffset, endOffset, e, caretPosition, targetClone, origTargetClone;\n if (!range) {\n return null;\n }\n if (range.collapsed) {\n if (!isRangeInCaretContainer(range)) {\n if (forward === false) {\n caretPosition = getNormalizedRangeEndPoint(-1, range);\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(-1, caretPosition.getNode(true), false, false);\n }\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(-1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n } else {\n caretPosition = getNormalizedRangeEndPoint(1, range);\n if (isFakeCaretTarget(caretPosition.getNode())) {\n return showCaret(1, caretPosition.getNode(), !caretPosition.isAtEnd(), false);\n }\n if (isFakeCaretTarget(caretPosition.getNode(true))) {\n return showCaret(1, caretPosition.getNode(true), false, false);\n }\n }\n }\n return null;\n }\n startContainer = range.startContainer;\n startOffset = range.startOffset;\n endOffset = range.endOffset;\n if (startContainer.nodeType === 3 && startOffset === 0 && isContentEditableFalse$9(startContainer.parentNode)) {\n startContainer = startContainer.parentNode;\n startOffset = dom.nodeIndex(startContainer);\n startContainer = startContainer.parentNode;\n }\n if (startContainer.nodeType !== 1) {\n return null;\n }\n if (endOffset === startOffset + 1 && startContainer === range.endContainer) {\n node = startContainer.childNodes[startOffset];\n }\n if (!isContentEditableFalse$9(node)) {\n return null;\n }\n targetClone = origTargetClone = node.cloneNode(true);\n e = editor.fire('ObjectSelected', {\n target: node,\n targetClone: targetClone\n });\n if (e.isDefaultPrevented()) {\n return null;\n }\n $realSelectionContainer = descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).fold(function () {\n return $([]);\n }, function (elm) {\n return $([elm.dom()]);\n });\n targetClone = e.targetClone;\n if ($realSelectionContainer.length === 0) {\n $realSelectionContainer = $('
').attr('id', realSelectionId);\n $realSelectionContainer.appendTo(editor.getBody());\n }\n range = editor.dom.createRng();\n if (targetClone === origTargetClone && Env.ie) {\n $realSelectionContainer.empty().append('

\\xA0

').append(targetClone);\n range.setStartAfter($realSelectionContainer[0].firstChild.firstChild);\n range.setEndAfter(targetClone);\n } else {\n $realSelectionContainer.empty().append('\\xA0').append(targetClone).append('\\xA0');\n range.setStart($realSelectionContainer[0].firstChild, 1);\n range.setEnd($realSelectionContainer[0].lastChild, 0);\n }\n $realSelectionContainer.css({ top: dom.getPos(node, editor.getBody()).y });\n $realSelectionContainer[0].focus();\n sel = editor.selection.getSel();\n sel.removeAllRanges();\n sel.addRange(range);\n each(descendants$1(Element.fromDom(editor.getBody()), '*[data-mce-selected]'), function (elm) {\n remove(elm, 'data-mce-selected');\n });\n node.setAttribute('data-mce-selected', '1');\n selectedContentEditableNode = node;\n hideFakeCaret();\n return range;\n };\n var removeContentEditableSelection = function () {\n if (selectedContentEditableNode) {\n selectedContentEditableNode.removeAttribute('data-mce-selected');\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n }\n descendant(Element.fromDom(editor.getBody()), '#' + realSelectionId).each(remove$1);\n selectedContentEditableNode = null;\n };\n var destroy = function () {\n fakeCaret.destroy();\n selectedContentEditableNode = null;\n };\n var hideFakeCaret = function () {\n fakeCaret.hide();\n };\n if (Env.ceFalse) {\n registerEvents();\n addCss();\n }\n return {\n showCaret: showCaret,\n showBlockCaretContainer: showBlockCaretContainer,\n hideFakeCaret: hideFakeCaret,\n destroy: destroy\n };\n };\n\n var isValidPrefixAttrName = function (name) {\n return name.indexOf('data-') === 0 || name.indexOf('aria-') === 0;\n };\n var trimComments = function (text) {\n var sanitizedText = text;\n while (/';\n }\n return '';\n };\n var createFragment$1 = function (html) {\n var frag, node, container;\n container = domGlobals.document.createElement('div');\n frag = domGlobals.document.createDocumentFragment();\n if (html) {\n container.innerHTML = html;\n }\n while (node = container.firstChild) {\n frag.appendChild(node);\n }\n return frag;\n };\n var insertAt = function (elm, html, index) {\n var fragment = createFragment$1(html);\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.insertBefore(fragment, target);\n } else {\n elm.appendChild(fragment);\n }\n };\n var removeAt = function (elm, index) {\n if (elm.hasChildNodes() && index < elm.childNodes.length) {\n var target = elm.childNodes[index];\n target.parentNode.removeChild(target);\n }\n };\n var applyDiff = function (diff, elm) {\n var index = 0;\n each(diff, function (action) {\n if (action[0] === Diff.KEEP) {\n index++;\n } else if (action[0] === Diff.INSERT) {\n insertAt(elm, action[1], index);\n index++;\n } else if (action[0] === Diff.DELETE) {\n removeAt(elm, index);\n }\n });\n };\n var read$3 = function (elm) {\n return filter(map(from$1(elm.childNodes), getOuterHtml), function (item) {\n return item.length > 0;\n });\n };\n var write = function (fragments, elm) {\n var currentFragments = map(from$1(elm.childNodes), getOuterHtml);\n applyDiff(Diff.diff(currentFragments, fragments), elm);\n return elm;\n };\n var Fragments = {\n read: read$3,\n write: write\n };\n\n var undoLevelDocument = Cell(Option.none());\n var lazyTempDocument = function () {\n return undoLevelDocument.get().getOrThunk(function () {\n var doc = domGlobals.document.implementation.createHTMLDocument('undo');\n undoLevelDocument.set(Option.some(doc));\n return doc;\n });\n };\n var hasIframes = function (html) {\n return html.indexOf('') !== -1;\n };\n var createFragmentedLevel = function (fragments) {\n return {\n type: 'fragmented',\n fragments: fragments,\n content: '',\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createCompleteLevel = function (content) {\n return {\n type: 'complete',\n fragments: null,\n content: content,\n bookmark: null,\n beforeBookmark: null\n };\n };\n var createFromEditor = function (editor) {\n var fragments, content, trimmedFragments;\n fragments = Fragments.read(editor.getBody());\n trimmedFragments = bind(fragments, function (html) {\n var trimmed = TrimHtml.trimInternal(editor.serializer, html);\n return trimmed.length > 0 ? [trimmed] : [];\n });\n content = trimmedFragments.join('');\n return hasIframes(content) ? createFragmentedLevel(trimmedFragments) : createCompleteLevel(content);\n };\n var applyToEditor = function (editor, level, before) {\n if (level.type === 'fragmented') {\n Fragments.write(level.fragments, editor.getBody());\n } else {\n editor.setContent(level.content, { format: 'raw' });\n }\n editor.selection.moveToBookmark(before ? level.beforeBookmark : level.bookmark);\n };\n var getLevelContent = function (level) {\n return level.type === 'fragmented' ? level.fragments.join('') : level.content;\n };\n var getCleanLevelContent = function (level) {\n var elm = Element.fromTag('body', lazyTempDocument());\n set$1(elm, getLevelContent(level));\n each(descendants$1(elm, '*[data-mce-bogus]'), unwrap);\n return get$3(elm);\n };\n var hasEqualContent = function (level1, level2) {\n return getLevelContent(level1) === getLevelContent(level2);\n };\n var hasEqualCleanedContent = function (level1, level2) {\n return getCleanLevelContent(level1) === getCleanLevelContent(level2);\n };\n var isEq$4 = function (level1, level2) {\n if (!level1 || !level2) {\n return false;\n } else if (hasEqualContent(level1, level2)) {\n return true;\n } else {\n return hasEqualCleanedContent(level1, level2);\n }\n };\n var Levels = {\n createFragmentedLevel: createFragmentedLevel,\n createCompleteLevel: createCompleteLevel,\n createFromEditor: createFromEditor,\n applyToEditor: applyToEditor,\n isEq: isEq$4\n };\n\n function UndoManager (editor) {\n var self = this, index = 0, data = [], beforeBookmark, isFirstTypedCharacter, locks = 0;\n var isUnlocked = function () {\n return locks === 0;\n };\n var setTyping = function (typing) {\n if (isUnlocked()) {\n self.typing = typing;\n }\n };\n var setDirty = function (state) {\n editor.setDirty(state);\n };\n var addNonTypingUndoLevel = function (e) {\n setTyping(false);\n self.add({}, e);\n };\n var endTyping = function () {\n if (self.typing) {\n setTyping(false);\n self.add();\n }\n };\n editor.on('init', function () {\n self.add();\n });\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n endTyping();\n self.beforeChange();\n }\n });\n editor.on('ExecCommand', function (e) {\n var cmd = e.command;\n if (cmd !== 'Undo' && cmd !== 'Redo' && cmd !== 'mceRepaint') {\n addNonTypingUndoLevel(e);\n }\n });\n editor.on('ObjectResizeStart Cut', function () {\n self.beforeChange();\n });\n editor.on('SaveContent ObjectResized blur', addNonTypingUndoLevel);\n editor.on('DragEnd', addNonTypingUndoLevel);\n editor.on('KeyUp', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45 || e.ctrlKey) {\n addNonTypingUndoLevel();\n editor.nodeChanged();\n }\n if (keyCode === 46 || keyCode === 8) {\n editor.nodeChanged();\n }\n if (isFirstTypedCharacter && self.typing && Levels.isEq(Levels.createFromEditor(editor), data[0]) === false) {\n if (editor.isDirty() === false) {\n setDirty(true);\n editor.fire('change', {\n level: data[0],\n lastLevel: null\n });\n }\n editor.fire('TypingUndo');\n isFirstTypedCharacter = false;\n editor.nodeChanged();\n }\n });\n editor.on('KeyDown', function (e) {\n var keyCode = e.keyCode;\n if (e.isDefaultPrevented()) {\n return;\n }\n if (keyCode >= 33 && keyCode <= 36 || keyCode >= 37 && keyCode <= 40 || keyCode === 45) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n return;\n }\n var modKey = e.ctrlKey && !e.altKey || e.metaKey;\n if ((keyCode < 16 || keyCode > 20) && keyCode !== 224 && keyCode !== 91 && !self.typing && !modKey) {\n self.beforeChange();\n setTyping(true);\n self.add({}, e);\n isFirstTypedCharacter = true;\n }\n });\n editor.on('MouseDown', function (e) {\n if (self.typing) {\n addNonTypingUndoLevel(e);\n }\n });\n var isInsertReplacementText = function (event) {\n return event.inputType === 'insertReplacementText';\n };\n var isInsertTextDataNull = function (event) {\n return event.inputType === 'insertText' && event.data === null;\n };\n editor.on('input', function (e) {\n if (e.inputType && (isInsertReplacementText(e) || isInsertTextDataNull(e))) {\n addNonTypingUndoLevel(e);\n }\n });\n editor.addShortcut('meta+z', '', 'Undo');\n editor.addShortcut('meta+y,meta+shift+z', '', 'Redo');\n editor.on('AddUndo Undo Redo ClearUndos', function (e) {\n if (!e.isDefaultPrevented()) {\n editor.nodeChanged();\n }\n });\n self = {\n data: data,\n typing: false,\n beforeChange: function () {\n if (isUnlocked()) {\n beforeBookmark = GetBookmark.getUndoBookmark(editor.selection);\n }\n },\n add: function (level, event) {\n var i;\n var settings = editor.settings;\n var lastLevel, currentLevel;\n currentLevel = Levels.createFromEditor(editor);\n level = level || {};\n level = Tools.extend(level, currentLevel);\n if (isUnlocked() === false || editor.removed) {\n return null;\n }\n lastLevel = data[index];\n if (editor.fire('BeforeAddUndo', {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n }).isDefaultPrevented()) {\n return null;\n }\n if (lastLevel && Levels.isEq(lastLevel, level)) {\n return null;\n }\n if (data[index]) {\n data[index].beforeBookmark = beforeBookmark;\n }\n if (settings.custom_undo_redo_levels) {\n if (data.length > settings.custom_undo_redo_levels) {\n for (i = 0; i < data.length - 1; i++) {\n data[i] = data[i + 1];\n }\n data.length--;\n index = data.length;\n }\n }\n level.bookmark = GetBookmark.getUndoBookmark(editor.selection);\n if (index < data.length - 1) {\n data.length = index + 1;\n }\n data.push(level);\n index = data.length - 1;\n var args = {\n level: level,\n lastLevel: lastLevel,\n originalEvent: event\n };\n editor.fire('AddUndo', args);\n if (index > 0) {\n setDirty(true);\n editor.fire('change', args);\n }\n return level;\n },\n undo: function () {\n var level;\n if (self.typing) {\n self.add();\n self.typing = false;\n setTyping(false);\n }\n if (index > 0) {\n level = data[--index];\n Levels.applyToEditor(editor, level, true);\n setDirty(true);\n editor.fire('undo', { level: level });\n }\n return level;\n },\n redo: function () {\n var level;\n if (index < data.length - 1) {\n level = data[++index];\n Levels.applyToEditor(editor, level, false);\n setDirty(true);\n editor.fire('redo', { level: level });\n }\n return level;\n },\n clear: function () {\n data = [];\n index = 0;\n self.typing = false;\n self.data = data;\n editor.fire('ClearUndos');\n },\n hasUndo: function () {\n return index > 0 || self.typing && data[0] && !Levels.isEq(Levels.createFromEditor(editor), data[0]);\n },\n hasRedo: function () {\n return index < data.length - 1 && !self.typing;\n },\n transact: function (callback) {\n endTyping();\n self.beforeChange();\n self.ignore(callback);\n return self.add();\n },\n ignore: function (callback) {\n try {\n locks++;\n callback();\n } finally {\n locks--;\n }\n },\n extra: function (callback1, callback2) {\n var lastLevel, bookmark;\n if (self.transact(callback1)) {\n bookmark = data[index].bookmark;\n lastLevel = data[index - 1];\n Levels.applyToEditor(editor, lastLevel, true);\n if (self.transact(callback2)) {\n data[index - 1].beforeBookmark = bookmark;\n }\n }\n }\n };\n return self;\n }\n\n var postProcessHooks = {}, filter$2 = ArrUtils.filter, each$c = ArrUtils.each;\n var addPostProcessHook = function (name, hook) {\n var hooks = postProcessHooks[name];\n if (!hooks) {\n postProcessHooks[name] = hooks = [];\n }\n postProcessHooks[name].push(hook);\n };\n var postProcess = function (name, editor) {\n each$c(postProcessHooks[name], function (hook) {\n hook(editor);\n });\n };\n addPostProcessHook('pre', function (editor) {\n var rng = editor.selection.getRng();\n var isPre, blocks;\n var hasPreSibling = function (pre) {\n return isPre(pre.previousSibling) && ArrUtils.indexOf(blocks, pre.previousSibling) !== -1;\n };\n var joinPre = function (pre1, pre2) {\n DomQuery(pre2).remove();\n DomQuery(pre1).append('

').append(pre2.childNodes);\n };\n isPre = NodeType.matchNodeNames('pre');\n if (!rng.collapsed) {\n blocks = editor.selection.getSelectedBlocks();\n each$c(filter$2(filter$2(blocks, isPre), hasPreSibling), function (pre) {\n joinPre(pre.previousSibling, pre);\n });\n }\n });\n var Hooks = { postProcess: postProcess };\n\n var MCE_ATTR_RE = /^(src|href|style)$/;\n var each$d = Tools.each;\n var isEq$5 = FormatUtils.isEq;\n var isTableCell$4 = function (node) {\n return /^(TH|TD)$/.test(node.nodeName);\n };\n var isChildOfInlineParent = function (dom, node, parent) {\n return dom.isChildOf(node, parent) && node !== parent && !dom.isBlock(parent);\n };\n var getContainer = function (ed, rng, start) {\n var container, offset, lastIdx;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (NodeType.isElement(container)) {\n lastIdx = container.childNodes.length - 1;\n if (!start && offset) {\n offset--;\n }\n container = container.childNodes[offset > lastIdx ? lastIdx : offset];\n }\n if (NodeType.isText(container) && start && offset >= container.nodeValue.length) {\n container = new TreeWalker(container, ed.getBody()).next() || container;\n }\n if (NodeType.isText(container) && !start && offset === 0) {\n container = new TreeWalker(container, ed.getBody()).prev() || container;\n }\n return container;\n };\n var wrap$2 = function (dom, node, name, attrs) {\n var wrapper = dom.create(name, attrs);\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n return wrapper;\n };\n var wrapWithSiblings = function (dom, node, next, name, attrs) {\n var start = Element.fromDom(node);\n var wrapper = Element.fromDom(dom.create(name, attrs));\n var siblings = next ? nextSiblings(start) : prevSiblings(start);\n append$1(wrapper, siblings);\n if (next) {\n before(start, wrapper);\n prepend(wrapper, start);\n } else {\n after(start, wrapper);\n append(wrapper, start);\n }\n return wrapper.dom();\n };\n var matchName$1 = function (dom, node, format) {\n if (isEq$5(node, format.inline)) {\n return true;\n }\n if (isEq$5(node, format.block)) {\n return true;\n }\n if (format.selector) {\n return NodeType.isElement(node) && dom.is(node, format.selector);\n }\n };\n var isColorFormatAndAnchor = function (node, format) {\n return format.links && node.tagName === 'A';\n };\n var find$3 = function (dom, node, next, inc) {\n node = FormatUtils.getNonWhiteSpaceSibling(node, next, inc);\n return !node || (node.nodeName === 'BR' || dom.isBlock(node));\n };\n var removeNode$1 = function (ed, node, format) {\n var parentNode = node.parentNode;\n var rootBlockElm;\n var dom = ed.dom, forcedRootBlock = ed.settings.forced_root_block;\n if (format.block) {\n if (!forcedRootBlock) {\n if (dom.isBlock(node) && !dom.isBlock(parentNode)) {\n if (!find$3(dom, node, false) && !find$3(dom, node.firstChild, true, 1)) {\n node.insertBefore(dom.create('br'), node.firstChild);\n }\n if (!find$3(dom, node, true) && !find$3(dom, node.lastChild, false, 1)) {\n node.appendChild(dom.create('br'));\n }\n }\n } else {\n if (parentNode === dom.getRoot()) {\n if (!format.list_block || !isEq$5(node, format.list_block)) {\n each$d(Tools.grep(node.childNodes), function (node) {\n if (FormatUtils.isValid(ed, forcedRootBlock, node.nodeName.toLowerCase())) {\n if (!rootBlockElm) {\n rootBlockElm = wrap$2(dom, node, forcedRootBlock);\n dom.setAttribs(rootBlockElm, ed.settings.forced_root_block_attrs);\n } else {\n rootBlockElm.appendChild(node);\n }\n } else {\n rootBlockElm = 0;\n }\n });\n }\n }\n }\n }\n if (format.selector && format.inline && !isEq$5(format.inline, node)) {\n return;\n }\n dom.remove(node, 1);\n };\n var removeFormat = function (ed, format, vars, node, compareNode) {\n var i, attrs, stylesModified;\n var dom = ed.dom;\n if (!matchName$1(dom, node, format) && !isColorFormatAndAnchor(node, format)) {\n return false;\n }\n if (format.remove !== 'all') {\n each$d(format.styles, function (value, name) {\n value = FormatUtils.normalizeStyleValue(dom, FormatUtils.replaceVars(value, vars), name);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (format.remove_similar || (!compareNode || isEq$5(FormatUtils.getStyle(dom, compareNode, name), value))) {\n dom.setStyle(node, name, '');\n }\n stylesModified = 1;\n });\n if (stylesModified && dom.getAttrib(node, 'style') === '') {\n node.removeAttribute('style');\n node.removeAttribute('data-mce-style');\n }\n each$d(format.attributes, function (value, name) {\n var valueOut;\n value = FormatUtils.replaceVars(value, vars);\n if (typeof name === 'number') {\n name = value;\n compareNode = 0;\n }\n if (!compareNode || isEq$5(dom.getAttrib(compareNode, name), value)) {\n if (name === 'class') {\n value = dom.getAttrib(node, name);\n if (value) {\n valueOut = '';\n each$d(value.split(/\\s+/), function (cls) {\n if (/mce\\-\\w+/.test(cls)) {\n valueOut += (valueOut ? ' ' : '') + cls;\n }\n });\n if (valueOut) {\n dom.setAttrib(node, name, valueOut);\n return;\n }\n }\n }\n if (name === 'class') {\n node.removeAttribute('className');\n }\n if (MCE_ATTR_RE.test(name)) {\n node.removeAttribute('data-mce-' + name);\n }\n node.removeAttribute(name);\n }\n });\n each$d(format.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!compareNode || dom.hasClass(compareNode, value)) {\n dom.removeClass(node, value);\n }\n });\n attrs = dom.getAttribs(node);\n for (i = 0; i < attrs.length; i++) {\n var attrName = attrs[i].nodeName;\n if (attrName.indexOf('_') !== 0 && attrName.indexOf('data-') !== 0) {\n return false;\n }\n }\n }\n if (format.remove !== 'none') {\n removeNode$1(ed, node, format);\n return true;\n }\n };\n var findFormatRoot = function (editor, container, name, vars, similar) {\n var formatRoot;\n each$d(FormatUtils.getParents(editor.dom, container.parentNode).reverse(), function (parent) {\n var format;\n if (!formatRoot && parent.id !== '_start' && parent.id !== '_end') {\n format = MatchFormat.matchNode(editor, parent, name, vars, similar);\n if (format && format.split !== false) {\n formatRoot = parent;\n }\n }\n });\n return formatRoot;\n };\n var wrapAndSplit = function (editor, formatList, formatRoot, container, target, split, format, vars) {\n var parent, clone, lastClone, firstClone, i, formatRootParent;\n var dom = editor.dom;\n if (formatRoot) {\n formatRootParent = formatRoot.parentNode;\n for (parent = container.parentNode; parent && parent !== formatRootParent; parent = parent.parentNode) {\n clone = dom.clone(parent, false);\n for (i = 0; i < formatList.length; i++) {\n if (removeFormat(editor, formatList[i], vars, clone, clone)) {\n clone = 0;\n break;\n }\n }\n if (clone) {\n if (lastClone) {\n clone.appendChild(lastClone);\n }\n if (!firstClone) {\n firstClone = clone;\n }\n lastClone = clone;\n }\n }\n if (split && (!format.mixed || !dom.isBlock(formatRoot))) {\n container = dom.split(formatRoot, container);\n }\n if (lastClone) {\n target.parentNode.insertBefore(lastClone, target);\n firstClone.appendChild(target);\n }\n }\n return container;\n };\n var remove$6 = function (ed, name, vars, node, similar) {\n var formatList = ed.formatter.get(name), format = formatList[0];\n var bookmark, rng, contentEditable = true;\n var dom = ed.dom;\n var selection = ed.selection;\n var splitToFormatRoot = function (container) {\n var formatRoot = findFormatRoot(ed, container, name, vars, similar);\n return wrapAndSplit(ed, formatList, formatRoot, container, container, true, format, vars);\n };\n var isRemoveBookmarkNode = function (node) {\n return Bookmarks.isBookmarkNode(node) && NodeType.isElement(node) && (node.id === '_start' || node.id === '_end');\n };\n var process = function (node) {\n var children, i, l, lastContentEditable, hasContentEditableState;\n if (NodeType.isElement(node) && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n children = Tools.grep(node.childNodes);\n if (contentEditable && !hasContentEditableState) {\n for (i = 0, l = formatList.length; i < l; i++) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n if (format.deep) {\n if (children.length) {\n for (i = 0, l = children.length; i < l; i++) {\n process(children[i]);\n }\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n }\n }\n };\n var unwrap = function (start) {\n var node = dom.get(start ? '_start' : '_end');\n var out = node[start ? 'firstChild' : 'lastChild'];\n if (isRemoveBookmarkNode(out)) {\n out = out[start ? 'firstChild' : 'lastChild'];\n }\n if (NodeType.isText(out) && out.data.length === 0) {\n out = start ? node.previousSibling || node.nextSibling : node.nextSibling || node.previousSibling;\n }\n dom.remove(node, true);\n return out;\n };\n var removeRngStyle = function (rng) {\n var startContainer, endContainer;\n var commonAncestorContainer = rng.commonAncestorContainer;\n rng = ExpandRange.expandRng(ed, rng, formatList, true);\n if (format.split) {\n rng = SplitRange.split(rng);\n startContainer = getContainer(ed, rng, true);\n endContainer = getContainer(ed, rng);\n if (startContainer !== endContainer) {\n if (/^(TR|TH|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {\n if (startContainer.nodeName === 'TR') {\n startContainer = startContainer.firstChild.firstChild || startContainer;\n } else {\n startContainer = startContainer.firstChild || startContainer;\n }\n }\n if (commonAncestorContainer && /^T(HEAD|BODY|FOOT|R)$/.test(commonAncestorContainer.nodeName) && isTableCell$4(endContainer) && endContainer.firstChild) {\n endContainer = endContainer.firstChild || endContainer;\n }\n if (isChildOfInlineParent(dom, startContainer, endContainer)) {\n var marker = Option.from(startContainer.firstChild).getOr(startContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, true, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(true);\n return;\n }\n if (isChildOfInlineParent(dom, endContainer, startContainer)) {\n var marker = Option.from(endContainer.lastChild).getOr(endContainer);\n splitToFormatRoot(wrapWithSiblings(dom, marker, false, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n }));\n unwrap(false);\n return;\n }\n startContainer = wrap$2(dom, startContainer, 'span', {\n 'id': '_start',\n 'data-mce-type': 'bookmark'\n });\n endContainer = wrap$2(dom, endContainer, 'span', {\n 'id': '_end',\n 'data-mce-type': 'bookmark'\n });\n splitToFormatRoot(startContainer);\n splitToFormatRoot(endContainer);\n startContainer = unwrap(true);\n endContainer = unwrap();\n } else {\n startContainer = endContainer = splitToFormatRoot(startContainer);\n }\n rng.startContainer = startContainer.parentNode ? startContainer.parentNode : startContainer;\n rng.startOffset = dom.nodeIndex(startContainer);\n rng.endContainer = endContainer.parentNode ? endContainer.parentNode : endContainer;\n rng.endOffset = dom.nodeIndex(endContainer) + 1;\n }\n RangeWalk.walk(dom, rng, function (nodes) {\n each$d(nodes, function (node) {\n process(node);\n if (NodeType.isElement(node) && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && FormatUtils.getTextDecoration(dom, node.parentNode) === 'underline') {\n removeFormat(ed, {\n deep: false,\n exact: true,\n inline: 'span',\n styles: { textDecoration: 'underline' }\n }, null, node);\n }\n });\n });\n };\n if (node) {\n if (node.nodeType) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n removeRngStyle(rng);\n } else {\n removeRngStyle(node);\n }\n return;\n }\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride) {\n if (removeFormat(ed, formatList[i], vars, node, node)) {\n break;\n }\n }\n }\n return;\n }\n if (!selection.isCollapsed() || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n removeRngStyle(selection.getRng());\n selection.moveToBookmark(bookmark);\n if (format.inline && MatchFormat.match(ed, name, vars, selection.getStart())) {\n FormatUtils.moveStart(dom, selection, selection.getRng());\n }\n ed.nodeChanged();\n } else {\n removeCaretFormat(ed, name, vars, similar);\n }\n };\n var RemoveFormat = {\n removeFormat: removeFormat,\n remove: remove$6\n };\n\n var each$e = Tools.each;\n var isElementNode = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var findElementSibling = function (node, siblingName) {\n var sibling;\n for (sibling = node; sibling; sibling = sibling[siblingName]) {\n if (sibling.nodeType === 3 && sibling.nodeValue.length !== 0) {\n return node;\n }\n if (sibling.nodeType === 1 && !Bookmarks.isBookmarkNode(sibling)) {\n return sibling;\n }\n }\n return node;\n };\n var mergeSiblingsNodes = function (dom, prev, next) {\n var sibling, tmpSibling;\n var elementUtils = new ElementUtils(dom);\n if (prev && next) {\n prev = findElementSibling(prev, 'previousSibling');\n next = findElementSibling(next, 'nextSibling');\n if (elementUtils.compare(prev, next)) {\n for (sibling = prev.nextSibling; sibling && sibling !== next;) {\n tmpSibling = sibling;\n sibling = sibling.nextSibling;\n prev.appendChild(tmpSibling);\n }\n dom.remove(next);\n Tools.each(Tools.grep(next.childNodes), function (node) {\n prev.appendChild(node);\n });\n return prev;\n }\n }\n return next;\n };\n var processChildElements = function (node, filter, process) {\n each$e(node.childNodes, function (node) {\n if (isElementNode(node)) {\n if (filter(node)) {\n process(node);\n }\n if (node.hasChildNodes()) {\n processChildElements(node, filter, process);\n }\n }\n });\n };\n var hasStyle = function (dom, name) {\n return curry(function (name, node) {\n return !!(node && FormatUtils.getStyle(dom, node, name));\n }, name);\n };\n var applyStyle = function (dom, name, value) {\n return curry(function (name, value, node) {\n dom.setStyle(node, name, value);\n if (node.getAttribute('style') === '') {\n node.removeAttribute('style');\n }\n unwrapEmptySpan(dom, node);\n }, name, value);\n };\n var unwrapEmptySpan = function (dom, node) {\n if (node.nodeName === 'SPAN' && dom.getAttribs(node).length === 0) {\n dom.remove(node, true);\n }\n };\n var processUnderlineAndColor = function (dom, node) {\n var textDecoration;\n if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {\n textDecoration = FormatUtils.getTextDecoration(dom, node.parentNode);\n if (dom.getStyle(node, 'color') && textDecoration) {\n dom.setStyle(node, 'text-decoration', textDecoration);\n } else if (dom.getStyle(node, 'text-decoration') === textDecoration) {\n dom.setStyle(node, 'text-decoration', null);\n }\n }\n };\n var mergeUnderlineAndColor = function (dom, format, vars, node) {\n if (format.styles.color || format.styles.textDecoration) {\n Tools.walk(node, curry(processUnderlineAndColor, dom), 'childNodes');\n processUnderlineAndColor(dom, node);\n }\n };\n var mergeBackgroundColorAndFontSize = function (dom, format, vars, node) {\n if (format.styles && format.styles.backgroundColor) {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'backgroundColor', FormatUtils.replaceVars(format.styles.backgroundColor, vars)));\n }\n };\n var mergeSubSup = function (dom, format, vars, node) {\n if (format.inline === 'sub' || format.inline === 'sup') {\n processChildElements(node, hasStyle(dom, 'fontSize'), applyStyle(dom, 'fontSize', ''));\n dom.remove(dom.select(format.inline === 'sup' ? 'sub' : 'sup', node), true);\n }\n };\n var mergeSiblings = function (dom, format, vars, node) {\n if (node && format.merge_siblings !== false) {\n node = mergeSiblingsNodes(dom, FormatUtils.getNonWhiteSpaceSibling(node), node);\n node = mergeSiblingsNodes(dom, node, FormatUtils.getNonWhiteSpaceSibling(node, true));\n }\n };\n var clearChildStyles = function (dom, format, node) {\n if (format.clear_child_styles) {\n var selector = format.links ? '*:not(a)' : '*';\n each$e(dom.select(selector, node), function (node) {\n if (isElementNode(node)) {\n each$e(format.styles, function (value, name) {\n dom.setStyle(node, name, '');\n });\n }\n });\n }\n };\n var mergeWithChildren = function (editor, formatList, vars, node) {\n each$e(formatList, function (format) {\n each$e(editor.dom.select(format.inline, node), function (child) {\n if (!isElementNode(child)) {\n return;\n }\n RemoveFormat.removeFormat(editor, format, vars, child, format.exact ? child : null);\n });\n clearChildStyles(editor.dom, format, node);\n });\n };\n var mergeWithParents = function (editor, format, name, vars, node) {\n if (MatchFormat.matchNode(editor, node.parentNode, name, vars)) {\n if (RemoveFormat.removeFormat(editor, format, vars, node)) {\n return;\n }\n }\n if (format.merge_with_parents) {\n editor.dom.getParent(node.parentNode, function (parent) {\n if (MatchFormat.matchNode(editor, parent, name, vars)) {\n RemoveFormat.removeFormat(editor, format, vars, node);\n return true;\n }\n });\n }\n };\n var MergeFormats = {\n mergeWithChildren: mergeWithChildren,\n mergeUnderlineAndColor: mergeUnderlineAndColor,\n mergeBackgroundColorAndFontSize: mergeBackgroundColorAndFontSize,\n mergeSubSup: mergeSubSup,\n mergeSiblings: mergeSiblings,\n mergeWithParents: mergeWithParents\n };\n\n var each$f = Tools.each;\n var isElementNode$1 = function (node) {\n return node && node.nodeType === 1 && !Bookmarks.isBookmarkNode(node) && !isCaretNode(node) && !NodeType.isBogus(node);\n };\n var applyFormat = function (ed, name, vars, node) {\n var formatList = ed.formatter.get(name);\n var format = formatList[0];\n var bookmark, rng;\n var isCollapsed = !node && ed.selection.isCollapsed();\n var dom = ed.dom, selection = ed.selection;\n var setElementFormat = function (elm, fmt) {\n fmt = fmt || format;\n if (elm) {\n if (fmt.onformat) {\n fmt.onformat(elm, fmt, vars, node);\n }\n each$f(fmt.styles, function (value, name) {\n dom.setStyle(elm, name, FormatUtils.replaceVars(value, vars));\n });\n if (fmt.styles) {\n var styleVal = dom.getAttrib(elm, 'style');\n if (styleVal) {\n elm.setAttribute('data-mce-style', styleVal);\n }\n }\n each$f(fmt.attributes, function (value, name) {\n dom.setAttrib(elm, name, FormatUtils.replaceVars(value, vars));\n });\n each$f(fmt.classes, function (value) {\n value = FormatUtils.replaceVars(value, vars);\n if (!dom.hasClass(elm, value)) {\n dom.addClass(elm, value);\n }\n });\n }\n };\n var applyNodeStyle = function (formatList, node) {\n var found = false;\n if (!format.selector) {\n return false;\n }\n each$f(formatList, function (format) {\n if ('collapsed' in format && format.collapsed !== isCollapsed) {\n return;\n }\n if (dom.is(node, format.selector) && !isCaretNode(node)) {\n setElementFormat(node, format);\n found = true;\n return false;\n }\n });\n return found;\n };\n var applyRngStyle = function (dom, rng, bookmark, nodeSpecific) {\n var newWrappers = [];\n var wrapName, wrapElm, contentEditable = true;\n wrapName = format.inline || format.block;\n wrapElm = dom.create(wrapName);\n setElementFormat(wrapElm);\n RangeWalk.walk(dom, rng, function (nodes) {\n var currentWrapElm;\n var process = function (node) {\n var nodeName, parentName, hasContentEditableState, lastContentEditable;\n lastContentEditable = contentEditable;\n nodeName = node.nodeName.toLowerCase();\n parentName = node.parentNode.nodeName.toLowerCase();\n if (node.nodeType === 1 && dom.getContentEditable(node)) {\n lastContentEditable = contentEditable;\n contentEditable = dom.getContentEditable(node) === 'true';\n hasContentEditableState = true;\n }\n if (FormatUtils.isEq(nodeName, 'br')) {\n currentWrapElm = 0;\n if (format.block) {\n dom.remove(node);\n }\n return;\n }\n if (format.wrapper && MatchFormat.matchNode(ed, node, name, vars)) {\n currentWrapElm = 0;\n return;\n }\n if (contentEditable && !hasContentEditableState && format.block && !format.wrapper && FormatUtils.isTextBlock(ed, nodeName) && FormatUtils.isValid(ed, parentName, wrapName)) {\n node = dom.rename(node, wrapName);\n setElementFormat(node);\n newWrappers.push(node);\n currentWrapElm = 0;\n return;\n }\n if (format.selector) {\n var found = applyNodeStyle(formatList, node);\n if (!format.inline || found) {\n currentWrapElm = 0;\n return;\n }\n }\n if (contentEditable && !hasContentEditableState && FormatUtils.isValid(ed, wrapName, nodeName) && FormatUtils.isValid(ed, parentName, wrapName) && !(!nodeSpecific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node) && (!format.inline || !dom.isBlock(node))) {\n if (!currentWrapElm) {\n currentWrapElm = dom.clone(wrapElm, false);\n node.parentNode.insertBefore(currentWrapElm, node);\n newWrappers.push(currentWrapElm);\n }\n currentWrapElm.appendChild(node);\n } else {\n currentWrapElm = 0;\n each$f(Tools.grep(node.childNodes), process);\n if (hasContentEditableState) {\n contentEditable = lastContentEditable;\n }\n currentWrapElm = 0;\n }\n };\n each$f(nodes, process);\n });\n if (format.links === true) {\n each$f(newWrappers, function (node) {\n var process = function (node) {\n if (node.nodeName === 'A') {\n setElementFormat(node, format);\n }\n each$f(Tools.grep(node.childNodes), process);\n };\n process(node);\n });\n }\n each$f(newWrappers, function (node) {\n var childCount;\n var getChildCount = function (node) {\n var count = 0;\n each$f(node.childNodes, function (node) {\n if (!FormatUtils.isWhiteSpaceNode(node) && !Bookmarks.isBookmarkNode(node)) {\n count++;\n }\n });\n return count;\n };\n var getChildElementNode = function (root) {\n var child = false;\n each$f(root.childNodes, function (node) {\n if (isElementNode$1(node)) {\n child = node;\n return false;\n }\n });\n return child;\n };\n var mergeStyles = function (node) {\n var child, clone;\n child = getChildElementNode(node);\n if (child && !Bookmarks.isBookmarkNode(child) && MatchFormat.matchName(dom, child, format)) {\n clone = dom.clone(child, false);\n setElementFormat(clone);\n dom.replace(clone, node, true);\n dom.remove(child, 1);\n }\n return clone || node;\n };\n childCount = getChildCount(node);\n if ((newWrappers.length > 1 || !dom.isBlock(node)) && childCount === 0) {\n dom.remove(node, 1);\n return;\n }\n if (format.inline || format.wrapper) {\n if (!format.exact && childCount === 1) {\n node = mergeStyles(node);\n }\n MergeFormats.mergeWithChildren(ed, formatList, vars, node);\n MergeFormats.mergeWithParents(ed, format, name, vars, node);\n MergeFormats.mergeBackgroundColorAndFontSize(dom, format, vars, node);\n MergeFormats.mergeSubSup(dom, format, vars, node);\n MergeFormats.mergeSiblings(dom, format, vars, node);\n }\n });\n };\n if (dom.getContentEditable(selection.getNode()) === 'false') {\n node = selection.getNode();\n for (var i = 0, l = formatList.length; i < l; i++) {\n if (formatList[i].ceFalseOverride && dom.is(node, formatList[i].selector)) {\n setElementFormat(node, formatList[i]);\n return;\n }\n }\n return;\n }\n if (format) {\n if (node) {\n if (node.nodeType) {\n if (!applyNodeStyle(formatList, node)) {\n rng = dom.createRng();\n rng.setStartBefore(node);\n rng.setEndAfter(node);\n applyRngStyle(dom, ExpandRange.expandRng(ed, rng, formatList), null, true);\n }\n } else {\n applyRngStyle(dom, node, null, true);\n }\n } else {\n if (!isCollapsed || !format.inline || dom.select('td[data-mce-selected],th[data-mce-selected]').length) {\n var curSelNode = ed.selection.getNode();\n if (!ed.settings.forced_root_block && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {\n applyFormat(ed, formatList[0].defaultBlock);\n }\n ed.selection.setRng(RangeNormalizer.normalize(ed.selection.getRng()));\n bookmark = GetBookmark.getPersistentBookmark(ed.selection, true);\n applyRngStyle(dom, ExpandRange.expandRng(ed, selection.getRng(), formatList));\n if (format.styles) {\n MergeFormats.mergeUnderlineAndColor(dom, format, vars, curSelNode);\n }\n selection.moveToBookmark(bookmark);\n FormatUtils.moveStart(dom, selection, selection.getRng());\n ed.nodeChanged();\n } else {\n applyCaretFormat(ed, name, vars);\n }\n }\n Hooks.postProcess(name, ed);\n }\n };\n var ApplyFormat = { applyFormat: applyFormat };\n\n var each$g = Tools.each;\n var setup$5 = function (formatChangeData, editor) {\n var currentFormats = {};\n formatChangeData.set({});\n editor.on('NodeChange', function (e) {\n var parents = FormatUtils.getParents(editor.dom, e.element);\n var matchedFormats = {};\n parents = Tools.grep(parents, function (node) {\n return node.nodeType === 1 && !node.getAttribute('data-mce-bogus');\n });\n each$g(formatChangeData.get(), function (callbacks, format) {\n each$g(parents, function (node) {\n if (editor.formatter.matchNode(node, format, {}, callbacks.similar)) {\n if (!currentFormats[format]) {\n each$g(callbacks, function (callback) {\n callback(true, {\n node: node,\n format: format,\n parents: parents\n });\n });\n currentFormats[format] = callbacks;\n }\n matchedFormats[format] = callbacks;\n return false;\n }\n if (MatchFormat.matchesUnInheritedFormatSelector(editor, node, format)) {\n return false;\n }\n });\n });\n each$g(currentFormats, function (callbacks, format) {\n if (!matchedFormats[format]) {\n delete currentFormats[format];\n each$g(callbacks, function (callback) {\n callback(false, {\n node: e.element,\n format: format,\n parents: parents\n });\n });\n }\n });\n });\n };\n var addListeners = function (formatChangeData, formats, callback, similar) {\n var formatChangeItems = formatChangeData.get();\n each$g(formats.split(','), function (format) {\n if (!formatChangeItems[format]) {\n formatChangeItems[format] = [];\n formatChangeItems[format].similar = similar;\n }\n formatChangeItems[format].push(callback);\n });\n formatChangeData.set(formatChangeItems);\n };\n var formatChanged = function (editor, formatChangeState, formats, callback, similar) {\n if (formatChangeState.get() === null) {\n setup$5(formatChangeState, editor);\n }\n addListeners(formatChangeState, formats, callback, similar);\n };\n var FormatChanged = { formatChanged: formatChanged };\n\n var get$5 = function (dom) {\n var formats = {\n valigntop: [{\n selector: 'td,th',\n styles: { verticalAlign: 'top' }\n }],\n valignmiddle: [{\n selector: 'td,th',\n styles: { verticalAlign: 'middle' }\n }],\n valignbottom: [{\n selector: 'td,th',\n styles: { verticalAlign: 'bottom' }\n }],\n alignleft: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-left',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'left' },\n inherit: false,\n preview: false,\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'left' },\n preview: 'font-family font-size'\n }\n ],\n aligncenter: [\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'center' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-center',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'img',\n collapsed: false,\n styles: {\n display: 'block',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: false\n },\n {\n selector: 'table',\n collapsed: false,\n styles: {\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n preview: 'font-family font-size'\n }\n ],\n alignright: [\n {\n selector: 'figure.image',\n collapsed: false,\n classes: 'align-right',\n ceFalseOverride: true,\n preview: 'font-family font-size'\n },\n {\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'right' },\n inherit: false,\n preview: 'font-family font-size',\n defaultBlock: 'div'\n },\n {\n selector: 'img,table',\n collapsed: false,\n styles: { float: 'right' },\n preview: 'font-family font-size'\n }\n ],\n alignjustify: [{\n selector: 'figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li',\n styles: { textAlign: 'justify' },\n inherit: false,\n defaultBlock: 'div',\n preview: 'font-family font-size'\n }],\n bold: [\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n },\n {\n inline: 'b',\n remove: 'all'\n }\n ],\n italic: [\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n },\n {\n inline: 'i',\n remove: 'all'\n }\n ],\n underline: [\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n },\n {\n inline: 'u',\n remove: 'all'\n }\n ],\n strikethrough: [\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n },\n {\n inline: 'strike',\n remove: 'all'\n }\n ],\n forecolor: {\n inline: 'span',\n styles: { color: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n hilitecolor: {\n inline: 'span',\n styles: { backgroundColor: '%value' },\n links: true,\n remove_similar: true,\n clear_child_styles: true\n },\n fontname: {\n inline: 'span',\n toggle: false,\n styles: { fontFamily: '%value' },\n clear_child_styles: true\n },\n fontsize: {\n inline: 'span',\n toggle: false,\n styles: { fontSize: '%value' },\n clear_child_styles: true\n },\n fontsize_class: {\n inline: 'span',\n attributes: { class: '%value' }\n },\n blockquote: {\n block: 'blockquote',\n wrapper: 1,\n remove: 'all'\n },\n subscript: { inline: 'sub' },\n superscript: { inline: 'sup' },\n code: { inline: 'code' },\n link: {\n inline: 'a',\n selector: 'a',\n remove: 'all',\n split: true,\n deep: true,\n onmatch: function () {\n return true;\n },\n onformat: function (elm, fmt, vars) {\n Tools.each(vars, function (value, key) {\n dom.setAttrib(elm, key, value);\n });\n }\n },\n removeformat: [\n {\n selector: 'b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins',\n remove: 'all',\n split: true,\n expand: false,\n block_expand: true,\n deep: true\n },\n {\n selector: 'span',\n attributes: [\n 'style',\n 'class'\n ],\n remove: 'empty',\n split: true,\n expand: false,\n deep: true\n },\n {\n selector: '*',\n attributes: [\n 'style',\n 'class'\n ],\n split: false,\n expand: false,\n deep: true\n }\n ]\n };\n Tools.each('p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp'.split(/\\s/), function (name) {\n formats[name] = {\n block: name,\n remove: 'all'\n };\n });\n return formats;\n };\n var DefaultFormats = { get: get$5 };\n\n function FormatRegistry (editor) {\n var formats = {};\n var get = function (name) {\n return name ? formats[name] : formats;\n };\n var register = function (name, format) {\n if (name) {\n if (typeof name !== 'string') {\n Tools.each(name, function (format, name) {\n register(name, format);\n });\n } else {\n format = format.length ? format : [format];\n Tools.each(format, function (format) {\n if (typeof format.deep === 'undefined') {\n format.deep = !format.selector;\n }\n if (typeof format.split === 'undefined') {\n format.split = !format.selector || format.inline;\n }\n if (typeof format.remove === 'undefined' && format.selector && !format.inline) {\n format.remove = 'none';\n }\n if (format.selector && format.inline) {\n format.mixed = true;\n format.block_expand = true;\n }\n if (typeof format.classes === 'string') {\n format.classes = format.classes.split(/\\s+/);\n }\n });\n formats[name] = format;\n }\n }\n };\n var unregister = function (name) {\n if (name && formats[name]) {\n delete formats[name];\n }\n return formats;\n };\n register(DefaultFormats.get(editor.dom));\n register(editor.settings.formats);\n return {\n get: get,\n register: register,\n unregister: unregister\n };\n }\n\n var each$h = Tools.each;\n var dom = DOMUtils$1.DOM;\n var parsedSelectorToHtml = function (ancestry, editor) {\n var elm, item, fragment;\n var schema = editor && editor.schema || Schema({});\n var decorate = function (elm, item) {\n if (item.classes.length) {\n dom.addClass(elm, item.classes.join(' '));\n }\n dom.setAttribs(elm, item.attrs);\n };\n var createElement = function (sItem) {\n var elm;\n item = typeof sItem === 'string' ? {\n name: sItem,\n classes: [],\n attrs: {}\n } : sItem;\n elm = dom.create(item.name);\n decorate(elm, item);\n return elm;\n };\n var getRequiredParent = function (elm, candidate) {\n var name = typeof elm !== 'string' ? elm.nodeName.toLowerCase() : elm;\n var elmRule = schema.getElementRule(name);\n var parentsRequired = elmRule && elmRule.parentsRequired;\n if (parentsRequired && parentsRequired.length) {\n return candidate && Tools.inArray(parentsRequired, candidate) !== -1 ? candidate : parentsRequired[0];\n } else {\n return false;\n }\n };\n var wrapInHtml = function (elm, ancestry, siblings) {\n var parent, parentCandidate, parentRequired;\n var ancestor = ancestry.length > 0 && ancestry[0];\n var ancestorName = ancestor && ancestor.name;\n parentRequired = getRequiredParent(elm, ancestorName);\n if (parentRequired) {\n if (ancestorName === parentRequired) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else {\n parentCandidate = parentRequired;\n }\n } else if (ancestor) {\n parentCandidate = ancestry[0];\n ancestry = ancestry.slice(1);\n } else if (!siblings) {\n return elm;\n }\n if (parentCandidate) {\n parent = createElement(parentCandidate);\n parent.appendChild(elm);\n }\n if (siblings) {\n if (!parent) {\n parent = dom.create('div');\n parent.appendChild(elm);\n }\n Tools.each(siblings, function (sibling) {\n var siblingElm = createElement(sibling);\n parent.insertBefore(siblingElm, elm);\n });\n }\n return wrapInHtml(parent, ancestry, parentCandidate && parentCandidate.siblings);\n };\n if (ancestry && ancestry.length) {\n item = ancestry[0];\n elm = createElement(item);\n fragment = dom.create('div');\n fragment.appendChild(wrapInHtml(elm, ancestry.slice(1), item.siblings));\n return fragment;\n } else {\n return '';\n }\n };\n var selectorToHtml = function (selector, editor) {\n return parsedSelectorToHtml(parseSelector(selector), editor);\n };\n var parseSelectorItem = function (item) {\n var tagName;\n var obj = {\n classes: [],\n attrs: {}\n };\n item = obj.selector = Tools.trim(item);\n if (item !== '*') {\n tagName = item.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g, function ($0, $1, $2, $3, $4) {\n switch ($1) {\n case '#':\n obj.attrs.id = $2;\n break;\n case '.':\n obj.classes.push($2);\n break;\n case ':':\n if (Tools.inArray('checked disabled enabled read-only required'.split(' '), $2) !== -1) {\n obj.attrs[$2] = $2;\n }\n break;\n }\n if ($3 === '[') {\n var m = $4.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);\n if (m) {\n obj.attrs[m[1]] = m[2];\n }\n }\n return '';\n });\n }\n obj.name = tagName || 'div';\n return obj;\n };\n var parseSelector = function (selector) {\n if (!selector || typeof selector !== 'string') {\n return [];\n }\n selector = selector.split(/\\s*,\\s*/)[0];\n selector = selector.replace(/\\s*(~\\+|~|\\+|>)\\s*/g, '$1');\n return Tools.map(selector.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/), function (item) {\n var siblings = Tools.map(item.split(/(?:~\\+|~|\\+)/), parseSelectorItem);\n var obj = siblings.pop();\n if (siblings.length) {\n obj.siblings = siblings;\n }\n return obj;\n }).reverse();\n };\n var getCssText = function (editor, format) {\n var name, previewFrag, previewElm, items;\n var previewCss = '', parentFontSize, previewStyles;\n previewStyles = editor.settings.preview_styles;\n if (previewStyles === false) {\n return '';\n }\n if (typeof previewStyles !== 'string') {\n previewStyles = 'font-family font-size font-weight font-style text-decoration ' + 'text-transform color background-color border border-radius outline text-shadow';\n }\n var removeVars = function (val) {\n return val.replace(/%(\\w+)/g, '');\n };\n if (typeof format === 'string') {\n format = editor.formatter.get(format);\n if (!format) {\n return;\n }\n format = format[0];\n }\n if ('preview' in format) {\n previewStyles = format.preview;\n if (previewStyles === false) {\n return '';\n }\n }\n name = format.block || format.inline || 'span';\n items = parseSelector(format.selector);\n if (items.length) {\n if (!items[0].name) {\n items[0].name = name;\n }\n name = format.selector;\n previewFrag = parsedSelectorToHtml(items, editor);\n } else {\n previewFrag = parsedSelectorToHtml([name], editor);\n }\n previewElm = dom.select(name, previewFrag)[0] || previewFrag.firstChild;\n each$h(format.styles, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setStyle(previewElm, name, value);\n }\n });\n each$h(format.attributes, function (value, name) {\n value = removeVars(value);\n if (value) {\n dom.setAttrib(previewElm, name, value);\n }\n });\n each$h(format.classes, function (value) {\n value = removeVars(value);\n if (!dom.hasClass(previewElm, value)) {\n dom.addClass(previewElm, value);\n }\n });\n editor.fire('PreviewFormats');\n dom.setStyles(previewFrag, {\n position: 'absolute',\n left: -65535\n });\n editor.getBody().appendChild(previewFrag);\n parentFontSize = dom.getStyle(editor.getBody(), 'fontSize', true);\n parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;\n each$h(previewStyles.split(' '), function (name) {\n var value = dom.getStyle(previewElm, name, true);\n if (name === 'background-color' && /transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(value)) {\n value = dom.getStyle(editor.getBody(), name, true);\n if (dom.toHex(value).toLowerCase() === '#ffffff') {\n return;\n }\n }\n if (name === 'color') {\n if (dom.toHex(value).toLowerCase() === '#000000') {\n return;\n }\n }\n if (name === 'font-size') {\n if (/em|%$/.test(value)) {\n if (parentFontSize === 0) {\n return;\n }\n var numValue = parseFloat(value) / (/%$/.test(value) ? 100 : 1);\n value = numValue * parentFontSize + 'px';\n }\n }\n if (name === 'border' && value) {\n previewCss += 'padding:0 2px;';\n }\n previewCss += name + ':' + value + ';';\n });\n editor.fire('AfterPreviewFormats');\n dom.remove(previewFrag);\n return previewCss;\n };\n var Preview = {\n getCssText: getCssText,\n parseSelector: parseSelector,\n selectorToHtml: selectorToHtml\n };\n\n var toggle = function (editor, formats, name, vars, node) {\n var fmt = formats.get(name);\n if (MatchFormat.match(editor, name, vars, node) && (!('toggle' in fmt[0]) || fmt[0].toggle)) {\n RemoveFormat.remove(editor, name, vars, node);\n } else {\n ApplyFormat.applyFormat(editor, name, vars, node);\n }\n };\n var ToggleFormat = { toggle: toggle };\n\n var setup$6 = function (editor) {\n editor.addShortcut('meta+b', '', 'Bold');\n editor.addShortcut('meta+i', '', 'Italic');\n editor.addShortcut('meta+u', '', 'Underline');\n for (var i = 1; i <= 6; i++) {\n editor.addShortcut('access+' + i, '', [\n 'FormatBlock',\n false,\n 'h' + i\n ]);\n }\n editor.addShortcut('access+7', '', [\n 'FormatBlock',\n false,\n 'p'\n ]);\n editor.addShortcut('access+8', '', [\n 'FormatBlock',\n false,\n 'div'\n ]);\n editor.addShortcut('access+9', '', [\n 'FormatBlock',\n false,\n 'address'\n ]);\n };\n var FormatShortcuts = { setup: setup$6 };\n\n function Formatter (editor) {\n var formats = FormatRegistry(editor);\n var formatChangeState = Cell(null);\n FormatShortcuts.setup(editor);\n setup$2(editor);\n return {\n get: formats.get,\n register: formats.register,\n unregister: formats.unregister,\n apply: curry(ApplyFormat.applyFormat, editor),\n remove: curry(RemoveFormat.remove, editor),\n toggle: curry(ToggleFormat.toggle, editor, formats),\n match: curry(MatchFormat.match, editor),\n matchAll: curry(MatchFormat.matchAll, editor),\n matchNode: curry(MatchFormat.matchNode, editor),\n canApply: curry(MatchFormat.canApply, editor),\n formatChanged: curry(FormatChanged.formatChanged, editor, formatChangeState),\n getCssText: curry(Preview.getCssText, editor)\n };\n }\n\n var hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty$2.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow$1);\n\n var register = function (htmlParser, settings, dom) {\n htmlParser.addAttributeFilter('data-mce-tabindex', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.attr('tabindex', node.attributes.map['data-mce-tabindex']);\n node.attr(name, null);\n }\n });\n htmlParser.addAttributeFilter('src,href,style', function (nodes, name) {\n var i = nodes.length, node, value;\n var internalName = 'data-mce-' + name;\n var urlConverter = settings.url_converter;\n var urlConverterScope = settings.url_converter_scope;\n while (i--) {\n node = nodes[i];\n value = node.attributes.map[internalName];\n if (value !== undefined) {\n node.attr(name, value.length > 0 ? value : null);\n node.attr(internalName, null);\n } else {\n value = node.attributes.map[name];\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n } else if (urlConverter) {\n value = urlConverter.call(urlConverterScope, value, name, node.name);\n }\n node.attr(name, value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, value;\n while (i--) {\n node = nodes[i];\n value = node.attr('class');\n if (value) {\n value = node.attr('class').replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g, '');\n node.attr('class', value.length > 0 ? value : null);\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes, name, args) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup) {\n var hasChildren = Option.from(node.firstChild).exists(function (firstChild) {\n return !Zwsp.isZwsp(firstChild.value);\n });\n if (hasChildren) {\n node.unwrap();\n } else {\n node.remove();\n }\n }\n }\n });\n htmlParser.addNodeFilter('noscript', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i].firstChild;\n if (node) {\n node.value = Entities.decode(node.value);\n }\n }\n });\n htmlParser.addNodeFilter('script,style', function (nodes, name) {\n var i = nodes.length, node, value, type;\n var trim = function (value) {\n return value.replace(/()/g, '\\n').replace(/^[\\r\\n]*|[\\r\\n]*$/g, '').replace(/^\\s*(()?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g, '');\n };\n while (i--) {\n node = nodes[i];\n value = node.firstChild ? node.firstChild.value : '';\n if (name === 'script') {\n type = node.attr('type');\n if (type) {\n node.attr('type', type === 'mce-no/type' ? null : type.replace(/^mce\\-/, ''));\n }\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '// ';\n }\n } else {\n if (settings.element_format === 'xhtml' && value.length > 0) {\n node.firstChild.value = '';\n }\n }\n }\n });\n htmlParser.addNodeFilter('#comment', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.value.indexOf('[CDATA[') === 0) {\n node.name = '#cdata';\n node.type = 4;\n node.value = node.value.replace(/^\\[CDATA\\[|\\]\\]$/g, '');\n } else if (node.value.indexOf('mce:protected ') === 0) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = unescape(node.value).substr(14);\n }\n }\n });\n htmlParser.addNodeFilter('xml:namespace,input', function (nodes, name) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (node.type === 7) {\n node.remove();\n } else if (node.type === 1) {\n if (name === 'input' && !('type' in node.attributes.map)) {\n node.attr('type', 'text');\n }\n }\n }\n });\n htmlParser.addAttributeFilter('data-mce-type', function (nodes) {\n each(nodes, function (node) {\n if (node.attr('data-mce-type') === 'format-caret') {\n if (node.isEmpty(htmlParser.schema.getNonEmptyElements())) {\n node.remove();\n } else {\n node.unwrap();\n }\n }\n });\n });\n htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style,' + 'data-mce-selected,data-mce-expando,' + 'data-mce-type,data-mce-resize', function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n };\n var trimTrailingBr = function (rootNode) {\n var brNode1, brNode2;\n var isBr = function (node) {\n return node && node.name === 'br';\n };\n brNode1 = rootNode.lastChild;\n if (isBr(brNode1)) {\n brNode2 = brNode1.prev;\n if (isBr(brNode2)) {\n brNode1.remove();\n brNode2.remove();\n }\n }\n };\n var DomSerializerFilters = {\n register: register,\n trimTrailingBr: trimTrailingBr\n };\n\n var preProcess = function (editor, node, args) {\n var impl, doc, oldDoc;\n var dom = editor.dom;\n node = node.cloneNode(true);\n impl = domGlobals.document.implementation;\n if (impl.createHTMLDocument) {\n doc = impl.createHTMLDocument('');\n Tools.each(node.nodeName === 'BODY' ? node.childNodes : [node], function (node) {\n doc.body.appendChild(doc.importNode(node, true));\n });\n if (node.nodeName !== 'BODY') {\n node = doc.body.firstChild;\n } else {\n node = doc.body;\n }\n oldDoc = dom.doc;\n dom.doc = doc;\n }\n Events.firePreProcess(editor, merge(args, { node: node }));\n if (oldDoc) {\n dom.doc = oldDoc;\n }\n return node;\n };\n var shouldFireEvent = function (editor, args) {\n return editor && editor.hasEventListeners('PreProcess') && !args.no_events;\n };\n var process = function (editor, node, args) {\n return shouldFireEvent(editor, args) ? preProcess(editor, node, args) : node;\n };\n var DomSerializerPreProcess = { process: process };\n\n var removeAttrs = function (node, names) {\n each(names, function (name) {\n node.attr(name, null);\n });\n };\n var addFontToSpansFilter = function (domParser, styles, fontSizes) {\n domParser.addNodeFilter('font', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n var color = node.attr('color');\n var face = node.attr('face');\n var size = node.attr('size');\n if (color) {\n props.color = color;\n }\n if (face) {\n props['font-family'] = face;\n }\n if (size) {\n props['font-size'] = fontSizes[parseInt(node.attr('size'), 10) - 1];\n }\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n removeAttrs(node, [\n 'color',\n 'face',\n 'size'\n ]);\n });\n });\n };\n var addStrikeToSpanFilter = function (domParser, styles) {\n domParser.addNodeFilter('strike', function (nodes) {\n each(nodes, function (node) {\n var props = styles.parse(node.attr('style'));\n props['text-decoration'] = 'line-through';\n node.name = 'span';\n node.attr('style', styles.serialize(props));\n });\n });\n };\n var addFilters = function (domParser, settings) {\n var styles = Styles();\n if (settings.convert_fonts_to_spans) {\n addFontToSpansFilter(domParser, styles, Tools.explode(settings.font_size_legacy_values));\n }\n addStrikeToSpanFilter(domParser, styles);\n };\n var register$1 = function (domParser, settings) {\n if (settings.inline_styles) {\n addFilters(domParser, settings);\n }\n };\n var LegacyFilter = { register: register$1 };\n\n var whiteSpaceRegExp$3 = /^[ \\t\\r\\n]*$/;\n var typeLookup = {\n '#text': 3,\n '#comment': 8,\n '#cdata': 4,\n '#pi': 7,\n '#doctype': 10,\n '#document-fragment': 11\n };\n var walk$2 = function (node, root, prev) {\n var sibling;\n var parent;\n var startName = prev ? 'lastChild' : 'firstChild';\n var siblingName = prev ? 'prev' : 'next';\n if (node[startName]) {\n return node[startName];\n }\n if (node !== root) {\n sibling = node[siblingName];\n if (sibling) {\n return sibling;\n }\n for (parent = node.parent; parent && parent !== root; parent = parent.parent) {\n sibling = parent[siblingName];\n if (sibling) {\n return sibling;\n }\n }\n }\n };\n var Node$1 = function () {\n function Node(name, type) {\n this.name = name;\n this.type = type;\n if (type === 1) {\n this.attributes = [];\n this.attributes.map = {};\n }\n }\n Node.create = function (name, attrs) {\n var node, attrName;\n node = new Node(name, typeLookup[name] || 1);\n if (attrs) {\n for (attrName in attrs) {\n node.attr(attrName, attrs[attrName]);\n }\n }\n return node;\n };\n Node.prototype.replace = function (node) {\n var self = this;\n if (node.parent) {\n node.remove();\n }\n self.insert(node, self);\n self.remove();\n return self;\n };\n Node.prototype.attr = function (name, value) {\n var self = this;\n var attrs, i;\n if (typeof name !== 'string') {\n for (i in name) {\n self.attr(i, name[i]);\n }\n return self;\n }\n if (attrs = self.attributes) {\n if (value !== undefined) {\n if (value === null) {\n if (name in attrs.map) {\n delete attrs.map[name];\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs = attrs.splice(i, 1);\n return self;\n }\n }\n }\n return self;\n }\n if (name in attrs.map) {\n i = attrs.length;\n while (i--) {\n if (attrs[i].name === name) {\n attrs[i].value = value;\n break;\n }\n }\n } else {\n attrs.push({\n name: name,\n value: value\n });\n }\n attrs.map[name] = value;\n return self;\n }\n return attrs.map[name];\n }\n };\n Node.prototype.clone = function () {\n var self = this;\n var clone = new Node(self.name, self.type);\n var i, l, selfAttrs, selfAttr, cloneAttrs;\n if (selfAttrs = self.attributes) {\n cloneAttrs = [];\n cloneAttrs.map = {};\n for (i = 0, l = selfAttrs.length; i < l; i++) {\n selfAttr = selfAttrs[i];\n if (selfAttr.name !== 'id') {\n cloneAttrs[cloneAttrs.length] = {\n name: selfAttr.name,\n value: selfAttr.value\n };\n cloneAttrs.map[selfAttr.name] = selfAttr.value;\n }\n }\n clone.attributes = cloneAttrs;\n }\n clone.value = self.value;\n clone.shortEnded = self.shortEnded;\n return clone;\n };\n Node.prototype.wrap = function (wrapper) {\n var self = this;\n self.parent.insert(wrapper, self);\n wrapper.append(self);\n return self;\n };\n Node.prototype.unwrap = function () {\n var self = this;\n var node, next;\n for (node = self.firstChild; node;) {\n next = node.next;\n self.insert(node, self, true);\n node = next;\n }\n self.remove();\n };\n Node.prototype.remove = function () {\n var self = this, parent = self.parent, next = self.next, prev = self.prev;\n if (parent) {\n if (parent.firstChild === self) {\n parent.firstChild = next;\n if (next) {\n next.prev = null;\n }\n } else {\n prev.next = next;\n }\n if (parent.lastChild === self) {\n parent.lastChild = prev;\n if (prev) {\n prev.next = null;\n }\n } else {\n next.prev = prev;\n }\n self.parent = self.next = self.prev = null;\n }\n return self;\n };\n Node.prototype.append = function (node) {\n var self = this;\n var last;\n if (node.parent) {\n node.remove();\n }\n last = self.lastChild;\n if (last) {\n last.next = node;\n node.prev = last;\n self.lastChild = node;\n } else {\n self.lastChild = self.firstChild = node;\n }\n node.parent = self;\n return node;\n };\n Node.prototype.insert = function (node, refNode, before) {\n var parent;\n if (node.parent) {\n node.remove();\n }\n parent = refNode.parent || this;\n if (before) {\n if (refNode === parent.firstChild) {\n parent.firstChild = node;\n } else {\n refNode.prev.next = node;\n }\n node.prev = refNode.prev;\n node.next = refNode;\n refNode.prev = node;\n } else {\n if (refNode === parent.lastChild) {\n parent.lastChild = node;\n } else {\n refNode.next.prev = node;\n }\n node.next = refNode.next;\n node.prev = refNode;\n refNode.next = node;\n }\n node.parent = parent;\n return node;\n };\n Node.prototype.getAll = function (name) {\n var self = this;\n var node;\n var collection = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n if (node.name === name) {\n collection.push(node);\n }\n }\n return collection;\n };\n Node.prototype.empty = function () {\n var self = this;\n var nodes, i, node;\n if (self.firstChild) {\n nodes = [];\n for (node = self.firstChild; node; node = walk$2(node, self)) {\n nodes.push(node);\n }\n i = nodes.length;\n while (i--) {\n node = nodes[i];\n node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;\n }\n }\n self.firstChild = self.lastChild = null;\n return self;\n };\n Node.prototype.isEmpty = function (elements, whitespace, predicate) {\n var self = this;\n var node = self.firstChild, i, name;\n whitespace = whitespace || {};\n if (node) {\n do {\n if (node.type === 1) {\n if (node.attributes.map['data-mce-bogus']) {\n continue;\n }\n if (elements[node.name]) {\n return false;\n }\n i = node.attributes.length;\n while (i--) {\n name = node.attributes[i].name;\n if (name === 'name' || name.indexOf('data-mce-bookmark') === 0) {\n return false;\n }\n }\n }\n if (node.type === 8) {\n return false;\n }\n if (node.type === 3 && !whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (node.type === 3 && node.parent && whitespace[node.parent.name] && whiteSpaceRegExp$3.test(node.value)) {\n return false;\n }\n if (predicate && predicate(node)) {\n return false;\n }\n } while (node = walk$2(node, self));\n }\n return true;\n };\n Node.prototype.walk = function (prev) {\n return walk$2(this, null, prev);\n };\n return Node;\n }();\n\n var paddEmptyNode = function (settings, args, blockElements, node) {\n var brPreferred = settings.padd_empty_with_br || args.insert;\n if (brPreferred && blockElements[node.name]) {\n node.empty().append(new Node$1('br', 1)).shortEnded = true;\n } else {\n node.empty().append(new Node$1('#text', 3)).value = '\\xA0';\n }\n };\n var isPaddedWithNbsp = function (node) {\n return hasOnlyChild(node, '#text') && node.firstChild.value === '\\xA0';\n };\n var hasOnlyChild = function (node, name) {\n return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;\n };\n var isPadded = function (schema, node) {\n var rule = schema.getElementRule(node.name);\n return rule && rule.paddEmpty;\n };\n var isEmpty$2 = function (schema, nonEmptyElements, whitespaceElements, node) {\n return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {\n return isPadded(schema, node);\n });\n };\n var isLineBreakNode = function (node, blockElements) {\n return node && (blockElements[node.name] || node.name === 'br');\n };\n\n var register$2 = function (parser, settings) {\n var schema = parser.schema;\n if (settings.remove_trailing_brs) {\n parser.addNodeFilter('br', function (nodes, _, args) {\n var i;\n var l = nodes.length;\n var node;\n var blockElements = Tools.extend({}, schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var parent, lastParent, prev, prevName;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var elementRule, textNode;\n blockElements.body = 1;\n for (i = 0; i < l; i++) {\n node = nodes[i];\n parent = node.parent;\n if (blockElements[node.parent.name] && node === parent.lastChild) {\n prev = node.prev;\n while (prev) {\n prevName = prev.name;\n if (prevName !== 'span' || prev.attr('data-mce-type') !== 'bookmark') {\n if (prevName !== 'br') {\n break;\n }\n if (prevName === 'br') {\n node = null;\n break;\n }\n }\n prev = prev.prev;\n }\n if (node) {\n node.remove();\n if (isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, parent)) {\n elementRule = schema.getElementRule(parent.name);\n if (elementRule) {\n if (elementRule.removeEmpty) {\n parent.remove();\n } else if (elementRule.paddEmpty) {\n paddEmptyNode(settings, args, blockElements, parent);\n }\n }\n }\n }\n } else {\n lastParent = node;\n while (parent && parent.firstChild === lastParent && parent.lastChild === lastParent) {\n lastParent = parent;\n if (blockElements[parent.name]) {\n break;\n }\n parent = parent.parent;\n }\n if (lastParent === parent && settings.padd_empty_with_br !== true) {\n textNode = new Node$1('#text', 3);\n textNode.value = '\\xA0';\n node.replace(textNode);\n }\n }\n }\n });\n }\n parser.addAttributeFilter('href', function (nodes) {\n var i = nodes.length, node;\n var appendRel = function (rel) {\n var parts = rel.split(' ').filter(function (p) {\n return p.length > 0;\n });\n return parts.concat(['noopener']).sort().join(' ');\n };\n var addNoOpener = function (rel) {\n var newRel = rel ? Tools.trim(rel) : '';\n if (!/\\b(noopener)\\b/g.test(newRel)) {\n return appendRel(newRel);\n } else {\n return newRel;\n }\n };\n if (!settings.allow_unsafe_link_target) {\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.attr('target') === '_blank') {\n node.attr('rel', addNoOpener(node.attr('rel')));\n }\n }\n }\n });\n if (!settings.allow_html_in_named_anchor) {\n parser.addAttributeFilter('id,name', function (nodes) {\n var i = nodes.length, sibling, prevSibling, parent, node;\n while (i--) {\n node = nodes[i];\n if (node.name === 'a' && node.firstChild && !node.attr('href')) {\n parent = node.parent;\n sibling = node.lastChild;\n do {\n prevSibling = sibling.prev;\n parent.insert(sibling, node);\n sibling = prevSibling;\n } while (sibling);\n }\n }\n });\n }\n if (settings.fix_list_elements) {\n parser.addNodeFilter('ul,ol', function (nodes) {\n var i = nodes.length, node, parentNode;\n while (i--) {\n node = nodes[i];\n parentNode = node.parent;\n if (parentNode.name === 'ul' || parentNode.name === 'ol') {\n if (node.prev && node.prev.name === 'li') {\n node.prev.append(node);\n } else {\n var li = new Node$1('li', 1);\n li.attr('style', 'list-style-type: none');\n node.wrap(li);\n }\n }\n }\n });\n }\n if (settings.validate && schema.getValidClasses()) {\n parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node, classList, ci, className, classValue;\n var validClasses = schema.getValidClasses();\n var validClassesMap, valid;\n while (i--) {\n node = nodes[i];\n classList = node.attr('class').split(' ');\n classValue = '';\n for (ci = 0; ci < classList.length; ci++) {\n className = classList[ci];\n valid = false;\n validClassesMap = validClasses['*'];\n if (validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n validClassesMap = validClasses[node.name];\n if (!valid && validClassesMap && validClassesMap[className]) {\n valid = true;\n }\n if (valid) {\n if (classValue) {\n classValue += ' ';\n }\n classValue += className;\n }\n }\n if (!classValue.length) {\n classValue = null;\n }\n node.attr('class', classValue);\n }\n });\n }\n };\n\n var makeMap$4 = Tools.makeMap, each$i = Tools.each, explode$3 = Tools.explode, extend$3 = Tools.extend;\n function DomParser (settings, schema) {\n if (schema === void 0) {\n schema = Schema();\n }\n var nodeFilters = {};\n var attributeFilters = [];\n var matchedNodes = {};\n var matchedAttributes = {};\n settings = settings || {};\n settings.validate = 'validate' in settings ? settings.validate : true;\n settings.root_name = settings.root_name || 'body';\n var fixInvalidChildren = function (nodes) {\n var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;\n var nonEmptyElements, whitespaceElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;\n nonSplitableElements = makeMap$4('tr,td,th,tbody,thead,tfoot,table');\n nonEmptyElements = schema.getNonEmptyElements();\n whitespaceElements = schema.getWhiteSpaceElements();\n textBlockElements = schema.getTextBlockElements();\n specialElements = schema.getSpecialElements();\n for (ni = 0; ni < nodes.length; ni++) {\n node = nodes[ni];\n if (!node.parent || node.fixed) {\n continue;\n }\n if (textBlockElements[node.name] && node.parent.name === 'li') {\n sibling = node.next;\n while (sibling) {\n if (textBlockElements[sibling.name]) {\n sibling.name = 'li';\n sibling.fixed = true;\n node.parent.insert(sibling, node.parent);\n } else {\n break;\n }\n sibling = sibling.next;\n }\n node.unwrap(node);\n continue;\n }\n parents = [node];\n for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent) {\n parents.push(parent);\n }\n if (parent && parents.length > 1) {\n parents.reverse();\n newParent = currentNode = filterNode(parents[0].clone());\n for (i = 0; i < parents.length - 1; i++) {\n if (schema.isValidChild(currentNode.name, parents[i].name)) {\n tempNode = filterNode(parents[i].clone());\n currentNode.append(tempNode);\n } else {\n tempNode = currentNode;\n }\n for (childNode = parents[i].firstChild; childNode && childNode !== parents[i + 1];) {\n nextNode = childNode.next;\n tempNode.append(childNode);\n childNode = nextNode;\n }\n currentNode = tempNode;\n }\n if (!isEmpty$2(schema, nonEmptyElements, whitespaceElements, newParent)) {\n parent.insert(newParent, parents[0], true);\n parent.insert(node, newParent);\n } else {\n parent.insert(node, parents[0], true);\n }\n parent = parents[0];\n if (isEmpty$2(schema, nonEmptyElements, whitespaceElements, parent) || hasOnlyChild(parent, 'br')) {\n parent.empty().remove();\n }\n } else if (node.parent) {\n if (node.name === 'li') {\n sibling = node.prev;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.append(node);\n continue;\n }\n sibling = node.next;\n if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {\n sibling.insert(node, sibling.firstChild, true);\n continue;\n }\n node.wrap(filterNode(new Node$1('ul', 1)));\n continue;\n }\n if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {\n node.wrap(filterNode(new Node$1('div', 1)));\n } else {\n if (specialElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n }\n }\n }\n };\n var filterNode = function (node) {\n var i, name, list;\n name = node.name;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n i = attributeFilters.length;\n while (i--) {\n name = attributeFilters[i].name;\n if (name in node.attributes.map) {\n list = matchedAttributes[name];\n if (list) {\n list.push(node);\n } else {\n matchedAttributes[name] = [node];\n }\n }\n }\n return node;\n };\n var addNodeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var list = nodeFilters[name];\n if (!list) {\n nodeFilters[name] = list = [];\n }\n list.push(callback);\n });\n };\n var getNodeFilters = function () {\n var out = [];\n for (var name in nodeFilters) {\n if (nodeFilters.hasOwnProperty(name)) {\n out.push({\n name: name,\n callbacks: nodeFilters[name]\n });\n }\n }\n return out;\n };\n var addAttributeFilter = function (name, callback) {\n each$i(explode$3(name), function (name) {\n var i;\n for (i = 0; i < attributeFilters.length; i++) {\n if (attributeFilters[i].name === name) {\n attributeFilters[i].callbacks.push(callback);\n return;\n }\n }\n attributeFilters.push({\n name: name,\n callbacks: [callback]\n });\n });\n };\n var getAttributeFilters = function () {\n return [].concat(attributeFilters);\n };\n var parse = function (html, args) {\n var parser, nodes, i, l, fi, fl, list, name;\n var blockElements;\n var invalidChildren = [];\n var isInWhiteSpacePreservedElement;\n var node;\n args = args || {};\n matchedNodes = {};\n matchedAttributes = {};\n blockElements = extend$3(makeMap$4('script,style,head,html,body,title,meta,param'), schema.getBlockElements());\n var nonEmptyElements = schema.getNonEmptyElements();\n var children = schema.children;\n var validate = settings.validate;\n var rootBlockName = 'forced_root_block' in args ? args.forced_root_block : settings.forced_root_block;\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var startWhiteSpaceRegExp = /^[ \\t\\r\\n]+/;\n var endWhiteSpaceRegExp = /[ \\t\\r\\n]+$/;\n var allWhiteSpaceRegExp = /[ \\t\\r\\n]+/g;\n var isAllWhiteSpaceRegExp = /^[ \\t\\r\\n]+$/;\n isInWhiteSpacePreservedElement = whiteSpaceElements.hasOwnProperty(args.context) || whiteSpaceElements.hasOwnProperty(settings.root_name);\n var addRootBlocks = function () {\n var node = rootNode.firstChild, next, rootBlockNode;\n var trim = function (rootBlockNode) {\n if (rootBlockNode) {\n node = rootBlockNode.firstChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(startWhiteSpaceRegExp, '');\n }\n node = rootBlockNode.lastChild;\n if (node && node.type === 3) {\n node.value = node.value.replace(endWhiteSpaceRegExp, '');\n }\n }\n };\n if (!schema.isValidChild(rootNode.name, rootBlockName.toLowerCase())) {\n return;\n }\n while (node) {\n next = node.next;\n if (node.type === 3 || node.type === 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type')) {\n if (!rootBlockNode) {\n rootBlockNode = createNode(rootBlockName, 1);\n rootBlockNode.attr(settings.forced_root_block_attrs);\n rootNode.insert(rootBlockNode, node);\n rootBlockNode.append(node);\n } else {\n rootBlockNode.append(node);\n }\n } else {\n trim(rootBlockNode);\n rootBlockNode = null;\n }\n node = next;\n }\n trim(rootBlockNode);\n };\n var createNode = function (name, type) {\n var node = new Node$1(name, type);\n var list;\n if (name in nodeFilters) {\n list = matchedNodes[name];\n if (list) {\n list.push(node);\n } else {\n matchedNodes[name] = [node];\n }\n }\n return node;\n };\n var removeWhitespaceBefore = function (node) {\n var textNode, textNodeNext, textVal, sibling;\n var blockElements = schema.getBlockElements();\n for (textNode = node.prev; textNode && textNode.type === 3;) {\n textVal = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (textVal.length > 0) {\n textNode.value = textVal;\n return;\n }\n textNodeNext = textNode.next;\n if (textNodeNext) {\n if (textNodeNext.type === 3 && textNodeNext.value.length) {\n textNode = textNode.prev;\n continue;\n }\n if (!blockElements[textNodeNext.name] && textNodeNext.name !== 'script' && textNodeNext.name !== 'style') {\n textNode = textNode.prev;\n continue;\n }\n }\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n }\n };\n var cloneAndExcludeBlocks = function (input) {\n var name;\n var output = {};\n for (name in input) {\n if (name !== 'li' && name !== 'p') {\n output[name] = input[name];\n }\n }\n return output;\n };\n parser = SaxParser$1({\n validate: validate,\n allow_script_urls: settings.allow_script_urls,\n allow_conditional_comments: settings.allow_conditional_comments,\n self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),\n cdata: function (text) {\n node.append(createNode('#cdata', 4)).value = text;\n },\n text: function (text, raw) {\n var textNode;\n if (!isInWhiteSpacePreservedElement) {\n text = text.replace(allWhiteSpaceRegExp, ' ');\n if (isLineBreakNode(node.lastChild, blockElements)) {\n text = text.replace(startWhiteSpaceRegExp, '');\n }\n }\n if (text.length !== 0) {\n textNode = createNode('#text', 3);\n textNode.raw = !!raw;\n node.append(textNode).value = text;\n }\n },\n comment: function (text) {\n node.append(createNode('#comment', 8)).value = text;\n },\n pi: function (name, text) {\n node.append(createNode(name, 7)).value = text;\n removeWhitespaceBefore(node);\n },\n doctype: function (text) {\n var newNode;\n newNode = node.append(createNode('#doctype', 10));\n newNode.value = text;\n removeWhitespaceBefore(node);\n },\n start: function (name, attrs, empty) {\n var newNode, attrFiltersLen, elementRule, attrName, parent;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n newNode = createNode(elementRule.outputName || name, 1);\n newNode.attributes = attrs;\n newNode.shortEnded = empty;\n node.append(newNode);\n parent = children[node.name];\n if (parent && children[newNode.name] && !parent[newNode.name]) {\n invalidChildren.push(newNode);\n }\n attrFiltersLen = attributeFilters.length;\n while (attrFiltersLen--) {\n attrName = attributeFilters[attrFiltersLen].name;\n if (attrName in attrs.map) {\n list = matchedAttributes[attrName];\n if (list) {\n list.push(newNode);\n } else {\n matchedAttributes[attrName] = [newNode];\n }\n }\n }\n if (blockElements[name]) {\n removeWhitespaceBefore(newNode);\n }\n if (!empty) {\n node = newNode;\n }\n if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = true;\n }\n }\n },\n end: function (name) {\n var textNode, elementRule, text, sibling, tempNode;\n elementRule = validate ? schema.getElementRule(name) : {};\n if (elementRule) {\n if (blockElements[name]) {\n if (!isInWhiteSpacePreservedElement) {\n textNode = node.firstChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(startWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.next;\n } else {\n sibling = textNode.next;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.next;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n textNode = node.lastChild;\n if (textNode && textNode.type === 3) {\n text = textNode.value.replace(endWhiteSpaceRegExp, '');\n if (text.length > 0) {\n textNode.value = text;\n textNode = textNode.prev;\n } else {\n sibling = textNode.prev;\n textNode.remove();\n textNode = sibling;\n while (textNode && textNode.type === 3) {\n text = textNode.value;\n sibling = textNode.prev;\n if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {\n textNode.remove();\n textNode = sibling;\n }\n textNode = sibling;\n }\n }\n }\n }\n }\n if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {\n isInWhiteSpacePreservedElement = false;\n }\n if (elementRule.removeEmpty && isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node)) {\n if (!node.attributes.map.name && !node.attr('id')) {\n tempNode = node.parent;\n if (blockElements[node.name]) {\n node.empty().remove();\n } else {\n node.unwrap();\n }\n node = tempNode;\n return;\n }\n }\n if (elementRule.paddEmpty && (isPaddedWithNbsp(node) || isEmpty$2(schema, nonEmptyElements, whiteSpaceElements, node))) {\n paddEmptyNode(settings, args, blockElements, node);\n }\n node = node.parent;\n }\n }\n }, schema);\n var rootNode = node = new Node$1(args.context || settings.root_name, 11);\n parser.parse(html);\n if (validate && invalidChildren.length) {\n if (!args.context) {\n fixInvalidChildren(invalidChildren);\n } else {\n args.invalid = true;\n }\n }\n if (rootBlockName && (rootNode.name === 'body' || args.isRootContent)) {\n addRootBlocks();\n }\n if (!args.invalid) {\n for (name in matchedNodes) {\n list = nodeFilters[name];\n nodes = matchedNodes[name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (i = 0, l = list.length; i < l; i++) {\n list[i](nodes, name, args);\n }\n }\n for (i = 0, l = attributeFilters.length; i < l; i++) {\n list = attributeFilters[i];\n if (list.name in matchedAttributes) {\n nodes = matchedAttributes[list.name];\n fi = nodes.length;\n while (fi--) {\n if (!nodes[fi].parent) {\n nodes.splice(fi, 1);\n }\n }\n for (fi = 0, fl = list.callbacks.length; fi < fl; fi++) {\n list.callbacks[fi](nodes, list.name, args);\n }\n }\n }\n }\n return rootNode;\n };\n var exports = {\n schema: schema,\n addAttributeFilter: addAttributeFilter,\n getAttributeFilters: getAttributeFilters,\n addNodeFilter: addNodeFilter,\n getNodeFilters: getNodeFilters,\n filterNode: filterNode,\n parse: parse\n };\n register$2(exports, settings);\n LegacyFilter.register(exports, settings);\n return exports;\n }\n\n var addTempAttr = function (htmlParser, tempAttrs, name) {\n if (Tools.inArray(tempAttrs, name) === -1) {\n htmlParser.addAttributeFilter(name, function (nodes, name) {\n var i = nodes.length;\n while (i--) {\n nodes[i].attr(name, null);\n }\n });\n tempAttrs.push(name);\n }\n };\n var postProcess$1 = function (editor, args, content) {\n if (!args.no_events && editor) {\n var outArgs = Events.firePostProcess(editor, merge(args, { content: content }));\n return outArgs.content;\n } else {\n return content;\n }\n };\n var getHtmlFromNode = function (dom, node, args) {\n var html = Zwsp.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node));\n return args.selection || isWsPreserveElement(Element.fromDom(node)) ? html : Tools.trim(html);\n };\n var parseHtml = function (htmlParser, html, args) {\n var parserArgs = args.selection ? merge({ forced_root_block: false }, args) : args;\n var rootNode = htmlParser.parse(html, parserArgs);\n DomSerializerFilters.trimTrailingBr(rootNode);\n return rootNode;\n };\n var serializeNode = function (settings, schema, node) {\n var htmlSerializer = HtmlSerializer(settings, schema);\n return htmlSerializer.serialize(node);\n };\n var toHtml = function (editor, settings, schema, rootNode, args) {\n var content = serializeNode(settings, schema, rootNode);\n return postProcess$1(editor, args, content);\n };\n function DomSerializer (settings, editor) {\n var dom, schema, htmlParser;\n var tempAttrs = ['data-mce-selected'];\n dom = editor && editor.dom ? editor.dom : DOMUtils$1.DOM;\n schema = editor && editor.schema ? editor.schema : Schema(settings);\n settings.entity_encoding = settings.entity_encoding || 'named';\n settings.remove_trailing_brs = 'remove_trailing_brs' in settings ? settings.remove_trailing_brs : true;\n htmlParser = DomParser(settings, schema);\n DomSerializerFilters.register(htmlParser, settings, dom);\n var serialize = function (node, parserArgs) {\n var args = merge({ format: 'html' }, parserArgs ? parserArgs : {});\n var targetNode = DomSerializerPreProcess.process(editor, node, args);\n var html = getHtmlFromNode(dom, targetNode, args);\n var rootNode = parseHtml(htmlParser, html, args);\n return args.format === 'tree' ? rootNode : toHtml(editor, settings, schema, rootNode, args);\n };\n return {\n schema: schema,\n addNodeFilter: htmlParser.addNodeFilter,\n addAttributeFilter: htmlParser.addAttributeFilter,\n serialize: serialize,\n addRules: function (rules) {\n schema.addValidElements(rules);\n },\n setRules: function (rules) {\n schema.setValidElements(rules);\n },\n addTempAttr: curry(addTempAttr, htmlParser, tempAttrs),\n getTempAttrs: function () {\n return tempAttrs;\n }\n };\n }\n\n function DomSerializer$1 (settings, editor) {\n var domSerializer = DomSerializer(settings, editor);\n return {\n schema: domSerializer.schema,\n addNodeFilter: domSerializer.addNodeFilter,\n addAttributeFilter: domSerializer.addAttributeFilter,\n serialize: domSerializer.serialize,\n addRules: domSerializer.addRules,\n setRules: domSerializer.setRules,\n addTempAttr: domSerializer.addTempAttr,\n getTempAttrs: domSerializer.getTempAttrs\n };\n }\n\n function BookmarkManager(selection) {\n return {\n getBookmark: curry(Bookmarks.getBookmark, selection),\n moveToBookmark: curry(Bookmarks.moveToBookmark, selection)\n };\n }\n (function (BookmarkManager) {\n BookmarkManager.isBookmarkNode = Bookmarks.isBookmarkNode;\n }(BookmarkManager || (BookmarkManager = {})));\n var BookmarkManager$1 = BookmarkManager;\n\n var isContentEditableFalse$a = NodeType.isContentEditableFalse;\n var isContentEditableTrue$5 = NodeType.isContentEditableTrue;\n var getContentEditableRoot$2 = function (root, node) {\n while (node && node !== root) {\n if (isContentEditableTrue$5(node) || isContentEditableFalse$a(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var ControlSelection = function (selection, editor) {\n var dom = editor.dom, each = Tools.each;\n var selectedElm, selectedElmGhost, resizeHelper, resizeHandles, selectedHandle;\n var startX, startY, selectedElmX, selectedElmY, startW, startH, ratio, resizeStarted;\n var width, height;\n var editableDoc = editor.getDoc(), rootDocument = domGlobals.document;\n var abs = Math.abs, round = Math.round, rootElement = editor.getBody();\n var startScrollWidth, startScrollHeight;\n resizeHandles = {\n nw: [\n 0,\n 0,\n -1,\n -1\n ],\n ne: [\n 1,\n 0,\n 1,\n -1\n ],\n se: [\n 1,\n 1,\n 1,\n 1\n ],\n sw: [\n 0,\n 1,\n -1,\n 1\n ]\n };\n var rootClass = '.mce-content-body';\n editor.contentStyles.push(rootClass + ' div.mce-resizehandle {' + 'position: absolute;' + 'border: 1px solid black;' + 'box-sizing: content-box;' + 'background: #FFF;' + 'width: 7px;' + 'height: 7px;' + 'z-index: 10000' + '}' + rootClass + ' .mce-resizehandle:hover {' + 'background: #000' + '}' + rootClass + ' img[data-mce-selected],' + rootClass + ' hr[data-mce-selected] {' + 'outline: 1px solid black;' + 'resize: none' + '}' + rootClass + ' .mce-clonedresizable {' + 'position: absolute;' + (Env.gecko ? '' : 'outline: 1px dashed black;') + 'opacity: .5;' + 'filter: alpha(opacity=50);' + 'z-index: 10000' + '}' + rootClass + ' .mce-resize-helper {' + 'background: #555;' + 'background: rgba(0,0,0,0.75);' + 'border-radius: 3px;' + 'border: 1px;' + 'color: white;' + 'display: none;' + 'font-family: sans-serif;' + 'font-size: 12px;' + 'white-space: nowrap;' + 'line-height: 14px;' + 'margin: 5px 10px;' + 'padding: 5px;' + 'position: absolute;' + 'z-index: 10001' + '}');\n var isImage = function (elm) {\n return elm && (elm.nodeName === 'IMG' || editor.dom.is(elm, 'figure.image'));\n };\n var isEventOnImageOutsideRange = function (evt, range) {\n return isImage(evt.target) && !RangePoint.isXYWithinRange(evt.clientX, evt.clientY, range);\n };\n var contextMenuSelectImage = function (evt) {\n var target = evt.target;\n if (isEventOnImageOutsideRange(evt, editor.selection.getRng()) && !evt.isDefaultPrevented()) {\n editor.selection.select(target);\n }\n };\n var getResizeTarget = function (elm) {\n return editor.dom.is(elm, 'figure.image') ? elm.querySelector('img') : elm;\n };\n var isResizable = function (elm) {\n var selector = editor.settings.object_resizing;\n if (selector === false || Env.iOS) {\n return false;\n }\n if (typeof selector !== 'string') {\n selector = 'table,img,figure.image,div';\n }\n if (elm.getAttribute('data-mce-resize') === 'false') {\n return false;\n }\n if (elm === editor.getBody()) {\n return false;\n }\n return is$1(Element.fromDom(elm), selector);\n };\n var resizeGhostElement = function (e) {\n var deltaX, deltaY, proportional;\n var resizeHelperX, resizeHelperY;\n deltaX = e.screenX - startX;\n deltaY = e.screenY - startY;\n width = deltaX * selectedHandle[2] + startW;\n height = deltaY * selectedHandle[3] + startH;\n width = width < 5 ? 5 : width;\n height = height < 5 ? 5 : height;\n if (isImage(selectedElm) && editor.settings.resize_img_proportional !== false) {\n proportional = !VK.modifierPressed(e);\n } else {\n proportional = VK.modifierPressed(e) || isImage(selectedElm) && selectedHandle[2] * selectedHandle[3] !== 0;\n }\n if (proportional) {\n if (abs(deltaX) > abs(deltaY)) {\n height = round(width * ratio);\n width = round(height / ratio);\n } else {\n width = round(height / ratio);\n height = round(width * ratio);\n }\n }\n dom.setStyles(getResizeTarget(selectedElmGhost), {\n width: width,\n height: height\n });\n resizeHelperX = selectedHandle.startPos.x + deltaX;\n resizeHelperY = selectedHandle.startPos.y + deltaY;\n resizeHelperX = resizeHelperX > 0 ? resizeHelperX : 0;\n resizeHelperY = resizeHelperY > 0 ? resizeHelperY : 0;\n dom.setStyles(resizeHelper, {\n left: resizeHelperX,\n top: resizeHelperY,\n display: 'block'\n });\n resizeHelper.innerHTML = width + ' × ' + height;\n if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {\n dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));\n }\n if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {\n dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));\n }\n deltaX = rootElement.scrollWidth - startScrollWidth;\n deltaY = rootElement.scrollHeight - startScrollHeight;\n if (deltaX + deltaY !== 0) {\n dom.setStyles(resizeHelper, {\n left: resizeHelperX - deltaX,\n top: resizeHelperY - deltaY\n });\n }\n if (!resizeStarted) {\n Events.fireObjectResizeStart(editor, selectedElm, startW, startH);\n resizeStarted = true;\n }\n };\n var endGhostResize = function () {\n resizeStarted = false;\n var setSizeProp = function (name, value) {\n if (value) {\n if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {\n dom.setStyle(getResizeTarget(selectedElm), name, value);\n } else {\n dom.setAttrib(getResizeTarget(selectedElm), name, value);\n }\n }\n };\n setSizeProp('width', width);\n setSizeProp('height', height);\n dom.unbind(editableDoc, 'mousemove', resizeGhostElement);\n dom.unbind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.unbind(rootDocument, 'mousemove', resizeGhostElement);\n dom.unbind(rootDocument, 'mouseup', endGhostResize);\n }\n dom.remove(selectedElmGhost);\n dom.remove(resizeHelper);\n showResizeRect(selectedElm);\n Events.fireObjectResized(editor, selectedElm, width, height);\n dom.setAttrib(selectedElm, 'style', dom.getAttrib(selectedElm, 'style'));\n editor.nodeChanged();\n };\n var showResizeRect = function (targetElm) {\n var position, targetWidth, targetHeight, e, rect;\n hideResizeRect();\n unbindResizeHandleEvents();\n position = dom.getPos(targetElm, rootElement);\n selectedElmX = position.x;\n selectedElmY = position.y;\n rect = targetElm.getBoundingClientRect();\n targetWidth = rect.width || rect.right - rect.left;\n targetHeight = rect.height || rect.bottom - rect.top;\n if (selectedElm !== targetElm) {\n selectedElm = targetElm;\n width = height = 0;\n }\n e = editor.fire('ObjectSelected', { target: targetElm });\n if (isResizable(targetElm) && !e.isDefaultPrevented()) {\n each(resizeHandles, function (handle, name) {\n var handleElm;\n var startDrag = function (e) {\n startX = e.screenX;\n startY = e.screenY;\n startW = getResizeTarget(selectedElm).clientWidth;\n startH = getResizeTarget(selectedElm).clientHeight;\n ratio = startH / startW;\n selectedHandle = handle;\n handle.startPos = {\n x: targetWidth * handle[0] + selectedElmX,\n y: targetHeight * handle[1] + selectedElmY\n };\n startScrollWidth = rootElement.scrollWidth;\n startScrollHeight = rootElement.scrollHeight;\n selectedElmGhost = selectedElm.cloneNode(true);\n dom.addClass(selectedElmGhost, 'mce-clonedresizable');\n dom.setAttrib(selectedElmGhost, 'data-mce-bogus', 'all');\n selectedElmGhost.contentEditable = false;\n selectedElmGhost.unSelectabe = true;\n dom.setStyles(selectedElmGhost, {\n left: selectedElmX,\n top: selectedElmY,\n margin: 0\n });\n selectedElmGhost.removeAttribute('data-mce-selected');\n rootElement.appendChild(selectedElmGhost);\n dom.bind(editableDoc, 'mousemove', resizeGhostElement);\n dom.bind(editableDoc, 'mouseup', endGhostResize);\n if (rootDocument !== editableDoc) {\n dom.bind(rootDocument, 'mousemove', resizeGhostElement);\n dom.bind(rootDocument, 'mouseup', endGhostResize);\n }\n resizeHelper = dom.add(rootElement, 'div', {\n 'class': 'mce-resize-helper',\n 'data-mce-bogus': 'all'\n }, startW + ' × ' + startH);\n };\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.remove(handleElm);\n }\n handleElm = dom.add(rootElement, 'div', {\n 'id': 'mceResizeHandle' + name,\n 'data-mce-bogus': 'all',\n 'class': 'mce-resizehandle',\n 'unselectable': true,\n 'style': 'cursor:' + name + '-resize; margin:0; padding:0'\n });\n if (Env.ie === 11) {\n handleElm.contentEditable = false;\n }\n dom.bind(handleElm, 'mousedown', function (e) {\n e.stopImmediatePropagation();\n e.preventDefault();\n startDrag(e);\n });\n handle.elm = handleElm;\n dom.setStyles(handleElm, {\n left: targetWidth * handle[0] + selectedElmX - handleElm.offsetWidth / 2,\n top: targetHeight * handle[1] + selectedElmY - handleElm.offsetHeight / 2\n });\n });\n } else {\n hideResizeRect();\n }\n selectedElm.setAttribute('data-mce-selected', '1');\n };\n var hideResizeRect = function () {\n var name, handleElm;\n unbindResizeHandleEvents();\n if (selectedElm) {\n selectedElm.removeAttribute('data-mce-selected');\n }\n for (name in resizeHandles) {\n handleElm = dom.get('mceResizeHandle' + name);\n if (handleElm) {\n dom.unbind(handleElm);\n dom.remove(handleElm);\n }\n }\n };\n var updateResizeRect = function (e) {\n var startElm, controlElm;\n var isChildOrEqual = function (node, parent) {\n if (node) {\n do {\n if (node === parent) {\n return true;\n }\n } while (node = node.parentNode);\n }\n };\n if (resizeStarted || editor.removed) {\n return;\n }\n each(dom.select('img[data-mce-selected],hr[data-mce-selected]'), function (img) {\n img.removeAttribute('data-mce-selected');\n });\n controlElm = e.type === 'mousedown' ? e.target : selection.getNode();\n controlElm = dom.$(controlElm).closest('table,img,figure.image,hr')[0];\n if (isChildOrEqual(controlElm, rootElement)) {\n disableGeckoResize();\n startElm = selection.getStart(true);\n if (isChildOrEqual(startElm, controlElm) && isChildOrEqual(selection.getEnd(true), controlElm)) {\n showResizeRect(controlElm);\n return;\n }\n }\n hideResizeRect();\n };\n var isWithinContentEditableFalse = function (elm) {\n return isContentEditableFalse$a(getContentEditableRoot$2(editor.getBody(), elm));\n };\n var unbindResizeHandleEvents = function () {\n for (var name in resizeHandles) {\n var handle = resizeHandles[name];\n if (handle.elm) {\n dom.unbind(handle.elm);\n delete handle.elm;\n }\n }\n };\n var disableGeckoResize = function () {\n try {\n editor.getDoc().execCommand('enableObjectResizing', false, false);\n } catch (ex) {\n }\n };\n editor.on('init', function () {\n disableGeckoResize();\n if (Env.ie && Env.ie >= 11) {\n editor.on('mousedown click', function (e) {\n var target = e.target, nodeName = target.nodeName;\n if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName) && !isWithinContentEditableFalse(target)) {\n if (e.button !== 2) {\n editor.selection.select(target, nodeName === 'TABLE');\n }\n if (e.type === 'mousedown') {\n editor.nodeChanged();\n }\n }\n });\n editor.dom.bind(rootElement, 'mscontrolselect', function (e) {\n var delayedSelect = function (node) {\n Delay.setEditorTimeout(editor, function () {\n editor.selection.select(node);\n });\n };\n if (isWithinContentEditableFalse(e.target)) {\n e.preventDefault();\n delayedSelect(e.target);\n return;\n }\n if (/^(TABLE|IMG|HR)$/.test(e.target.nodeName)) {\n e.preventDefault();\n if (e.target.tagName === 'IMG') {\n delayedSelect(e.target);\n }\n }\n });\n }\n var throttledUpdateResizeRect = Delay.throttle(function (e) {\n if (!editor.composing) {\n updateResizeRect(e);\n }\n });\n editor.on('nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged', throttledUpdateResizeRect);\n editor.on('keyup compositionend', function (e) {\n if (selectedElm && selectedElm.nodeName === 'TABLE') {\n throttledUpdateResizeRect(e);\n }\n });\n editor.on('hide blur', hideResizeRect);\n editor.on('contextmenu', contextMenuSelectImage);\n });\n editor.on('remove', unbindResizeHandleEvents);\n var destroy = function () {\n selectedElm = selectedElmGhost = null;\n };\n return {\n isResizable: isResizable,\n showResizeRect: showResizeRect,\n hideResizeRect: hideResizeRect,\n updateResizeRect: updateResizeRect,\n destroy: destroy\n };\n };\n\n var hasCeProperty = function (node) {\n return NodeType.isContentEditableTrue(node) || NodeType.isContentEditableFalse(node);\n };\n var findParent$1 = function (node, rootNode, predicate) {\n while (node && node !== rootNode) {\n if (predicate(node)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n };\n var findClosestIeRange = function (clientX, clientY, doc) {\n var element, rng, rects;\n element = doc.elementFromPoint(clientX, clientY);\n rng = doc.body.createTextRange();\n if (!element || element.tagName === 'HTML') {\n element = doc.body;\n }\n rng.moveToElementText(element);\n rects = Tools.toArray(rng.getClientRects());\n rects = rects.sort(function (a, b) {\n a = Math.abs(Math.max(a.top - clientY, a.bottom - clientY));\n b = Math.abs(Math.max(b.top - clientY, b.bottom - clientY));\n return a - b;\n });\n if (rects.length > 0) {\n clientY = (rects[0].bottom + rects[0].top) / 2;\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n return rng;\n } catch (ex) {\n }\n }\n return null;\n };\n var moveOutOfContentEditableFalse = function (rng, rootNode) {\n var parentElement = rng && rng.parentElement ? rng.parentElement() : null;\n return NodeType.isContentEditableFalse(findParent$1(parentElement, rootNode, hasCeProperty)) ? null : rng;\n };\n var fromPoint$1 = function (clientX, clientY, doc) {\n var rng, point;\n var pointDoc = doc;\n if (pointDoc.caretPositionFromPoint) {\n point = pointDoc.caretPositionFromPoint(clientX, clientY);\n if (point) {\n rng = doc.createRange();\n rng.setStart(point.offsetNode, point.offset);\n rng.collapse(true);\n }\n } else if (doc.caretRangeFromPoint) {\n rng = doc.caretRangeFromPoint(clientX, clientY);\n } else if (pointDoc.body.createTextRange) {\n rng = pointDoc.body.createTextRange();\n try {\n rng.moveToPoint(clientX, clientY);\n rng.collapse(true);\n } catch (ex) {\n rng = findClosestIeRange(clientX, clientY, doc);\n }\n return moveOutOfContentEditableFalse(rng, doc.body);\n }\n return rng;\n };\n var CaretRangeFromPoint = { fromPoint: fromPoint$1 };\n\n var processRanges = function (editor, ranges) {\n return map(ranges, function (range) {\n var evt = editor.fire('GetSelectionRange', { range: range });\n return evt.range !== range ? evt.range : range;\n });\n };\n var EventProcessRanges = { processRanges: processRanges };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var tableModel = Immutable('element', 'width', 'rows');\n var tableRow = Immutable('element', 'cells');\n var cellPosition = Immutable('x', 'y');\n var getSpan = function (td, key) {\n var value = parseInt(get(td, key), 10);\n return isNaN(value) ? 1 : value;\n };\n var fillout = function (table, x, y, tr, td) {\n var rowspan = getSpan(td, 'rowspan');\n var colspan = getSpan(td, 'colspan');\n var rows = table.rows();\n for (var y2 = y; y2 < y + rowspan; y2++) {\n if (!rows[y2]) {\n rows[y2] = tableRow(deep(tr), []);\n }\n for (var x2 = x; x2 < x + colspan; x2++) {\n var cells = rows[y2].cells();\n cells[x2] = y2 === y && x2 === x ? td : shallow(td);\n }\n }\n };\n var cellExists = function (table, x, y) {\n var rows = table.rows();\n var cells = rows[y] ? rows[y].cells() : [];\n return !!cells[x];\n };\n var skipCellsX = function (table, x, y) {\n while (cellExists(table, x, y)) {\n x++;\n }\n return x;\n };\n var getWidth = function (rows) {\n return foldl(rows, function (acc, row) {\n return row.cells().length > acc ? row.cells().length : acc;\n }, 0);\n };\n var findElementPos = function (table, element) {\n var rows = table.rows();\n for (var y = 0; y < rows.length; y++) {\n var cells = rows[y].cells();\n for (var x = 0; x < cells.length; x++) {\n if (eq(cells[x], element)) {\n return Option.some(cellPosition(x, y));\n }\n }\n }\n return Option.none();\n };\n var extractRows = function (table, sx, sy, ex, ey) {\n var newRows = [];\n var rows = table.rows();\n for (var y = sy; y <= ey; y++) {\n var cells = rows[y].cells();\n var slice = sx < ex ? cells.slice(sx, ex + 1) : cells.slice(ex, sx + 1);\n newRows.push(tableRow(rows[y].element(), slice));\n }\n return newRows;\n };\n var subTable = function (table, startPos, endPos) {\n var sx = startPos.x(), sy = startPos.y();\n var ex = endPos.x(), ey = endPos.y();\n var newRows = sy < ey ? extractRows(table, sx, sy, ex, ey) : extractRows(table, sx, ey, ex, sy);\n return tableModel(table.element(), getWidth(newRows), newRows);\n };\n var createDomTable = function (table, rows) {\n var tableElement = shallow(table.element());\n var tableBody = Element.fromTag('tbody');\n append$1(tableBody, rows);\n append(tableElement, tableBody);\n return tableElement;\n };\n var modelRowsToDomRows = function (table) {\n return map(table.rows(), function (row) {\n var cells = map(row.cells(), function (cell) {\n var td = deep(cell);\n remove(td, 'colspan');\n remove(td, 'rowspan');\n return td;\n });\n var tr = shallow(row.element());\n append$1(tr, cells);\n return tr;\n });\n };\n var fromDom$1 = function (tableElm) {\n var table = tableModel(shallow(tableElm), 0, []);\n each(descendants$1(tableElm, 'tr'), function (tr, y) {\n each(descendants$1(tr, 'td,th'), function (td, x) {\n fillout(table, skipCellsX(table, x, y), y, tr, td);\n });\n });\n return tableModel(table.element(), getWidth(table.rows()), table.rows());\n };\n var toDom = function (table) {\n return createDomTable(table, modelRowsToDomRows(table));\n };\n var subsection = function (table, startElement, endElement) {\n return findElementPos(table, startElement).bind(function (startPos) {\n return findElementPos(table, endElement).map(function (endPos) {\n return subTable(table, startPos, endPos);\n });\n });\n };\n var SimpleTableModel = {\n fromDom: fromDom$1,\n toDom: toDom,\n subsection: subsection\n };\n\n var findParentListContainer = function (parents) {\n return find(parents, function (elm) {\n return name(elm) === 'ul' || name(elm) === 'ol';\n });\n };\n var getFullySelectedListWrappers = function (parents, rng) {\n return find(parents, function (elm) {\n return name(elm) === 'li' && hasAllContentsSelected(elm, rng);\n }).fold(constant([]), function (li) {\n return findParentListContainer(parents).map(function (listCont) {\n return [\n Element.fromTag('li'),\n Element.fromTag(name(listCont))\n ];\n }).getOr([]);\n });\n };\n var wrap$3 = function (innerElm, elms) {\n var wrapped = foldl(elms, function (acc, elm) {\n append(elm, acc);\n return elm;\n }, innerElm);\n return elms.length > 0 ? fromElements([wrapped]) : wrapped;\n };\n var directListWrappers = function (commonAnchorContainer) {\n if (isListItem(commonAnchorContainer)) {\n return parent(commonAnchorContainer).filter(isList).fold(constant([]), function (listElm) {\n return [\n commonAnchorContainer,\n listElm\n ];\n });\n } else {\n return isList(commonAnchorContainer) ? [commonAnchorContainer] : [];\n }\n };\n var getWrapElements = function (rootNode, rng) {\n var commonAnchorContainer = Element.fromDom(rng.commonAncestorContainer);\n var parents = Parents.parentsAndSelf(commonAnchorContainer, rootNode);\n var wrapElements = filter(parents, function (elm) {\n return isInline(elm) || isHeading(elm);\n });\n var listWrappers = getFullySelectedListWrappers(parents, rng);\n var allWrappers = wrapElements.concat(listWrappers.length ? listWrappers : directListWrappers(commonAnchorContainer));\n return map(allWrappers, shallow);\n };\n var emptyFragment = function () {\n return fromElements([]);\n };\n var getFragmentFromRange = function (rootNode, rng) {\n return wrap$3(Element.fromDom(rng.cloneContents()), getWrapElements(rootNode, rng));\n };\n var getParentTable = function (rootElm, cell) {\n return ancestor$1(cell, 'table', curry(eq, rootElm));\n };\n var getTableFragment = function (rootNode, selectedTableCells) {\n return getParentTable(rootNode, selectedTableCells[0]).bind(function (tableElm) {\n var firstCell = selectedTableCells[0];\n var lastCell = selectedTableCells[selectedTableCells.length - 1];\n var fullTableModel = SimpleTableModel.fromDom(tableElm);\n return SimpleTableModel.subsection(fullTableModel, firstCell, lastCell).map(function (sectionedTableModel) {\n return fromElements([SimpleTableModel.toDom(sectionedTableModel)]);\n });\n }).getOrThunk(emptyFragment);\n };\n var getSelectionFragment = function (rootNode, ranges) {\n return ranges.length > 0 && ranges[0].collapsed ? emptyFragment() : getFragmentFromRange(rootNode, ranges[0]);\n };\n var read$4 = function (rootNode, ranges) {\n var selectedCells = TableCellSelection.getCellsFromElementOrRanges(ranges, rootNode);\n return selectedCells.length > 0 ? getTableFragment(rootNode, selectedCells) : getSelectionFragment(rootNode, ranges);\n };\n var FragmentReader = { read: read$4 };\n\n var getTextContent = function (editor) {\n return Option.from(editor.selection.getRng()).map(function (rng) {\n var bin = editor.dom.add(editor.getBody(), 'div', {\n 'data-mce-bogus': 'all',\n 'style': 'overflow: hidden; opacity: 0;'\n }, rng.cloneContents());\n var text = Zwsp.trim(bin.innerText);\n editor.dom.remove(bin);\n return text;\n }).getOr('');\n };\n var getHtmlContent = function (editor, args) {\n var rng = editor.selection.getRng(), tmpElm = editor.dom.create('body');\n var sel = editor.selection.getSel();\n var fragment;\n var ranges = EventProcessRanges.processRanges(editor, MultiRange.getRanges(sel));\n fragment = args.contextual ? FragmentReader.read(Element.fromDom(editor.getBody()), ranges).dom() : rng.cloneContents();\n if (fragment) {\n tmpElm.appendChild(fragment);\n }\n return editor.selection.serializer.serialize(tmpElm, args);\n };\n var getContent = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n args.get = true;\n args.format = args.format || 'html';\n args.selection = true;\n args = editor.fire('BeforeGetContent', args);\n if (args.isDefaultPrevented()) {\n editor.fire('GetContent', args);\n return args.content;\n }\n if (args.format === 'text') {\n return getTextContent(editor);\n } else {\n args.getInner = true;\n var content = getHtmlContent(editor, args);\n if (args.format === 'tree') {\n return content;\n } else {\n args.content = editor.selection.isCollapsed() ? '' : content;\n editor.fire('GetContent', args);\n return args.content;\n }\n }\n };\n var GetSelectionContent = { getContent: getContent };\n\n var setupArgs = function (args, content) {\n return __assign(__assign({ format: 'html' }, args), {\n set: true,\n selection: true,\n content: content\n });\n };\n var cleanContent = function (editor, args) {\n if (args.format !== 'raw') {\n var node = editor.parser.parse(args.content, __assign({\n isRootContent: true,\n forced_root_block: false\n }, args));\n return HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(node);\n } else {\n return args.content;\n }\n };\n var setContent = function (editor, content, args) {\n var contentArgs = setupArgs(args, content);\n var rng = editor.selection.getRng(), caretNode;\n var doc = editor.getDoc();\n var frag, temp;\n if (!contentArgs.no_events) {\n contentArgs = editor.fire('BeforeSetContent', contentArgs);\n if (contentArgs.isDefaultPrevented()) {\n editor.fire('SetContent', contentArgs);\n return;\n }\n }\n content = cleanContent(editor, contentArgs);\n if (rng.insertNode) {\n content += '_';\n if (rng.startContainer === doc && rng.endContainer === doc) {\n doc.body.innerHTML = content;\n } else {\n rng.deleteContents();\n if (doc.body.childNodes.length === 0) {\n doc.body.innerHTML = content;\n } else {\n if (rng.createContextualFragment) {\n rng.insertNode(rng.createContextualFragment(content));\n } else {\n frag = doc.createDocumentFragment();\n temp = doc.createElement('div');\n frag.appendChild(temp);\n temp.outerHTML = content;\n rng.insertNode(frag);\n }\n }\n }\n caretNode = editor.dom.get('__caret');\n rng = doc.createRange();\n rng.setStartBefore(caretNode);\n rng.setEndBefore(caretNode);\n editor.selection.setRng(rng);\n editor.dom.remove('__caret');\n try {\n editor.selection.setRng(rng);\n } catch (ex) {\n }\n } else {\n var anyRng = rng;\n if (anyRng.item) {\n doc.execCommand('Delete', false, null);\n anyRng = editor.selection.getRng();\n }\n if (/^\\s+/.test(content)) {\n anyRng.pasteHTML('_' + content);\n editor.dom.remove('__mce_tmp');\n } else {\n anyRng.pasteHTML(content);\n }\n }\n if (!contentArgs.no_events) {\n editor.fire('SetContent', contentArgs);\n }\n };\n var SetSelectionContent = { setContent: setContent };\n\n var getEndpointElement = function (root, rng, start, real, resolve) {\n var container = start ? rng.startContainer : rng.endContainer;\n var offset = start ? rng.startOffset : rng.endOffset;\n return Option.from(container).map(Element.fromDom).map(function (elm) {\n return !real || !rng.collapsed ? child(elm, resolve(elm, offset)).getOr(elm) : elm;\n }).bind(function (elm) {\n return isElement(elm) ? Option.some(elm) : parent(elm);\n }).map(function (elm) {\n return elm.dom();\n }).getOr(root);\n };\n var getStart$2 = function (root, rng, real) {\n return getEndpointElement(root, rng, true, real, function (elm, offset) {\n return Math.min(childNodesCount(elm), offset);\n });\n };\n var getEnd = function (root, rng, real) {\n return getEndpointElement(root, rng, false, real, function (elm, offset) {\n return offset > 0 ? offset - 1 : offset;\n });\n };\n var skipEmptyTextNodes = function (node, forwards) {\n var orig = node;\n while (node && NodeType.isText(node) && node.length === 0) {\n node = forwards ? node.nextSibling : node.previousSibling;\n }\n return node || orig;\n };\n var getNode$1 = function (root, rng) {\n var elm, startContainer, endContainer, startOffset, endOffset;\n if (!rng) {\n return root;\n }\n startContainer = rng.startContainer;\n endContainer = rng.endContainer;\n startOffset = rng.startOffset;\n endOffset = rng.endOffset;\n elm = rng.commonAncestorContainer;\n if (!rng.collapsed) {\n if (startContainer === endContainer) {\n if (endOffset - startOffset < 2) {\n if (startContainer.hasChildNodes()) {\n elm = startContainer.childNodes[startOffset];\n }\n }\n }\n if (startContainer.nodeType === 3 && endContainer.nodeType === 3) {\n if (startContainer.length === startOffset) {\n startContainer = skipEmptyTextNodes(startContainer.nextSibling, true);\n } else {\n startContainer = startContainer.parentNode;\n }\n if (endOffset === 0) {\n endContainer = skipEmptyTextNodes(endContainer.previousSibling, false);\n } else {\n endContainer = endContainer.parentNode;\n }\n if (startContainer && startContainer === endContainer) {\n return startContainer;\n }\n }\n }\n if (elm && elm.nodeType === 3) {\n return elm.parentNode;\n }\n return elm;\n };\n var getSelectedBlocks = function (dom, rng, startElm, endElm) {\n var node, root;\n var selectedBlocks = [];\n root = dom.getRoot();\n startElm = dom.getParent(startElm || getStart$2(root, rng, rng.collapsed), dom.isBlock);\n endElm = dom.getParent(endElm || getEnd(root, rng, rng.collapsed), dom.isBlock);\n if (startElm && startElm !== root) {\n selectedBlocks.push(startElm);\n }\n if (startElm && endElm && startElm !== endElm) {\n node = startElm;\n var walker = new TreeWalker(startElm, root);\n while ((node = walker.next()) && node !== endElm) {\n if (dom.isBlock(node)) {\n selectedBlocks.push(node);\n }\n }\n }\n if (endElm && startElm !== endElm && endElm !== root) {\n selectedBlocks.push(endElm);\n }\n return selectedBlocks;\n };\n var select$1 = function (dom, node, content) {\n return Option.from(node).map(function (node) {\n var idx = dom.nodeIndex(node);\n var rng = dom.createRng();\n rng.setStart(node.parentNode, idx);\n rng.setEnd(node.parentNode, idx + 1);\n if (content) {\n moveEndPoint$1(dom, rng, node, true);\n moveEndPoint$1(dom, rng, node, false);\n }\n return rng;\n });\n };\n\n var each$j = Tools.each;\n var isNativeIeSelection = function (rng) {\n return !!rng.select;\n };\n var isAttachedToDom = function (node) {\n return !!(node && node.ownerDocument) && contains$3(Element.fromDom(node.ownerDocument), Element.fromDom(node));\n };\n var isValidRange = function (rng) {\n if (!rng) {\n return false;\n } else if (isNativeIeSelection(rng)) {\n return true;\n } else {\n return isAttachedToDom(rng.startContainer) && isAttachedToDom(rng.endContainer);\n }\n };\n var Selection$1 = function (dom, win, serializer, editor) {\n var bookmarkManager, controlSelection;\n var selectedRange, explicitRange, selectorChangedData;\n var setCursorLocation = function (node, offset) {\n var rng = dom.createRng();\n if (!node) {\n moveEndPoint$1(dom, rng, editor.getBody(), true);\n setRng(rng);\n } else {\n rng.setStart(node, offset);\n rng.setEnd(node, offset);\n setRng(rng);\n collapse(false);\n }\n };\n var getContent = function (args) {\n return GetSelectionContent.getContent(editor, args);\n };\n var setContent = function (content, args) {\n return SetSelectionContent.setContent(editor, content, args);\n };\n var getStart = function (real) {\n return getStart$2(editor.getBody(), getRng(), real);\n };\n var getEnd$1 = function (real) {\n return getEnd(editor.getBody(), getRng(), real);\n };\n var getBookmark = function (type, normalized) {\n return bookmarkManager.getBookmark(type, normalized);\n };\n var moveToBookmark = function (bookmark) {\n return bookmarkManager.moveToBookmark(bookmark);\n };\n var select = function (node, content) {\n select$1(dom, node, content).each(setRng);\n return node;\n };\n var isCollapsed = function () {\n var rng = getRng(), sel = getSel();\n if (!rng || rng.item) {\n return false;\n }\n if (rng.compareEndPoints) {\n return rng.compareEndPoints('StartToEnd', rng) === 0;\n }\n return !sel || rng.collapsed;\n };\n var collapse = function (toStart) {\n var rng = getRng();\n rng.collapse(!!toStart);\n setRng(rng);\n };\n var getSel = function () {\n return win.getSelection ? win.getSelection() : win.document.selection;\n };\n var getRng = function () {\n var selection, rng, elm, doc;\n var tryCompareBoundaryPoints = function (how, sourceRange, destinationRange) {\n try {\n return sourceRange.compareBoundaryPoints(how, destinationRange);\n } catch (ex) {\n return -1;\n }\n };\n if (!win) {\n return null;\n }\n doc = win.document;\n if (typeof doc === 'undefined' || doc === null) {\n return null;\n }\n if (editor.bookmark !== undefined && EditorFocus.hasFocus(editor) === false) {\n var bookmark = SelectionBookmark.getRng(editor);\n if (bookmark.isSome()) {\n return bookmark.map(function (r) {\n return EventProcessRanges.processRanges(editor, [r])[0];\n }).getOr(doc.createRange());\n }\n }\n try {\n if ((selection = getSel()) && !NodeType.isRestrictedNode(selection.anchorNode)) {\n if (selection.rangeCount > 0) {\n rng = selection.getRangeAt(0);\n } else {\n rng = selection.createRange ? selection.createRange() : doc.createRange();\n }\n }\n } catch (ex) {\n }\n rng = EventProcessRanges.processRanges(editor, [rng])[0];\n if (!rng) {\n rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();\n }\n if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {\n elm = dom.getRoot();\n rng.setStart(elm, 0);\n rng.setEnd(elm, 0);\n }\n if (selectedRange && explicitRange) {\n if (tryCompareBoundaryPoints(rng.START_TO_START, rng, selectedRange) === 0 && tryCompareBoundaryPoints(rng.END_TO_END, rng, selectedRange) === 0) {\n rng = explicitRange;\n } else {\n selectedRange = null;\n explicitRange = null;\n }\n }\n return rng;\n };\n var setRng = function (rng, forward) {\n var sel, node, evt;\n if (!isValidRange(rng)) {\n return;\n }\n var ieRange = isNativeIeSelection(rng) ? rng : null;\n if (ieRange) {\n explicitRange = null;\n try {\n ieRange.select();\n } catch (ex) {\n }\n return;\n }\n sel = getSel();\n evt = editor.fire('SetSelectionRange', {\n range: rng,\n forward: forward\n });\n rng = evt.range;\n if (sel) {\n explicitRange = rng;\n try {\n sel.removeAllRanges();\n sel.addRange(rng);\n } catch (ex) {\n }\n if (forward === false && sel.extend) {\n sel.collapse(rng.endContainer, rng.endOffset);\n sel.extend(rng.startContainer, rng.startOffset);\n }\n selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;\n }\n if (!rng.collapsed && rng.startContainer === rng.endContainer && sel.setBaseAndExtent && !Env.ie) {\n if (rng.endOffset - rng.startOffset < 2) {\n if (rng.startContainer.hasChildNodes()) {\n node = rng.startContainer.childNodes[rng.startOffset];\n if (node && node.tagName === 'IMG') {\n sel.setBaseAndExtent(rng.startContainer, rng.startOffset, rng.endContainer, rng.endOffset);\n if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {\n sel.setBaseAndExtent(node, 0, node, 1);\n }\n }\n }\n }\n }\n editor.fire('AfterSetSelectionRange', {\n range: rng,\n forward: forward\n });\n };\n var setNode = function (elm) {\n setContent(dom.getOuterHTML(elm));\n return elm;\n };\n var getNode = function () {\n return getNode$1(editor.getBody(), getRng());\n };\n var getSelectedBlocks$1 = function (startElm, endElm) {\n return getSelectedBlocks(dom, getRng(), startElm, endElm);\n };\n var isForward = function () {\n var sel = getSel();\n var anchorRange, focusRange;\n if (!sel || !sel.anchorNode || !sel.focusNode) {\n return true;\n }\n anchorRange = dom.createRng();\n anchorRange.setStart(sel.anchorNode, sel.anchorOffset);\n anchorRange.collapse(true);\n focusRange = dom.createRng();\n focusRange.setStart(sel.focusNode, sel.focusOffset);\n focusRange.collapse(true);\n return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;\n };\n var normalize = function () {\n var rng = getRng();\n var sel = getSel();\n if (!MultiRange.hasMultipleRanges(sel) && hasAnyRanges(editor)) {\n var normRng = NormalizeRange.normalize(dom, rng);\n normRng.each(function (normRng) {\n setRng(normRng, isForward());\n });\n return normRng.getOr(rng);\n }\n return rng;\n };\n var selectorChanged = function (selector, callback) {\n var currentSelectors;\n if (!selectorChangedData) {\n selectorChangedData = {};\n currentSelectors = {};\n editor.on('NodeChange', function (e) {\n var node = e.element, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};\n each$j(selectorChangedData, function (callbacks, selector) {\n each$j(parents, function (node) {\n if (dom.is(node, selector)) {\n if (!currentSelectors[selector]) {\n each$j(callbacks, function (callback) {\n callback(true, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n currentSelectors[selector] = callbacks;\n }\n matchedSelectors[selector] = callbacks;\n return false;\n }\n });\n });\n each$j(currentSelectors, function (callbacks, selector) {\n if (!matchedSelectors[selector]) {\n delete currentSelectors[selector];\n each$j(callbacks, function (callback) {\n callback(false, {\n node: node,\n selector: selector,\n parents: parents\n });\n });\n }\n });\n });\n }\n if (!selectorChangedData[selector]) {\n selectorChangedData[selector] = [];\n }\n selectorChangedData[selector].push(callback);\n return exports;\n };\n var getScrollContainer = function () {\n var scrollContainer;\n var node = dom.getRoot();\n while (node && node.nodeName !== 'BODY') {\n if (node.scrollHeight > node.clientHeight) {\n scrollContainer = node;\n break;\n }\n node = node.parentNode;\n }\n return scrollContainer;\n };\n var scrollIntoView = function (elm, alignToTop) {\n return ScrollIntoView.scrollElementIntoView(editor, elm, alignToTop);\n };\n var placeCaretAt = function (clientX, clientY) {\n return setRng(CaretRangeFromPoint.fromPoint(clientX, clientY, editor.getDoc()));\n };\n var getBoundingClientRect = function () {\n var rng = getRng();\n return rng.collapsed ? CaretPosition$1.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();\n };\n var destroy = function () {\n win = selectedRange = explicitRange = null;\n controlSelection.destroy();\n };\n var exports = {\n bookmarkManager: null,\n controlSelection: null,\n dom: dom,\n win: win,\n serializer: serializer,\n editor: editor,\n collapse: collapse,\n setCursorLocation: setCursorLocation,\n getContent: getContent,\n setContent: setContent,\n getBookmark: getBookmark,\n moveToBookmark: moveToBookmark,\n select: select,\n isCollapsed: isCollapsed,\n isForward: isForward,\n setNode: setNode,\n getNode: getNode,\n getSel: getSel,\n setRng: setRng,\n getRng: getRng,\n getStart: getStart,\n getEnd: getEnd$1,\n getSelectedBlocks: getSelectedBlocks$1,\n normalize: normalize,\n selectorChanged: selectorChanged,\n getScrollContainer: getScrollContainer,\n scrollIntoView: scrollIntoView,\n placeCaretAt: placeCaretAt,\n getBoundingClientRect: getBoundingClientRect,\n destroy: destroy\n };\n bookmarkManager = BookmarkManager$1(exports);\n controlSelection = ControlSelection(exports, editor);\n exports.bookmarkManager = bookmarkManager;\n exports.controlSelection = controlSelection;\n return exports;\n };\n\n var BreakType;\n (function (BreakType) {\n BreakType[BreakType['Br'] = 0] = 'Br';\n BreakType[BreakType['Block'] = 1] = 'Block';\n BreakType[BreakType['Wrap'] = 2] = 'Wrap';\n BreakType[BreakType['Eol'] = 3] = 'Eol';\n }(BreakType || (BreakType = {})));\n var flip = function (direction, positions) {\n return direction === HDirection.Backwards ? positions.reverse() : positions;\n };\n var walk$3 = function (direction, caretWalker, pos) {\n return direction === HDirection.Forwards ? caretWalker.next(pos) : caretWalker.prev(pos);\n };\n var getBreakType = function (scope, direction, currentPos, nextPos) {\n if (NodeType.isBr(nextPos.getNode(direction === HDirection.Forwards))) {\n return BreakType.Br;\n } else if (isInSameBlock(currentPos, nextPos) === false) {\n return BreakType.Block;\n } else {\n return BreakType.Wrap;\n }\n };\n var getPositionsUntil = function (predicate, direction, scope, start) {\n var caretWalker = CaretWalker(scope);\n var currentPos = start, nextPos;\n var positions = [];\n while (currentPos) {\n nextPos = walk$3(direction, caretWalker, currentPos);\n if (!nextPos) {\n break;\n }\n if (NodeType.isBr(nextPos.getNode(false))) {\n if (direction === HDirection.Forwards) {\n return {\n positions: flip(direction, positions).concat([nextPos]),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n } else {\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Br,\n breakAt: Option.some(nextPos)\n };\n }\n }\n if (!nextPos.isVisible()) {\n currentPos = nextPos;\n continue;\n }\n if (predicate(currentPos, nextPos)) {\n var breakType = getBreakType(scope, direction, currentPos, nextPos);\n return {\n positions: flip(direction, positions),\n breakType: breakType,\n breakAt: Option.some(nextPos)\n };\n }\n positions.push(nextPos);\n currentPos = nextPos;\n }\n return {\n positions: flip(direction, positions),\n breakType: BreakType.Eol,\n breakAt: Option.none()\n };\n };\n var getAdjacentLinePositions = function (direction, getPositionsUntilBreak, scope, start) {\n return getPositionsUntilBreak(scope, start).breakAt.map(function (pos) {\n var positions = getPositionsUntilBreak(scope, pos).positions;\n return direction === HDirection.Backwards ? positions.concat(pos) : [pos].concat(positions);\n }).getOr([]);\n };\n var findClosestHorizontalPositionFromPoint = function (positions, x) {\n return foldl(positions, function (acc, newPos) {\n return acc.fold(function () {\n return Option.some(newPos);\n }, function (lastPos) {\n return lift2(head(lastPos.getClientRects()), head(newPos.getClientRects()), function (lastRect, newRect) {\n var lastDist = Math.abs(x - lastRect.left);\n var newDist = Math.abs(x - newRect.left);\n return newDist <= lastDist ? newPos : lastPos;\n }).or(acc);\n });\n }, Option.none());\n };\n var findClosestHorizontalPosition = function (positions, pos) {\n return head(pos.getClientRects()).bind(function (targetRect) {\n return findClosestHorizontalPositionFromPoint(positions, targetRect.left);\n });\n };\n var getPositionsUntilPreviousLine = curry(getPositionsUntil, CaretPosition.isAbove, -1);\n var getPositionsUntilNextLine = curry(getPositionsUntil, CaretPosition.isBelow, 1);\n var isAtFirstLine = function (scope, pos) {\n return getPositionsUntilPreviousLine(scope, pos).breakAt.isNone();\n };\n var isAtLastLine = function (scope, pos) {\n return getPositionsUntilNextLine(scope, pos).breakAt.isNone();\n };\n var getPositionsAbove = curry(getAdjacentLinePositions, -1, getPositionsUntilPreviousLine);\n var getPositionsBelow = curry(getAdjacentLinePositions, 1, getPositionsUntilNextLine);\n var getFirstLinePositions = function (scope) {\n return CaretFinder.firstPositionIn(scope).map(function (pos) {\n return [pos].concat(getPositionsUntilNextLine(scope, pos).positions);\n }).getOr([]);\n };\n var getLastLinePositions = function (scope) {\n return CaretFinder.lastPositionIn(scope).map(function (pos) {\n return getPositionsUntilPreviousLine(scope, pos).positions.concat(pos);\n }).getOr([]);\n };\n\n var isContentEditableFalse$b = NodeType.isContentEditableFalse;\n var getSelectedNode$1 = getSelectedNode;\n var moveToCeFalseHorizontally = function (direction, editor, getNextPosFn, range) {\n var forwards = direction === HDirection.Forwards;\n var isBeforeContentEditableFalseFn = forwards ? isBeforeContentEditableFalse : isAfterContentEditableFalse;\n if (!range.collapsed) {\n var node = getSelectedNode$1(range);\n if (isContentEditableFalse$b(node)) {\n return showCaret(direction, editor, node, direction === HDirection.Backwards, true);\n }\n }\n var rangeIsInContainerBlock = isRangeInCaretContainerBlock(range);\n var caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n if (isBeforeContentEditableFalseFn(caretPosition)) {\n return selectNode(editor, caretPosition.getNode(!forwards));\n }\n var nextCaretPosition = InlineUtils.normalizePosition(forwards, getNextPosFn(caretPosition));\n if (!nextCaretPosition) {\n if (rangeIsInContainerBlock) {\n return range;\n }\n return null;\n }\n if (isBeforeContentEditableFalseFn(nextCaretPosition)) {\n return showCaret(direction, editor, nextCaretPosition.getNode(!forwards), forwards, true);\n }\n var peekCaretPosition = getNextPosFn(nextCaretPosition);\n if (peekCaretPosition && isBeforeContentEditableFalseFn(peekCaretPosition)) {\n if (isMoveInsideSameBlock(nextCaretPosition, peekCaretPosition)) {\n return showCaret(direction, editor, peekCaretPosition.getNode(!forwards), forwards, true);\n }\n }\n if (rangeIsInContainerBlock) {\n return renderRangeCaret(editor, nextCaretPosition.toRange(), true);\n }\n return null;\n };\n var moveToCeFalseVertically = function (direction, editor, walkerFn, range) {\n var caretPosition, linePositions, nextLinePositions;\n var closestNextLineRect, caretClientRect, clientX;\n var dist1, dist2, contentEditableFalseNode;\n contentEditableFalseNode = getSelectedNode$1(range);\n caretPosition = getNormalizedRangeEndPoint(direction, editor.getBody(), range);\n linePositions = walkerFn(editor.getBody(), isAboveLine(1), caretPosition);\n nextLinePositions = filter(linePositions, isLine(1));\n caretClientRect = ArrUtils.last(caretPosition.getClientRects());\n if (isBeforeContentEditableFalse(caretPosition) || isBeforeTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode();\n }\n if (isAfterContentEditableFalse(caretPosition) || isAfterTable(caretPosition)) {\n contentEditableFalseNode = caretPosition.getNode(true);\n }\n if (!caretClientRect) {\n return null;\n }\n clientX = caretClientRect.left;\n closestNextLineRect = findClosestClientRect(nextLinePositions, clientX);\n if (closestNextLineRect) {\n if (isContentEditableFalse$b(closestNextLineRect.node)) {\n dist1 = Math.abs(clientX - closestNextLineRect.left);\n dist2 = Math.abs(clientX - closestNextLineRect.right);\n return showCaret(direction, editor, closestNextLineRect.node, dist1 < dist2, true);\n }\n }\n if (contentEditableFalseNode) {\n var caretPositions = positionsUntil(direction, editor.getBody(), isAboveLine(1), contentEditableFalseNode);\n closestNextLineRect = findClosestClientRect(filter(caretPositions, isLine(1)), clientX);\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n closestNextLineRect = ArrUtils.last(filter(caretPositions, isLine(0)));\n if (closestNextLineRect) {\n return renderRangeCaret(editor, closestNextLineRect.position.toRange(), true);\n }\n }\n };\n var createTextBlock = function (editor) {\n var textBlock = editor.dom.create(Settings.getForcedRootBlock(editor));\n if (!Env.ie || Env.ie >= 11) {\n textBlock.innerHTML = '
';\n }\n return textBlock;\n };\n var exitPreBlock = function (editor, direction, range) {\n var pre, caretPos, newBlock;\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n if (range.collapsed && editor.settings.forced_root_block) {\n pre = editor.dom.getParent(range.startContainer, 'PRE');\n if (!pre) {\n return;\n }\n if (direction === 1) {\n caretPos = getNextVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n } else {\n caretPos = getPrevVisualCaretPosition(CaretPosition$1.fromRangeStart(range));\n }\n if (!caretPos) {\n newBlock = createTextBlock(editor);\n if (direction === 1) {\n editor.$(pre).after(newBlock);\n } else {\n editor.$(pre).before(newBlock);\n }\n editor.selection.select(newBlock, true);\n editor.selection.collapse();\n }\n }\n };\n var getHorizontalRange = function (editor, forward) {\n var caretWalker = CaretWalker(editor.getBody());\n var getNextVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.next);\n var getPrevVisualCaretPosition = curry(getVisualCaretPosition, caretWalker.prev);\n var newRange;\n var direction = forward ? HDirection.Forwards : HDirection.Backwards;\n var getNextPosFn = forward ? getNextVisualCaretPosition : getPrevVisualCaretPosition;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseHorizontally(direction, editor, getNextPosFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var getVerticalRange = function (editor, down) {\n var newRange;\n var direction = down ? 1 : -1;\n var walkerFn = down ? downUntil : upUntil;\n var range = editor.selection.getRng();\n newRange = moveToCeFalseVertically(direction, editor, walkerFn, range);\n if (newRange) {\n return newRange;\n }\n newRange = exitPreBlock(editor, direction, range);\n if (newRange) {\n return newRange;\n }\n return null;\n };\n var moveH = function (editor, forward) {\n return function () {\n var newRng = getHorizontalRange(editor, forward);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var moveV = function (editor, down) {\n return function () {\n var newRng = getVerticalRange(editor, down);\n if (newRng) {\n moveToRange(editor, newRng);\n return true;\n } else {\n return false;\n }\n };\n };\n var isCefPosition = function (forward) {\n return function (pos) {\n return forward ? isAfterContentEditableFalse(pos) : isBeforeContentEditableFalse(pos);\n };\n };\n var moveToLineEndPoint = function (editor, forward) {\n return function () {\n var from = forward ? CaretPosition$1.fromRangeEnd(editor.selection.getRng()) : CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var result = forward ? getPositionsUntilNextLine(editor.getBody(), from) : getPositionsUntilPreviousLine(editor.getBody(), from);\n var to = forward ? last(result.positions) : head(result.positions);\n return to.filter(isCefPosition(forward)).fold(constant(false), function (pos) {\n editor.selection.setRng(pos.toRange());\n return true;\n });\n };\n };\n\n var deflate = function (rect, delta) {\n return {\n left: rect.left - delta,\n top: rect.top - delta,\n right: rect.right + delta * 2,\n bottom: rect.bottom + delta * 2,\n width: rect.width + delta,\n height: rect.height + delta\n };\n };\n var getCorners = function (getYAxisValue, tds) {\n return bind(tds, function (td) {\n var rect = deflate(clone$1(td.getBoundingClientRect()), -1);\n return [\n {\n x: rect.left,\n y: getYAxisValue(rect),\n cell: td\n },\n {\n x: rect.right,\n y: getYAxisValue(rect),\n cell: td\n }\n ];\n });\n };\n var findClosestCorner = function (corners, x, y) {\n return foldl(corners, function (acc, newCorner) {\n return acc.fold(function () {\n return Option.some(newCorner);\n }, function (oldCorner) {\n var oldDist = Math.sqrt(Math.abs(oldCorner.x - x) + Math.abs(oldCorner.y - y));\n var newDist = Math.sqrt(Math.abs(newCorner.x - x) + Math.abs(newCorner.y - y));\n return Option.some(newDist < oldDist ? newCorner : oldCorner);\n });\n }, Option.none());\n };\n var getClosestCell$1 = function (getYAxisValue, isTargetCorner, table, x, y) {\n var cells = descendants$1(Element.fromDom(table), 'td,th,caption').map(function (e) {\n return e.dom();\n });\n var corners = filter(getCorners(getYAxisValue, cells), function (corner) {\n return isTargetCorner(corner, y);\n });\n return findClosestCorner(corners, x, y).map(function (corner) {\n return corner.cell;\n });\n };\n var getBottomValue = function (rect) {\n return rect.bottom;\n };\n var getTopValue = function (rect) {\n return rect.top;\n };\n var isAbove$1 = function (corner, y) {\n return corner.y < y;\n };\n var isBelow$1 = function (corner, y) {\n return corner.y > y;\n };\n var getClosestCellAbove = curry(getClosestCell$1, getBottomValue, isAbove$1);\n var getClosestCellBelow = curry(getClosestCell$1, getTopValue, isBelow$1);\n var findClosestPositionInAboveCell = function (table, pos) {\n return head(pos.getClientRects()).bind(function (rect) {\n return getClosestCellAbove(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getLastLinePositions(cell), pos);\n });\n };\n var findClosestPositionInBelowCell = function (table, pos) {\n return last(pos.getClientRects()).bind(function (rect) {\n return getClosestCellBelow(table, rect.left, rect.top);\n }).bind(function (cell) {\n return findClosestHorizontalPosition(getFirstLinePositions(cell), pos);\n });\n };\n\n var hasNextBreak = function (getPositionsUntil, scope, lineInfo) {\n return lineInfo.breakAt.map(function (breakPos) {\n return getPositionsUntil(scope, breakPos).breakAt.isSome();\n }).getOr(false);\n };\n var startsWithWrapBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Wrap && lineInfo.positions.length === 0;\n };\n var startsWithBrBreak = function (lineInfo) {\n return lineInfo.breakType === BreakType.Br && lineInfo.positions.length === 1;\n };\n var isAtTableCellLine = function (getPositionsUntil, scope, pos) {\n var lineInfo = getPositionsUntil(scope, pos);\n if (startsWithWrapBreak(lineInfo) || !NodeType.isBr(pos.getNode()) && startsWithBrBreak(lineInfo)) {\n return !hasNextBreak(getPositionsUntil, scope, lineInfo);\n } else {\n return lineInfo.breakAt.isNone();\n }\n };\n var isAtFirstTableCellLine = curry(isAtTableCellLine, getPositionsUntilPreviousLine);\n var isAtLastTableCellLine = curry(isAtTableCellLine, getPositionsUntilNextLine);\n var isCaretAtStartOrEndOfTable = function (forward, rng, table) {\n var caretPos = CaretPosition$1.fromRangeStart(rng);\n return CaretFinder.positionIn(!forward, table).map(function (pos) {\n return pos.isEqual(caretPos);\n }).getOr(false);\n };\n var navigateHorizontally = function (editor, forward, table, td) {\n var rng = editor.selection.getRng();\n var direction = forward ? 1 : -1;\n if (isFakeCaretTableBrowser() && isCaretAtStartOrEndOfTable(forward, rng, table)) {\n var newRng = showCaret(direction, editor, table, !forward, true);\n moveToRange(editor, newRng);\n return true;\n }\n return false;\n };\n var getClosestAbovePosition = function (root, table, start) {\n return findClosestPositionInAboveCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsAbove(root, CaretPosition$1.before(table)), rect.left);\n });\n }).getOr(CaretPosition$1.before(table));\n };\n var getClosestBelowPosition = function (root, table, start) {\n return findClosestPositionInBelowCell(table, start).orThunk(function () {\n return head(start.getClientRects()).bind(function (rect) {\n return findClosestHorizontalPositionFromPoint(getPositionsBelow(root, CaretPosition$1.after(table)), rect.left);\n });\n }).getOr(CaretPosition$1.after(table));\n };\n var getTable = function (previous, pos) {\n var node = pos.getNode(previous);\n return NodeType.isElement(node) && node.nodeName === 'TABLE' ? Option.some(node) : Option.none();\n };\n var renderBlock = function (down, editor, table, pos) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n if (forcedRootBlock) {\n editor.undoManager.transact(function () {\n var element = Element.fromTag(forcedRootBlock);\n setAll(element, Settings.getForcedRootBlockAttrs(editor));\n append(element, Element.fromTag('br'));\n if (down) {\n after(Element.fromDom(table), element);\n } else {\n before(Element.fromDom(table), element);\n }\n var rng = editor.dom.createRng();\n rng.setStart(element.dom(), 0);\n rng.setEnd(element.dom(), 0);\n moveToRange(editor, rng);\n });\n } else {\n moveToRange(editor, pos.toRange());\n }\n };\n var moveCaret = function (editor, down, pos) {\n var table = down ? getTable(true, pos) : getTable(false, pos);\n var last = down === false;\n table.fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (table) {\n return CaretFinder.positionIn(last, editor.getBody()).filter(function (lastPos) {\n return lastPos.isEqual(pos);\n }).fold(function () {\n return moveToRange(editor, pos.toRange());\n }, function (_) {\n return renderBlock(down, editor, table, pos);\n });\n });\n };\n var navigateVertically = function (editor, down, table, td) {\n var rng = editor.selection.getRng();\n var pos = CaretPosition$1.fromRangeStart(rng);\n var root = editor.getBody();\n if (!down && isAtFirstTableCellLine(td, pos)) {\n var newPos = getClosestAbovePosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else if (down && isAtLastTableCellLine(td, pos)) {\n var newPos = getClosestBelowPosition(root, table, pos);\n moveCaret(editor, down, newPos);\n return true;\n } else {\n return false;\n }\n };\n var moveH$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateHorizontally(editor, forward, table);\n });\n }).getOr(false);\n };\n };\n var moveV$1 = function (editor, forward) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getNode(), 'td,th')).bind(function (td) {\n return Option.from(editor.dom.getParent(td, 'table')).map(function (table) {\n return navigateVertically(editor, forward, table, td);\n });\n }).getOr(false);\n };\n };\n\n var isTarget = function (node) {\n return contains(['figcaption'], name(node));\n };\n var rangeBefore = function (target) {\n var rng = domGlobals.document.createRange();\n rng.setStartBefore(target.dom());\n rng.setEndBefore(target.dom());\n return rng;\n };\n var insertElement = function (root, elm, forward) {\n if (forward) {\n append(root, elm);\n } else {\n prepend(root, elm);\n }\n };\n var insertBr = function (root, forward) {\n var br = Element.fromTag('br');\n insertElement(root, br, forward);\n return rangeBefore(br);\n };\n var insertBlock$1 = function (root, forward, blockName, attrs) {\n var block = Element.fromTag(blockName);\n var br = Element.fromTag('br');\n setAll(block, attrs);\n append(block, br);\n insertElement(root, block, forward);\n return rangeBefore(br);\n };\n var insertEmptyLine = function (root, rootBlockName, attrs, forward) {\n if (rootBlockName === '') {\n return insertBr(root, forward);\n } else {\n return insertBlock$1(root, forward, rootBlockName, attrs);\n }\n };\n var getClosestTargetBlock = function (pos, root) {\n var isRoot = curry(eq, root);\n return closest(Element.fromDom(pos.container()), isBlock, isRoot).filter(isTarget);\n };\n var isAtFirstOrLastLine = function (root, forward, pos) {\n return forward ? isAtLastLine(root.dom(), pos) : isAtFirstLine(root.dom(), pos);\n };\n var moveCaretToNewEmptyLine = function (editor, forward) {\n var root = Element.fromDom(editor.getBody());\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var rootBlock = Settings.getForcedRootBlock(editor);\n var rootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n return getClosestTargetBlock(pos, root).exists(function () {\n if (isAtFirstOrLastLine(root, forward, pos)) {\n var rng = insertEmptyLine(root, rootBlock, rootBlockAttrs, forward);\n editor.selection.setRng(rng);\n return true;\n } else {\n return false;\n }\n });\n };\n var moveV$2 = function (editor, forward) {\n return function () {\n if (editor.selection.isCollapsed()) {\n return moveCaretToNewEmptyLine(editor, forward);\n } else {\n return false;\n }\n };\n };\n\n var defaultPatterns = function (patterns) {\n return map(patterns, function (pattern) {\n return merge({\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n keyCode: 0,\n action: noop\n }, pattern);\n });\n };\n var matchesEvent = function (pattern, evt) {\n return evt.keyCode === pattern.keyCode && evt.shiftKey === pattern.shiftKey && evt.altKey === pattern.altKey && evt.ctrlKey === pattern.ctrlKey && evt.metaKey === pattern.metaKey;\n };\n var match$1 = function (patterns, evt) {\n return bind(defaultPatterns(patterns), function (pattern) {\n return matchesEvent(pattern, evt) ? [pattern] : [];\n });\n };\n var action = function (f) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return f.apply(null, args);\n };\n };\n var execute = function (patterns, evt) {\n return find(match$1(patterns, evt), function (pattern) {\n return pattern.action();\n });\n };\n var MatchKeys = {\n match: match$1,\n action: action,\n execute: execute\n };\n\n var executeKeydownOverride = function (editor, caret, evt) {\n var os = PlatformDetection$1.detect().os;\n MatchKeys.execute([\n {\n keyCode: VK.RIGHT,\n action: moveH(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: moveH$1(editor, true)\n },\n {\n keyCode: VK.LEFT,\n action: moveH$1(editor, false)\n },\n {\n keyCode: VK.UP,\n action: moveV$1(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$1(editor, true)\n },\n {\n keyCode: VK.RIGHT,\n action: BoundarySelection.move(editor, caret, true)\n },\n {\n keyCode: VK.LEFT,\n action: BoundarySelection.move(editor, caret, false)\n },\n {\n keyCode: VK.RIGHT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.moveNextWord(editor, caret)\n },\n {\n keyCode: VK.LEFT,\n ctrlKey: !os.isOSX(),\n altKey: os.isOSX(),\n action: BoundarySelection.movePrevWord(editor, caret)\n },\n {\n keyCode: VK.UP,\n action: moveV$2(editor, false)\n },\n {\n keyCode: VK.DOWN,\n action: moveV$2(editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$7 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride(editor, caret, evt);\n }\n });\n };\n var ArrowKeys = { setup: setup$7 };\n\n var executeKeydownOverride$1 = function (editor, caret, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(TableDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true)\n },\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, false)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(InlineFormatDelete.backspaceDelete, editor, true)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var executeKeyupOverride = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.BACKSPACE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n },\n {\n keyCode: VK.DELETE,\n action: MatchKeys.action(CefDelete.paddEmptyElement, editor)\n }\n ], evt);\n };\n var setup$8 = function (editor, caret) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$1(editor, caret, evt);\n }\n });\n editor.on('keyup', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeyupOverride(editor, evt);\n }\n });\n };\n var DeleteBackspaceKeys = { setup: setup$8 };\n\n var firstNonWhiteSpaceNodeSibling = function (node) {\n while (node) {\n if (node.nodeType === 1 || node.nodeType === 3 && node.data && /[\\r\\n\\s]/.test(node.data)) {\n return node;\n }\n node = node.nextSibling;\n }\n };\n var moveToCaretPosition = function (editor, root) {\n var walker, node, rng, lastNode = root, tempElm;\n var dom = editor.dom;\n var moveCaretBeforeOnEnterElementsMap = editor.schema.getMoveCaretBeforeOnEnterElements();\n if (!root) {\n return;\n }\n if (/^(LI|DT|DD)$/.test(root.nodeName)) {\n var firstChild = firstNonWhiteSpaceNodeSibling(root.firstChild);\n if (firstChild && /^(UL|OL|DL)$/.test(firstChild.nodeName)) {\n root.insertBefore(dom.doc.createTextNode('\\xA0'), root.firstChild);\n }\n }\n rng = dom.createRng();\n root.normalize();\n if (root.hasChildNodes()) {\n walker = new TreeWalker(root, root);\n while (node = walker.current()) {\n if (NodeType.isText(node)) {\n rng.setStart(node, 0);\n rng.setEnd(node, 0);\n break;\n }\n if (moveCaretBeforeOnEnterElementsMap[node.nodeName.toLowerCase()]) {\n rng.setStartBefore(node);\n rng.setEndBefore(node);\n break;\n }\n lastNode = node;\n node = walker.next();\n }\n if (!node) {\n rng.setStart(lastNode, 0);\n rng.setEnd(lastNode, 0);\n }\n } else {\n if (NodeType.isBr(root)) {\n if (root.nextSibling && dom.isBlock(root.nextSibling)) {\n rng.setStartBefore(root);\n rng.setEndBefore(root);\n } else {\n rng.setStartAfter(root);\n rng.setEndAfter(root);\n }\n } else {\n rng.setStart(root, 0);\n rng.setEnd(root, 0);\n }\n }\n editor.selection.setRng(rng);\n dom.remove(tempElm);\n editor.selection.scrollIntoView(root);\n };\n var getEditableRoot = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var getParentBlock$2 = function (editor) {\n return Option.from(editor.dom.getParent(editor.selection.getStart(true), editor.dom.isBlock));\n };\n var getParentBlockName = function (editor) {\n return getParentBlock$2(editor).fold(constant(''), function (parentBlock) {\n return parentBlock.nodeName.toUpperCase();\n });\n };\n var isListItemParentBlock = function (editor) {\n return getParentBlock$2(editor).filter(function (elm) {\n return isListItem(Element.fromDom(elm));\n }).isSome();\n };\n var NewLineUtils = {\n moveToCaretPosition: moveToCaretPosition,\n getEditableRoot: getEditableRoot,\n getParentBlock: getParentBlock$2,\n getParentBlockName: getParentBlockName,\n isListItemParentBlock: isListItemParentBlock\n };\n\n var hasFirstChild = function (elm, name) {\n return elm.firstChild && elm.firstChild.nodeName === name;\n };\n var hasParent$1 = function (elm, parentName) {\n return elm && elm.parentNode && elm.parentNode.nodeName === parentName;\n };\n var isListBlock = function (elm) {\n return elm && /^(OL|UL|LI)$/.test(elm.nodeName);\n };\n var isNestedList = function (elm) {\n return isListBlock(elm) && isListBlock(elm.parentNode);\n };\n var getContainerBlock = function (containerBlock) {\n var containerBlockParent = containerBlock.parentNode;\n if (/^(LI|DT|DD)$/.test(containerBlockParent.nodeName)) {\n return containerBlockParent;\n }\n return containerBlock;\n };\n var isFirstOrLastLi = function (containerBlock, parentBlock, first) {\n var node = containerBlock[first ? 'firstChild' : 'lastChild'];\n while (node) {\n if (NodeType.isElement(node)) {\n break;\n }\n node = node[first ? 'nextSibling' : 'previousSibling'];\n }\n return node === parentBlock;\n };\n var insert$1 = function (editor, createNewBlock, containerBlock, parentBlock, newBlockName) {\n var dom = editor.dom;\n var rng = editor.selection.getRng();\n if (containerBlock === editor.getBody()) {\n return;\n }\n if (isNestedList(containerBlock)) {\n newBlockName = 'LI';\n }\n var newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');\n if (isFirstOrLastLi(containerBlock, parentBlock, true) && isFirstOrLastLi(containerBlock, parentBlock, false)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n dom.replace(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, true)) {\n if (hasParent$1(containerBlock, 'LI')) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n newBlock.appendChild(dom.doc.createTextNode(' '));\n newBlock.appendChild(containerBlock);\n } else {\n containerBlock.parentNode.insertBefore(newBlock, containerBlock);\n }\n } else if (isFirstOrLastLi(containerBlock, parentBlock, false)) {\n dom.insertAfter(newBlock, getContainerBlock(containerBlock));\n } else {\n containerBlock = getContainerBlock(containerBlock);\n var tmpRng = rng.cloneRange();\n tmpRng.setStartAfter(parentBlock);\n tmpRng.setEndAfter(containerBlock);\n var fragment = tmpRng.extractContents();\n if (newBlockName === 'LI' && hasFirstChild(fragment, 'LI')) {\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, containerBlock);\n } else {\n dom.insertAfter(fragment, containerBlock);\n dom.insertAfter(newBlock, containerBlock);\n }\n }\n dom.remove(parentBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n var InsertLi = { insert: insert$1 };\n\n var trimZwsp = function (fragment) {\n each(descendants(Element.fromDom(fragment), isText), function (text) {\n var rawNode = text.dom();\n rawNode.nodeValue = Zwsp.trim(rawNode.nodeValue);\n });\n };\n var isEmptyAnchor = function (dom, elm) {\n return elm && elm.nodeName === 'A' && dom.isEmpty(elm);\n };\n var isTableCell$5 = function (node) {\n return node && /^(TD|TH|CAPTION)$/.test(node.nodeName);\n };\n var emptyBlock = function (elm) {\n elm.innerHTML = '
';\n };\n var containerAndSiblingName = function (container, nodeName) {\n return container.nodeName === nodeName || container.previousSibling && container.previousSibling.nodeName === nodeName;\n };\n var canSplitBlock = function (dom, node) {\n return node && dom.isBlock(node) && !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) && !/^(fixed|absolute)/i.test(node.style.position) && dom.getContentEditable(node) !== 'true';\n };\n var trimInlineElementsOnLeftSideOfBlock = function (dom, nonEmptyElementsMap, block) {\n var node = block;\n var firstChilds = [];\n var i;\n if (!node) {\n return;\n }\n while (node = node.firstChild) {\n if (dom.isBlock(node)) {\n return;\n }\n if (NodeType.isElement(node) && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {\n firstChilds.push(node);\n }\n }\n i = firstChilds.length;\n while (i--) {\n node = firstChilds[i];\n if (!node.hasChildNodes() || node.firstChild === node.lastChild && node.firstChild.nodeValue === '') {\n dom.remove(node);\n } else {\n if (isEmptyAnchor(dom, node)) {\n dom.remove(node);\n }\n }\n }\n };\n var normalizeZwspOffset = function (start, container, offset) {\n if (NodeType.isText(container) === false) {\n return offset;\n } else if (start) {\n return offset === 1 && container.data.charAt(offset - 1) === Zwsp.ZWSP ? 0 : offset;\n } else {\n return offset === container.data.length - 1 && container.data.charAt(offset) === Zwsp.ZWSP ? container.data.length : offset;\n }\n };\n var includeZwspInRange = function (rng) {\n var newRng = rng.cloneRange();\n newRng.setStart(rng.startContainer, normalizeZwspOffset(true, rng.startContainer, rng.startOffset));\n newRng.setEnd(rng.endContainer, normalizeZwspOffset(false, rng.endContainer, rng.endOffset));\n return newRng;\n };\n var trimLeadingLineBreaks = function (node) {\n do {\n if (NodeType.isText(node)) {\n node.nodeValue = node.nodeValue.replace(/^[\\r\\n]+/, '');\n }\n node = node.firstChild;\n } while (node);\n };\n var getEditableRoot$1 = function (dom, node) {\n var root = dom.getRoot();\n var parent, editableRoot;\n parent = node;\n while (parent !== root && dom.getContentEditable(parent) !== 'false') {\n if (dom.getContentEditable(parent) === 'true') {\n editableRoot = parent;\n }\n parent = parent.parentNode;\n }\n return parent !== root ? editableRoot : root;\n };\n var applyAttributes = function (editor, node, forcedRootBlockAttrs) {\n Option.from(forcedRootBlockAttrs.style).map(editor.dom.parseStyle).each(function (attrStyles) {\n var currentStyles = getAllRaw(Element.fromDom(node));\n var newStyles = __assign(__assign({}, currentStyles), attrStyles);\n editor.dom.setStyles(node, newStyles);\n });\n var attrClassesOpt = Option.from(forcedRootBlockAttrs.class).map(function (attrClasses) {\n return attrClasses.split(/\\s+/);\n });\n var currentClassesOpt = Option.from(node.className).map(function (currentClasses) {\n return filter(currentClasses.split(/\\s+/), function (clazz) {\n return clazz !== '';\n });\n });\n lift2(attrClassesOpt, currentClassesOpt, function (attrClasses, currentClasses) {\n var filteredClasses = filter(currentClasses, function (clazz) {\n return !contains(attrClasses, clazz);\n });\n var newClasses = __spreadArrays(attrClasses, filteredClasses);\n editor.dom.setAttrib(node, 'class', newClasses.join(' '));\n });\n var appliedAttrs = [\n 'style',\n 'class'\n ];\n var remainingAttrs = bifilter(forcedRootBlockAttrs, function (_, attrs) {\n return !contains(appliedAttrs, attrs);\n }).t;\n editor.dom.setAttribs(node, remainingAttrs);\n };\n var setForcedBlockAttrs = function (editor, node) {\n var forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && forcedRootBlockName.toLowerCase() === node.tagName.toLowerCase()) {\n var forcedRootBlockAttrs = Settings.getForcedRootBlockAttrs(editor);\n applyAttributes(editor, node, forcedRootBlockAttrs);\n }\n };\n var wrapSelfAndSiblingsInDefaultBlock = function (editor, newBlockName, rng, container, offset) {\n var newBlock, parentBlock, startNode, node, next, rootBlockName;\n var blockName = newBlockName || 'P';\n var dom = editor.dom, editableRoot = getEditableRoot$1(dom, container);\n parentBlock = dom.getParent(container, dom.isBlock);\n if (!parentBlock || !canSplitBlock(dom, parentBlock)) {\n parentBlock = parentBlock || editableRoot;\n if (parentBlock === editor.getBody() || isTableCell$5(parentBlock)) {\n rootBlockName = parentBlock.nodeName.toLowerCase();\n } else {\n rootBlockName = parentBlock.parentNode.nodeName.toLowerCase();\n }\n if (!parentBlock.hasChildNodes()) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n parentBlock.appendChild(newBlock);\n rng.setStart(newBlock, 0);\n rng.setEnd(newBlock, 0);\n return newBlock;\n }\n node = container;\n while (node.parentNode !== parentBlock) {\n node = node.parentNode;\n }\n while (node && !dom.isBlock(node)) {\n startNode = node;\n node = node.previousSibling;\n }\n if (startNode && editor.schema.isValidChild(rootBlockName, blockName.toLowerCase())) {\n newBlock = dom.create(blockName);\n setForcedBlockAttrs(editor, newBlock);\n startNode.parentNode.insertBefore(newBlock, startNode);\n node = startNode;\n while (node && !dom.isBlock(node)) {\n next = node.nextSibling;\n newBlock.appendChild(node);\n node = next;\n }\n rng.setStart(container, offset);\n rng.setEnd(container, offset);\n }\n }\n return container;\n };\n var addBrToBlockIfNeeded = function (dom, block) {\n var lastChild;\n block.normalize();\n lastChild = block.lastChild;\n if (!lastChild || /^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true))) {\n dom.add(block, 'br');\n }\n };\n var insert$2 = function (editor, evt) {\n var tmpRng, editableRoot, container, offset, parentBlock, shiftKey;\n var newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;\n var dom = editor.dom;\n var schema = editor.schema, nonEmptyElementsMap = schema.getNonEmptyElements();\n var rng = editor.selection.getRng();\n var createNewBlock = function (name) {\n var node = container, block, clonedNode, caretNode;\n var textInlineElements = schema.getTextInlineElements();\n if (name || parentBlockName === 'TABLE' || parentBlockName === 'HR') {\n block = dom.create(name || newBlockName);\n } else {\n block = parentBlock.cloneNode(false);\n }\n caretNode = block;\n if (Settings.shouldKeepStyles(editor) === false) {\n dom.setAttrib(block, 'style', null);\n dom.setAttrib(block, 'class', null);\n } else {\n do {\n if (textInlineElements[node.nodeName]) {\n if (isCaretNode(node) || Bookmarks.isBookmarkNode(node)) {\n continue;\n }\n clonedNode = node.cloneNode(false);\n dom.setAttrib(clonedNode, 'id', '');\n if (block.hasChildNodes()) {\n clonedNode.appendChild(block.firstChild);\n block.appendChild(clonedNode);\n } else {\n caretNode = clonedNode;\n block.appendChild(clonedNode);\n }\n }\n } while ((node = node.parentNode) && node !== editableRoot);\n }\n setForcedBlockAttrs(editor, block);\n emptyBlock(caretNode);\n return block;\n };\n var isCaretAtStartOrEndOfBlock = function (start) {\n var walker, node, name, normalizedOffset;\n normalizedOffset = normalizeZwspOffset(start, container, offset);\n if (NodeType.isText(container) && (start ? normalizedOffset > 0 : normalizedOffset < container.nodeValue.length)) {\n return false;\n }\n if (container.parentNode === parentBlock && isAfterLastNodeInContainer && !start) {\n return true;\n }\n if (start && NodeType.isElement(container) && container === parentBlock.firstChild) {\n return true;\n }\n if (containerAndSiblingName(container, 'TABLE') || containerAndSiblingName(container, 'HR')) {\n return isAfterLastNodeInContainer && !start || !isAfterLastNodeInContainer && start;\n }\n walker = new TreeWalker(container, parentBlock);\n if (NodeType.isText(container)) {\n if (start && normalizedOffset === 0) {\n walker.prev();\n } else if (!start && normalizedOffset === container.nodeValue.length) {\n walker.next();\n }\n }\n while (node = walker.current()) {\n if (NodeType.isElement(node)) {\n if (!node.getAttribute('data-mce-bogus')) {\n name = node.nodeName.toLowerCase();\n if (nonEmptyElementsMap[name] && name !== 'br') {\n return false;\n }\n }\n } else if (NodeType.isText(node) && !/^[ \\t\\r\\n]*$/.test(node.nodeValue)) {\n return false;\n }\n if (start) {\n walker.prev();\n } else {\n walker.next();\n }\n }\n return true;\n };\n var insertNewBlockAfter = function () {\n if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName !== 'HGROUP') {\n newBlock = createNewBlock(newBlockName);\n } else {\n newBlock = createNewBlock();\n }\n if (Settings.shouldEndContainerOnEmptyBlock(editor) && canSplitBlock(dom, containerBlock) && dom.isEmpty(parentBlock)) {\n newBlock = dom.split(containerBlock, parentBlock);\n } else {\n dom.insertAfter(newBlock, parentBlock);\n }\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n };\n NormalizeRange.normalize(dom, rng).each(function (normRng) {\n rng.setStart(normRng.startContainer, normRng.startOffset);\n rng.setEnd(normRng.endContainer, normRng.endOffset);\n });\n container = rng.startContainer;\n offset = rng.startOffset;\n newBlockName = Settings.getForcedRootBlock(editor);\n shiftKey = evt.shiftKey;\n if (NodeType.isElement(container) && container.hasChildNodes()) {\n isAfterLastNodeInContainer = offset > container.childNodes.length - 1;\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n if (isAfterLastNodeInContainer && NodeType.isText(container)) {\n offset = container.nodeValue.length;\n } else {\n offset = 0;\n }\n }\n editableRoot = getEditableRoot$1(dom, container);\n if (!editableRoot) {\n return;\n }\n if (newBlockName && !shiftKey || !newBlockName && shiftKey) {\n container = wrapSelfAndSiblingsInDefaultBlock(editor, newBlockName, rng, container, offset);\n }\n parentBlock = dom.getParent(container, dom.isBlock);\n containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;\n parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : '';\n containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : '';\n if (containerBlockName === 'LI' && !evt.ctrlKey) {\n parentBlock = containerBlock;\n containerBlock = containerBlock.parentNode;\n parentBlockName = containerBlockName;\n }\n if (/^(LI|DT|DD)$/.test(parentBlockName)) {\n if (dom.isEmpty(parentBlock)) {\n InsertLi.insert(editor, createNewBlock, containerBlock, parentBlock, newBlockName);\n return;\n }\n }\n if (newBlockName && parentBlock === editor.getBody()) {\n return;\n }\n newBlockName = newBlockName || 'P';\n if (isCaretContainerBlock(parentBlock)) {\n newBlock = showCaretContainerBlock(parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n } else if (isCaretAtStartOrEndOfBlock()) {\n insertNewBlockAfter();\n } else if (isCaretAtStartOrEndOfBlock(true)) {\n newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);\n NewLineUtils.moveToCaretPosition(editor, containerAndSiblingName(parentBlock, 'HR') ? newBlock : parentBlock);\n } else {\n tmpRng = includeZwspInRange(rng).cloneRange();\n tmpRng.setEndAfter(parentBlock);\n fragment = tmpRng.extractContents();\n trimZwsp(fragment);\n trimLeadingLineBreaks(fragment);\n newBlock = fragment.firstChild;\n dom.insertAfter(fragment, parentBlock);\n trimInlineElementsOnLeftSideOfBlock(dom, nonEmptyElementsMap, newBlock);\n addBrToBlockIfNeeded(dom, parentBlock);\n if (dom.isEmpty(parentBlock)) {\n emptyBlock(parentBlock);\n }\n newBlock.normalize();\n if (dom.isEmpty(newBlock)) {\n dom.remove(newBlock);\n insertNewBlockAfter();\n } else {\n setForcedBlockAttrs(editor, newBlock);\n NewLineUtils.moveToCaretPosition(editor, newBlock);\n }\n }\n dom.setAttrib(newBlock, 'id', '');\n editor.fire('NewBlock', { newBlock: newBlock });\n };\n var InsertBlock = { insert: insert$2 };\n\n var matchesSelector = function (editor, selector) {\n return NewLineUtils.getParentBlock(editor).filter(function (parentBlock) {\n return selector.length > 0 && is$1(Element.fromDom(parentBlock), selector);\n }).isSome();\n };\n var shouldInsertBr = function (editor) {\n return matchesSelector(editor, Settings.getBrNewLineSelector(editor));\n };\n var shouldBlockNewLine = function (editor) {\n return matchesSelector(editor, Settings.getNoNewLineSelector(editor));\n };\n var ContextSelectors = {\n shouldInsertBr: shouldInsertBr,\n shouldBlockNewLine: shouldBlockNewLine\n };\n\n var newLineAction = Adt.generate([\n { br: [] },\n { block: [] },\n { none: [] }\n ]);\n var shouldBlockNewLine$1 = function (editor, shiftKey) {\n return ContextSelectors.shouldBlockNewLine(editor);\n };\n var isBrMode = function (requiredState) {\n return function (editor, shiftKey) {\n var brMode = Settings.getForcedRootBlock(editor) === '';\n return brMode === requiredState;\n };\n };\n var inListBlock = function (requiredState) {\n return function (editor, shiftKey) {\n return NewLineUtils.isListItemParentBlock(editor) === requiredState;\n };\n };\n var inBlock = function (blockName, requiredState) {\n return function (editor, shiftKey) {\n var state = NewLineUtils.getParentBlockName(editor) === blockName.toUpperCase();\n return state === requiredState;\n };\n };\n var inPreBlock = function (requiredState) {\n return inBlock('pre', requiredState);\n };\n var inSummaryBlock = function () {\n return inBlock('summary', true);\n };\n var shouldPutBrInPre$1 = function (requiredState) {\n return function (editor, shiftKey) {\n return Settings.shouldPutBrInPre(editor) === requiredState;\n };\n };\n var inBrContext = function (editor, shiftKey) {\n return ContextSelectors.shouldInsertBr(editor);\n };\n var hasShiftKey = function (editor, shiftKey) {\n return shiftKey;\n };\n var canInsertIntoEditableRoot = function (editor) {\n var forcedRootBlock = Settings.getForcedRootBlock(editor);\n var rootEditable = NewLineUtils.getEditableRoot(editor.dom, editor.selection.getStart());\n return rootEditable && editor.schema.isValidChild(rootEditable.nodeName, forcedRootBlock ? forcedRootBlock : 'P');\n };\n var match$2 = function (predicates, action) {\n return function (editor, shiftKey) {\n var isMatch = foldl(predicates, function (res, p) {\n return res && p(editor, shiftKey);\n }, true);\n return isMatch ? Option.some(action) : Option.none();\n };\n };\n var getAction$1 = function (editor, evt) {\n return LazyEvaluator.evaluateUntil([\n match$2([shouldBlockNewLine$1], newLineAction.none()),\n match$2([inSummaryBlock()], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(false)\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true),\n hasShiftKey\n ], newLineAction.block()),\n match$2([\n inPreBlock(true),\n shouldPutBrInPre$1(true)\n ], newLineAction.br()),\n match$2([\n inListBlock(true),\n hasShiftKey\n ], newLineAction.br()),\n match$2([inListBlock(true)], newLineAction.block()),\n match$2([\n isBrMode(true),\n hasShiftKey,\n canInsertIntoEditableRoot\n ], newLineAction.block()),\n match$2([isBrMode(true)], newLineAction.br()),\n match$2([inBrContext], newLineAction.br()),\n match$2([\n isBrMode(false),\n hasShiftKey\n ], newLineAction.br()),\n match$2([canInsertIntoEditableRoot], newLineAction.block())\n ], [\n editor,\n evt.shiftKey\n ]).getOr(newLineAction.none());\n };\n var NewLineAction = { getAction: getAction$1 };\n\n var insert$3 = function (editor, evt) {\n NewLineAction.getAction(editor, evt).fold(function () {\n InsertBr.insert(editor, evt);\n }, function () {\n InsertBlock.insert(editor, evt);\n }, noop);\n };\n var InsertNewLine = { insert: insert$3 };\n\n var endTypingLevel = function (undoManager) {\n if (undoManager.typing) {\n undoManager.typing = false;\n undoManager.add();\n }\n };\n var handleEnterKeyEvent = function (editor, event) {\n if (event.isDefaultPrevented()) {\n return;\n }\n event.preventDefault();\n endTypingLevel(editor.undoManager);\n editor.undoManager.transact(function () {\n if (editor.selection.isCollapsed() === false) {\n editor.execCommand('Delete');\n }\n InsertNewLine.insert(editor, event);\n });\n };\n var setup$9 = function (editor) {\n editor.on('keydown', function (event) {\n if (event.keyCode === VK.ENTER) {\n handleEnterKeyEvent(editor, event);\n }\n });\n };\n var EnterKey = { setup: setup$9 };\n\n var insertTextAtPosition = function (text, pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container)) {\n container.insertData(offset, text);\n return Option.some(CaretPosition(container, offset + text.length));\n } else {\n return getElementFromPosition(pos).map(function (elm) {\n var textNode = Element.fromText(text);\n if (pos.isAtEnd()) {\n after(elm, textNode);\n } else {\n before(elm, textNode);\n }\n return CaretPosition(textNode.dom(), text.length);\n });\n }\n };\n var insertNbspAtPosition = curry(insertTextAtPosition, '\\xA0');\n var insertSpaceAtPosition = curry(insertTextAtPosition, ' ');\n\n var navigateIgnoreEmptyTextNodes = function (forward, root, from) {\n return CaretFinder.navigateIgnore(forward, root, from, isEmptyText);\n };\n var getClosestBlock = function (root, pos) {\n return find(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n };\n var isAtBeforeAfterBlockBoundary = function (forward, root, pos) {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return getClosestBlock(root, pos).fold(function () {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n }, function (fromBlock) {\n return isInSameBlock(newPos, pos, root.dom()) === false && contains$3(fromBlock, Element.fromDom(newPos.container()));\n });\n });\n };\n var isAtBlockBoundary = function (forward, root, pos) {\n return getClosestBlock(root, pos).fold(function () {\n return navigateIgnoreEmptyTextNodes(forward, root.dom(), pos).forall(function (newPos) {\n return isInSameBlock(newPos, pos, root.dom()) === false;\n });\n }, function (parent) {\n return navigateIgnoreEmptyTextNodes(forward, parent.dom(), pos).isNone();\n });\n };\n var isAtStartOfBlock = curry(isAtBlockBoundary, false);\n var isAtEndOfBlock = curry(isAtBlockBoundary, true);\n var isBeforeBlock = curry(isAtBeforeAfterBlockBoundary, false);\n var isAfterBlock = curry(isAtBeforeAfterBlockBoundary, true);\n\n var nbsp = '\\xA0';\n var isInMiddleOfText = function (pos) {\n return CaretPosition.isTextPosition(pos) && !pos.isAtStart() && !pos.isAtEnd();\n };\n var getClosestBlock$1 = function (root, pos) {\n var parentBlocks = filter(Parents.parentsAndSelf(Element.fromDom(pos.container()), root), isBlock);\n return head(parentBlocks).getOr(root);\n };\n var hasSpaceBefore = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isAfterSpace(pos);\n } else {\n return isAfterSpace(pos) || CaretFinder.prevPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isAfterSpace);\n }\n };\n var hasSpaceAfter = function (root, pos) {\n if (isInMiddleOfText(pos)) {\n return isBeforeSpace(pos);\n } else {\n return isBeforeSpace(pos) || CaretFinder.nextPosition(getClosestBlock$1(root, pos).dom(), pos).exists(isBeforeSpace);\n }\n };\n var isPreValue = function (value) {\n return contains([\n 'pre',\n 'pre-wrap'\n ], value);\n };\n var isInPre = function (pos) {\n return getElementFromPosition(pos).bind(function (elm) {\n return closest(elm, isElement);\n }).exists(function (elm) {\n return isPreValue(get$1(elm, 'white-space'));\n });\n };\n var isAtBeginningOfBody = function (root, pos) {\n return CaretFinder.prevPosition(root.dom(), pos).isNone();\n };\n var isAtEndOfBody = function (root, pos) {\n return CaretFinder.nextPosition(root.dom(), pos).isNone();\n };\n var isAtLineBoundary = function (root, pos) {\n return isAtBeginningOfBody(root, pos) || isAtEndOfBody(root, pos) || isAtStartOfBlock(root, pos) || isAtEndOfBlock(root, pos) || isAfterBr(root, pos) || isBeforeBr(root, pos);\n };\n var needsToHaveNbsp = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtLineBoundary(root, pos) || hasSpaceBefore(root, pos) || hasSpaceAfter(root, pos);\n }\n };\n var needsToBeNbspLeft = function (root, pos) {\n if (isInPre(pos)) {\n return false;\n } else {\n return isAtStartOfBlock(root, pos) || isBeforeBlock(root, pos) || isAfterBr(root, pos) || hasSpaceBefore(root, pos);\n }\n };\n var leanRight = function (pos) {\n var container = pos.container();\n var offset = pos.offset();\n if (NodeType.isText(container) && offset < container.data.length) {\n return CaretPosition(container, offset + 1);\n } else {\n return pos;\n }\n };\n var needsToBeNbspRight = function (root, pos) {\n var afterPos = leanRight(pos);\n if (isInPre(afterPos)) {\n return false;\n } else {\n return isAtEndOfBlock(root, afterPos) || isAfterBlock(root, afterPos) || isBeforeBr(root, afterPos) || hasSpaceAfter(root, afterPos);\n }\n };\n var needsToBeNbsp = function (root, pos) {\n return needsToBeNbspLeft(root, pos) || needsToBeNbspRight(root, pos);\n };\n var isNbspAt = function (text, offset) {\n return isNbsp(text.charAt(offset));\n };\n var hasNbsp = function (pos) {\n var container = pos.container();\n return NodeType.isText(container) && contains$2(container.data, nbsp);\n };\n var normalizeNbspMiddle = function (text) {\n var chars = text.split('');\n return map(chars, function (chr, i) {\n if (isNbsp(chr) && i > 0 && i < chars.length - 1 && isContent$1(chars[i - 1]) && isContent$1(chars[i + 1])) {\n return ' ';\n } else {\n return chr;\n }\n }).join('');\n };\n var normalizeNbspAtStart = function (root, node) {\n var text = node.data;\n var firstPos = CaretPosition(node, 0);\n if (isNbspAt(text, 0) && !needsToBeNbsp(root, firstPos)) {\n node.data = ' ' + text.slice(1);\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspInMiddleOfTextNode = function (node) {\n var text = node.data;\n var newText = normalizeNbspMiddle(text);\n if (newText !== text) {\n node.data = newText;\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbspAtEnd = function (root, node) {\n var text = node.data;\n var lastPos = CaretPosition(node, text.length - 1);\n if (isNbspAt(text, text.length - 1) && !needsToBeNbsp(root, lastPos)) {\n node.data = text.slice(0, -1) + ' ';\n return true;\n } else {\n return false;\n }\n };\n var normalizeNbsps = function (root, pos) {\n return Option.some(pos).filter(hasNbsp).bind(function (pos) {\n var container = pos.container();\n var normalized = normalizeNbspAtStart(root, container) || normalizeNbspInMiddleOfTextNode(container) || normalizeNbspAtEnd(root, container);\n return normalized ? Option.some(pos) : Option.none();\n });\n };\n var normalizeNbspsInEditor = function (editor) {\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n normalizeNbsps(root, CaretPosition.fromRangeStart(editor.selection.getRng())).each(function (pos) {\n editor.selection.setRng(pos.toRange());\n });\n }\n };\n\n var locationToCaretPosition = function (root) {\n return function (location) {\n return location.fold(function (element) {\n return CaretFinder.prevPosition(root.dom(), CaretPosition$1.before(element));\n }, function (element) {\n return CaretFinder.firstPositionIn(element);\n }, function (element) {\n return CaretFinder.lastPositionIn(element);\n }, function (element) {\n return CaretFinder.nextPosition(root.dom(), CaretPosition$1.after(element));\n });\n };\n };\n var insertInlineBoundarySpaceOrNbsp = function (root, pos) {\n return function (checkPos) {\n return needsToHaveNbsp(root, checkPos) ? insertNbspAtPosition(pos) : insertSpaceAtPosition(pos);\n };\n };\n var setSelection$1 = function (editor) {\n return function (pos) {\n editor.selection.setRng(pos.toRange());\n editor.nodeChanged();\n return true;\n };\n };\n var insertSpaceOrNbspAtSelection = function (editor) {\n var pos = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n var root = Element.fromDom(editor.getBody());\n if (editor.selection.isCollapsed()) {\n var isInlineTarget = curry(InlineUtils.isInlineTarget, editor);\n var caretPosition = CaretPosition$1.fromRangeStart(editor.selection.getRng());\n return BoundaryLocation.readLocation(isInlineTarget, editor.getBody(), caretPosition).bind(locationToCaretPosition(root)).bind(insertInlineBoundarySpaceOrNbsp(root, pos)).exists(setSelection$1(editor));\n } else {\n return false;\n }\n };\n\n var executeKeydownOverride$2 = function (editor, evt) {\n MatchKeys.execute([{\n keyCode: VK.SPACEBAR,\n action: MatchKeys.action(insertSpaceOrNbspAtSelection, editor)\n }], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$a = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$2(editor, evt);\n }\n });\n };\n var SpaceKey = { setup: setup$a };\n\n var findBlockCaretContainer = function (editor) {\n return descendant(Element.fromDom(editor.getBody()), '*[data-mce-caret]').fold(constant(null), function (elm) {\n return elm.dom();\n });\n };\n var removeIeControlRect = function (editor) {\n editor.selection.setRng(editor.selection.getRng());\n };\n var showBlockCaretContainer = function (editor, blockCaretContainer) {\n if (blockCaretContainer.hasAttribute('data-mce-caret')) {\n showCaretContainerBlock(blockCaretContainer);\n removeIeControlRect(editor);\n editor.selection.scrollIntoView(blockCaretContainer);\n }\n };\n var handleBlockContainer = function (editor, e) {\n var blockCaretContainer = findBlockCaretContainer(editor);\n if (!blockCaretContainer) {\n return;\n }\n if (e.type === 'compositionstart') {\n e.preventDefault();\n e.stopPropagation();\n showBlockCaretContainer(editor, blockCaretContainer);\n return;\n }\n if (hasContent(blockCaretContainer)) {\n showBlockCaretContainer(editor, blockCaretContainer);\n editor.undoManager.add();\n }\n };\n var setup$b = function (editor) {\n editor.on('keyup compositionstart', curry(handleBlockContainer, editor));\n };\n var CaretContainerInput = { setup: setup$b };\n\n var browser$4 = PlatformDetection$1.detect().browser;\n var setupIeInput = function (editor) {\n var keypressThrotter = first(function () {\n if (!editor.composing) {\n normalizeNbspsInEditor(editor);\n }\n }, 0);\n if (browser$4.isIE()) {\n editor.on('keypress', function (e) {\n keypressThrotter.throttle();\n });\n editor.on('remove', function (e) {\n keypressThrotter.cancel();\n });\n }\n };\n var setup$c = function (editor) {\n setupIeInput(editor);\n editor.on('input', function (e) {\n if (e.isComposing === false) {\n normalizeNbspsInEditor(editor);\n }\n });\n };\n\n var executeKeydownOverride$3 = function (editor, evt) {\n MatchKeys.execute([\n {\n keyCode: VK.END,\n action: moveToLineEndPoint(editor, true)\n },\n {\n keyCode: VK.HOME,\n action: moveToLineEndPoint(editor, false)\n }\n ], evt).each(function (_) {\n evt.preventDefault();\n });\n };\n var setup$d = function (editor) {\n editor.on('keydown', function (evt) {\n if (evt.isDefaultPrevented() === false) {\n executeKeydownOverride$3(editor, evt);\n }\n });\n };\n var HomeEndKeys = { setup: setup$d };\n\n var setup$e = function (editor) {\n var caret = BoundarySelection.setupSelectedState(editor);\n CaretContainerInput.setup(editor);\n ArrowKeys.setup(editor, caret);\n DeleteBackspaceKeys.setup(editor, caret);\n EnterKey.setup(editor);\n SpaceKey.setup(editor);\n setup$c(editor);\n HomeEndKeys.setup(editor);\n };\n var KeyboardOverrides = { setup: setup$e };\n\n function Quirks (editor) {\n var each = Tools.each;\n var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection, settings = editor.settings, parser = editor.parser;\n var isGecko = Env.gecko, isIE = Env.ie, isWebKit = Env.webkit;\n var mceInternalUrlPrefix = 'data:text/mce-internal,';\n var mceInternalDataType = isIE ? 'Text' : 'URL';\n var setEditorCommandState = function (cmd, state) {\n try {\n editor.getDoc().execCommand(cmd, false, state);\n } catch (ex) {\n }\n };\n var isDefaultPrevented = function (e) {\n return e.isDefaultPrevented();\n };\n var setMceInternalContent = function (e) {\n var selectionHtml, internalContent;\n if (e.dataTransfer) {\n if (editor.selection.isCollapsed() && e.target.tagName === 'IMG') {\n selection.select(e.target);\n }\n selectionHtml = editor.selection.getContent();\n if (selectionHtml.length > 0) {\n internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);\n e.dataTransfer.setData(mceInternalDataType, internalContent);\n }\n }\n };\n var getMceInternalContent = function (e) {\n var internalContent;\n if (e.dataTransfer) {\n internalContent = e.dataTransfer.getData(mceInternalDataType);\n if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {\n internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');\n return {\n id: unescape(internalContent[0]),\n html: unescape(internalContent[1])\n };\n }\n }\n return null;\n };\n var insertClipboardContents = function (content, internal) {\n if (editor.queryCommandSupported('mceInsertClipboardContent')) {\n editor.execCommand('mceInsertClipboardContent', false, {\n content: content,\n internal: internal\n });\n } else {\n editor.execCommand('mceInsertContent', false, content);\n }\n };\n var emptyEditorWhenDeleting = function () {\n var serializeRng = function (rng) {\n var body = dom.create('body');\n var contents = rng.cloneContents();\n body.appendChild(contents);\n return selection.serializer.serialize(body, { format: 'html' });\n };\n var allContentsSelected = function (rng) {\n var selection = serializeRng(rng);\n var allRng = dom.createRng();\n allRng.selectNode(editor.getBody());\n var allSelection = serializeRng(allRng);\n return selection === allSelection;\n };\n editor.on('keydown', function (e) {\n var keyCode = e.keyCode;\n var isCollapsed, body;\n if (!isDefaultPrevented(e) && (keyCode === DELETE || keyCode === BACKSPACE)) {\n isCollapsed = editor.selection.isCollapsed();\n body = editor.getBody();\n if (isCollapsed && !dom.isEmpty(body)) {\n return;\n }\n if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {\n return;\n }\n e.preventDefault();\n editor.setContent('');\n if (body.firstChild && dom.isBlock(body.firstChild)) {\n editor.selection.setCursorLocation(body.firstChild, 0);\n } else {\n editor.selection.setCursorLocation(body, 0);\n }\n editor.nodeChanged();\n }\n });\n };\n var selectAll = function () {\n editor.shortcuts.add('meta+a', null, 'SelectAll');\n };\n var inputMethodFocus = function () {\n if (!editor.settings.content_editable) {\n dom.bind(editor.getDoc(), 'mousedown mouseup', function (e) {\n var rng;\n if (e.target === editor.getDoc().documentElement) {\n rng = selection.getRng();\n editor.getBody().focus();\n if (e.type === 'mousedown') {\n if (isCaretContainer(rng.startContainer)) {\n return;\n }\n selection.placeCaretAt(e.clientX, e.clientY);\n } else {\n selection.setRng(rng);\n }\n }\n });\n }\n };\n var removeHrOnBackspace = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (!editor.getBody().getElementsByTagName('hr').length) {\n return;\n }\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var node = selection.getNode();\n var previousSibling = node.previousSibling;\n if (node.nodeName === 'HR') {\n dom.remove(node);\n e.preventDefault();\n return;\n }\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'hr') {\n dom.remove(previousSibling);\n e.preventDefault();\n }\n }\n }\n });\n };\n var focusBody = function () {\n if (!domGlobals.Range.prototype.getClientRects) {\n editor.on('mousedown', function (e) {\n if (!isDefaultPrevented(e) && e.target.nodeName === 'HTML') {\n var body_1 = editor.getBody();\n body_1.blur();\n Delay.setEditorTimeout(editor, function () {\n body_1.focus();\n });\n }\n });\n }\n };\n var selectControlElements = function () {\n editor.on('click', function (e) {\n var target = e.target;\n if (/^(IMG|HR)$/.test(target.nodeName) && dom.getContentEditableParent(target) !== 'false') {\n e.preventDefault();\n editor.selection.select(target);\n editor.nodeChanged();\n }\n if (target.nodeName === 'A' && dom.hasClass(target, 'mce-item-anchor')) {\n e.preventDefault();\n selection.select(target);\n }\n });\n };\n var removeStylesWhenDeletingAcrossBlockElements = function () {\n var getAttributeApplyFunction = function () {\n var template = dom.getAttribs(selection.getStart().cloneNode(false));\n return function () {\n var target = selection.getStart();\n if (target !== editor.getBody()) {\n dom.setAttrib(target, 'style', null);\n each(template, function (attr) {\n target.setAttributeNode(attr.cloneNode(true));\n });\n }\n };\n };\n var isSelectionAcrossElements = function () {\n return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) !== dom.getParent(selection.getEnd(), dom.isBlock);\n };\n editor.on('keypress', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && (e.keyCode === 8 || e.keyCode === 46) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n editor.getDoc().execCommand('delete', false, null);\n applyAttributes();\n e.preventDefault();\n return false;\n }\n });\n dom.bind(editor.getDoc(), 'cut', function (e) {\n var applyAttributes;\n if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {\n applyAttributes = getAttributeApplyFunction();\n Delay.setEditorTimeout(editor, function () {\n applyAttributes();\n });\n }\n });\n };\n var disableBackspaceIntoATable = function () {\n editor.on('keydown', function (e) {\n if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {\n if (selection.isCollapsed() && selection.getRng().startOffset === 0) {\n var previousSibling = selection.getNode().previousSibling;\n if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === 'table') {\n e.preventDefault();\n return false;\n }\n }\n }\n });\n };\n var removeBlockQuoteOnBackSpace = function () {\n editor.on('keydown', function (e) {\n var rng, container, offset, root, parent;\n if (isDefaultPrevented(e) || e.keyCode !== VK.BACKSPACE) {\n return;\n }\n rng = selection.getRng();\n container = rng.startContainer;\n offset = rng.startOffset;\n root = dom.getRoot();\n parent = container;\n if (!rng.collapsed || offset !== 0) {\n return;\n }\n while (parent && parent.parentNode && parent.parentNode.firstChild === parent && parent.parentNode !== root) {\n parent = parent.parentNode;\n }\n if (parent.tagName === 'BLOCKQUOTE') {\n editor.formatter.toggle('blockquote', null, parent);\n rng = dom.createRng();\n rng.setStart(container, 0);\n rng.setEnd(container, 0);\n selection.setRng(rng);\n }\n });\n };\n var setGeckoEditingOptions = function () {\n var setOpts = function () {\n setEditorCommandState('StyleWithCSS', false);\n setEditorCommandState('enableInlineTableEditing', false);\n if (!settings.object_resizing) {\n setEditorCommandState('enableObjectResizing', false);\n }\n };\n if (!settings.readonly) {\n editor.on('BeforeExecCommand MouseDown', setOpts);\n }\n };\n var addBrAfterLastLinks = function () {\n var fixLinks = function () {\n each(dom.select('a'), function (node) {\n var parentNode = node.parentNode;\n var root = dom.getRoot();\n if (parentNode.lastChild === node) {\n while (parentNode && !dom.isBlock(parentNode)) {\n if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {\n return;\n }\n parentNode = parentNode.parentNode;\n }\n dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });\n }\n });\n };\n editor.on('SetContent ExecCommand', function (e) {\n if (e.type === 'setcontent' || e.command === 'mceInsertLink') {\n fixLinks();\n }\n });\n };\n var setDefaultBlockType = function () {\n if (settings.forced_root_block) {\n editor.on('init', function () {\n setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);\n });\n }\n };\n var normalizeSelection = function () {\n editor.on('keyup focusin mouseup', function (e) {\n if (!VK.modifierPressed(e)) {\n selection.normalize();\n }\n }, true);\n };\n var showBrokenImageIcon = function () {\n editor.contentStyles.push('img:-moz-broken {' + '-moz-force-broken-image-icon:1;' + 'min-width:24px;' + 'min-height:24px' + '}');\n };\n var restoreFocusOnKeyDown = function () {\n if (!editor.inline) {\n editor.on('keydown', function () {\n if (domGlobals.document.activeElement === domGlobals.document.body) {\n editor.getWin().focus();\n }\n });\n }\n };\n var bodyHeight = function () {\n if (!editor.inline) {\n editor.contentStyles.push('body {min-height: 150px}');\n editor.on('click', function (e) {\n var rng;\n if (e.target.nodeName === 'HTML') {\n if (Env.ie > 11) {\n editor.getBody().focus();\n return;\n }\n rng = editor.selection.getRng();\n editor.getBody().focus();\n editor.selection.setRng(rng);\n editor.selection.normalize();\n editor.nodeChanged();\n }\n });\n }\n };\n var blockCmdArrowNavigation = function () {\n if (Env.mac) {\n editor.on('keydown', function (e) {\n if (VK.metaKeyPressed(e) && !e.shiftKey && (e.keyCode === 37 || e.keyCode === 39)) {\n e.preventDefault();\n editor.selection.getSel().modify('move', e.keyCode === 37 ? 'backward' : 'forward', 'lineboundary');\n }\n });\n }\n };\n var disableAutoUrlDetect = function () {\n setEditorCommandState('AutoUrlDetect', false);\n };\n var tapLinksAndImages = function () {\n editor.on('click', function (e) {\n var elm = e.target;\n do {\n if (elm.tagName === 'A') {\n e.preventDefault();\n return;\n }\n } while (elm = elm.parentNode);\n });\n editor.contentStyles.push('.mce-content-body {-webkit-touch-callout: none}');\n };\n var blockFormSubmitInsideEditor = function () {\n editor.on('init', function () {\n editor.dom.bind(editor.getBody(), 'submit', function (e) {\n e.preventDefault();\n });\n });\n };\n var removeAppleInterchangeBrs = function () {\n parser.addNodeFilter('br', function (nodes) {\n var i = nodes.length;\n while (i--) {\n if (nodes[i].attr('class') === 'Apple-interchange-newline') {\n nodes[i].remove();\n }\n }\n });\n };\n var ieInternalDragAndDrop = function () {\n editor.on('dragstart', function (e) {\n setMceInternalContent(e);\n });\n editor.on('drop', function (e) {\n if (!isDefaultPrevented(e)) {\n var internalContent = getMceInternalContent(e);\n if (internalContent && internalContent.id !== editor.id) {\n e.preventDefault();\n var rng = CaretRangeFromPoint.fromPoint(e.x, e.y, editor.getDoc());\n selection.setRng(rng);\n insertClipboardContents(internalContent.html, true);\n }\n }\n });\n };\n var refreshContentEditable = function () {\n };\n var isHidden = function () {\n var sel;\n if (!isGecko || editor.removed) {\n return 0;\n }\n sel = editor.selection.getSel();\n return !sel || !sel.rangeCount || sel.rangeCount === 0;\n };\n removeBlockQuoteOnBackSpace();\n emptyEditorWhenDeleting();\n if (!Env.windowsPhone) {\n normalizeSelection();\n }\n if (isWebKit) {\n inputMethodFocus();\n selectControlElements();\n setDefaultBlockType();\n blockFormSubmitInsideEditor();\n disableBackspaceIntoATable();\n removeAppleInterchangeBrs();\n if (Env.iOS) {\n restoreFocusOnKeyDown();\n bodyHeight();\n tapLinksAndImages();\n } else {\n selectAll();\n }\n }\n if (Env.ie >= 11) {\n bodyHeight();\n disableBackspaceIntoATable();\n }\n if (Env.ie) {\n selectAll();\n disableAutoUrlDetect();\n ieInternalDragAndDrop();\n }\n if (isGecko) {\n removeHrOnBackspace();\n focusBody();\n removeStylesWhenDeletingAcrossBlockElements();\n setGeckoEditingOptions();\n addBrAfterLastLinks();\n showBrokenImageIcon();\n blockCmdArrowNavigation();\n disableBackspaceIntoATable();\n }\n return {\n refreshContentEditable: refreshContentEditable,\n isHidden: isHidden\n };\n }\n\n var isTextBlockNode = function (node) {\n return NodeType.isElement(node) && isTextBlock(Element.fromDom(node));\n };\n var normalizeSelection$1 = function (editor) {\n var rng = editor.selection.getRng();\n var startPos = CaretPosition.fromRangeStart(rng);\n var endPos = CaretPosition.fromRangeEnd(rng);\n if (CaretPosition.isElementPosition(startPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.firstPositionIn(container).each(function (pos) {\n return rng.setStart(pos.container(), pos.offset());\n });\n }\n }\n if (CaretPosition.isElementPosition(endPos)) {\n var container = startPos.container();\n if (isTextBlockNode(container)) {\n CaretFinder.lastPositionIn(container).each(function (pos) {\n return rng.setEnd(pos.container(), pos.offset());\n });\n }\n }\n editor.selection.setRng(RangeNormalizer.normalize(rng));\n };\n var setup$f = function (editor) {\n editor.on('click', function (e) {\n if (e.detail >= 3) {\n normalizeSelection$1(editor);\n }\n });\n };\n\n var preventSummaryToggle = function (editor) {\n editor.on('click', function (e) {\n if (editor.dom.getParent(e.target, 'details')) {\n e.preventDefault();\n }\n });\n };\n var filterDetails = function (editor) {\n editor.parser.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n details.attr('data-mce-open', details.attr('open'));\n details.attr('open', 'open');\n });\n });\n editor.serializer.addNodeFilter('details', function (elms) {\n each(elms, function (details) {\n var open = details.attr('data-mce-open');\n details.attr('open', isString(open) ? open : null);\n details.attr('data-mce-open', null);\n });\n });\n };\n var setup$g = function (editor) {\n preventSummaryToggle(editor);\n filterDetails(editor);\n };\n\n var DOM$2 = DOMUtils$1.DOM;\n var appendStyle = function (editor, text) {\n var head = Element.fromDom(editor.getDoc().head);\n var tag = Element.fromTag('style');\n set(tag, 'type', 'text/css');\n append(tag, Element.fromText(text));\n append(head, tag);\n };\n var createParser = function (editor) {\n var parser = DomParser(editor.settings, editor.schema);\n parser.addAttributeFilter('src,href,style,tabindex', function (nodes, name) {\n var i = nodes.length, node;\n var dom = editor.dom;\n var value, internalName;\n while (i--) {\n node = nodes[i];\n value = node.attr(name);\n internalName = 'data-mce-' + name;\n if (!node.attributes.map[internalName]) {\n if (value.indexOf('data:') === 0 || value.indexOf('blob:') === 0) {\n continue;\n }\n if (name === 'style') {\n value = dom.serializeStyle(dom.parseStyle(value), node.name);\n if (!value.length) {\n value = null;\n }\n node.attr(internalName, value);\n node.attr(name, value);\n } else if (name === 'tabindex') {\n node.attr(internalName, value);\n node.attr(name, null);\n } else {\n node.attr(internalName, editor.convertURL(value, name, node.name));\n }\n }\n }\n });\n parser.addNodeFilter('script', function (nodes) {\n var i = nodes.length, node, type;\n while (i--) {\n node = nodes[i];\n type = node.attr('type') || 'no/type';\n if (type.indexOf('mce-') !== 0) {\n node.attr('type', 'mce-' + type);\n }\n }\n });\n parser.addNodeFilter('#cdata', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n node.type = 8;\n node.name = '#comment';\n node.value = '[CDATA[' + node.value + ']]';\n }\n });\n parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function (nodes) {\n var i = nodes.length, node;\n var nonEmptyElements = editor.schema.getNonEmptyElements();\n while (i--) {\n node = nodes[i];\n if (node.isEmpty(nonEmptyElements) && node.getAll('br').length === 0) {\n node.append(new Node$1('br', 1)).shortEnded = true;\n }\n }\n });\n return parser;\n };\n var autoFocus = function (editor) {\n if (editor.settings.auto_focus) {\n Delay.setEditorTimeout(editor, function () {\n var focusEditor;\n if (editor.settings.auto_focus === true) {\n focusEditor = editor;\n } else {\n focusEditor = editor.editorManager.get(editor.settings.auto_focus);\n }\n if (!focusEditor.destroyed) {\n focusEditor.focus();\n }\n }, 100);\n }\n };\n var initEditor = function (editor) {\n editor.bindPendingEventDelegates();\n editor.initialized = true;\n editor.fire('init');\n editor.focus(true);\n editor.nodeChanged({ initial: true });\n editor.execCallback('init_instance_callback', editor);\n autoFocus(editor);\n };\n var getStyleSheetLoader = function (editor) {\n return editor.inline ? DOM$2.styleSheetLoader : editor.dom.styleSheetLoader;\n };\n var initContentBody = function (editor, skipWrite) {\n var settings = editor.settings;\n var targetElm = editor.getElement();\n var doc = editor.getDoc(), body, contentCssText;\n if (!settings.inline) {\n editor.getElement().style.visibility = editor.orgVisibility;\n }\n if (!skipWrite && !settings.content_editable) {\n doc.open();\n doc.write(editor.iframeHTML);\n doc.close();\n }\n if (settings.content_editable) {\n editor.on('remove', function () {\n var bodyEl = this.getBody();\n DOM$2.removeClass(bodyEl, 'mce-content-body');\n DOM$2.removeClass(bodyEl, 'mce-edit-focus');\n DOM$2.setAttrib(bodyEl, 'contentEditable', null);\n });\n DOM$2.addClass(targetElm, 'mce-content-body');\n editor.contentDocument = doc = settings.content_document || domGlobals.document;\n editor.contentWindow = settings.content_window || domGlobals.window;\n editor.bodyElement = targetElm;\n settings.content_document = settings.content_window = null;\n settings.root_name = targetElm.nodeName.toLowerCase();\n }\n body = editor.getBody();\n body.disabled = true;\n editor.readonly = settings.readonly;\n if (!editor.readonly) {\n if (editor.inline && DOM$2.getStyle(body, 'position', true) === 'static') {\n body.style.position = 'relative';\n }\n body.contentEditable = editor.getParam('content_editable_state', true);\n }\n body.disabled = false;\n editor.editorUpload = EditorUpload(editor);\n editor.schema = Schema(settings);\n editor.dom = DOMUtils$1(doc, {\n keep_values: true,\n url_converter: editor.convertURL,\n url_converter_scope: editor,\n hex_colors: settings.force_hex_style_colors,\n class_filter: settings.class_filter,\n update_styles: true,\n root_element: editor.inline ? editor.getBody() : null,\n collect: settings.content_editable,\n schema: editor.schema,\n contentCssCors: Settings.shouldUseContentCssCors(editor),\n onSetAttrib: function (e) {\n editor.fire('SetAttrib', e);\n }\n });\n editor.parser = createParser(editor);\n editor.serializer = DomSerializer$1(settings, editor);\n editor.selection = Selection$1(editor.dom, editor.getWin(), editor.serializer, editor);\n editor.annotator = Annotator(editor);\n editor.formatter = Formatter(editor);\n editor.undoManager = UndoManager(editor);\n editor._nodeChangeDispatcher = new NodeChange(editor);\n editor._selectionOverrides = SelectionOverrides(editor);\n setup$g(editor);\n setup$f(editor);\n KeyboardOverrides.setup(editor);\n ForceBlocks.setup(editor);\n editor.fire('PreInit');\n if (!settings.browser_spellcheck && !settings.gecko_spellcheck) {\n doc.body.spellcheck = false;\n DOM$2.setAttrib(body, 'spellcheck', 'false');\n }\n editor.quirks = Quirks(editor);\n editor.fire('PostRender');\n if (settings.directionality) {\n body.dir = settings.directionality;\n }\n if (settings.nowrap) {\n body.style.whiteSpace = 'nowrap';\n }\n if (settings.protect) {\n editor.on('BeforeSetContent', function (e) {\n Tools.each(settings.protect, function (pattern) {\n e.content = e.content.replace(pattern, function (str) {\n return '';\n });\n });\n });\n }\n editor.on('SetContent', function () {\n editor.addVisual(editor.getBody());\n });\n editor.load({\n initial: true,\n format: 'html'\n });\n editor.startContent = editor.getContent({ format: 'raw' });\n editor.on('compositionstart compositionend', function (e) {\n editor.composing = e.type === 'compositionstart';\n });\n if (editor.contentStyles.length > 0) {\n contentCssText = '';\n Tools.each(editor.contentStyles, function (style) {\n contentCssText += style + '\\r\\n';\n });\n editor.dom.addStyle(contentCssText);\n }\n getStyleSheetLoader(editor).loadAll(editor.contentCSS, function (_) {\n initEditor(editor);\n }, function (urls) {\n initEditor(editor);\n });\n if (settings.content_style) {\n appendStyle(editor, settings.content_style);\n }\n };\n var InitContentBody = { initContentBody: initContentBody };\n\n var DOM$3 = DOMUtils$1.DOM;\n var relaxDomain = function (editor, ifr) {\n if (domGlobals.document.domain !== domGlobals.window.location.hostname && Env.ie && Env.ie < 12) {\n var bodyUuid = Uuid.uuid('mce');\n editor[bodyUuid] = function () {\n InitContentBody.initContentBody(editor);\n };\n var domainRelaxUrl = 'javascript:(function(){' + 'document.open();document.domain=\"' + domGlobals.document.domain + '\";' + 'var ed = window.parent.tinymce.get(\"' + editor.id + '\");document.write(ed.iframeHTML);' + 'document.close();ed.' + bodyUuid + '(true);})()';\n DOM$3.setAttrib(ifr, 'src', domainRelaxUrl);\n return true;\n }\n return false;\n };\n var normalizeHeight = function (height) {\n var normalizedHeight = typeof height === 'number' ? height + 'px' : height;\n return normalizedHeight ? normalizedHeight : '';\n };\n var createIframeElement = function (id, title, height, customAttrs) {\n var iframe = Element.fromTag('iframe');\n setAll(iframe, customAttrs);\n setAll(iframe, {\n id: id + '_ifr',\n frameBorder: '0',\n allowTransparency: 'true',\n title: title\n });\n setAll$1(iframe, {\n width: '100%',\n height: normalizeHeight(height),\n display: 'block'\n });\n return iframe;\n };\n var getIframeHtml = function (editor) {\n var bodyId, bodyClass, iframeHTML;\n iframeHTML = Settings.getDocType(editor) + '';\n if (Settings.getDocumentBaseUrl(editor) !== editor.documentBaseUrl) {\n iframeHTML += '';\n }\n iframeHTML += '';\n bodyId = Settings.getBodyId(editor);\n bodyClass = Settings.getBodyClass(editor);\n if (Settings.getContentSecurityPolicy(editor)) {\n iframeHTML += '';\n }\n iframeHTML += '
';\n return iframeHTML;\n };\n var createIframe = function (editor, o) {\n var title = editor.editorManager.translate('Rich Text Area. Press ALT-F9 for menu. ' + 'Press ALT-F10 for toolbar. Press ALT-0 for help');\n var ifr = createIframeElement(editor.id, title, o.height, Settings.getIframeAttrs(editor)).dom();\n ifr.onload = function () {\n ifr.onload = null;\n editor.fire('load');\n };\n var isDomainRelaxed = relaxDomain(editor, ifr);\n editor.contentAreaContainer = o.iframeContainer;\n editor.iframeElement = ifr;\n editor.iframeHTML = getIframeHtml(editor);\n DOM$3.add(o.iframeContainer, ifr);\n return isDomainRelaxed;\n };\n var init$1 = function (editor, boxInfo) {\n var isDomainRelaxed = createIframe(editor, boxInfo);\n if (boxInfo.editorContainer) {\n DOM$3.get(boxInfo.editorContainer).style.display = editor.orgDisplay;\n editor.hidden = DOM$3.isHidden(boxInfo.editorContainer);\n }\n editor.getElement().style.display = 'none';\n DOM$3.setAttrib(editor.id, 'aria-hidden', 'true');\n if (!isDomainRelaxed) {\n InitContentBody.initContentBody(editor);\n }\n };\n var InitIframe = { init: init$1 };\n\n var DOM$4 = DOMUtils$1.DOM;\n var initPlugin = function (editor, initializedPlugins, plugin) {\n var Plugin = PluginManager$1.get(plugin);\n var pluginUrl = PluginManager$1.urls[plugin] || editor.documentBaseUrl.replace(/\\/$/, '');\n plugin = Tools.trim(plugin);\n if (Plugin && Tools.inArray(initializedPlugins, plugin) === -1) {\n Tools.each(PluginManager$1.dependencies(plugin), function (dep) {\n initPlugin(editor, initializedPlugins, dep);\n });\n if (editor.plugins[plugin]) {\n return;\n }\n try {\n var pluginInstance = new Plugin(editor, pluginUrl, editor.$);\n editor.plugins[plugin] = pluginInstance;\n if (pluginInstance.init) {\n pluginInstance.init(editor, pluginUrl);\n initializedPlugins.push(plugin);\n }\n } catch (e) {\n ErrorReporter.pluginInitError(editor, plugin, e);\n }\n }\n };\n var trimLegacyPrefix = function (name) {\n return name.replace(/^\\-/, '');\n };\n var initPlugins = function (editor) {\n var initializedPlugins = [];\n Tools.each(editor.settings.plugins.split(/[ ,]/), function (name) {\n initPlugin(editor, initializedPlugins, trimLegacyPrefix(name));\n });\n };\n var initTheme = function (editor) {\n var Theme;\n var theme = editor.settings.theme;\n if (isString(theme)) {\n editor.settings.theme = trimLegacyPrefix(theme);\n Theme = ThemeManager.get(theme);\n editor.theme = new Theme(editor, ThemeManager.urls[theme]);\n if (editor.theme.init) {\n editor.theme.init(editor, ThemeManager.urls[theme] || editor.documentBaseUrl.replace(/\\/$/, ''), editor.$);\n }\n } else {\n editor.theme = {};\n }\n };\n var renderFromLoadedTheme = function (editor) {\n var w, h, minHeight, re, info;\n var settings = editor.settings;\n var elm = editor.getElement();\n w = settings.width || DOM$4.getStyle(elm, 'width') || '100%';\n h = settings.height || DOM$4.getStyle(elm, 'height') || elm.offsetHeight;\n minHeight = settings.min_height || 100;\n re = /^[0-9\\.]+(|px)$/i;\n if (re.test('' + w)) {\n w = Math.max(parseInt(w, 10), 100);\n }\n if (re.test('' + h)) {\n h = Math.max(parseInt(h, 10), minHeight);\n }\n info = editor.theme.renderUI({\n targetNode: elm,\n width: w,\n height: h,\n deltaWidth: settings.delta_width,\n deltaHeight: settings.delta_height\n });\n if (!settings.content_editable) {\n h = (info.iframeHeight || h) + (typeof h === 'number' ? info.deltaHeight || 0 : '');\n if (h < minHeight) {\n h = minHeight;\n }\n }\n info.height = h;\n return info;\n };\n var renderFromThemeFunc = function (editor) {\n var info;\n var elm = editor.getElement();\n info = editor.settings.theme(editor, elm);\n if (info.editorContainer.nodeType) {\n info.editorContainer.id = info.editorContainer.id || editor.id + '_parent';\n }\n if (info.iframeContainer && info.iframeContainer.nodeType) {\n info.iframeContainer.id = info.iframeContainer.id || editor.id + '_iframecontainer';\n }\n info.height = info.iframeHeight ? info.iframeHeight : elm.offsetHeight;\n return info;\n };\n var createThemeFalseResult = function (element) {\n return {\n editorContainer: element,\n iframeContainer: element\n };\n };\n var renderThemeFalseIframe = function (targetElement) {\n var iframeContainer = DOM$4.create('div');\n DOM$4.insertAfter(iframeContainer, targetElement);\n return createThemeFalseResult(iframeContainer);\n };\n var renderThemeFalse = function (editor) {\n var targetElement = editor.getElement();\n return editor.inline ? createThemeFalseResult(null) : renderThemeFalseIframe(targetElement);\n };\n var renderThemeUi = function (editor) {\n var settings = editor.settings, elm = editor.getElement();\n editor.orgDisplay = elm.style.display;\n if (isString(settings.theme)) {\n return renderFromLoadedTheme(editor);\n } else if (isFunction(settings.theme)) {\n return renderFromThemeFunc(editor);\n } else {\n return renderThemeFalse(editor);\n }\n };\n var init$2 = function (editor) {\n var settings = editor.settings;\n var elm = editor.getElement();\n var boxInfo;\n editor.rtl = settings.rtl_ui || editor.editorManager.i18n.rtl;\n editor.editorManager.i18n.setCode(settings.language);\n settings.aria_label = settings.aria_label || DOM$4.getAttrib(elm, 'aria-label', editor.getLang('aria.rich_text_area'));\n editor.fire('ScriptsLoaded');\n initTheme(editor);\n initPlugins(editor);\n boxInfo = renderThemeUi(editor);\n editor.editorContainer = boxInfo.editorContainer ? boxInfo.editorContainer : null;\n if (settings.content_css) {\n Tools.each(Tools.explode(settings.content_css), function (u) {\n editor.contentCSS.push(editor.documentBaseURI.toAbsolute(u));\n });\n }\n if (settings.content_editable) {\n return InitContentBody.initContentBody(editor);\n } else {\n return InitIframe.init(editor, boxInfo);\n }\n };\n var Init = { init: init$2 };\n\n var DOM$5 = DOMUtils$1.DOM;\n var hasSkipLoadPrefix = function (name) {\n return name.charAt(0) === '-';\n };\n var loadLanguage = function (scriptLoader, editor) {\n var settings = editor.settings;\n if (settings.language && settings.language !== 'en' && !settings.language_url) {\n settings.language_url = editor.editorManager.baseURL + '/langs/' + settings.language + '.js';\n }\n if (settings.language_url && !editor.editorManager.i18n.data[settings.language]) {\n scriptLoader.add(settings.language_url);\n }\n };\n var loadTheme = function (scriptLoader, editor, suffix, callback) {\n var settings = editor.settings, theme = settings.theme;\n if (isString(theme)) {\n if (!hasSkipLoadPrefix(theme) && !ThemeManager.urls.hasOwnProperty(theme)) {\n var themeUrl = settings.theme_url;\n if (themeUrl) {\n ThemeManager.load(theme, editor.documentBaseURI.toAbsolute(themeUrl));\n } else {\n ThemeManager.load(theme, 'themes/' + theme + '/theme' + suffix + '.js');\n }\n }\n scriptLoader.loadQueue(function () {\n ThemeManager.waitFor(theme, callback);\n });\n } else {\n callback();\n }\n };\n var loadPlugins = function (settings, suffix) {\n if (Tools.isArray(settings.plugins)) {\n settings.plugins = settings.plugins.join(' ');\n }\n Tools.each(settings.external_plugins, function (url, name) {\n PluginManager$1.load(name, url);\n settings.plugins += ' ' + name;\n });\n Tools.each(settings.plugins.split(/[ ,]/), function (plugin) {\n plugin = Tools.trim(plugin);\n if (plugin && !PluginManager$1.urls[plugin]) {\n if (hasSkipLoadPrefix(plugin)) {\n plugin = plugin.substr(1, plugin.length);\n var dependencies = PluginManager$1.dependencies(plugin);\n Tools.each(dependencies, function (dep) {\n var defaultSettings = {\n prefix: 'plugins/',\n resource: dep,\n suffix: '/plugin' + suffix + '.js'\n };\n dep = PluginManager$1.createUrl(defaultSettings, dep);\n PluginManager$1.load(dep.resource, dep);\n });\n } else {\n PluginManager$1.load(plugin, {\n prefix: 'plugins/',\n resource: plugin,\n suffix: '/plugin' + suffix + '.js'\n });\n }\n }\n });\n };\n var loadScripts = function (editor, suffix) {\n var scriptLoader = ScriptLoader.ScriptLoader;\n loadTheme(scriptLoader, editor, suffix, function () {\n loadLanguage(scriptLoader, editor);\n loadPlugins(editor.settings, suffix);\n scriptLoader.loadQueue(function () {\n if (!editor.removed) {\n Init.init(editor);\n }\n }, editor, function (urls) {\n ErrorReporter.pluginLoadError(editor, urls[0]);\n if (!editor.removed) {\n Init.init(editor);\n }\n });\n });\n };\n var render = function (editor) {\n var settings = editor.settings, id = editor.id;\n var readyHandler = function () {\n DOM$5.unbind(domGlobals.window, 'ready', readyHandler);\n editor.render();\n };\n if (!EventUtils.Event.domLoaded) {\n DOM$5.bind(domGlobals.window, 'ready', readyHandler);\n return;\n }\n if (!editor.getElement()) {\n return;\n }\n if (!Env.contentEditable) {\n return;\n }\n if (!settings.inline) {\n editor.orgVisibility = editor.getElement().style.visibility;\n editor.getElement().style.visibility = 'hidden';\n } else {\n editor.inline = true;\n }\n var form = editor.getElement().form || DOM$5.getParent(id, 'form');\n if (form) {\n editor.formElement = form;\n if (settings.hidden_input && !/TEXTAREA|INPUT/i.test(editor.getElement().nodeName)) {\n DOM$5.insertAfter(DOM$5.create('input', {\n type: 'hidden',\n name: id\n }), id);\n editor.hasHiddenInput = true;\n }\n editor.formEventDelegate = function (e) {\n editor.fire(e.type, e);\n };\n DOM$5.bind(form, 'submit reset', editor.formEventDelegate);\n editor.on('reset', function () {\n editor.setContent(editor.startContent, { format: 'raw' });\n });\n if (settings.submit_patch && !form.submit.nodeType && !form.submit.length && !form._mceOldSubmit) {\n form._mceOldSubmit = form.submit;\n form.submit = function () {\n editor.editorManager.triggerSave();\n editor.setDirty(false);\n return form._mceOldSubmit(form);\n };\n }\n }\n editor.windowManager = WindowManager(editor);\n editor.notificationManager = NotificationManager(editor);\n if (settings.encoding === 'xml') {\n editor.on('GetContent', function (e) {\n if (e.save) {\n e.content = DOM$5.encode(e.content);\n }\n });\n }\n if (settings.add_form_submit_trigger) {\n editor.on('submit', function () {\n if (editor.initialized) {\n editor.save();\n }\n });\n }\n if (settings.add_unload_trigger) {\n editor._beforeUnload = function () {\n if (editor.initialized && !editor.destroyed && !editor.isHidden()) {\n editor.save({\n format: 'raw',\n no_events: true,\n set_dirty: false\n });\n }\n };\n editor.editorManager.on('BeforeUnload', editor._beforeUnload);\n }\n editor.editorManager.add(editor);\n loadScripts(editor, editor.suffix);\n };\n var Render = { render: render };\n\n var add$4 = function (editor, name, settings) {\n var sidebars = editor.sidebars ? editor.sidebars : [];\n sidebars.push({\n name: name,\n settings: settings\n });\n editor.sidebars = sidebars;\n };\n var Sidebar = { add: add$4 };\n\n var each$k = Tools.each, trim$4 = Tools.trim;\n var queryParts = 'source protocol authority userInfo user password host port relative path directory file query anchor'.split(' ');\n var DEFAULT_PORTS = {\n ftp: 21,\n http: 80,\n https: 443,\n mailto: 25\n };\n var URI = function (url, settings) {\n var self = this;\n var baseUri, baseUrl;\n url = trim$4(url);\n settings = self.settings = settings || {};\n baseUri = settings.base_uri;\n if (/^([\\w\\-]+):([^\\/]{2})/i.test(url) || /^\\s*#/.test(url)) {\n self.source = url;\n return;\n }\n var isProtocolRelative = url.indexOf('//') === 0;\n if (url.indexOf('/') === 0 && !isProtocolRelative) {\n url = (baseUri ? baseUri.protocol || 'http' : 'http') + '://mce_host' + url;\n }\n if (!/^[\\w\\-]*:?\\/\\//.test(url)) {\n baseUrl = settings.base_uri ? settings.base_uri.path : new URI(domGlobals.document.location.href).directory;\n if (settings.base_uri.protocol == '') {\n url = '//mce_host' + self.toAbsPath(baseUrl, url);\n } else {\n url = /([^#?]*)([#?]?.*)/.exec(url);\n url = (baseUri && baseUri.protocol || 'http') + '://mce_host' + self.toAbsPath(baseUrl, url[1]) + url[2];\n }\n }\n url = url.replace(/@@/g, '(mce_at)');\n url = /^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(url);\n each$k(queryParts, function (v, i) {\n var part = url[i];\n if (part) {\n part = part.replace(/\\(mce_at\\)/g, '@@');\n }\n self[v] = part;\n });\n if (baseUri) {\n if (!self.protocol) {\n self.protocol = baseUri.protocol;\n }\n if (!self.userInfo) {\n self.userInfo = baseUri.userInfo;\n }\n if (!self.port && self.host === 'mce_host') {\n self.port = baseUri.port;\n }\n if (!self.host || self.host === 'mce_host') {\n self.host = baseUri.host;\n }\n self.source = '';\n }\n if (isProtocolRelative) {\n self.protocol = '';\n }\n };\n URI.prototype = {\n setPath: function (path) {\n var self = this;\n path = /^(.*?)\\/?(\\w+)?$/.exec(path);\n self.path = path[0];\n self.directory = path[1];\n self.file = path[2];\n self.source = '';\n self.getURI();\n },\n toRelative: function (uri) {\n var self = this;\n var output;\n if (uri === './') {\n return uri;\n }\n uri = new URI(uri, { base_uri: self });\n if (uri.host !== 'mce_host' && self.host !== uri.host && uri.host || self.port !== uri.port || self.protocol !== uri.protocol && uri.protocol !== '') {\n return uri.getURI();\n }\n var tu = self.getURI(), uu = uri.getURI();\n if (tu === uu || tu.charAt(tu.length - 1) === '/' && tu.substr(0, tu.length - 1) === uu) {\n return tu;\n }\n output = self.toRelPath(self.path, uri.path);\n if (uri.query) {\n output += '?' + uri.query;\n }\n if (uri.anchor) {\n output += '#' + uri.anchor;\n }\n return output;\n },\n toAbsolute: function (uri, noHost) {\n uri = new URI(uri, { base_uri: this });\n return uri.getURI(noHost && this.isSameOrigin(uri));\n },\n isSameOrigin: function (uri) {\n if (this.host == uri.host && this.protocol == uri.protocol) {\n if (this.port == uri.port) {\n return true;\n }\n var defaultPort = DEFAULT_PORTS[this.protocol];\n if (defaultPort && (this.port || defaultPort) == (uri.port || defaultPort)) {\n return true;\n }\n }\n return false;\n },\n toRelPath: function (base, path) {\n var items, breakPoint = 0, out = '', i, l;\n base = base.substring(0, base.lastIndexOf('/'));\n base = base.split('/');\n items = path.split('/');\n if (base.length >= items.length) {\n for (i = 0, l = base.length; i < l; i++) {\n if (i >= items.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (base.length < items.length) {\n for (i = 0, l = items.length; i < l; i++) {\n if (i >= base.length || base[i] !== items[i]) {\n breakPoint = i + 1;\n break;\n }\n }\n }\n if (breakPoint === 1) {\n return path;\n }\n for (i = 0, l = base.length - (breakPoint - 1); i < l; i++) {\n out += '../';\n }\n for (i = breakPoint - 1, l = items.length; i < l; i++) {\n if (i !== breakPoint - 1) {\n out += '/' + items[i];\n } else {\n out += items[i];\n }\n }\n return out;\n },\n toAbsPath: function (base, path) {\n var i, nb = 0, o = [], tr, outPath;\n tr = /\\/$/.test(path) ? '/' : '';\n base = base.split('/');\n path = path.split('/');\n each$k(base, function (k) {\n if (k) {\n o.push(k);\n }\n });\n base = o;\n for (i = path.length - 1, o = []; i >= 0; i--) {\n if (path[i].length === 0 || path[i] === '.') {\n continue;\n }\n if (path[i] === '..') {\n nb++;\n continue;\n }\n if (nb > 0) {\n nb--;\n continue;\n }\n o.push(path[i]);\n }\n i = base.length - nb;\n if (i <= 0) {\n outPath = o.reverse().join('/');\n } else {\n outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\n }\n if (outPath.indexOf('/') !== 0) {\n outPath = '/' + outPath;\n }\n if (tr && outPath.lastIndexOf('/') !== outPath.length - 1) {\n outPath += tr;\n }\n return outPath;\n },\n getURI: function (noProtoHost) {\n var s;\n var self = this;\n if (!self.source || noProtoHost) {\n s = '';\n if (!noProtoHost) {\n if (self.protocol) {\n s += self.protocol + '://';\n } else {\n s += '//';\n }\n if (self.userInfo) {\n s += self.userInfo + '@';\n }\n if (self.host) {\n s += self.host;\n }\n if (self.port) {\n s += ':' + self.port;\n }\n }\n if (self.path) {\n s += self.path;\n }\n if (self.query) {\n s += '?' + self.query;\n }\n if (self.anchor) {\n s += '#' + self.anchor;\n }\n self.source = s;\n }\n return self.source;\n }\n };\n URI.parseDataUri = function (uri) {\n var type, matches;\n uri = decodeURIComponent(uri).split(',');\n matches = /data:([^;]+)/.exec(uri[0]);\n if (matches) {\n type = matches[1];\n }\n return {\n type: type,\n data: uri[1]\n };\n };\n URI.getDocumentBaseUrl = function (loc) {\n var baseUrl;\n if (loc.protocol.indexOf('http') !== 0 && loc.protocol !== 'file:') {\n baseUrl = loc.href;\n } else {\n baseUrl = loc.protocol + '//' + loc.host + loc.pathname;\n }\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(baseUrl)) {\n baseUrl = baseUrl.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(baseUrl)) {\n baseUrl += '/';\n }\n }\n return baseUrl;\n };\n\n var defaultFormat = 'html';\n var trimEmptyContents = function (editor, html) {\n var blockName = Settings.getForcedRootBlock(editor);\n var emptyRegExp = new RegExp('^(<' + blockName + '[^>]*>( | |\\\\s|\\xA0|
|)<\\\\/' + blockName + '>[\\r\\n]*|
[\\r\\n]*)$');\n return html.replace(emptyRegExp, '');\n };\n var getContentFromBody = function (editor, args, body) {\n var content;\n args.format = args.format ? args.format : defaultFormat;\n args.get = true;\n args.getInner = true;\n if (!args.no_events) {\n editor.fire('BeforeGetContent', args);\n }\n if (args.format === 'raw') {\n content = Tools.trim(TrimHtml.trimExternal(editor.serializer, body.innerHTML));\n } else if (args.format === 'text') {\n content = Zwsp.trim(body.innerText || body.textContent);\n } else if (args.format === 'tree') {\n return editor.serializer.serialize(body, args);\n } else {\n content = trimEmptyContents(editor, editor.serializer.serialize(body, args));\n }\n if (args.format !== 'text' && !isWsPreserveElement(Element.fromDom(body))) {\n args.content = Tools.trim(content);\n } else {\n args.content = content;\n }\n if (!args.no_events) {\n editor.fire('GetContent', args);\n }\n return args.content;\n };\n var getContent$1 = function (editor, args) {\n if (args === void 0) {\n args = {};\n }\n return Option.from(editor.getBody()).fold(constant(args.format === 'tree' ? new Node$1('body', 11) : ''), function (body) {\n return getContentFromBody(editor, args, body);\n });\n };\n\n var traverse = function (node, fn) {\n fn(node);\n if (node.firstChild) {\n traverse(node.firstChild, fn);\n }\n if (node.next) {\n traverse(node.next, fn);\n }\n };\n var findMatchingNodes = function (nodeFilters, attributeFilters, node) {\n var nodeMatches = {};\n var attrMatches = {};\n var matches = [];\n if (node.firstChild) {\n traverse(node.firstChild, function (node) {\n each(nodeFilters, function (filter) {\n if (filter.name === node.name) {\n if (nodeMatches[filter.name]) {\n nodeMatches[filter.name].nodes.push(node);\n } else {\n nodeMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n each(attributeFilters, function (filter) {\n if (typeof node.attr(filter.name) === 'string') {\n if (attrMatches[filter.name]) {\n attrMatches[filter.name].nodes.push(node);\n } else {\n attrMatches[filter.name] = {\n filter: filter,\n nodes: [node]\n };\n }\n }\n });\n });\n }\n for (var name in nodeMatches) {\n if (nodeMatches.hasOwnProperty(name)) {\n matches.push(nodeMatches[name]);\n }\n }\n for (var name in attrMatches) {\n if (attrMatches.hasOwnProperty(name)) {\n matches.push(attrMatches[name]);\n }\n }\n return matches;\n };\n var filter$3 = function (nodeFilters, attributeFilters, node) {\n var matches = findMatchingNodes(nodeFilters, attributeFilters, node);\n each(matches, function (match) {\n each(match.filter.callbacks, function (callback) {\n callback(match.nodes, match.filter.name, {});\n });\n });\n };\n\n var defaultFormat$1 = 'html';\n var isTreeNode = function (content) {\n return content instanceof Node$1;\n };\n var moveSelection = function (editor) {\n if (EditorFocus.hasFocus(editor)) {\n CaretFinder.firstPositionIn(editor.getBody()).each(function (pos) {\n var node = pos.getNode();\n var caretPos = NodeType.isTable(node) ? CaretFinder.firstPositionIn(node).getOr(pos) : pos;\n editor.selection.setRng(caretPos.toRange());\n });\n }\n };\n var setEditorHtml = function (editor, html) {\n editor.dom.setHTML(editor.getBody(), html);\n moveSelection(editor);\n };\n var setContentString = function (editor, body, content, args) {\n var forcedRootBlockName, padd;\n if (content.length === 0 || /^\\s+$/.test(content)) {\n padd = '
';\n if (body.nodeName === 'TABLE') {\n content = '' + padd + '';\n } else if (/^(UL|OL)$/.test(body.nodeName)) {\n content = '
  • ' + padd + '
  • ';\n }\n forcedRootBlockName = Settings.getForcedRootBlock(editor);\n if (forcedRootBlockName && editor.schema.isValidChild(body.nodeName.toLowerCase(), forcedRootBlockName.toLowerCase())) {\n content = padd;\n content = editor.dom.createHTML(forcedRootBlockName, editor.settings.forced_root_block_attrs, content);\n } else if (!content) {\n content = '
    ';\n }\n setEditorHtml(editor, content);\n editor.fire('SetContent', args);\n } else {\n if (args.format !== 'raw') {\n content = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(editor.parser.parse(content, {\n isRootContent: true,\n insert: true\n }));\n }\n args.content = isWsPreserveElement(Element.fromDom(body)) ? content : Tools.trim(content);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n }\n return args.content;\n };\n var setContentTree = function (editor, body, content, args) {\n filter$3(editor.parser.getNodeFilters(), editor.parser.getAttributeFilters(), content);\n var html = HtmlSerializer({ validate: editor.validate }, editor.schema).serialize(content);\n args.content = isWsPreserveElement(Element.fromDom(body)) ? html : Tools.trim(html);\n setEditorHtml(editor, args.content);\n if (!args.no_events) {\n editor.fire('SetContent', args);\n }\n return content;\n };\n var setContent$1 = function (editor, content, args) {\n if (args === void 0) {\n args = {};\n }\n args.format = args.format ? args.format : defaultFormat$1;\n args.set = true;\n args.content = isTreeNode(content) ? '' : content;\n if (!isTreeNode(content) && !args.no_events) {\n editor.fire('BeforeSetContent', args);\n content = args.content;\n }\n return Option.from(editor.getBody()).fold(constant(content), function (body) {\n return isTreeNode(content) ? setContentTree(editor, body, content, args) : setContentString(editor, body, content, args);\n });\n };\n\n var DOM$6 = DOMUtils$1.DOM;\n var restoreOriginalStyles = function (editor) {\n DOM$6.setStyle(editor.id, 'display', editor.orgDisplay);\n };\n var safeDestroy = function (x) {\n return Option.from(x).each(function (x) {\n return x.destroy();\n });\n };\n var clearDomReferences = function (editor) {\n editor.contentAreaContainer = editor.formElement = editor.container = editor.editorContainer = null;\n editor.bodyElement = editor.contentDocument = editor.contentWindow = null;\n editor.iframeElement = editor.targetElm = null;\n if (editor.selection) {\n editor.selection = editor.selection.win = editor.selection.dom = editor.selection.dom.doc = null;\n }\n };\n var restoreForm = function (editor) {\n var form = editor.formElement;\n if (form) {\n if (form._mceOldSubmit) {\n form.submit = form._mceOldSubmit;\n form._mceOldSubmit = null;\n }\n DOM$6.unbind(form, 'submit reset', editor.formEventDelegate);\n }\n };\n var remove$7 = function (editor) {\n if (!editor.removed) {\n var _selectionOverrides = editor._selectionOverrides, editorUpload = editor.editorUpload;\n var body = editor.getBody();\n var element = editor.getElement();\n if (body) {\n editor.save({ is_removing: true });\n }\n editor.removed = true;\n editor.unbindAllNativeEvents();\n if (editor.hasHiddenInput && element) {\n DOM$6.remove(element.nextSibling);\n }\n Events.fireRemove(editor);\n editor.editorManager.remove(editor);\n if (!editor.inline && body) {\n restoreOriginalStyles(editor);\n }\n Events.fireDetach(editor);\n DOM$6.remove(editor.getContainer());\n safeDestroy(_selectionOverrides);\n safeDestroy(editorUpload);\n editor.destroy();\n }\n };\n var destroy = function (editor, automatic) {\n var selection = editor.selection, dom = editor.dom;\n if (editor.destroyed) {\n return;\n }\n if (!automatic && !editor.removed) {\n editor.remove();\n return;\n }\n if (!automatic) {\n editor.editorManager.off('beforeunload', editor._beforeUnload);\n if (editor.theme && editor.theme.destroy) {\n editor.theme.destroy();\n }\n safeDestroy(selection);\n safeDestroy(dom);\n }\n restoreForm(editor);\n clearDomReferences(editor);\n editor.destroyed = true;\n };\n\n var DOM$7 = DOMUtils$1.DOM;\n var extend$4 = Tools.extend, each$l = Tools.each;\n var resolve$4 = Tools.resolve;\n var ie$2 = Env.ie;\n var Editor = function (id, settings, editorManager) {\n var self = this;\n var documentBaseUrl = self.documentBaseUrl = editorManager.documentBaseURL;\n var baseUri = editorManager.baseURI;\n settings = getEditorSettings(self, id, documentBaseUrl, editorManager.defaultSettings, settings);\n self.settings = settings;\n AddOnManager.language = settings.language || 'en';\n AddOnManager.languageLoad = settings.language_load;\n AddOnManager.baseURL = editorManager.baseURL;\n self.id = id;\n self.setDirty(false);\n self.plugins = {};\n self.documentBaseURI = new URI(settings.document_base_url, { base_uri: baseUri });\n self.baseURI = baseUri;\n self.contentCSS = [];\n self.contentStyles = [];\n self.shortcuts = new Shortcuts(self);\n self.loadedCSS = {};\n self.editorCommands = new EditorCommands(self);\n self.suffix = editorManager.suffix;\n self.editorManager = editorManager;\n self.inline = settings.inline;\n self.buttons = {};\n self.menuItems = {};\n if (settings.cache_suffix) {\n Env.cacheSuffix = settings.cache_suffix.replace(/^[\\?\\&]+/, '');\n }\n if (settings.override_viewport === false) {\n Env.overrideViewPort = false;\n }\n editorManager.fire('SetupEditor', { editor: self });\n self.execCallback('setup', self);\n self.$ = DomQuery.overrideDefaults(function () {\n return {\n context: self.inline ? self.getBody() : self.getDoc(),\n element: self.getBody()\n };\n });\n };\n Editor.prototype = {\n render: function () {\n Render.render(this);\n },\n focus: function (skipFocus) {\n EditorFocus.focus(this, skipFocus);\n },\n hasFocus: function () {\n return EditorFocus.hasFocus(this);\n },\n execCallback: function (name) {\n var x = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n x[_i - 1] = arguments[_i];\n }\n var self = this;\n var callback = self.settings[name], scope;\n if (!callback) {\n return;\n }\n if (self.callbackLookup && (scope = self.callbackLookup[name])) {\n callback = scope.func;\n scope = scope.scope;\n }\n if (typeof callback === 'string') {\n scope = callback.replace(/\\.\\w+$/, '');\n scope = scope ? resolve$4(scope) : 0;\n callback = resolve$4(callback);\n self.callbackLookup = self.callbackLookup || {};\n self.callbackLookup[name] = {\n func: callback,\n scope: scope\n };\n }\n return callback.apply(scope || self, Array.prototype.slice.call(arguments, 1));\n },\n translate: function (text) {\n if (text && Tools.is(text, 'string')) {\n var lang_1 = this.settings.language || 'en', i18n_1 = this.editorManager.i18n;\n text = i18n_1.data[lang_1 + '.' + text] || text.replace(/\\{\\#([^\\}]+)\\}/g, function (a, b) {\n return i18n_1.data[lang_1 + '.' + b] || '{#' + b + '}';\n });\n }\n return this.editorManager.translate(text);\n },\n getLang: function (name, defaultVal) {\n return this.editorManager.i18n.data[(this.settings.language || 'en') + '.' + name] || (defaultVal !== undefined ? defaultVal : '{#' + name + '}');\n },\n getParam: function (name, defaultVal, type) {\n return getParam(this, name, defaultVal, type);\n },\n nodeChanged: function (args) {\n this._nodeChangeDispatcher.nodeChanged(args);\n },\n addButton: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n if (settings.stateSelector && typeof settings.active === 'undefined') {\n settings.active = false;\n }\n if (!settings.text && !settings.icon) {\n settings.icon = name;\n }\n settings.tooltip = settings.tooltip || settings.title;\n self.buttons[name] = settings;\n },\n addSidebar: function (name, settings) {\n return Sidebar.add(this, name, settings);\n },\n addMenuItem: function (name, settings) {\n var self = this;\n if (settings.cmd) {\n settings.onclick = function () {\n self.execCommand(settings.cmd);\n };\n }\n self.menuItems[name] = settings;\n },\n addContextToolbar: function (predicate, items) {\n var self = this;\n var selector;\n self.contextToolbars = self.contextToolbars || [];\n if (typeof predicate === 'string') {\n selector = predicate;\n predicate = function (elm) {\n return self.dom.is(elm, selector);\n };\n }\n self.contextToolbars.push({\n id: Uuid.uuid('mcet'),\n predicate: predicate,\n items: items\n });\n },\n addCommand: function (name, callback, scope) {\n this.editorCommands.addCommand(name, callback, scope);\n },\n addQueryStateHandler: function (name, callback, scope) {\n this.editorCommands.addQueryStateHandler(name, callback, scope);\n },\n addQueryValueHandler: function (name, callback, scope) {\n this.editorCommands.addQueryValueHandler(name, callback, scope);\n },\n addShortcut: function (pattern, desc, cmdFunc, scope) {\n this.shortcuts.add(pattern, desc, cmdFunc, scope);\n },\n execCommand: function (cmd, ui, value, args) {\n return this.editorCommands.execCommand(cmd, ui, value, args);\n },\n queryCommandState: function (cmd) {\n return this.editorCommands.queryCommandState(cmd);\n },\n queryCommandValue: function (cmd) {\n return this.editorCommands.queryCommandValue(cmd);\n },\n queryCommandSupported: function (cmd) {\n return this.editorCommands.queryCommandSupported(cmd);\n },\n show: function () {\n var self = this;\n if (self.hidden) {\n self.hidden = false;\n if (self.inline) {\n self.getBody().contentEditable = true;\n } else {\n DOM$7.show(self.getContainer());\n DOM$7.hide(self.id);\n }\n self.load();\n self.fire('show');\n }\n },\n hide: function () {\n var self = this, doc = self.getDoc();\n if (!self.hidden) {\n if (ie$2 && doc && !self.inline) {\n doc.execCommand('SelectAll');\n }\n self.save();\n if (self.inline) {\n self.getBody().contentEditable = false;\n if (self === self.editorManager.focusedEditor) {\n self.editorManager.focusedEditor = null;\n }\n } else {\n DOM$7.hide(self.getContainer());\n DOM$7.setStyle(self.id, 'display', self.orgDisplay);\n }\n self.hidden = true;\n self.fire('hide');\n }\n },\n isHidden: function () {\n return !!this.hidden;\n },\n setProgressState: function (state, time) {\n this.fire('ProgressState', {\n state: state,\n time: time\n });\n },\n load: function (args) {\n var self = this;\n var elm = self.getElement(), html;\n if (self.removed) {\n return '';\n }\n if (elm) {\n args = args || {};\n args.load = true;\n html = self.setContent(elm.value !== undefined ? elm.value : elm.innerHTML, args);\n args.element = elm;\n if (!args.no_events) {\n self.fire('LoadContent', args);\n }\n args.element = elm = null;\n return html;\n }\n },\n save: function (args) {\n var self = this;\n var elm = self.getElement(), html, form;\n if (!elm || !self.initialized || self.removed) {\n return;\n }\n args = args || {};\n args.save = true;\n args.element = elm;\n html = args.content = self.getContent(args);\n if (!args.no_events) {\n self.fire('SaveContent', args);\n }\n if (args.format === 'raw') {\n self.fire('RawSaveContent', args);\n }\n html = args.content;\n if (!/TEXTAREA|INPUT/i.test(elm.nodeName)) {\n if (args.is_removing || !self.inline) {\n elm.innerHTML = html;\n }\n if (form = DOM$7.getParent(self.id, 'form')) {\n each$l(form.elements, function (elm) {\n if (elm.name === self.id) {\n elm.value = html;\n return false;\n }\n });\n }\n } else {\n elm.value = html;\n }\n args.element = elm = null;\n if (args.set_dirty !== false) {\n self.setDirty(false);\n }\n return html;\n },\n setContent: function (content, args) {\n return setContent$1(this, content, args);\n },\n getContent: function (args) {\n return getContent$1(this, args);\n },\n insertContent: function (content, args) {\n if (args) {\n content = extend$4({ content: content }, args);\n }\n this.execCommand('mceInsertContent', false, content);\n },\n isDirty: function () {\n return !this.isNotDirty;\n },\n setDirty: function (state) {\n var oldState = !this.isNotDirty;\n this.isNotDirty = !state;\n if (state && state !== oldState) {\n this.fire('dirty');\n }\n },\n setMode: function (mode) {\n setMode(this, mode);\n },\n getContainer: function () {\n var self = this;\n if (!self.container) {\n self.container = DOM$7.get(self.editorContainer || self.id + '_parent');\n }\n return self.container;\n },\n getContentAreaContainer: function () {\n return this.contentAreaContainer;\n },\n getElement: function () {\n if (!this.targetElm) {\n this.targetElm = DOM$7.get(this.id);\n }\n return this.targetElm;\n },\n getWin: function () {\n var self = this;\n var elm;\n if (!self.contentWindow) {\n elm = self.iframeElement;\n if (elm) {\n self.contentWindow = elm.contentWindow;\n }\n }\n return self.contentWindow;\n },\n getDoc: function () {\n var self = this;\n var win;\n if (!self.contentDocument) {\n win = self.getWin();\n if (win) {\n self.contentDocument = win.document;\n }\n }\n return self.contentDocument;\n },\n getBody: function () {\n var doc = this.getDoc();\n return this.bodyElement || (doc ? doc.body : null);\n },\n convertURL: function (url, name, elm) {\n var self = this, settings = self.settings;\n if (settings.urlconverter_callback) {\n return self.execCallback('urlconverter_callback', url, elm, true, name);\n }\n if (!settings.convert_urls || elm && elm.nodeName === 'LINK' || url.indexOf('file:') === 0 || url.length === 0) {\n return url;\n }\n if (settings.relative_urls) {\n return self.documentBaseURI.toRelative(url);\n }\n url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);\n return url;\n },\n addVisual: function (elm) {\n var self = this;\n var settings = self.settings;\n var dom = self.dom;\n var cls;\n elm = elm || self.getBody();\n if (self.hasVisual === undefined) {\n self.hasVisual = settings.visual;\n }\n each$l(dom.select('table,a', elm), function (elm) {\n var value;\n switch (elm.nodeName) {\n case 'TABLE':\n cls = settings.visual_table_class || 'mce-item-table';\n value = dom.getAttrib(elm, 'border');\n if ((!value || value === '0') && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n return;\n case 'A':\n if (!dom.getAttrib(elm, 'href')) {\n value = dom.getAttrib(elm, 'name') || elm.id;\n cls = settings.visual_anchor_class || 'mce-item-anchor';\n if (value && self.hasVisual) {\n dom.addClass(elm, cls);\n } else {\n dom.removeClass(elm, cls);\n }\n }\n return;\n }\n });\n self.fire('VisualAid', {\n element: elm,\n hasVisual: self.hasVisual\n });\n },\n remove: function () {\n remove$7(this);\n },\n destroy: function (automatic) {\n destroy(this, automatic);\n },\n uploadImages: function (callback) {\n return this.editorUpload.uploadImages(callback);\n },\n _scanForImages: function () {\n return this.editorUpload.scanForImages();\n }\n };\n extend$4(Editor.prototype, EditorObservable$1);\n\n var isEditorUIElement = function (elm) {\n return elm.className.toString().indexOf('mce-') !== -1;\n };\n var FocusManager = { isEditorUIElement: isEditorUIElement };\n\n var isManualNodeChange = function (e) {\n return e.type === 'nodechange' && e.selectionChange;\n };\n var registerPageMouseUp = function (editor, throttledStore) {\n var mouseUpPage = function () {\n throttledStore.throttle();\n };\n DOMUtils$1.DOM.bind(domGlobals.document, 'mouseup', mouseUpPage);\n editor.on('remove', function () {\n DOMUtils$1.DOM.unbind(domGlobals.document, 'mouseup', mouseUpPage);\n });\n };\n var registerFocusOut = function (editor) {\n editor.on('focusout', function () {\n SelectionBookmark.store(editor);\n });\n };\n var registerMouseUp = function (editor, throttledStore) {\n editor.on('mouseup touchend', function (e) {\n throttledStore.throttle();\n });\n };\n var registerEditorEvents = function (editor, throttledStore) {\n var browser = PlatformDetection$1.detect().browser;\n if (browser.isIE()) {\n registerFocusOut(editor);\n } else {\n registerMouseUp(editor, throttledStore);\n }\n editor.on('keyup nodechange', function (e) {\n if (!isManualNodeChange(e)) {\n SelectionBookmark.store(editor);\n }\n });\n };\n var register$3 = function (editor) {\n var throttledStore = first(function () {\n SelectionBookmark.store(editor);\n }, 0);\n if (editor.inline) {\n registerPageMouseUp(editor, throttledStore);\n }\n editor.on('init', function () {\n registerEditorEvents(editor, throttledStore);\n });\n editor.on('remove', function () {\n throttledStore.cancel();\n });\n };\n var SelectionRestore = { register: register$3 };\n\n var documentFocusInHandler;\n var DOM$8 = DOMUtils$1.DOM;\n var isEditorUIElement$1 = function (elm) {\n return FocusManager.isEditorUIElement(elm);\n };\n var isUIElement = function (editor, elm) {\n var customSelector = editor ? editor.settings.custom_ui_selector : '';\n var parent = DOM$8.getParent(elm, function (elm) {\n return isEditorUIElement$1(elm) || (customSelector ? editor.dom.is(elm, customSelector) : false);\n });\n return parent !== null;\n };\n var getActiveElement = function () {\n try {\n return domGlobals.document.activeElement;\n } catch (ex) {\n return domGlobals.document.body;\n }\n };\n var registerEvents = function (editorManager, e) {\n var editor = e.editor;\n SelectionRestore.register(editor);\n editor.on('focusin', function () {\n var self = this;\n var focusedEditor = editorManager.focusedEditor;\n if (focusedEditor !== self) {\n if (focusedEditor) {\n focusedEditor.fire('blur', { focusedEditor: self });\n }\n editorManager.setActive(self);\n editorManager.focusedEditor = self;\n self.fire('focus', { blurredEditor: focusedEditor });\n self.focus(true);\n }\n });\n editor.on('focusout', function () {\n var self = this;\n Delay.setEditorTimeout(self, function () {\n var focusedEditor = editorManager.focusedEditor;\n if (!isUIElement(self, getActiveElement()) && focusedEditor === self) {\n self.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n });\n });\n if (!documentFocusInHandler) {\n documentFocusInHandler = function (e) {\n var activeEditor = editorManager.activeEditor;\n var target;\n target = e.target;\n if (activeEditor && target.ownerDocument === domGlobals.document) {\n if (target !== domGlobals.document.body && !isUIElement(activeEditor, target) && editorManager.focusedEditor === activeEditor) {\n activeEditor.fire('blur', { focusedEditor: null });\n editorManager.focusedEditor = null;\n }\n }\n };\n DOM$8.bind(domGlobals.document, 'focusin', documentFocusInHandler);\n }\n };\n var unregisterDocumentEvents = function (editorManager, e) {\n if (editorManager.focusedEditor === e.editor) {\n editorManager.focusedEditor = null;\n }\n if (!editorManager.activeEditor) {\n DOM$8.unbind(domGlobals.document, 'focusin', documentFocusInHandler);\n documentFocusInHandler = null;\n }\n };\n var setup$h = function (editorManager) {\n editorManager.on('AddEditor', curry(registerEvents, editorManager));\n editorManager.on('RemoveEditor', curry(unregisterDocumentEvents, editorManager));\n };\n var FocusController = {\n setup: setup$h,\n isEditorUIElement: isEditorUIElement$1,\n isUIElement: isUIElement\n };\n\n var DOM$9 = DOMUtils$1.DOM;\n var explode$4 = Tools.explode, each$m = Tools.each, extend$5 = Tools.extend;\n var instanceCounter = 0, beforeUnloadDelegate, EditorManager, boundGlobalEvents = false;\n var legacyEditors = [];\n var editors = [];\n var isValidLegacyKey = function (id) {\n return id !== 'length';\n };\n var globalEventDelegate = function (e) {\n var type = e.type;\n each$m(EditorManager.get(), function (editor) {\n switch (type) {\n case 'scroll':\n editor.fire('ScrollWindow', e);\n break;\n case 'resize':\n editor.fire('ResizeWindow', e);\n break;\n }\n });\n };\n var toggleGlobalEvents = function (state) {\n if (state !== boundGlobalEvents) {\n if (state) {\n DomQuery(window).on('resize scroll', globalEventDelegate);\n } else {\n DomQuery(window).off('resize scroll', globalEventDelegate);\n }\n boundGlobalEvents = state;\n }\n };\n var removeEditorFromList = function (targetEditor) {\n var oldEditors = editors;\n delete legacyEditors[targetEditor.id];\n for (var i = 0; i < legacyEditors.length; i++) {\n if (legacyEditors[i] === targetEditor) {\n legacyEditors.splice(i, 1);\n break;\n }\n }\n editors = filter(editors, function (editor) {\n return targetEditor !== editor;\n });\n if (EditorManager.activeEditor === targetEditor) {\n EditorManager.activeEditor = editors.length > 0 ? editors[0] : null;\n }\n if (EditorManager.focusedEditor === targetEditor) {\n EditorManager.focusedEditor = null;\n }\n return oldEditors.length !== editors.length;\n };\n var purgeDestroyedEditor = function (editor) {\n if (editor && editor.initialized && !(editor.getContainer() || editor.getBody()).parentNode) {\n removeEditorFromList(editor);\n editor.unbindAllNativeEvents();\n editor.destroy(true);\n editor.removed = true;\n editor = null;\n }\n return editor;\n };\n EditorManager = {\n defaultSettings: {},\n $: DomQuery,\n majorVersion: '4',\n minorVersion: '9.11',\n releaseDate: '2020-07-13',\n editors: legacyEditors,\n i18n: I18n,\n activeEditor: null,\n settings: {},\n setup: function () {\n var self = this;\n var baseURL, documentBaseURL, suffix = '';\n documentBaseURL = URI.getDocumentBaseUrl(domGlobals.document.location);\n if (/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(documentBaseURL)) {\n documentBaseURL = documentBaseURL.replace(/[\\?#].*$/, '').replace(/[\\/\\\\][^\\/]+$/, '');\n if (!/[\\/\\\\]$/.test(documentBaseURL)) {\n documentBaseURL += '/';\n }\n }\n var preInit = window.tinymce || window.tinyMCEPreInit;\n if (preInit) {\n baseURL = preInit.base || preInit.baseURL;\n suffix = preInit.suffix;\n } else {\n var scripts = domGlobals.document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n var src = scripts[i].src || '';\n if (src === '') {\n continue;\n }\n var srcScript = src.substring(src.lastIndexOf('/'));\n if (/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(src)) {\n if (srcScript.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n break;\n }\n }\n if (!baseURL && domGlobals.document.currentScript) {\n var src = domGlobals.document.currentScript.src;\n if (src.indexOf('.min') !== -1) {\n suffix = '.min';\n }\n baseURL = src.substring(0, src.lastIndexOf('/'));\n }\n }\n self.baseURL = new URI(documentBaseURL).toAbsolute(baseURL);\n self.documentBaseURL = documentBaseURL;\n self.baseURI = new URI(self.baseURL);\n self.suffix = suffix;\n FocusController.setup(self);\n },\n overrideDefaults: function (defaultSettings) {\n var baseUrl, suffix;\n baseUrl = defaultSettings.base_url;\n if (baseUrl) {\n this.baseURL = new URI(this.documentBaseURL).toAbsolute(baseUrl.replace(/\\/+$/, ''));\n this.baseURI = new URI(this.baseURL);\n }\n suffix = defaultSettings.suffix;\n if (defaultSettings.suffix) {\n this.suffix = suffix;\n }\n this.defaultSettings = defaultSettings;\n var pluginBaseUrls = defaultSettings.plugin_base_urls;\n for (var name in pluginBaseUrls) {\n AddOnManager.PluginManager.urls[name] = pluginBaseUrls[name];\n }\n },\n init: function (settings) {\n var self = this;\n var result, invalidInlineTargets;\n invalidInlineTargets = Tools.makeMap('area base basefont br col frame hr img input isindex link meta param embed source wbr track ' + 'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu', ' ');\n var isInvalidInlineTarget = function (settings, elm) {\n return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;\n };\n var createId = function (elm) {\n var id = elm.id;\n if (!id) {\n id = elm.name;\n if (id && !DOM$9.get(id)) {\n id = elm.name;\n } else {\n id = DOM$9.uniqueId();\n }\n elm.setAttribute('id', id);\n }\n return id;\n };\n var execCallback = function (name) {\n var callback = settings[name];\n if (!callback) {\n return;\n }\n return callback.apply(self, Array.prototype.slice.call(arguments, 2));\n };\n var hasClass = function (elm, className) {\n return className.constructor === RegExp ? className.test(elm.className) : DOM$9.hasClass(elm, className);\n };\n var findTargets = function (settings) {\n var l, targets = [];\n if (Env.ie && Env.ie < 11) {\n ErrorReporter.initError('TinyMCE does not support the browser you are using. For a list of supported' + ' browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/');\n return [];\n }\n if (settings.types) {\n each$m(settings.types, function (type) {\n targets = targets.concat(DOM$9.select(type.selector));\n });\n return targets;\n } else if (settings.selector) {\n return DOM$9.select(settings.selector);\n } else if (settings.target) {\n return [settings.target];\n }\n switch (settings.mode) {\n case 'exact':\n l = settings.elements || '';\n if (l.length > 0) {\n each$m(explode$4(l), function (id) {\n var elm;\n if (elm = DOM$9.get(id)) {\n targets.push(elm);\n } else {\n each$m(domGlobals.document.forms, function (f) {\n each$m(f.elements, function (e) {\n if (e.name === id) {\n id = 'mce_editor_' + instanceCounter++;\n DOM$9.setAttrib(e, 'id', id);\n targets.push(e);\n }\n });\n });\n }\n });\n }\n break;\n case 'textareas':\n case 'specific_textareas':\n each$m(DOM$9.select('textarea'), function (elm) {\n if (settings.editor_deselector && hasClass(elm, settings.editor_deselector)) {\n return;\n }\n if (!settings.editor_selector || hasClass(elm, settings.editor_selector)) {\n targets.push(elm);\n }\n });\n break;\n }\n return targets;\n };\n var provideResults = function (editors) {\n result = editors;\n };\n var initEditors = function () {\n var initCount = 0;\n var editors = [];\n var targets;\n var createEditor = function (id, settings, targetElm) {\n var editor = new Editor(id, settings, self);\n editors.push(editor);\n editor.on('init', function () {\n if (++initCount === targets.length) {\n provideResults(editors);\n }\n });\n editor.targetElm = editor.targetElm || targetElm;\n editor.render();\n };\n DOM$9.unbind(window, 'ready', initEditors);\n execCallback('onpageload');\n targets = DomQuery.unique(findTargets(settings));\n if (settings.types) {\n each$m(settings.types, function (type) {\n Tools.each(targets, function (elm) {\n if (DOM$9.is(elm, type.selector)) {\n createEditor(createId(elm), extend$5({}, settings, type), elm);\n return false;\n }\n return true;\n });\n });\n return;\n }\n Tools.each(targets, function (elm) {\n purgeDestroyedEditor(self.get(elm.id));\n });\n targets = Tools.grep(targets, function (elm) {\n return !self.get(elm.id);\n });\n if (targets.length === 0) {\n provideResults([]);\n } else {\n each$m(targets, function (elm) {\n if (isInvalidInlineTarget(settings, elm)) {\n ErrorReporter.initError('Could not initialize inline editor on invalid inline target element', elm);\n } else {\n createEditor(createId(elm), settings, elm);\n }\n });\n }\n };\n self.settings = settings;\n DOM$9.bind(window, 'ready', initEditors);\n return new promiseObj(function (resolve) {\n if (result) {\n resolve(result);\n } else {\n provideResults = function (editors) {\n resolve(editors);\n };\n }\n });\n },\n get: function (id) {\n if (arguments.length === 0) {\n return editors.slice(0);\n } else if (isString(id)) {\n return find(editors, function (editor) {\n return editor.id === id;\n }).getOr(null);\n } else if (isNumber(id)) {\n return editors[id] ? editors[id] : null;\n } else {\n return null;\n }\n },\n add: function (editor) {\n var self = this;\n var existingEditor;\n existingEditor = legacyEditors[editor.id];\n if (existingEditor === editor) {\n return editor;\n }\n if (self.get(editor.id) === null) {\n if (isValidLegacyKey(editor.id)) {\n legacyEditors[editor.id] = editor;\n }\n legacyEditors.push(editor);\n editors.push(editor);\n }\n toggleGlobalEvents(true);\n self.activeEditor = editor;\n self.fire('AddEditor', { editor: editor });\n if (!beforeUnloadDelegate) {\n beforeUnloadDelegate = function () {\n self.fire('BeforeUnload');\n };\n DOM$9.bind(window, 'beforeunload', beforeUnloadDelegate);\n }\n return editor;\n },\n createEditor: function (id, settings) {\n return this.add(new Editor(id, settings, this));\n },\n remove: function (selector) {\n var self = this;\n var i, editor;\n if (!selector) {\n for (i = editors.length - 1; i >= 0; i--) {\n self.remove(editors[i]);\n }\n return;\n }\n if (isString(selector)) {\n each$m(DOM$9.select(selector), function (elm) {\n editor = self.get(elm.id);\n if (editor) {\n self.remove(editor);\n }\n });\n return;\n }\n editor = selector;\n if (isNull(self.get(editor.id))) {\n return null;\n }\n if (removeEditorFromList(editor)) {\n self.fire('RemoveEditor', { editor: editor });\n }\n if (editors.length === 0) {\n DOM$9.unbind(window, 'beforeunload', beforeUnloadDelegate);\n }\n editor.remove();\n toggleGlobalEvents(editors.length > 0);\n return editor;\n },\n execCommand: function (cmd, ui, value) {\n var self = this, editor = self.get(value);\n switch (cmd) {\n case 'mceAddEditor':\n if (!self.get(value)) {\n new Editor(value, self.settings, self).render();\n }\n return true;\n case 'mceRemoveEditor':\n if (editor) {\n editor.remove();\n }\n return true;\n case 'mceToggleEditor':\n if (!editor) {\n self.execCommand('mceAddEditor', 0, value);\n return true;\n }\n if (editor.isHidden()) {\n editor.show();\n } else {\n editor.hide();\n }\n return true;\n }\n if (self.activeEditor) {\n return self.activeEditor.execCommand(cmd, ui, value);\n }\n return false;\n },\n triggerSave: function () {\n each$m(editors, function (editor) {\n editor.save();\n });\n },\n addI18n: function (code, items) {\n I18n.add(code, items);\n },\n translate: function (text) {\n return I18n.translate(text);\n },\n setActive: function (editor) {\n var activeEditor = this.activeEditor;\n if (this.activeEditor !== editor) {\n if (activeEditor) {\n activeEditor.fire('deactivate', { relatedTarget: editor });\n }\n editor.fire('activate', { relatedTarget: activeEditor });\n }\n this.activeEditor = editor;\n }\n };\n extend$5(EditorManager, Observable);\n EditorManager.setup();\n var EditorManager$1 = EditorManager;\n\n function RangeUtils(dom) {\n var walk = function (rng, callback) {\n return RangeWalk.walk(dom, rng, callback);\n };\n var split = SplitRange.split;\n var normalize = function (rng) {\n return NormalizeRange.normalize(dom, rng).fold(constant(false), function (normalizedRng) {\n rng.setStart(normalizedRng.startContainer, normalizedRng.startOffset);\n rng.setEnd(normalizedRng.endContainer, normalizedRng.endOffset);\n return true;\n });\n };\n return {\n walk: walk,\n split: split,\n normalize: normalize\n };\n }\n (function (RangeUtils) {\n RangeUtils.compareRanges = RangeCompare.isEq;\n RangeUtils.getCaretRangeFromPoint = CaretRangeFromPoint.fromPoint;\n RangeUtils.getSelectedNode = getSelectedNode;\n RangeUtils.getNode = getNode;\n }(RangeUtils || (RangeUtils = {})));\n var RangeUtils$1 = RangeUtils;\n\n var min = Math.min, max = Math.max, round$2 = Math.round;\n var relativePosition = function (rect, targetRect, rel) {\n var x, y, w, h, targetW, targetH;\n x = targetRect.x;\n y = targetRect.y;\n w = rect.w;\n h = rect.h;\n targetW = targetRect.w;\n targetH = targetRect.h;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += round$2(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += round$2(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= h;\n }\n if (rel[4] === 'r') {\n x -= w;\n }\n if (rel[3] === 'c') {\n y -= round$2(h / 2);\n }\n if (rel[4] === 'c') {\n x -= round$2(w / 2);\n }\n return create$4(x, y, w, h);\n };\n var findBestRelativePosition = function (rect, targetRect, constrainRect, rels) {\n var pos, i;\n for (i = 0; i < rels.length; i++) {\n pos = relativePosition(rect, targetRect, rels[i]);\n if (pos.x >= constrainRect.x && pos.x + pos.w <= constrainRect.w + constrainRect.x && pos.y >= constrainRect.y && pos.y + pos.h <= constrainRect.h + constrainRect.y) {\n return rels[i];\n }\n }\n return null;\n };\n var inflate = function (rect, w, h) {\n return create$4(rect.x - w, rect.y - h, rect.w + w * 2, rect.h + h * 2);\n };\n var intersect = function (rect, cropRect) {\n var x1, y1, x2, y2;\n x1 = max(rect.x, cropRect.x);\n y1 = max(rect.y, cropRect.y);\n x2 = min(rect.x + rect.w, cropRect.x + cropRect.w);\n y2 = min(rect.y + rect.h, cropRect.y + cropRect.h);\n if (x2 - x1 < 0 || y2 - y1 < 0) {\n return null;\n }\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var clamp$1 = function (rect, clampRect, fixedSize) {\n var underflowX1, underflowY1, overflowX2, overflowY2, x1, y1, x2, y2, cx2, cy2;\n x1 = rect.x;\n y1 = rect.y;\n x2 = rect.x + rect.w;\n y2 = rect.y + rect.h;\n cx2 = clampRect.x + clampRect.w;\n cy2 = clampRect.y + clampRect.h;\n underflowX1 = max(0, clampRect.x - x1);\n underflowY1 = max(0, clampRect.y - y1);\n overflowX2 = max(0, x2 - cx2);\n overflowY2 = max(0, y2 - cy2);\n x1 += underflowX1;\n y1 += underflowY1;\n if (fixedSize) {\n x2 += underflowX1;\n y2 += underflowY1;\n x1 -= overflowX2;\n y1 -= overflowY2;\n }\n x2 -= overflowX2;\n y2 -= overflowY2;\n return create$4(x1, y1, x2 - x1, y2 - y1);\n };\n var create$4 = function (x, y, w, h) {\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var fromClientRect = function (clientRect) {\n return create$4(clientRect.left, clientRect.top, clientRect.width, clientRect.height);\n };\n var Rect = {\n inflate: inflate,\n relativePosition: relativePosition,\n findBestRelativePosition: findBestRelativePosition,\n intersect: intersect,\n clamp: clamp$1,\n create: create$4,\n fromClientRect: fromClientRect\n };\n\n var types = {};\n var Factory = {\n add: function (type, typeClass) {\n types[type.toLowerCase()] = typeClass;\n },\n has: function (type) {\n return !!types[type.toLowerCase()];\n },\n get: function (type) {\n var lctype = type.toLowerCase();\n var controlType = types.hasOwnProperty(lctype) ? types[lctype] : null;\n if (controlType === null) {\n throw new Error('Could not find module for type: ' + type);\n }\n return controlType;\n },\n create: function (type, settings) {\n var ControlType;\n if (typeof type === 'string') {\n settings = settings || {};\n settings.type = type;\n } else {\n settings = type;\n type = settings.type;\n }\n type = type.toLowerCase();\n ControlType = types[type];\n if (!ControlType) {\n throw new Error('Could not find control by type: ' + type);\n }\n ControlType = new ControlType(settings);\n ControlType.type = type;\n return ControlType;\n }\n };\n\n var each$n = Tools.each, extend$6 = Tools.extend;\n var extendClass, initializing;\n var Class = function () {\n };\n Class.extend = extendClass = function (prop) {\n var self = this;\n var _super = self.prototype;\n var prototype, name, member;\n var Class = function () {\n var i, mixins, mixin;\n var self = this;\n if (!initializing) {\n if (self.init) {\n self.init.apply(self, arguments);\n }\n mixins = self.Mixins;\n if (mixins) {\n i = mixins.length;\n while (i--) {\n mixin = mixins[i];\n if (mixin.init) {\n mixin.init.apply(self, arguments);\n }\n }\n }\n }\n };\n var dummy = function () {\n return this;\n };\n var createMethod = function (name, fn) {\n return function () {\n var self = this;\n var tmp = self._super;\n var ret;\n self._super = _super[name];\n ret = fn.apply(self, arguments);\n self._super = tmp;\n return ret;\n };\n };\n initializing = true;\n prototype = new self();\n initializing = false;\n if (prop.Mixins) {\n each$n(prop.Mixins, function (mixin) {\n for (var name_1 in mixin) {\n if (name_1 !== 'init') {\n prop[name_1] = mixin[name_1];\n }\n }\n });\n if (_super.Mixins) {\n prop.Mixins = _super.Mixins.concat(prop.Mixins);\n }\n }\n if (prop.Methods) {\n each$n(prop.Methods.split(','), function (name) {\n prop[name] = dummy;\n });\n }\n if (prop.Properties) {\n each$n(prop.Properties.split(','), function (name) {\n var fieldName = '_' + name;\n prop[name] = function (value) {\n var self = this;\n if (value !== undefined) {\n self[fieldName] = value;\n return self;\n }\n return self[fieldName];\n };\n });\n }\n if (prop.Statics) {\n each$n(prop.Statics, function (func, name) {\n Class[name] = func;\n });\n }\n if (prop.Defaults && _super.Defaults) {\n prop.Defaults = extend$6({}, _super.Defaults, prop.Defaults);\n }\n for (name in prop) {\n member = prop[name];\n if (typeof member === 'function' && _super[name]) {\n prototype[name] = createMethod(name, member);\n } else {\n prototype[name] = member;\n }\n }\n Class.prototype = prototype;\n Class.constructor = Class;\n Class.extend = extendClass;\n return Class;\n };\n\n var min$1 = Math.min, max$1 = Math.max, round$3 = Math.round;\n var Color = function (value) {\n var self = {};\n var r = 0, g = 0, b = 0;\n var rgb2hsv = function (r, g, b) {\n var h, s, v, d, minRGB, maxRGB;\n h = 0;\n s = 0;\n v = 0;\n r = r / 255;\n g = g / 255;\n b = b / 255;\n minRGB = min$1(r, min$1(g, b));\n maxRGB = max$1(r, max$1(g, b));\n if (minRGB === maxRGB) {\n v = minRGB;\n return {\n h: 0,\n s: 0,\n v: v * 100\n };\n }\n d = r === minRGB ? g - b : b === minRGB ? r - g : b - r;\n h = r === minRGB ? 3 : b === minRGB ? 1 : 5;\n h = 60 * (h - d / (maxRGB - minRGB));\n s = (maxRGB - minRGB) / maxRGB;\n v = maxRGB;\n return {\n h: round$3(h),\n s: round$3(s * 100),\n v: round$3(v * 100)\n };\n };\n var hsvToRgb = function (hue, saturation, brightness) {\n var side, chroma, x, match;\n hue = (parseInt(hue, 10) || 0) % 360;\n saturation = parseInt(saturation, 10) / 100;\n brightness = parseInt(brightness, 10) / 100;\n saturation = max$1(0, min$1(saturation, 1));\n brightness = max$1(0, min$1(brightness, 1));\n if (saturation === 0) {\n r = g = b = round$3(255 * brightness);\n return;\n }\n side = hue / 60;\n chroma = brightness * saturation;\n x = chroma * (1 - Math.abs(side % 2 - 1));\n match = brightness - chroma;\n switch (Math.floor(side)) {\n case 0:\n r = chroma;\n g = x;\n b = 0;\n break;\n case 1:\n r = x;\n g = chroma;\n b = 0;\n break;\n case 2:\n r = 0;\n g = chroma;\n b = x;\n break;\n case 3:\n r = 0;\n g = x;\n b = chroma;\n break;\n case 4:\n r = x;\n g = 0;\n b = chroma;\n break;\n case 5:\n r = chroma;\n g = 0;\n b = x;\n break;\n default:\n r = g = b = 0;\n }\n r = round$3(255 * (r + match));\n g = round$3(255 * (g + match));\n b = round$3(255 * (b + match));\n };\n var toHex = function () {\n var hex = function (val) {\n val = parseInt(val, 10).toString(16);\n return val.length > 1 ? val : '0' + val;\n };\n return '#' + hex(r) + hex(g) + hex(b);\n };\n var toRgb = function () {\n return {\n r: r,\n g: g,\n b: b\n };\n };\n var toHsv = function () {\n return rgb2hsv(r, g, b);\n };\n var parse = function (value) {\n var matches;\n if (typeof value === 'object') {\n if ('r' in value) {\n r = value.r;\n g = value.g;\n b = value.b;\n } else if ('v' in value) {\n hsvToRgb(value.h, value.s, value.v);\n }\n } else {\n if (matches = /rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(value)) {\n r = parseInt(matches[1], 10);\n g = parseInt(matches[2], 10);\n b = parseInt(matches[3], 10);\n } else if (matches = /#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(value)) {\n r = parseInt(matches[1], 16);\n g = parseInt(matches[2], 16);\n b = parseInt(matches[3], 16);\n } else if (matches = /#([0-F])([0-F])([0-F])/gi.exec(value)) {\n r = parseInt(matches[1] + matches[1], 16);\n g = parseInt(matches[2] + matches[2], 16);\n b = parseInt(matches[3] + matches[3], 16);\n }\n }\n r = r < 0 ? 0 : r > 255 ? 255 : r;\n g = g < 0 ? 0 : g > 255 ? 255 : g;\n b = b < 0 ? 0 : b > 255 ? 255 : b;\n return self;\n };\n if (value) {\n parse(value);\n }\n self.toRgb = toRgb;\n self.toHsv = toHsv;\n self.toHex = toHex;\n self.parse = parse;\n return self;\n };\n\n var serialize = function (o, quote) {\n var i, v, t, name;\n quote = quote || '\"';\n if (o === null) {\n return 'null';\n }\n t = typeof o;\n if (t === 'string') {\n v = '\\bb\\tt\\nn\\ff\\rr\"\"\\'\\'\\\\\\\\';\n return quote + o.replace(/([\\u0080-\\uFFFF\\x00-\\x1f\\\"\\'\\\\])/g, function (a, b) {\n if (quote === '\"' && a === '\\'') {\n return a;\n }\n i = v.indexOf(b);\n if (i + 1) {\n return '\\\\' + v.charAt(i + 1);\n }\n a = b.charCodeAt().toString(16);\n return '\\\\u' + '0000'.substring(a.length) + a;\n }) + quote;\n }\n if (t === 'object') {\n if (o.hasOwnProperty && Object.prototype.toString.call(o) === '[object Array]') {\n for (i = 0, v = '['; i < o.length; i++) {\n v += (i > 0 ? ',' : '') + serialize(o[i], quote);\n }\n return v + ']';\n }\n v = '{';\n for (name in o) {\n if (o.hasOwnProperty(name)) {\n v += typeof o[name] !== 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote + ':' + serialize(o[name], quote) : '';\n }\n }\n return v + '}';\n }\n return '' + o;\n };\n var JSON$1 = {\n serialize: serialize,\n parse: function (text) {\n try {\n return JSON.parse(text);\n } catch (ex) {\n }\n }\n };\n\n var JSONP = {\n callbacks: {},\n count: 0,\n send: function (settings) {\n var self = this, dom = DOMUtils$1.DOM, count = settings.count !== undefined ? settings.count : self.count;\n var id = 'tinymce_jsonp_' + count;\n self.callbacks[count] = function (json) {\n dom.remove(id);\n delete self.callbacks[count];\n settings.callback(json);\n };\n dom.add(dom.doc.body, 'script', {\n id: id,\n src: settings.url,\n type: 'text/javascript'\n });\n self.count++;\n }\n };\n\n var XHR = {\n send: function (settings) {\n var xhr, count = 0;\n var ready = function () {\n if (!settings.async || xhr.readyState === 4 || count++ > 10000) {\n if (settings.success && count < 10000 && xhr.status === 200) {\n settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);\n } else if (settings.error) {\n settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);\n }\n xhr = null;\n } else {\n setTimeout(ready, 10);\n }\n };\n settings.scope = settings.scope || this;\n settings.success_scope = settings.success_scope || settings.scope;\n settings.error_scope = settings.error_scope || settings.scope;\n settings.async = settings.async === false ? false : true;\n settings.data = settings.data || '';\n XHR.fire('beforeInitialize', { settings: settings });\n xhr = XMLHttpRequest();\n if (xhr) {\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType(settings.content_type);\n }\n xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);\n if (settings.crossDomain) {\n xhr.withCredentials = true;\n }\n if (settings.content_type) {\n xhr.setRequestHeader('Content-Type', settings.content_type);\n }\n if (settings.requestheaders) {\n Tools.each(settings.requestheaders, function (header) {\n xhr.setRequestHeader(header.key, header.value);\n });\n }\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n xhr = XHR.fire('beforeSend', {\n xhr: xhr,\n settings: settings\n }).xhr;\n xhr.send(settings.data);\n if (!settings.async) {\n return ready();\n }\n setTimeout(ready, 10);\n }\n }\n };\n Tools.extend(XHR, Observable);\n\n var extend$7 = Tools.extend;\n var JSONRequest = function (settings) {\n this.settings = extend$7({}, settings);\n this.count = 0;\n };\n JSONRequest.sendRPC = function (o) {\n return new JSONRequest().send(o);\n };\n JSONRequest.prototype = {\n send: function (args) {\n var ecb = args.error, scb = args.success;\n args = extend$7(this.settings, args);\n args.success = function (c, x) {\n c = JSON$1.parse(c);\n if (typeof c === 'undefined') {\n c = { error: 'JSON Parse error.' };\n }\n if (c.error) {\n ecb.call(args.error_scope || args.scope, c.error, x);\n } else {\n scb.call(args.success_scope || args.scope, c.result);\n }\n };\n args.error = function (ty, x) {\n if (ecb) {\n ecb.call(args.error_scope || args.scope, ty, x);\n }\n };\n args.data = JSON$1.serialize({\n id: args.id || 'c' + this.count++,\n method: args.method,\n params: args.params\n });\n args.content_type = 'application/json';\n XHR.send(args);\n }\n };\n\n var create$5 = function () {\n return function () {\n var data = {};\n var keys = [];\n var storage = {\n getItem: function (key) {\n var item = data[key];\n return item ? item : null;\n },\n setItem: function (key, value) {\n keys.push(key);\n data[key] = String(value);\n },\n key: function (index) {\n return keys[index];\n },\n removeItem: function (key) {\n keys = keys.filter(function (k) {\n return k === key;\n });\n delete data[key];\n },\n clear: function () {\n keys = [];\n data = {};\n },\n length: 0\n };\n Object.defineProperty(storage, 'length', {\n get: function () {\n return keys.length;\n },\n configurable: false,\n enumerable: false\n });\n return storage;\n }();\n };\n\n var localStorage;\n try {\n localStorage = domGlobals.window.localStorage;\n } catch (e) {\n localStorage = create$5();\n }\n var LocalStorage = localStorage;\n\n var tinymce = EditorManager$1;\n var publicApi = {\n geom: { Rect: Rect },\n util: {\n Promise: promiseObj,\n Delay: Delay,\n Tools: Tools,\n VK: VK,\n URI: URI,\n Class: Class,\n EventDispatcher: Dispatcher,\n Observable: Observable,\n I18n: I18n,\n XHR: XHR,\n JSON: JSON$1,\n JSONRequest: JSONRequest,\n JSONP: JSONP,\n LocalStorage: LocalStorage,\n Color: Color\n },\n dom: {\n EventUtils: EventUtils,\n Sizzle: Sizzle,\n DomQuery: DomQuery,\n TreeWalker: TreeWalker,\n DOMUtils: DOMUtils$1,\n ScriptLoader: ScriptLoader,\n RangeUtils: RangeUtils$1,\n Serializer: DomSerializer$1,\n ControlSelection: ControlSelection,\n BookmarkManager: BookmarkManager$1,\n Selection: Selection$1,\n Event: EventUtils.Event\n },\n html: {\n Styles: Styles,\n Entities: Entities,\n Node: Node$1,\n Schema: Schema,\n SaxParser: SaxParser$1,\n DomParser: DomParser,\n Writer: Writer,\n Serializer: HtmlSerializer\n },\n ui: { Factory: Factory },\n Env: Env,\n AddOnManager: AddOnManager,\n Annotator: Annotator,\n Formatter: Formatter,\n UndoManager: UndoManager,\n EditorCommands: EditorCommands,\n WindowManager: WindowManager,\n NotificationManager: NotificationManager,\n EditorObservable: EditorObservable$1,\n Shortcuts: Shortcuts,\n Editor: Editor,\n FocusManager: FocusManager,\n EditorManager: EditorManager$1,\n DOM: DOMUtils$1.DOM,\n ScriptLoader: ScriptLoader.ScriptLoader,\n PluginManager: AddOnManager.PluginManager,\n ThemeManager: AddOnManager.ThemeManager,\n trim: Tools.trim,\n isArray: Tools.isArray,\n is: Tools.is,\n toArray: Tools.toArray,\n makeMap: Tools.makeMap,\n each: Tools.each,\n map: Tools.map,\n grep: Tools.grep,\n inArray: Tools.inArray,\n extend: Tools.extend,\n create: Tools.create,\n walk: Tools.walk,\n createNS: Tools.createNS,\n resolve: Tools.resolve,\n explode: Tools.explode,\n _addCacheSuffix: Tools._addCacheSuffix,\n isOpera: Env.opera,\n isWebKit: Env.webkit,\n isIE: Env.ie,\n isGecko: Env.gecko,\n isMac: Env.mac\n };\n tinymce = Tools.extend(tinymce, publicApi);\n var Tinymce = tinymce;\n\n var exportToModuleLoaders = function (tinymce) {\n if (typeof module === 'object') {\n try {\n module.exports = tinymce;\n } catch (_) {\n }\n }\n };\n var exportToWindowGlobal = function (tinymce) {\n window.tinymce = tinymce;\n window.tinyMCE = tinymce;\n };\n exportToWindowGlobal(Tinymce);\n exportToModuleLoaders(Tinymce);\n\n}(window));\n})();\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","(function () {\nvar wordcount = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var regExps = {\n aletter: '[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05F3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24B6-\\u24E9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]',\n midnumlet: '[-\\'\\\\.\\u2018\\u2019\\u2024\\uFE52\\uFF07\\uFF0E]',\n midletter: '[:\\xB7\\xB7\\u05F4\\u2027\\uFE13\\uFE55\\uFF1A]',\n midnum: '[\\xB1+*/,;;\\u0589\\u060C\\u060D\\u066C\\u07F8\\u2044\\uFE10\\uFE14\\uFE50\\uFE54\\uFF0C\\uFF1B]',\n numeric: '[0-9\\u0660-\\u0669\\u066B\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]',\n cr: '\\\\r',\n lf: '\\\\n',\n newline: '[\\x0B\\f\\x85\\u2028\\u2029]',\n extend: '[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\uA672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]',\n format: '[\\xAD\\u0600-\\u0603\\u06DD\\u070F\\u17b4\\u17b5\\u200E\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u206A-\\u206F\\uFEFF\\uFFF9-\\uFFFB]',\n katakana: '[\\u3031-\\u3035\\u309B\\u309C\\u30A0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32D0-\\u32FE\\u3300-\\u3357\\uff66-\\uff9d]',\n extendnumlet: '[=_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f\\u2200-\\u22FF<>]',\n punctuation: '[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xA1\\xAB\\xB7\\xBB\\xBF;\\xB7\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1361-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u3008\\u3009\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30\\u2E31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uff3f\\uFF5B\\uFF5D\\uFF5F-\\uFF65]'\n };\n var characterIndices = {\n ALETTER: 0,\n MIDNUMLET: 1,\n MIDLETTER: 2,\n MIDNUM: 3,\n NUMERIC: 4,\n CR: 5,\n LF: 6,\n NEWLINE: 7,\n EXTEND: 8,\n FORMAT: 9,\n KATAKANA: 10,\n EXTENDNUMLET: 11,\n AT: 12,\n OTHER: 13\n };\n var SETS = [\n new RegExp(regExps.aletter),\n new RegExp(regExps.midnumlet),\n new RegExp(regExps.midletter),\n new RegExp(regExps.midnum),\n new RegExp(regExps.numeric),\n new RegExp(regExps.cr),\n new RegExp(regExps.lf),\n new RegExp(regExps.newline),\n new RegExp(regExps.extend),\n new RegExp(regExps.format),\n new RegExp(regExps.katakana),\n new RegExp(regExps.extendnumlet),\n new RegExp('@')\n ];\n var EMPTY_STRING = '';\n var PUNCTUATION = new RegExp('^' + regExps.punctuation + '$');\n var WHITESPACE = /^\\s+$/;\n var UnicodeData = {\n characterIndices: characterIndices,\n SETS: SETS,\n EMPTY_STRING: EMPTY_STRING,\n PUNCTUATION: PUNCTUATION,\n WHITESPACE: WHITESPACE\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var from = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var SETS$1 = UnicodeData.SETS;\n var OTHER = UnicodeData.characterIndices.OTHER;\n var getType = function (char) {\n var j, set, type = OTHER;\n var setsLength = SETS$1.length;\n for (j = 0; j < setsLength; ++j) {\n set = SETS$1[j];\n if (set && set.test(char)) {\n type = j;\n break;\n }\n }\n return type;\n };\n var memoize = function (func) {\n var cache = {};\n return function (char) {\n if (cache[char]) {\n return cache[char];\n } else {\n var result = func(char);\n cache[char] = result;\n return result;\n }\n };\n };\n var classify = function (string) {\n var memoized = memoize(getType);\n return map(string.split(''), memoized);\n };\n var StringMapper = { classify: classify };\n\n var ci = UnicodeData.characterIndices;\n var isWordBoundary = function (map, index) {\n var prevType;\n var type = map[index];\n var nextType = map[index + 1];\n var nextNextType;\n if (index < 0 || index > map.length - 1 && index !== 0) {\n return false;\n }\n if (type === ci.ALETTER && nextType === ci.ALETTER) {\n return false;\n }\n nextNextType = map[index + 2];\n if (type === ci.ALETTER && (nextType === ci.MIDLETTER || nextType === ci.MIDNUMLET || nextType === ci.AT) && nextNextType === ci.ALETTER) {\n return false;\n }\n prevType = map[index - 1];\n if ((type === ci.MIDLETTER || type === ci.MIDNUMLET || nextType === ci.AT) && nextType === ci.ALETTER && prevType === ci.ALETTER) {\n return false;\n }\n if ((type === ci.NUMERIC || type === ci.ALETTER) && (nextType === ci.NUMERIC || nextType === ci.ALETTER)) {\n return false;\n }\n if ((type === ci.MIDNUM || type === ci.MIDNUMLET) && nextType === ci.NUMERIC && prevType === ci.NUMERIC) {\n return false;\n }\n if (type === ci.NUMERIC && (nextType === ci.MIDNUM || nextType === ci.MIDNUMLET) && nextNextType === ci.NUMERIC) {\n return false;\n }\n if (type === ci.EXTEND || type === ci.FORMAT || prevType === ci.EXTEND || prevType === ci.FORMAT || nextType === ci.EXTEND || nextType === ci.FORMAT) {\n return false;\n }\n if (type === ci.CR && nextType === ci.LF) {\n return false;\n }\n if (type === ci.NEWLINE || type === ci.CR || type === ci.LF) {\n return true;\n }\n if (nextType === ci.NEWLINE || nextType === ci.CR || nextType === ci.LF) {\n return true;\n }\n if (type === ci.KATAKANA && nextType === ci.KATAKANA) {\n return false;\n }\n if (nextType === ci.EXTENDNUMLET && (type === ci.ALETTER || type === ci.NUMERIC || type === ci.KATAKANA || type === ci.EXTENDNUMLET)) {\n return false;\n }\n if (type === ci.EXTENDNUMLET && (nextType === ci.ALETTER || nextType === ci.NUMERIC || nextType === ci.KATAKANA)) {\n return false;\n }\n if (type === ci.AT) {\n return false;\n }\n return true;\n };\n var WordBoundary = { isWordBoundary: isWordBoundary };\n\n var EMPTY_STRING$1 = UnicodeData.EMPTY_STRING;\n var WHITESPACE$1 = UnicodeData.WHITESPACE;\n var PUNCTUATION$1 = UnicodeData.PUNCTUATION;\n var isProtocol = function (word) {\n return word === 'http' || word === 'https';\n };\n var findWordEnd = function (str, index) {\n var i;\n for (i = index; i < str.length; ++i) {\n var chr = str.charAt(i);\n if (WHITESPACE$1.test(chr)) {\n break;\n }\n }\n return i;\n };\n var extractUrl = function (word, str, index) {\n var endIndex = findWordEnd(str, index + 1);\n var peakedWord = str.substring(index + 1, endIndex);\n if (peakedWord.substr(0, 3) === '://') {\n return {\n word: word + peakedWord,\n index: endIndex\n };\n }\n return {\n word: word,\n index: index\n };\n };\n var doGetWords = function (str, options) {\n var i = 0;\n var map = StringMapper.classify(str);\n var len = map.length;\n var word = [];\n var words = [];\n var chr;\n var includePunctuation;\n var includeWhitespace;\n if (!options) {\n options = {};\n }\n if (options.ignoreCase) {\n str = str.toLowerCase();\n }\n includePunctuation = options.includePunctuation;\n includeWhitespace = options.includeWhitespace;\n for (; i < len; ++i) {\n chr = str.charAt(i);\n word.push(chr);\n if (WordBoundary.isWordBoundary(map, i)) {\n word = word.join(EMPTY_STRING$1);\n if (word && (includeWhitespace || !WHITESPACE$1.test(word)) && (includePunctuation || !PUNCTUATION$1.test(word))) {\n if (isProtocol(word)) {\n var obj = extractUrl(word, str, i);\n words.push(obj.word);\n i = obj.index;\n } else {\n words.push(word);\n }\n }\n word = [];\n }\n }\n return words;\n };\n var getWords = function (str, options) {\n return doGetWords(str.replace(/\\ufeff/g, ''), options);\n };\n var WordGetter = { getWords: getWords };\n\n var getText = function (node, schema) {\n var blockElements = schema.getBlockElements();\n var shortEndedElements = schema.getShortEndedElements();\n var whiteSpaceElements = schema.getWhiteSpaceElements();\n var isSeparator = function (node) {\n return blockElements[node.nodeName] || shortEndedElements[node.nodeName] || whiteSpaceElements[node.nodeName];\n };\n var txt = '';\n var treeWalker = new global$1(node, node);\n while (node = treeWalker.next()) {\n if (node.nodeType === 3) {\n txt += node.data;\n } else if (isSeparator(node)) {\n txt += ' ';\n }\n }\n return txt;\n };\n var innerText = function (node, schema) {\n return global$2.ie ? getText(node, schema) : node.innerText;\n };\n var getTextContent = function (editor) {\n return editor.removed ? '' : innerText(editor.getBody(), editor.schema);\n };\n var getCount = function (editor) {\n return WordGetter.getWords(getTextContent(editor)).length;\n };\n var WordCount = { getCount: getCount };\n\n var get = function (editor) {\n var getCount = function () {\n return WordCount.getCount(editor);\n };\n return { getCount: getCount };\n };\n var Api = { get: get };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var setup = function (editor) {\n var wordsToText = function (editor) {\n return global$4.translate([\n '{0} words',\n WordCount.getCount(editor)\n ]);\n };\n var update = function () {\n editor.theme.panel.find('#wordcount').text(wordsToText(editor));\n };\n editor.on('init', function () {\n var statusbar = editor.theme.panel && editor.theme.panel.find('#statusbar')[0];\n var debouncedUpdate = global$3.debounce(update, 300);\n if (statusbar) {\n global$3.setEditorTimeout(editor, function () {\n statusbar.insert({\n type: 'label',\n name: 'wordcount',\n text: wordsToText(editor),\n classes: 'wordcount',\n disabled: editor.settings.readonly\n }, 0);\n editor.on('setcontent beforeaddundo undo redo keyup', debouncedUpdate);\n }, 0);\n }\n });\n };\n var Statusbar = { setup: setup };\n\n global.add('wordcount', function (editor) {\n Statusbar.setup(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"nonbreaking\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/nonbreaking')\n// ES2015:\n// import 'tinymce/plugins/nonbreaking'\nrequire('./plugin.js');","(function () {\nvar code = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getMinWidth = function (editor) {\n return editor.getParam('code_dialog_width', 600);\n };\n var getMinHeight = function (editor) {\n return editor.getParam('code_dialog_height', Math.min(global$1.DOM.getViewPort().h - 200, 500));\n };\n var Settings = {\n getMinWidth: getMinWidth,\n getMinHeight: getMinHeight\n };\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n var Content = {\n setContent: setContent,\n getContent: getContent\n };\n\n var open = function (editor) {\n var minWidth = Settings.getMinWidth(editor);\n var minHeight = Settings.getMinHeight(editor);\n var win = editor.windowManager.open({\n title: 'Source code',\n body: {\n type: 'textbox',\n name: 'code',\n multiline: true,\n minWidth: minWidth,\n minHeight: minHeight,\n spellcheck: false,\n style: 'direction: ltr; text-align: left'\n },\n onSubmit: function (e) {\n Content.setContent(editor, e.data.code);\n }\n });\n win.find('#code').value(Content.getContent(editor));\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('code', {\n icon: 'code',\n tooltip: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n editor.addMenuItem('code', {\n icon: 'code',\n text: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('code', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return {};\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// Exports the \"contextmenu\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/contextmenu')\n// ES2015:\n// import 'tinymce/plugins/contextmenu'\nrequire('./plugin.js');","/* global tinymce:true */\r\n/* global $:true */\r\n\r\n/* eslint-disable */\r\n\r\ntinymce.PluginManager.add('floatingtoolbar', function(editor)\r\n{\r\n\teditor.on('init', function()\r\n {\r\n editor.settings.floatingtoolbar_top = editor.settings.floatingtoolbar_top || 0;\r\n editor.settings.floatingtoolbar_bottom = editor.settings.floatingtoolbar_bottom || 300;\r\n editor.settings.floatingtoolbar_selectors = editor.settings.floatingtoolbar_selectors || [window];\r\n\r\n var container = $(editor.editorContainer);\r\n var body = container.find('> .mce-container-body');\r\n var toolbar = $('
    ').attr('id', editor.id + '_toolbar').prependTo(body);\r\n\r\n $('
    ').attr('id', editor.id + '_placeholder').prependTo(body);\r\n\r\n toolbar.append(container.find('.mce-menubar'));\r\n toolbar.append(container.find('.mce-toolbar-grp'));\r\n });\r\n\r\n editor.on('focus', function()\r\n {\r\n checkToolbars(editor, true);\r\n\r\n $.each(editor.settings.floatingtoolbar_selectors, function(i, selector)\r\n {\r\n $(selector).on('scroll.editor resize.editor', function()\r\n {\r\n checkToolbars(editor, true);\r\n });\r\n });\r\n });\r\n\r\n editor.on('blur', function()\r\n {\r\n $.each(editor.settings.floatingtoolbar_selectors, function(i, selector)\r\n {\r\n $(selector).off('scroll.editor resize.editor');\r\n });\r\n\r\n checkToolbars(editor, false);\r\n });\r\n\r\n function checkToolbars(editor, focus)\r\n {\r\n var minwidth = editor.settings.floatingtoolbar_minwidth || 0;\r\n var minheight = editor.settings.floatingtoolbar_minheight || 0;\r\n var top = $(window).width() > minwidth && $(window).height() > minheight ? editor.settings.floatingtoolbar_top : 0;\r\n var bottom = editor.settings.floatingtoolbar_bottom;\r\n\r\n var $editor = $(editor.editorContainer);\r\n var $toolbar = $('#' + editor.id + '_toolbar');\r\n var $placeholder = $('#' + editor.id + '_placeholder');\r\n\r\n if (focus == true)\r\n {\r\n var height = $editor.outerHeight();\r\n var scroll = $(window).scrollTop();\r\n var offset = $placeholder.offset();\r\n\r\n $placeholder.height($toolbar.outerHeight());\r\n $toolbar.outerWidth($placeholder.outerWidth());\r\n\r\n if (focus && offset && (offset.top - top) < scroll && (offset.top - top + height - bottom) > scroll)\r\n {\r\n $toolbar.css({\r\n 'position': 'fixed',\r\n 'border-bottom': '1px solid rgba(0, 0, 0, 0.2)',\r\n 'z-index': 1020,\r\n 'top': top + 'px'\r\n });\r\n\r\n return;\r\n }\r\n }\r\n\r\n $placeholder.height(0);\r\n $toolbar.css({\r\n 'position': 'static',\r\n 'border-bottom': 'none'\r\n });\r\n }\r\n});\r\n","// Exports the \"autosave\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/autosave')\n// ES2015:\n// import 'tinymce/plugins/autosave'\nrequire('./plugin.js');"],"sourceRoot":""}