{"version":3,"sources":["webpack:///./src/components/edit/EditPartner.vue?5911","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./node_modules/tinymce/plugins/table/index.js","webpack:///./node_modules/tinymce/plugins/codesample/index.js","webpack:///./node_modules/tinymce/plugins/pagebreak/plugin.js","webpack:///./src/components/edit/EditMember.vue?4901","webpack:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/textcolor/plugin.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/sweetalert/dist/sweetalert.min.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:///./src/components/edit/EditProduct.vue?a1df","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/fullscreen/index.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/importcss/plugin.js","webpack:///./node_modules/tinymce/plugins/textpattern/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/tinymce/plugins/noneditable/plugin.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./src/components/Account.vue?a86e","webpack:///./src/components/edit/EditIntroduceEmg.vue?ad66","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?28d7","webpack:///node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?7abb","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/index.js","webpack:///src/components/edit/EditIntroduceEmg.vue","webpack:///./src/components/edit/EditIntroduceEmg.vue?a396","webpack:///./src/components/edit/EditIntroduceEmg.vue?b085","webpack:///./src/components/edit/EditNewProject.vue?cd3e","webpack:///src/components/edit/EditNewProject.vue","webpack:///./src/components/edit/EditNewProject.vue?05ae","webpack:///./src/components/edit/EditNewProject.vue?59a3","webpack:///./src/components/edit/SeeMail.vue?a5a8","webpack:///src/components/edit/SeeMail.vue","webpack:///./src/components/edit/SeeMail.vue?f213","webpack:///./src/components/edit/SeeMail.vue","webpack:///./src/components/edit/EditProduct.vue?ea11","webpack:///src/components/edit/EditProduct.vue","webpack:///./src/components/edit/EditProduct.vue?5fa2","webpack:///./src/components/edit/EditProduct.vue?944c","webpack:///./src/components/edit/EditMember.vue?c64b","webpack:///src/components/edit/EditMember.vue","webpack:///./src/components/edit/EditMember.vue?bebc","webpack:///./src/components/edit/EditMember.vue?f6ae","webpack:///./src/components/edit/EditPartner.vue?118e","webpack:///src/components/edit/EditPartner.vue","webpack:///./src/components/edit/EditPartner.vue?e4fa","webpack:///./src/components/edit/EditPartner.vue?8ee9","webpack:///src/components/Account.vue","webpack:///./src/components/Account.vue?5de9","webpack:///./src/components/Account.vue","webpack:///./node_modules/tinymce/plugins/legacyoutput/index.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/tinymce/plugins/tabfocus/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/preview/plugin.js","webpack:///./node_modules/tinymce/plugins/emoticons/index.js","webpack:///./node_modules/tinymce/plugins/fullpage/plugin.js","webpack:///./node_modules/tinymce/plugins/legacyoutput/plugin.js","webpack:///./node_modules/tinymce/plugins/autoresize/index.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/print/index.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/tinymce/plugins/imagetools/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./src/components/edit/EditIntroduceEmg.vue?776b","webpack:///./node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./src/components/edit/EditNewProject.vue?10cb","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/tinymce/plugins/bbcode/plugin.js","webpack:///./node_modules/tinymce/plugins/imagetools/plugin.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/tinymce/plugins/bbcode/index.js","webpack:///./node_modules/tinymce/plugins/codesample/plugin.js","webpack:///./node_modules/tinymce/plugins/autoresize/plugin.js","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/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/plugins/visualchars/plugin.js","webpack:///./node_modules/tinymce/plugins/noneditable/index.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./node_modules/tinymce/plugins/print/plugin.js","webpack:///./node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/tinymce/plugins/spellchecker/index.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/tinymce/plugins/directionality/plugin.js","webpack:///./node_modules/tinymce/plugins/fullpage/index.js","webpack:///./node_modules/tinymce/tinymce.js","webpack:///./node_modules/tinymce/plugins/spellchecker/plugin.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/tinymce/plugins/pagebreak/index.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/index.js","webpack:///./node_modules/tinymce/plugins/code/plugin.js","webpack:///./node_modules/tinymce/plugins/toc/index.js","webpack:///./node_modules/tinymce/plugins/fullscreen/plugin.js","webpack:///./node_modules/tinymce/plugins/contextmenu/index.js","webpack:///./node_modules/tinymce/plugins/tabfocus/plugin.js","webpack:///./node_modules/tinymce/plugins/importcss/index.js","webpack:///./node_modules/tinymce/plugins/toc/plugin.js","webpack:///./node_modules/tinymce/plugins/autosave/index.js"],"names":["global","tinymce","util","Tools","resolve","global$1","getSeparatorHtml","editor","getParam","shouldSplitBlock","Settings","getPageBreakClass","getPlaceholderHtml","transparentSrc","setup","separatorHtml","pageBreakSeparatorRegExp","RegExp","replace","a","on","e","content","serializer","addNodeFilter","nodes","node","className","i","length","attr","indexOf","parentNode","parent","schema","getBlockElements","name","type","value","raw","remove","FilterContent","register","addCommand","settings","pagebreak_split_block","insertContent","Commands","setup$1","target","nodeName","dom","hasClass","ResolveName","register$1","addButton","title","cmd","addMenuItem","text","icon","context","Buttons","Plugin","add","getCurrentColor","format","color","getParents","selection","getStart","elm","style","mapColors","colorMap","colors","push","applyFormat","undoManager","transact","focus","formatter","apply","nodeChanged","removeFormat","TextColor","global$2","defaultColorMap","getTextColorMap","getForeColorMap","getBackColorMap","getTextColorRows","getTextColorCols","getForeColorRows","getBackColorRows","getForeColorCols","getBackColorCols","getColorPickerCallback","hasColorPicker","global$3","getHtml","cols","rows","html","last","x","y","count","id","DOM","uniqueId","getColorCellHtml","isNoColor","translate","ColorPickerHtml","setDivColor","div","background","setAttribute","onButtonClick","ctrl","control","_color","execCommand","onPanelClick","buttonCtrl","this","currentColor","selectColor","hidePanel","resetColor","getParent","colorPickerCallback","call","customColorCells","tableElm","panel","getEl","getElementsByTagName","map","childNodes","firstChild","getAttribute","lastId","get","renderColorPicker","foreColor","tooltip","role","ariaRemember","onclick","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","getFullYear","getYear","getMonth","getDate","getHours","getMinutes","getSeconds","getDay","DateTimeHelper","createTemplateList","callback","templateList","send","url","success","JSON","parse","replaceTemplateValues","templateValues","each","v","k","replaceVals","vl","select","n","c","test","insertTemplate","ui","el","sel","getContent","create","appendChild","cloneNode","innerHTML","addVisual","Templates","o","dateFormat","insertIframeHtml","win","contentCssLinks_1","contentCSS","documentBaseURI","toAbsolute","bodyClass","body_class","doc","find","contentWindow","document","open","write","close","templateHtml","values","template","selected","description","onSelectTemplate","windowManager","layout","direction","align","padding","spacing","items","flex","label","onselect","border","onsubmit","minWidth","minHeight","fire","message","notificationManager","Dialog","showDialog","isValidId","getId","selectedNode","getNode","isAnchor","tagName","getAttrib","insert","removeAttribute","collapse","createHTML","Anchor","insertAnchor","newId","alert","currentId","body","size","data","preventDefault","isAnchorNode","setContentEditable","state","parser","stateSelector","fireInsertCustomChar","chr","Events","insertChar","evtChr","Actions","getCharMap","charmap","getCharMapAppend","charmap_append","isArray","getDefaultCharMap","charmapFilter","grep","item","getCharsFromSetting","settingValue","extendCharMap","userCharMap","userCharMapAppend","getCharMap$1","CharMap","Api","gridHtml","width","height","ceil","index","charCode","parseInt","chrText","String","fromCharCode","GridHtml","getParentTd","charMapPanel","charDiv","hasAttribute","charCodeString","isNaN","ctrlKey","onmouseover","td","buttons","t","module","exports","r","l","m","d","Object","defineProperty","configurable","enumerable","__esModule","default","prototype","hasOwnProperty","p","s","CLASS_NAMES","MODAL","OVERLAY","SHOW_MODAL","MODAL_TITLE","MODAL_TEXT","ICON","ICON_CUSTOM","CONTENT","FOOTER","BUTTON_CONTAINER","BUTTON","CONFIRM_BUTTON","CANCEL_BUTTON","DANGER_BUTTON","BUTTON_LOADING","BUTTON_LOADER","querySelector","stringToNode","createElement","trim","insertAfter","nextSibling","insertBefore","removeNode","parentElement","removeChild","throwErr","isPlainObject","toString","getPrototypeOf","ordinalSuffixOf","overlayMarkup","iconMarkup","titleMarkup","textMarkup","footerMarkup","CONFIRM_KEY","CANCEL_KEY","visible","closeModal","assign","defaultButtonList","cancel","confirm","charAt","toUpperCase","slice","keys","u","getButtonListOpts","Array","f","injectElIntoModal","textContent","classList","initModalContent","initTitle","initText","dangerMode","modalMarkup","isOpen","promise","actions","timer","resetState","setActionValue","setActionOptionsFor","openModal","onAction","getState","stopLoading","querySelectorAll","Function","eval","window","sweetAlert","swal","insertAt","locals","btoa","sources","sourceRoot","join","unescape","encodeURIComponent","stringify","refs","parts","base","css","media","sourceMap","insertInto","Error","w","splice","attrs","rel","forEach","transform","singleton","g","bind","URL","createObjectURL","revokeObjectURL","Blob","href","styleSheet","cssText","createTextNode","convertToAbsoluteUrls","b","atob","DEBUG","filter","Boolean","location","protocol","host","pathname","Promise","includes","TypeError","max","abs","writable","Element","CharacterData","DocumentType","_state","_handled","_value","_deferreds","_immediateFn","onFulfilled","onRejected","then","_unhandledRejectionFn","setTimeout","catch","constructor","reject","race","console","warn","_setImmediateFn","_setUnhandledRejectionFn","setImmediate","_id","_clearFn","clearTimeout","setInterval","clearInterval","unref","ref","enroll","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","clearImmediate","args","process","nextTick","postMessage","importScripts","onmessage","random","source","addEventListener","attachEvent","MessageChannel","port1","port2","documentElement","onreadystatechange","self","run","fun","array","browser","env","argv","version","versions","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","polyfill","getOwnPropertyDescriptor","getOpts","setDefaults","init","errorIconMarkup","warningIconMarkup","successIconMarkup","contentMarkup","buttonMarkup","error","warning","src","navigator","userAgent","display","offsetHeight","createDocumentFragment","children","key","element","attributes","shiftKey","tabIndex","_","removeEventListener","O","closeOnEsc","closeOnClickOutside","button","getContentOpts","DEPRECATED_OPTS","logDeprecation","placeholder","onlyRename","replacement","subOption","link","imageUrl","customClass","imageSize","showCancelButton","showConfirmButton","confirmButtonText","confirmButtonColor","cancelButtonText","closeOnConfirm","closeOnCancel","showLoaderOnConfirm","animation","inputType","inputValue","inputPlaceholder","allowEscapeKey","allowClickOutside","domGlobals","global$4","global$5","global$6","isTextNode","nodeType","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","lastChild","isTextBlock","getTextBlockElements","isBlock","blockElements","isBogusBr","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","collapsed","resolveBookmark","restoreEndPoint","nodeIndex","idx","createRng","Bookmark","noop","constant","not","never","always","none","NONE","eq","isNone","thunk","me","fold","is","isSome","getOr","getOrThunk","getOrDie","msg","getOrNull","getOrUndefined","undefined","or","orThunk","exists","forall","equals","equals_","toArray","freeze","some","constant_a","elementEq","from","Option","typeOf","isPrototypeOf","isType","isString","isBoolean","isFunction","isNumber","nativeSlice","nativePush","xs","pred","groupBy","wasType","group","foldl","acc","flatten","output","reverse","head","Global","path","scope","unsafe","actual","Global$1","htmlElement","HTMLElement","global$7","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","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","fromDom","fromTag","tag","fromText","fromPoint","docElm","elementFromPoint","lift2","oa","ob","fromElements","elements","fragment","Immutable","fields","struct","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","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","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","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","child","cs","before","marker","parent$1","append","before$1","append$1","isType$1","isElement","rawSet","setAll","clone","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","shallow","old","baseMerge","merger","objects","ret","j","curObject","merge","cloneListProperties","previousSiblingEntry","normalizeEntries","matchingEntry","Cell","initial","parseItem","itemSelection","selectionState","currentItemEntry","end","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","global$8","createTextBlock","contentNode","textBlock","blockName","hasContentNode","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","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","Keyboard","findIndex","predicate","listState","tableCellIndex","parents","hasPlugin","plugin","plugins","inArray","onPostRender","getAutoLinkPattern","getDefaultLinkTarget","rangeEqualsDelimiterOrSpace","rangeString","delimiter","charCodeAt","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","setStartBefore","prev","rngText","autoLinkPattern","defaultLinkTarget","nodeValue","setAttrib","autoUrlDetectState","ex","Keys","isContentEditableFalse","contentEditable","findAndReplaceDOMText","regex","replacementNode","captureGroup","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","innerNode","innerEl","replaceChild","elB","ownerDocument","getWhiteSpaceElements","getShortEndedElements","exec","FindReplaceText","getElmIndex","markAllMatches","currentIndexState","done","unwrap","findSpansByIndex","spans","moveSelection","forward","testIndex","removeClass","addClass","scrollIntoView","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","hex","toHex","onchange","defaults","spellcheck","colorPickerCtrl","autofocus","toJSON","color_picker_callback","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","has","getVideoScriptMatch","prefixes","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","updateEphoxEmbed","styleMap","serializeStyle","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","imgAttrs","UpdateHtml","urlPatterns","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","res","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","submitForm","populateMeta","meta","generalFormItems","filetype","onpaste","onbeforecall","advancedFormItems","reserialise","update","embedTextBox","multiline","updateValueOnChange","forId","bodyType","get$1","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","class","frameborder","sourceNode","attrValue","attribs","ai","innerHtml","escape","isWithinEphoxEmbed","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","realElmName","$elm","setup$2","objectType","prependToContext","shouldMergeClasses","shouldImportExclusive","getSelectorConverter","getSelectorFilter","getCssGroups","shouldAppend","getFileFilter","removeCacheSuffix","cacheSuffix","isSkinContentCss","skin","skinUrl","skin_url","baseURL","inline","compileFilter","getSelectors","fileFilter","selectors","contentCSSUrls","imported","rules","imports","cssRules","cssRule","selectorText","styleSheets","defaultConvertSelectorToFormat","elementName","classes","inlineSelectorElements","makeMap","getGroupsBySelector","groups","compileUserDefinedGroups","menu","isExclusiveMode","isUniqueSelector","globallyUniqueSelectors","markUniqueSelector","convertSelectorToFormat","selectorConverter","selector_converter","selectorFilter","processSelector","importcss","formatName","itemDefaults","getDoc","selectorGroups","menuItem","renderNew","ImportCss","__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","formatArray","validFormats","applyInlinePattern","foundPattern","applyInlinePatternSpace","wrappedTextNode","lastChar","lastCharNode","applyInlinePatternEnter","applyBlockPattern","firstTextNode","textBlockElm","selectionInsertText","string","insertData","newNode","insertNode","applyReplacement","extractChar","char","applyReplacementPattern","ch","applyReplacementPatternSpace","applyReplacementPatternEnter","patternSet","handleInlineKey","checkKeyEvent","codes","event","checkKeyCode","code","modifierPressed","checkCharCode","chars","KeyHandler","charCodes","keyCodes","setEditorTimeout","nativeIndexOf","rawIndexOf","ts","mac","access","action","KeyboardShortcuts","makeTab","makeAriaLabel","shortcutLisString","KeyboardShortcutsTab","supplant","isStringOrNumber","fullMatch","urls","PluginUrls","makeLink","maybeUrlize","getMetadata","getPluginKeys","keys$1","forced_plugins","pluginLister","pluginKeys","pluginLis","pluginsString","installedPlugins","availablePlugins","makeTab$1","PluginsTab","getVersion","makeRow","majorVersion","minorVersion","changeLogLink","ButtonsRow","pluginUrl","getNonEditableClass","getEditableClass","getNonEditableRegExps","nonEditableRegExps","checkClassName","replaceMatchWithSpan","cls","prevChar","findStartTagIndex","tagHtml","convertRegExpsToNonEditable","editClass","nonEditClass","contentEditableAttrName","hasEditClass","hasNonEditClass","fireVisualBlocks","isEnabledByDefault","getContentCss","visualblocks_content_css","cssId","load","linkElements","matchingLinkElms","linkElm","LoadCss","toggleVisualBlocks","enabledState","contentCss","toggleClass","VisualBlocks","Bindings","toggleActiveState","selectable","render","_vm","_h","$createElement","_c","_self","staticClass","checkNav","_v","$event","_m","controlPage","_e","staticRenderFns","statusIntro","btIntro","statusStudy","btStudy","statusService","btService","statusBanner","btBanner","updateDataIntro","checkFormUpdateBanner","onFileChangeBanner","linkBanner","onFileChangeImage1","linkImage1","onFileChangeImage2","linkImage2","domProps","_s","des","staticStyle","model","$$v","expression","required","htmlClass","toolbar1","toolbar2","other_options","readonly","cTinyMce","checkerTimeout","isTyping","mounted","beforeDestroy","watch","methods","init_instance_callback","initEditor","concatAssciativeArrays","array1","array2","dest","submitNewContent","component","components","typeUpdate","introduce","intro","perpose","service","fetchDataIntro","check","introduceemg","files","snapshot","created","_l","newProject","clickBtn","nameProject","statusCreate","btCreate","statusEdit","btEdit","typeBtn","directives","rawName","inforProject","composing","$set","btUpdateData","newProjectList","fetchData","linkImage","delete","product","nameProduct","inforProduct","onFileChange","productList","products","desProduct","randomIntFromInterval","floor","number","put","btPrimaryClass","fetchDataMember","btSecondaryClass","fetchDataOldMember","member","fullName","inforMember","typeMemberOrOldMember","members","oldmembers","email","level","position","specialize","nameImage","partner","namePartner","inforPartner","partnerList","note","homePage","EditProduct","EditMember","EditIntroduceEmg","SeeMail","EditNewProject","EditPartner","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","contextmenu","menuItems","uiContainer","renderTo","show","moveTo","ContextMenu","isNativeOverrideKeyEvent","Bind","getPreviewDialogWidth","getPreviewDialogHeight","getContentStyle","getPreviewHtml","previewHtml","headHtml","contentStyle","getURI","bodyId","body_id","preventClicksOnLinksScript","dirAttr","directionality","injectIframeContent","iframe","sandbox","IframeContent","dialogHtml","dialogWidth","dialogHeight","iframeElm","shouldHideInSourceView","getDefaultXmlPi","getDefaultEncoding","getDefaultFontFamily","getDefaultFontSize","getDefaultTextColor","getDefaultTitle","getDefaultDocType","parseHeader","root_name","headerFragment","getAttr","fontface","fontsize","xml_pi","docencoding","getAll","doctype","httpEquiv","langcode","stylesheets","langdir","visited_color","link_color","active_color","headElement","setAttr","addHeadNode","currentStyleSheetsMap","stylesheet","dir","vLink","aLink","indent","apply_source_formatting","indent_before","indent_after","Parser","headState","protectHtml","protect","unprotectHtml","Protect","low","handleSetContent","footState","evt","startPos","endPos","source_view","getDefaultHeader","headElm","header","piEncoding","handleGetContent","foot","overrideFormats","alignElements","fontSizes","explode","font_size_style_values","alignleft","aligncenter","alignright","alignjustify","bold","fontWeight","italic","fontStyle","underline","textDecoration","exact","strikethrough","fontname","face","vars","forecolor","hilitecolor","backgroundColor","addValidElements","getElementRule","rule","attributesOrder","inline_styles","Formats","defaultFontsizeFormats","fontsizeFormats","fixedWidth","fontElm","createFormats","formats","defaultFontsFormats","fonts","font_formats","font","textStyle","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","save","formObj","isDirty","execCallback","setDirty","startContent","setContent","clear","stateToggle","addShortcut","isBrandingEnabled","hasMenubar","getMenubar","hasStatusbar","getToolbarSize","isReadOnly","getFixedToolbarContainer","getInlineToolbarPositionHandler","getMenu","getRemovedMenuItems","getMinWidth","getMinHeight","isSkinDisabled","isInline","getResize","resize","getSkinUrl","skinName","getIndexedToolbars","defaultToolbar","toolbars","toolbar","mainToolbar","getToolbars","fireSkinLoaded","fireResizeEditor","fireBeforeRenderUI","addKeys","A11y","getUiContainerDelta","setUiContainer","inheritUiContainer","fromCtrl","toCtrl","UiContainer","createToolbar","buttonGroup","toolbarItems","itemName","bindSelectorChanged","selectorChanged","disabledStateSelector","initialized","createToolbars","addToolbar","ariaRoot","Toolbar","toClientRect","geomRect","left","top","right","bottom","hideAllFloatingPanels","contextToolbars","hide","movePanelTo","togglePositionClass","relPos","toggle","userConstrain","elementRect","contentAreaRect","panelRect","addContextualToolbars","scrollContainer","getContextToolbars","getElementRect","targetRect","getRect","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","defaultMenus","file","edit","view","tools","table","help","delimiterMenuNamePair","createMenuNameItemPair","hasItemName","namedMenuItems","namedMenuItem","isSeparator","cleanupMenu","removedMenuItems","menuItemsPass1","menuItemsPass2","createMenu","editorMenuItems","menus","menuButton","isUserDefined","unshift","getDefaultMenubar","defaultMenuBar","createMenuButtons","menuButtons","menubar","enabledMenuNames","Menubar","clientWidth","clientHeight","resizeTo","containerElm","containerSize","iframeSize","getContainer","resizeBy","dw","dh","Resize","api","trigger","sidebar","callbackName","hidePanels","sidebars","deactivateButtons","findSidebar","showPanel","btnCtrl","prepend","isModernBrowser","hasSidebar","createSidebar","image","Sidebar","fireSkinLoaded$1","_skinLoaded","SkinLoaded","switchMode","mode","editArea","editAreaContainer","theme","resizeHandleCtrl","startSize","skinUiCss","styleSheetLoader","onResizeStart","onResize","deltaX","deltaY","linkHtml","brandingLabel","renderBefore","setMode","iframeContainer","editorContainer","Iframe","global$9","funcs","getWindowSize","rect","getElementById","getRuntimeStyle","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","val","parseFloat","noop$1","ClassList","_map","uniqueItems","__checked","_change","curState","clsValue","Collection","Collection$1","proto","chunker","whiteSpace","Selector","compileNameFilter","compileIdFilter","_name","compileClassesFilter","compileAttrFilter","cmp","compilePsuedoFilter","notSelectors","parseChunks","compile","filters","direct","pseudo","extra","_selectors","si","sl","fi","fl","collect","prop","Collection$2","Binding","otherModel","otherName","bindings","fromSelfToOther","fromOtherToSelf","_bindings","global$c","isNode","isEqual","animationFrameRequested","Control","ObservableObject","Mixins","oldValue","destroy","dirtyCtrls","ReflowQueue","_layout","isNative","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","getEventDispatcher","bubble","isPropagationStopped","hasEventListeners","parentControls","$el","suffix","blur","aria","ariaTarget","newItems","controls","_eventsRoot","renderHtml","postRender","preRender","box","parentEventsRoot","_nativeEvents","bindPendingEvents","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","parentRole","submenu","enter","up","down","tab","handleNonTabOrEscEvent","isDefaultPrevented","selectorCache","Container","_super","_items","bodyClasses","containerCls","keyboard","focusCtrl","keyboardNav","oldItem","newItem","ctrlItems","defaultType","curItems","beforeItems","afterItems","recalc","lastRect","getDocumentSize","updateWithTouchData","changedTouches","DragHelper","$eventOverlay","downButton","stop","drag","startX","startY","handleElement","handle","handleElm","cursor","docSize","screenX","screenY","runtimeStyle","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","time","throbber","ProgressState","renderUI","Render","Tooltip","Widget","tooltips","_tooltip","disable","Progress","setValue","updateLiveRegion","ctx","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","Window","closeClass","needsRecalc","headerW","headEl","headerH","headerHtml","footerHtml","fullscreen","slowRendering","_timer","getTime","_initial","dragHelper","getContentWindow","ifr","MessageBox","OK","OK_CANCEL","YES_NO","YES_NO_CANCEL","msgBox","createButton","status","primary","onClick","onCancel","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","stopPropagation","click","ButtonGroup","Checkbox","global$d","ComboBox","subinput","showMenu","newValue","statusLevel","statusMessage","lineHeight","openElm","innerPadding","inputElm","documentMode","openBtnHtml","extraAttrs","statusHtml","showAutoComplete","term","previewUrl","hideMenu","statusIconElm","focusIdx","DOWN","UP","ColorBox","onaction","repaintColor","PanelButton","panelSettings","rtlRels","ltrRels","popoverAlign","isTop","DOM$3","ColorButton","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","dataTransfer","Path","row","_getDataPathHtml","ElementPath","isHidden","elementpath","outParents","FormItem","Form","formItemDefaults","formItem","recalcLabels","maxLabelWidth","labels","labelGapCalc","labelCtrl","labelWidth","FieldSet","unique$1","generate","DOCUMENT","windows$1","DOCUMENT$1","bypassSelector","childElementCount","one","descendants","hasContentEditableState","isContentEditableTrue","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","result","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","alignnone","Align","getFirstFont","fontFamily","findMatchingValue","createFontNameListBoxChangeHandler","queryCommandValue","getFontItems","registerButtons","FontSelect","precision","factor","pow","toPt","fontSize","findMatchingValue$1","pt","px","createFontSizeListBoxChangeHandler","getFontSizeItems","fontsize_formats","registerButtons$1","register$2","FontSizeSelect","hideMenuObjects","canApply","hideFormatMenuItems","createFormatMenu","newFormats","defaultStyleFormats","createStylesMenu","style_formats_merge","style_formats","preview","getCssText","queryCommandState","registerMenuItems","formatMenu","registerButtons$2","style_formats_autohide","register$3","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","subscript","superscript","registerCommandButtons","outdent","cut","paste","selectall","visualaid","newdocument","removeformat","registerCommandToggleButtons","blockquote","registerButtons$4","registerMenuItems$1","register$6","SimpleControls","toggleUndoRedoState","checkState","typeFn","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","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","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","rootNode","preProcess","WordFilter","preProcess$1","isRootContent","processResult","cancelled","postProcessFilter","tempBody","postProcessArgs","filterContent","preProcessArgs","filteredContent","ProcessFilters","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","SmartPaste","filter$1","from$1","exports$1","define","require","amd","EphoxContactWrapper","1","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","Item","2","setTimeoutFunc","thisArg","doResolve","deferred","cb","finale","Handler","reason","prom","arr","remaining","err","3","immediateIds","nextImmediateId","Timeout","clearFn","msecs","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","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","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","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","compose","fa","fb","identity","die","eachr","foldr","map$1","tupleMap","tuple","reqMessage","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","dupe","MixedBag","optional","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","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","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","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","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","get$6","add$1","clazz","remove$4","add$2","cleanClass","remove$5","has$1","repeat","repititions","deduce","rest","aa","extras","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","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","bind$1","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","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","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","addButtons","addToolbars","selectorMatched","addContextToolbar","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","html2bbcode","rep","bbcode2html","Convert","canvas","tCanvas","get2dContext","drawImage","getContext","naturalWidth","naturalHeight","asap","immediateFn","values_1","imageToBlob","dataUriToBlob","anyUriToBlob","blobToImage","blobUrl","removeListeners","loaded","complete","xhr","XMLHttpRequest","responseType","onerror","_this","corsError","genericError","dataUriToBlobSync","mimetype","sliceSize","byteCharacters","bytesLength","slicesCount","byteArrays","sliceIndex","begin","bytes","Uint8Array","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","onloadend","blobToImage$1","imageToBlob$1","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","parsedValue","DELTA_INDEX","multiply","matrix1","matrix2","adjust","matrix","adjustValue","adjustContrast","adjustSaturation","lumR","lumG","lumB","adjustHue","angle","PI","cosVal","cos","sinVal","sin","adjustBrightness","adjustColors","adjustR","adjustG","adjustB","adjustSepia","adjustGrayscale","colorFilter","ir","applyColorFilter","applyMatrix","pixelsData","m0","m1","m2","m3","m4","m5","m6","m7","m8","m9","m10","m11","m12","m13","m14","m15","m16","m17","m18","m19","pixels","getImageData","putImageData","convoluteFilter","applyConvoluteFilter","pIn","pOut","aMatrix","side","halfSide","rgba","drgba","cy","cx","scx","scy","innerOffset","wt","pixelsIn","pixelsOut","functionColorFilter","colorFn","filterImpl","applyLookup","lookupData","complexAdjustableColorFilter","matrixAdjustFn","basicColorFilter","basicConvolutionFilter","kernel","invert","brightness","saturate","contrast","grayscale","sepia","colorize","sharpen","emboss","gamma","exposure","exp","scale","dW","dH","sW","sH","wRatio","hRatio","scaleCapped","scaled","_scale","rotate","applyRotate","translateX","translateY","flip","axis","applyFlip","crop","applyCrop","resize$1","newCanvas","invert$1","sharpen$1","emboss$1","gamma$1","exposure$1","colorize$1","brightness$1","hue$1","saturate$1","contrast$1","grayscale$1","sepia$1","flip$1","crop$1","resize$2","rotate$1","blobToImageResult","getToolbarItems","getProxyUrl","getCorsHosts","getCredentialsHosts","getApiKey","getUploadTimeout","shouldReuseFilename","UndoStack","undo","canUndo","redo","canRedo","loadImage","LoadImage","CropRect","currentRect","clampRect","instance","handles","dragHelpers","blockers","getAbsoluteRect","outerRect","relativeRect","getRelativeRect","innerRect","getInnerRect","moveRect","startRect","setInnerRect","createDragHelper","activeHandle","moveAndBlock","LEFT","RIGHT","ENTER","SPACEBAR","toggleVisibility","updateElementRect","xMul","yMul","setRect","setViewPortRect","setClampRect","helper","ImagePanel","viewRect","toggleCropRect","imageSrc","$img","replaceWith","bg","zoomFit","repaintImage","zoom","pw","ph","$bg","cropRect","setupCropRect","createState","destroyState","destroyStates","states","currentState","mainPanel","filtersPanel","tempState","cropPanel","resizePanel","flipRotatePanel","imagePanel","sidePanel","mainViewContainer","invertPanel","brightnessPanel","huePanel","saturatePanel","contrastPanel","grayscalePanel","sepiaPanel","colorizePanel","sharpenPanel","embossPanel","gammaPanel","exposurePanel","panels","ratioW","ratioH","undoStack","reverseIfRtl","floatToPercent","updateButtonUndoStates","disableUndoRedo","displayState","switchPanel","targetPanel","addTempState","addBlobState","imageResultToBlob","tempAction","arg","waitForTempState","times","applyCall","applyTempState","zoomIn","zoomOut","createPanel","createFilterPanel","newTempState","createVariableFilterPanel","ondragend","createRgbFilterPanel","toggleConstrain","onkeyup","imageResult","getImageSize","isPxValue","setImageSize","getNaturalImageSize","ImageSize","json","reduce","requestUrlAsBlob","headers","withCredentials","readyState","setRequestHeader","readBlob","fr","readAsText","parseJson","friendlyHttpErrors","friendlyServiceErrors","isServiceErrorCode","getHttpErrorMsg","handleHttpError","getServiceErrorMsg","getServiceError","serviceError","errorType","errorMsg","handleServiceError","handleServiceErrorResponse","Errors","appendApiKey","apiKey","requestServiceBlob","requestBlob","Proxy","count$1","isEditableImage","isLocalImage","isCorsImage","imagetools_proxy","displayError","getSelectedImage","createId","isCorsWithCredentialsImage","imageToBlob$2","findSelectedBlob","getByUri","startTimedUpload","imageUploadTimerState","imageUploadTimer","uploadImagesAuto","cancelTimedUpload","updateSelectedImage","uploadImmediately","selectedImage","imageLoadedHandler","removeAttr","selectedImageOperation","_scanForImages","rotate$2","flippedSize","flip$2","editImageDialog","originalSize","handleDialogBlob","newImage","openDialog","mceImageRotateLeft","mceImageRotateRight","mceImageFlipVertical","mceImageFlipHorizontal","mceEditImage","lastSelectedImageState","lastSelectedImage","UploadSelectedImage","ContextToolbar","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","lastFormatState","lastFormat","codesample_content_css","getLanguages","codesample_languages","getDialogMinWidth","getDialogMinHeight","WorkerGlobalScope","Prism","lang","tokens","Token","alias","languages","redef","grammar","newToken","token","DFS","highlightAll","async","highlightElement","language","hooks","Worker","worker","filename","highlightedCode","immediateClose","highlight","tokenize","strarr","tokenloop","lookbehind","lookbehindLength","lastIndex","to","aliases","isCodeSample","trimArg","predicateFn","arg1","arg2","markup","prolog","punctuation","entity","xml","mathml","svg","atrule","important","function","clike","javascript","keyword","interpolation","script","js","operator","macro","boolean","csharp","preprocessor","cpp","java","php","variable","package","tokenStack","backupCode","python","ruby","symbol","builtin","getSelectedCodeSample","insertCodeSample","getCurrentCode","CodeSample","getLanguages$1","defaultLanguages","customLanguages","getCurrentLanguage","Languages","currentLanguage","currentLanguages","currentCode","unprocessedCodeSamples","loadCss","addedInlineCss","addedCss","ev","getAutoResizeMinHeight","getAutoResizeMaxHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","shouldAutoResizeOnInit","isFullscreen","wait","toggleScrolling","overflowY","deltaSize","resizeHeight","myHeight","marginTop","marginBottom","iframeElement","overflowPadding","bottomMargin","paddingLeft","paddingRight","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","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","insertLink","removeLink","resultData","getLink","getSelectedLink","getHref","hasOnlyAltModifier","altKey","metaKey","gotoLink","targetEl","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleViewLinkState","setupButtons","onpostrender","setupMenuItems","setupContextToolbars","Controls","stringRepeat","repeats","isVisualCharsEnabled","visualchars","isEnabled","insertNbsp","nbsp","getKeyboardSpaces","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","visibility","removePixelSuffix","addPixelSuffix","mergeMargins","splitMargin","createImageList","imageList","waitLoadImage","selectImage","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","splitTextBlock","readImageDataFromSelection","insertImageAtCaret","insertedElm","syncSrcAttr","deleteImage","writeImageDataToSelection","insertOrUpdateImage","updateVSpaceHSpaceBorder","updateStyle","AdvTab","onSrcChange","srcURL","prependURL","absoluteURLPattern","imageListCtrl","getGeneralItems","MainTab","pathJoin","path1","path2","Uploader","defaultHandler","progress","formData","credentials","upload","onprogress","responseText","basePath","FormData","uploadBlob","isDefaultHandler","onFileInput","uploader","finalize","dataUrl","acceptExts","makeTab$2","UploadTab","altCtrl","hasImageClass","toggleContentEditableState","toggleContentEditable","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","print","DESCRIPTORS","uncurryThis","hasOwn","isCallable","copyConstructorProperties","NativeSymbol","Symbol","SymbolPrototype","EmptyStringDescriptionStore","SymbolWrapper","NATIVE_SYMBOL","symbolToString","symbolValueOf","valueOf","regexp","stringSlice","desc","forced","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","experimentalShadowDom","canHaveCSP","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","removeEvent","detachEvent","getTargetFromShadowDom","defaultTarget","composedPath","fix","originalEvent","srcElement","eventDoc","cancelBubble","isImmediatePropagationStopped","bindOnReady","eventUtils","domLoaded","isDocReady","readyHandler","waitForDomLoaded","tryScroll","doScroll","EventUtils","expando","hasFocusIn","hasMouseEnterLeave","mouseEnterLeave","mouseenter","mouseleave","executeHandlers","callbackList","fakeName","nativeHandler","defaultNativeHandler","related","currentTarget","relatedTarget","eventMap","parentWindow","support","Expr","isXML","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","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","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","what","simple","ofType","outerCache","useCache","setFilters","matched","matcher","unmatched","elemLang","hasFocus","enabled","selectedIndex","even","odd","lt","gt","nth","radio","checkbox","password","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","compiled","isArray$1","indexOf$2","collection","iteratee","accumulator","findIndex$1","ArrUtils","whiteSpaceRegExp","delim","sp","cn","scn","de","createNS","onCreate","static","ext","resolve$1","_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","camel","dashed","prependTo","wrapAll","wrapInner","existingClassName","classState","object","until","siblingName","firstSibling","parentsUntil","nextUntil","prevUntil","overrideDefaults","appendHooks","targetHooks","maxlength","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","ownerNode","owningElement","waitForGeckoLinkLoaded","sheet","defer","contentCssCors","crossOrigin","loadF","unbox","loadAll","TreeWalker","findSibling","startName","findPreviousNode","prev2","namedEntities","baseEntities","reverseEntities","voids","tableCells","tableSections","headings","listItems","wsElements","lazyLookup","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isRestrictedNode","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","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","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","ei","al","attrData","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","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","serializeStyles","styleList","each$5","grep$1","simpleSelectorRe","whiteSpaceRegExp$2","setupAttrHooks","keepValues","keep_values","keepUrlHook","updateInternalStyleAttr","rawValue","findNodeIndex","lastNodeType","DOMUtils","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","scriptLoadedCallbacks","queueLoadedCallbacks","loading","loadScript","isDone","markDone","loadQueue","loadScripts","scripts","failures","execCallbacks","loadingScripts","notifyCallbacks","each$7","AddOnManager","_listeners","dependencies","requireLangPack","languageLoad","addOn","listener","createUrl","baseUrl","dep","resource","addComponents","pluginName","loadDependencies","addOnUrl","deps","urlString","waitFor","PluginManager","ThemeManager","wrap$1","has$2","annotation","dataAnnotation","dataAnnotationId","annotationName","an","newStart","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","getParentBlock","isInSameBlock","caretPosition1","caretPosition2","getChildNodeAtRelativeOffset","relativeOffset","beforeAfter","isNodesInSameBlock","node1","node2","lean","leanLeft","leanRight","getRelativeCefElm","getNormalizedRangeEndPoint","normalizedRange","getElementFromPosition","getElementFromPrevPosition","getVisualCaretPosition","walkFn","isMoveInsideSameBlock","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","spos","epos","resolveIndex$1","resolve$3","ResolveBookmark","getBookmark$1","isBookmarkNode$1","Bookmarks","isInlineBlock","moveStart","isWhiteSpaceNode","getNonWhiteSpaceSibling","inc","isTextBlock$1","ed","replaceVars","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","entity_encoding","element_format","pi","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","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","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","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","Undo","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","document_base_url","add_form_submit_trigger","submit_patch","add_unload_trigger","convert_urls","relative_urls","remove_script_host","object_resizing","visual","font_size_legacy_values","hidden_input","render_ui","convert_fonts_to_spans","ie7_compat","getExternalPlugins","overrideSettings","userDefinedExternalPlugins","external_plugins","combinePlugins","forcedPlugins","processPlugins","isTouchDevice","defaultOverrideSettings","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","$1","$2","resolvePluginName","targetUrl","matchUrl","pluginUrlToMessage","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","requestAnimationFrame$1","blobUriToBlob","rejectWithError","parseDataUri","uriParts","decodeURIComponent","uriToBlob","Conversions","imageToBlobInfo","dataUri","getAllImages","ImageScanner","cachedPromises","promises","imageInfo","newPromise","rnd","now","uuid","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","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","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","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","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","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","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","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","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","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","nowrap","content_style","InitContentBody","relaxDomain","domain","hostname","bodyUuid","domainRelaxUrl","normalizeHeight","normalizedHeight","createIframeElement","customAttrs","frameBorder","allowTransparency","createIframe","isDomainRelaxed","contentAreaContainer","init$1","boxInfo","orgDisplay","InitIframe","DOM$4","initPlugin","initializedPlugins","pluginInstance","trimLegacyPrefix","initPlugins","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","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","Editor","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","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","releaseDate","preInit","tinyMCEPreInit","srcScript","currentScript","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","findTargets","forms","editor_deselector","editor_selector","provideResults","initEditors","initCount","createEditor","existingEditor","addI18n","EditorManager$1","RangeUtils","normalizedRng","compareRanges","extendClass","initializing","RangeUtils$1","round$2","constrainRect","x1","y1","clamp$1","fixedSize","underflowX1","underflowY1","overflowX2","overflowY2","cx2","cy2","fromClientRect","typeClass","lctype","controlType","ControlType","each$n","extend$6","Class","mixins","mixin","dummy","createMethod","name_1","Methods","fieldName","min$1","max$1","round$3","Color","rgb2hsv","minRGB","maxRGB","hsvToRgb","saturation","chroma","quote","JSON$1","JSONP","XHR","ready","success_scope","error_scope","overrideMimeType","content_type","crossDomain","requestheaders","extend$7","JSONRequest","sendRPC","ecb","scb","method","localStorage","storage","LocalStorage","publicApi","geom","EventDispatcher","Serializer","isMac","Tinymce","exportToModuleLoaders","exportToWindowGlobal","tinyMCE","getLanguage","defaultLanguage","getRpcUrl","getSpellcheckerCallback","getSpellcheckerWordcharPattern","defaultPattern","fireSpellcheckStart","fireSpellcheckEnd","suggestionsMenu","DomTextMatcher","createMatch","stencil","unwrapElement","getWrappersByIndex","wrappers","dataIndex","filteredMatches","matchFromElement","elementFromMatch","rangeFromMatch","getTextMatcher","textMatcherState","textMatcher","defaultSpellcheckCallback","currentLanguageState","doneCallback","postData","sendRpcCall","successCallback","userSpellcheckCallback","spellCheckCallback","spellchecker","startedState","lastSuggestionsState","markErrors","checkIfFinished","addToDictionary","word","ignoreWord","suggestions","hasDictionarySupport","words","dictionary","getWordCharPattern","languageValues","languageValue","selectedLanguage","getItems","langPair","languageMenuItems","startSpellchecking","buttonArgs","showSuggestions","suggestion","onautohide","SuggestionsMenu","regExps","aletter","midnumlet","midletter","midnum","lf","newline","katakana","extendnumlet","characterIndices","ALETTER","MIDNUMLET","MIDLETTER","MIDNUM","NUMERIC","CR","LF","NEWLINE","EXTEND","FORMAT","KATAKANA","EXTENDNUMLET","AT","OTHER","SETS","EMPTY_STRING","PUNCTUATION","WHITESPACE","UnicodeData","SETS$1","setsLength","memoize","classify","memoized","StringMapper","isWordBoundary","prevType","nextNextType","nextType","WordBoundary","EMPTY_STRING$1","WHITESPACE$1","PUNCTUATION$1","isProtocol","findWordEnd","extractUrl","peakedWord","doGetWords","includePunctuation","includeWhitespace","ignoreCase","getWords","WordGetter","treeWalker","getCount","WordCount","wordsToText","debouncedUpdate","Statusbar","Content","fullscreenState","fireFullscreenStateChanged","getScrollPos","vp","setScrollPos","toggleFullscreen","editorContainerStyle","iframeStyle","fullscreenInfo","removeResize","iframeWidth","containerWidth","containerHeight","scrollPos","removeHandler","newFullScreenInfo","getTabFocusElements","getTabFocus","tabCancel","tabHandler","canSelectRecursive","canSelect","getTocClass","getTocHeader","getTocDepth","guid","Guid","tocId","hasHeaders","readHeaders","tocClass","headerTag","getMinLevel","minLevel","generateTitle","openTag","closeTag","generateTocHtml","generateTocContentHtml","ii","nextLevel","prevLevel","isEmptyOrOffscren","insertToc","$tocElm","updateToc","Toc","isToc"],"mappings":"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AAOA,EAAOqC,SAASkQ,gBAErBpS,EAAW,CACbiS,WAAYA,EACZE,iBAAkBA,GAGhBE,EAAU1S,EAAS0S,QACnBC,EAAoB,WACtB,MAAO,CACL,CACE,MACA,kBAEF,CACE,MACA,eAEF,CACE,KACA,kBAEF,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,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Ac,CAChB,EACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,IACA,KACA,EACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,EACA,IACA,IACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,EACA,IACA,IACA,EACA,IACA,IACA,IACA,IAEF,SAASC,EAASC,EAASC,GAIzB,IAHA,IAEI1pF,EAFAkqD,EAAM,GACNjoF,EAAM,IAAI7wB,MAAM,IAEXzX,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAI66B,EAAI,EAAGA,EAAI,EAAGA,IACrB01F,EAAI11F,GAAKk1H,EAAQl1H,EAAQ,EAAJ76B,GAEvB,IAAS66B,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1BwrC,EAAM,EACN,IAAK,IAAIj7D,EAAI,EAAGA,EAAI,EAAGA,IACrBi7D,GAAOypF,EAAQj1H,EAAQ,EAAJzvB,GAASmlH,EAAInlH,GAElCk9B,EAAIzN,EAAQ,EAAJ76B,GAASqmE,GAGrB,OAAO/9B,EAET,SAAS0nH,EAAOC,EAAQC,GAEtB,OADAA,EAAcrzF,EAAMqzF,EAAa,EAAG,GAC7BD,EAAOlpJ,KAAI,SAAUrG,EAAO0R,GAMjC,OALIA,EAAQ,IAAM,EAChB1R,EAAQ,GAAK,EAAIA,GAASwvJ,EAE1BxvJ,GAASwvJ,EAEJrzF,EAAMn8D,EAAO,EAAG,MAG3B,SAASyvJ,EAAeF,EAAQvvJ,GAC9B,IAAImE,EAcJ,OAbAnE,EAAQm8D,EAAMn8D,GAAQ,EAAG,GACzBA,GAAS,IACLA,EAAQ,EACVmE,EAAI,IAAMnE,EAAQ,IAAM,KAExBmE,EAAInE,EAAQ,EAEVmE,EADQ,IAANA,EACE+qJ,EAAYlvJ,GAEZkvJ,EAAY5mJ,KAAKqiD,MAAM3qD,KAAW,EAAImE,GAAK+qJ,EAAY5mJ,KAAKqiD,MAAM3qD,GAAS,GAAKmE,EAEtFA,EAAQ,IAAJA,EAAU,KAETgrJ,EAASI,EAAQ,CACtBprJ,EAAI,IACJ,EACA,EACA,EACA,IAAO,IAAMA,GACb,EACAA,EAAI,IACJ,EACA,EACA,IAAO,IAAMA,GACb,EACA,EACAA,EAAI,IACJ,EACA,IAAO,IAAMA,GACb,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASurJ,EAAiBH,EAAQvvJ,GAChCA,EAAQm8D,EAAMn8D,GAAQ,EAAG,GACzB,IAAImE,EAAI,GAAKnE,EAAQ,EAAI,EAAIA,EAAQA,GACjC2vJ,EAAO,MACPC,EAAO,MACPC,EAAO,KACX,OAAOV,EAASI,EAAQ,CACtBI,GAAQ,EAAIxrJ,GAAKA,EACjByrJ,GAAQ,EAAIzrJ,GACZ0rJ,GAAQ,EAAI1rJ,GACZ,EACA,EACAwrJ,GAAQ,EAAIxrJ,GACZyrJ,GAAQ,EAAIzrJ,GAAKA,EACjB0rJ,GAAQ,EAAI1rJ,GACZ,EACA,EACAwrJ,GAAQ,EAAIxrJ,GACZyrJ,GAAQ,EAAIzrJ,GACZ0rJ,GAAQ,EAAI1rJ,GAAKA,EACjB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAAS2rJ,EAAUP,EAAQQ,GACzBA,EAAQ5zF,EAAM4zF,GAAQ,IAAK,KAAO,IAAMznJ,KAAK0nJ,GAC7C,IAAIC,EAAS3nJ,KAAK4nJ,IAAIH,GAClBI,EAAS7nJ,KAAK8nJ,IAAIL,GAClBJ,EAAO,KACPC,EAAO,KACPC,EAAO,KACX,OAAOV,EAASI,EAAQ,CACtBI,EAAOM,GAAU,EAAIN,GAAQQ,GAAUR,EACvCC,EAAOK,GAAUL,EAAOO,GAAUP,EAClCC,EAAOI,GAAUJ,EAAOM,GAAU,EAAIN,GACtC,EACA,EACAF,EAAOM,GAAUN,EAAgB,KAATQ,EACxBP,EAAOK,GAAU,EAAIL,GAAiB,IAATO,EAC7BN,EAAOI,GAAUJ,GAAiB,KAAVM,EACxB,EACA,EACAR,EAAOM,GAAUN,EAAOQ,IAAW,EAAIR,GACvCC,EAAOK,GAAUL,EAAOO,EAASP,EACjCC,EAAOI,GAAU,EAAIJ,GAAQM,EAASN,EACtC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASQ,EAAiBd,EAAQvvJ,GAEhC,OADAA,EAAQm8D,EAAM,IAAMn8D,GAAQ,IAAK,KAC1BmvJ,EAASI,EAAQ,CACtB,EACA,EACA,EACA,EACAvvJ,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASswJ,EAAaf,EAAQgB,EAASC,EAASC,GAI9C,OAHAF,EAAUp0F,EAAMo0F,EAAS,EAAG,GAC5BC,EAAUr0F,EAAMq0F,EAAS,EAAG,GAC5BC,EAAUt0F,EAAMs0F,EAAS,EAAG,GACrBtB,EAASI,EAAQ,CACtBgB,EACA,EACA,EACA,EACA,EACA,EACAC,EACA,EACA,EACA,EACA,EACA,EACAC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAGJ,SAASC,EAAYnB,EAAQvvJ,GAE3B,OADAA,EAAQm8D,EAAMn8D,EAAO,EAAG,GACjBmvJ,EAASI,EAAQD,EAAO,CAC7B,KACA,KACA,KACA,EACA,EACA,KACA,KACA,KACA,EACA,EACA,KACA,KACA,KACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACCtvJ,IAEL,SAAS2wJ,EAAgBpB,EAAQvvJ,GAE/B,OADAA,EAAQm8D,EAAMn8D,EAAO,EAAG,GACjBmvJ,EAASI,EAAQD,EAAO,CAC7B,IACA,IACA,IACA,EACA,EACA,IACA,IACA,IACA,EACA,EACA,IACA,IACA,IACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACCtvJ,I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,aACA,SACA,OACA,WACA,SACA,SACA,OACA,OACA,MACA,UACA,UACA,OACA,IACA,KACA,WACA,KACA,SACA,UACA,SACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,UACA,MACA,MACA,YACA,OACA,MACA,KACA,KACA,KACA,KACA,QACA,QACA,QACA,QACA,KACA,KACA,KACA,WAEEgjG,GAAQ,CACV,OACA,OACA,WACA,KACA,MACA,QACA,KACA,MACA,QACA,UACA,OACA,OACA,QACA,QACA,SACA,MACA,SAEEC,GAAa,CACf,KACA,MAEEC,GAAgB,CAClB,QACA,QACA,SAEElzJ,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEEmzJ,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEEC,GAAY,CACd,KACA,KACA,MAEEnlK,GAAQ,CACV,KACA,KACA,MAEEolK,GAAa,CACf,MACA,SACA,WACA,SAEEC,GAAa,SAAU7kL,GACzB,IAAIi9D,EACJ,OAAO,SAAUtrE,GAEf,OADAsrE,EAASA,GAAkB4wG,GAAY7tK,EAAO8Z,GAAS,IAChDmjD,EAAOj3D,eAAe3T,GAAKV,MAGlCwgI,GAAY0yD,GAAWH,IACvBrtK,GAAUwtK,GAAWtjG,IACrBn3B,GAAW,SAAUz4D,GACvB,OAAOs3B,GAAUt3B,KAAU0lB,GAAQ1lB,IAEjColB,GAAO,SAAUplB,GACnB,OAAOs3B,GAAUt3B,IAAwB,OAAfU,GAAKV,IAE7BwlB,GAAc0tK,GAAWtzJ,IACzB5R,GAASklK,GAAWrlK,IACpB0zG,GAAa2xD,GAAWF,IACxBG,GAASD,GAAWN,IACpBQ,GAAiBF,GAAWJ,IAC5BO,GAAcH,GAAWL,IACzBS,GAAsBJ,GAAWD,IAEjCM,GAAa,SAAU5yL,GACzB,OAAO,SAAUX,GACf,QAASA,GAAQA,EAAK8kB,WAAankB,IAGnC6yL,GAAmB,SAAUxzL,GAC/B,QAASA,IAAS8T,OAAOwC,eAAetW,IAEt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","file":"js/chunk-7d59c366.28b7281f.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditPartner.vue?vue&type=style&index=0&lang=css&\"","// 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 \"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 \"codesample\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/codesample')\n// ES2015:\n// import 'tinymce/plugins/codesample'\nrequire('./plugin.js');","(function () {\nvar pagebreak = (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 getSeparatorHtml = function (editor) {\n return editor.getParam('pagebreak_separator', '');\n };\n var shouldSplitBlock = function (editor) {\n return editor.getParam('pagebreak_split_block', false);\n };\n var Settings = {\n getSeparatorHtml: getSeparatorHtml,\n shouldSplitBlock: shouldSplitBlock\n };\n\n var getPageBreakClass = function () {\n return 'mce-pagebreak';\n };\n var getPlaceholderHtml = function () {\n return '';\n };\n var setup = function (editor) {\n var separatorHtml = Settings.getSeparatorHtml(editor);\n var pageBreakSeparatorRegExp = new RegExp(separatorHtml.replace(/[\\?\\.\\*\\[\\]\\(\\)\\{\\}\\+\\^\\$\\:]/g, function (a) {\n return '\\\\' + a;\n }), 'gi');\n editor.on('BeforeSetContent', function (e) {\n e.content = e.content.replace(pageBreakSeparatorRegExp, getPlaceholderHtml());\n });\n editor.on('PreInit', function () {\n editor.serializer.addNodeFilter('img', function (nodes) {\n var i = nodes.length, node, className;\n while (i--) {\n node = nodes[i];\n className = node.attr('class');\n if (className && className.indexOf('mce-pagebreak') !== -1) {\n var parentNode = node.parent;\n if (editor.schema.getBlockElements()[parentNode.name] && Settings.shouldSplitBlock(editor)) {\n parentNode.type = 3;\n parentNode.value = separatorHtml;\n parentNode.raw = true;\n node.remove();\n continue;\n }\n node.type = 3;\n node.value = separatorHtml;\n node.raw = true;\n }\n }\n });\n });\n };\n var FilterContent = {\n setup: setup,\n getPlaceholderHtml: getPlaceholderHtml,\n getPageBreakClass: getPageBreakClass\n };\n\n var register = function (editor) {\n editor.addCommand('mcePageBreak', function () {\n if (editor.settings.pagebreak_split_block) {\n editor.insertContent('

' + FilterContent.getPlaceholderHtml() + '

');\n } else {\n editor.insertContent(FilterContent.getPlaceholderHtml());\n }\n });\n };\n var Commands = { register: register };\n\n var setup$1 = function (editor) {\n editor.on('ResolveName', function (e) {\n if (e.target.nodeName === 'IMG' && editor.dom.hasClass(e.target, FilterContent.getPageBreakClass())) {\n e.name = 'pagebreak';\n }\n });\n };\n var ResolveName = { setup: setup$1 };\n\n var register$1 = function (editor) {\n editor.addButton('pagebreak', {\n title: 'Page break',\n cmd: 'mcePageBreak'\n });\n editor.addMenuItem('pagebreak', {\n text: 'Page break',\n icon: 'pagebreak',\n cmd: 'mcePageBreak',\n context: 'insert'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('pagebreak', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n FilterContent.setup(editor);\n ResolveName.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditMember.vue?vue&type=style&index=0&lang=css&\"","// 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","// Exports the \"preview\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/preview')\n// ES2015:\n// import 'tinymce/plugins/preview'\nrequire('./plugin.js');","// Exports the \"help\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/help')\n// ES2015:\n// import 'tinymce/plugins/help'\nrequire('./plugin.js');","// 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","(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","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.swal=e():t.swal=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=8)}([function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=\"swal-button\";e.CLASS_NAMES={MODAL:\"swal-modal\",OVERLAY:\"swal-overlay\",SHOW_MODAL:\"swal-overlay--show-modal\",MODAL_TITLE:\"swal-title\",MODAL_TEXT:\"swal-text\",ICON:\"swal-icon\",ICON_CUSTOM:\"swal-icon--custom\",CONTENT:\"swal-content\",FOOTER:\"swal-footer\",BUTTON_CONTAINER:\"swal-button-container\",BUTTON:o,CONFIRM_BUTTON:o+\"--confirm\",CANCEL_BUTTON:o+\"--cancel\",DANGER_BUTTON:o+\"--danger\",BUTTON_LOADING:o+\"--loading\",BUTTON_LOADER:o+\"__loader\"},e.default=e.CLASS_NAMES},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.getNode=function(t){var e=\".\"+t;return document.querySelector(e)},e.stringToNode=function(t){var e=document.createElement(\"div\");return e.innerHTML=t.trim(),e.firstChild},e.insertAfter=function(t,e){var n=e.nextSibling;e.parentNode.insertBefore(t,n)},e.removeNode=function(t){t.parentElement.removeChild(t)},e.throwErr=function(t){throw t=t.replace(/ +(?= )/g,\"\"),\"SweetAlert: \"+(t=t.trim())},e.isPlainObject=function(t){if(\"[object Object]\"!==Object.prototype.toString.call(t))return!1;var e=Object.getPrototypeOf(t);return null===e||e===Object.prototype},e.ordinalSuffixOf=function(t){var e=t%10,n=t%100;return 1===e&&11!==n?t+\"st\":2===e&&12!==n?t+\"nd\":3===e&&13!==n?t+\"rd\":t+\"th\"}},function(t,e,n){\"use strict\";function o(t){for(var n in t)e.hasOwnProperty(n)||(e[n]=t[n])}Object.defineProperty(e,\"__esModule\",{value:!0}),o(n(25));var r=n(26);e.overlayMarkup=r.default,o(n(27)),o(n(28)),o(n(29));var i=n(0),a=i.default.MODAL_TITLE,s=i.default.MODAL_TEXT,c=i.default.ICON,l=i.default.FOOTER;e.iconMarkup='\\n
',e.titleMarkup='\\n
\\n',e.textMarkup='\\n
',e.footerMarkup='\\n
\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1);e.CONFIRM_KEY=\"confirm\",e.CANCEL_KEY=\"cancel\";var r={visible:!0,text:null,value:null,className:\"\",closeModal:!0},i=Object.assign({},r,{visible:!1,text:\"Cancel\",value:null}),a=Object.assign({},r,{text:\"OK\",value:!0});e.defaultButtonList={cancel:i,confirm:a};var s=function(t){switch(t){case e.CONFIRM_KEY:return a;case e.CANCEL_KEY:return i;default:var n=t.charAt(0).toUpperCase()+t.slice(1);return Object.assign({},r,{text:n,value:t})}},c=function(t,e){var n=s(t);return!0===e?Object.assign({},n,{visible:!0}):\"string\"==typeof e?Object.assign({},n,{visible:!0,text:e}):o.isPlainObject(e)?Object.assign({visible:!0},n,e):Object.assign({},n,{visible:!1})},l=function(t){for(var e={},n=0,o=Object.keys(t);n=0&&w.splice(e,1)}function s(t){var e=document.createElement(\"style\");return t.attrs.type=\"text/css\",l(e,t.attrs),i(t,e),e}function c(t){var e=document.createElement(\"link\");return t.attrs.type=\"text/css\",t.attrs.rel=\"stylesheet\",l(e,t.attrs),i(t,e),e}function l(t,e){Object.keys(e).forEach(function(n){t.setAttribute(n,e[n])})}function u(t,e){var n,o,r,i;if(e.transform&&t.css){if(!(i=e.transform(t.css)))return function(){};t.css=i}if(e.singleton){var l=h++;n=g||(g=s(e)),o=f.bind(null,n,l,!1),r=f.bind(null,n,l,!0)}else t.sourceMap&&\"function\"==typeof URL&&\"function\"==typeof URL.createObjectURL&&\"function\"==typeof URL.revokeObjectURL&&\"function\"==typeof Blob&&\"function\"==typeof btoa?(n=c(e),o=p.bind(null,n,e),r=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),o=d.bind(null,n),r=function(){a(n)});return o(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;o(t=e)}else r()}}function f(t,e,n,o){var r=n?\"\":o.css;if(t.styleSheet)t.styleSheet.cssText=x(e,r);else{var i=document.createTextNode(r),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function d(t,e){var n=e.css,o=e.media;if(o&&t.setAttribute(\"media\",o),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function p(t,e,n){var o=n.css,r=n.sourceMap,i=void 0===e.convertToAbsoluteUrls&&r;(e.convertToAbsoluteUrls||i)&&(o=y(o)),r&&(o+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+\" */\");var a=new Blob([o],{type:\"text/css\"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var m={},b=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}(function(){return window&&document&&document.all&&!window.atob}),v=function(t){var e={};return function(n){return void 0===e[n]&&(e[n]=t.call(this,n)),e[n]}}(function(t){return document.querySelector(t)}),g=null,h=0,w=[],y=n(15);t.exports=function(t,e){if(\"undefined\"!=typeof DEBUG&&DEBUG&&\"object\"!=typeof document)throw new Error(\"The style-loader cannot be used in a non-browser environment\");e=e||{},e.attrs=\"object\"==typeof e.attrs?e.attrs:{},e.singleton||(e.singleton=b()),e.insertInto||(e.insertInto=\"head\"),e.insertAt||(e.insertAt=\"bottom\");var n=r(t,e);return o(n,e),function(t){for(var i=[],a=0;athis.length)&&-1!==this.indexOf(t,e)}),Array.prototype.includes||Object.defineProperty(Array.prototype,\"includes\",{value:function(t,e){if(null==this)throw new TypeError('\"this\" is null or not defined');var n=Object(this),o=n.length>>>0;if(0===o)return!1;for(var r=0|e,i=Math.max(r>=0?r:o-Math.abs(r),0);i=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},n(19),e.setImmediate=setImmediate,e.clearImmediate=clearImmediate},function(t,e,n){(function(t,e){!function(t,n){\"use strict\";function o(t){\"function\"!=typeof t&&(t=new Function(\"\"+t));for(var e=new Array(arguments.length-1),n=0;n1)for(var n=1;n',e.default=e.modalMarkup},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.OVERLAY,i='
\\n
';e.default=i},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.ICON;e.errorIconMarkup=function(){var t=r+\"--error\",e=t+\"__line\";return'\\n
\\n \\n \\n
\\n '},e.warningIconMarkup=function(){var t=r+\"--warning\";return'\\n \\n \\n \\n '},e.successIconMarkup=function(){var t=r+\"--success\";return'\\n \\n \\n\\n
\\n
\\n '}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.CONTENT;e.contentMarkup='\\n
\\n\\n
\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(0),r=o.default.BUTTON_CONTAINER,i=o.default.BUTTON,a=o.default.BUTTON_LOADER;e.buttonMarkup='\\n
\\n\\n \\n\\n
\\n
\\n
\\n
\\n
\\n\\n
\\n'},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(4),r=n(2),i=n(0),a=i.default.ICON,s=i.default.ICON_CUSTOM,c=[\"error\",\"warning\",\"success\",\"info\"],l={error:r.errorIconMarkup(),warning:r.warningIconMarkup(),success:r.successIconMarkup()},u=function(t,e){var n=a+\"--\"+t;e.classList.add(n);var o=l[t];o&&(e.innerHTML=o)},f=function(t,e){e.classList.add(s);var n=document.createElement(\"img\");n.src=t,e.appendChild(n)},d=function(t){if(t){var e=o.injectElIntoModal(r.iconMarkup);c.includes(t)?u(t,e):f(t,e)}};e.default=d},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(2),r=n(4),i=function(t){navigator.userAgent.includes(\"AppleWebKit\")&&(t.style.display=\"none\",t.offsetHeight,t.style.display=\"\")};e.initTitle=function(t){if(t){var e=r.injectElIntoModal(o.titleMarkup);e.textContent=t,i(e)}},e.initText=function(t){if(t){var e=document.createDocumentFragment();t.split(\"\\n\").forEach(function(t,n,o){e.appendChild(document.createTextNode(t)),n0}).forEach(function(t){b.classList.add(t)})}n&&t===c.CONFIRM_KEY&&b.classList.add(s),b.textContent=r;var g={};return g[t]=i,f.setActionValue(g),f.setActionOptionsFor(t,{closeModal:p}),b.addEventListener(\"click\",function(){return u.onAction(t)}),m},p=function(t,e){var n=r.injectElIntoModal(l.footerMarkup);for(var o in t){var i=t[o],a=d(o,i,e);i.visible&&n.appendChild(a)}0===n.children.length&&n.remove()};e.default=p},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(3),r=n(4),i=n(2),a=n(5),s=n(6),c=n(0),l=c.default.CONTENT,u=function(t){t.addEventListener(\"input\",function(t){var e=t.target,n=e.value;a.setActionValue(n)}),t.addEventListener(\"keyup\",function(t){if(\"Enter\"===t.key)return s.onAction(o.CONFIRM_KEY)}),setTimeout(function(){t.focus(),a.setActionValue(\"\")},0)},f=function(t,e,n){var o=document.createElement(e),r=l+\"__\"+e;o.classList.add(r);for(var i in n){var a=n[i];o[i]=a}\"input\"===e&&u(o),t.appendChild(o)},d=function(t){if(t){var e=r.injectElIntoModal(i.contentMarkup),n=t.element,o=t.attributes;\"string\"==typeof n?f(e,n,o):e.appendChild(n)}};e.default=d},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(2),i=function(){var t=o.stringToNode(r.overlayMarkup);document.body.appendChild(t)};e.default=i},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(5),r=n(6),i=n(1),a=n(3),s=n(0),c=s.default.MODAL,l=s.default.BUTTON,u=s.default.OVERLAY,f=function(t){t.preventDefault(),v()},d=function(t){t.preventDefault(),g()},p=function(t){if(o.default.isOpen)switch(t.key){case\"Escape\":return r.onAction(a.CANCEL_KEY)}},m=function(t){if(o.default.isOpen)switch(t.key){case\"Tab\":return f(t)}},b=function(t){if(o.default.isOpen)return\"Tab\"===t.key&&t.shiftKey?d(t):void 0},v=function(){var t=i.getNode(l);t&&(t.tabIndex=0,t.focus())},g=function(){var t=i.getNode(c),e=t.querySelectorAll(\".\"+l),n=e.length-1,o=e[n];o&&o.focus()},h=function(t){t[t.length-1].addEventListener(\"keydown\",m)},w=function(t){t[0].addEventListener(\"keydown\",b)},y=function(){var t=i.getNode(c),e=t.querySelectorAll(\".\"+l);e.length&&(h(e),w(e))},x=function(t){if(i.getNode(u)===t.target)return r.onAction(a.CANCEL_KEY)},_=function(t){var e=i.getNode(u);e.removeEventListener(\"click\",x),t&&e.addEventListener(\"click\",x)},k=function(t){o.default.timer&&clearTimeout(o.default.timer),t&&(o.default.timer=window.setTimeout(function(){return r.onAction(a.CANCEL_KEY)},t))},O=function(t){t.closeOnEsc?document.addEventListener(\"keyup\",p):document.removeEventListener(\"keyup\",p),t.dangerMode?v():g(),y(),_(t.closeOnClickOutside),k(t.timer)};e.default=O},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var o=n(1),r=n(3),i=n(37),a=n(38),s={title:null,text:null,icon:null,buttons:r.defaultButtonList,content:null,className:null,closeOnClickOutside:!0,closeOnEsc:!0,dangerMode:!1,timer:null},c=Object.assign({},s);e.setDefaults=function(t){c=Object.assign({},s,t)};var l=function(t){var e=t&&t.button,n=t&&t.buttons;return void 0!==e&&void 0!==n&&o.throwErr(\"Cannot set both 'button' and 'buttons' options!\"),void 0!==e?{confirm:e}:n},u=function(t){return o.ordinalSuffixOf(t+1)},f=function(t,e){o.throwErr(u(e)+\" argument ('\"+t+\"') is invalid\")},d=function(t,e){var n=t+1,r=e[n];o.isPlainObject(r)||void 0===r||o.throwErr(\"Expected \"+u(n)+\" argument ('\"+r+\"') to be a plain object\")},p=function(t,e){var n=t+1,r=e[n];void 0!==r&&o.throwErr(\"Unexpected \"+u(n)+\" argument (\"+r+\")\")},m=function(t,e,n,r){var i=typeof e,a=\"string\"===i,s=e instanceof Element;if(a){if(0===n)return{text:e};if(1===n)return{text:e,title:r[0]};if(2===n)return d(n,r),{icon:e};f(e,n)}else{if(s&&0===n)return d(n,r),{content:e};if(o.isPlainObject(e))return p(n,r),e;f(e,n)}};e.getOpts=function(){for(var t=[],e=0;e 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","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProduct.vue?vue&type=style&index=0&lang=css&\"","// 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 \"fullscreen\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullscreen')\n// ES2015:\n// import 'tinymce/plugins/fullscreen'\nrequire('./plugin.js');","// 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 importcss = (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.EditorManager');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var shouldMergeClasses = function (editor) {\n return editor.getParam('importcss_merge_classes');\n };\n var shouldImportExclusive = function (editor) {\n return editor.getParam('importcss_exclusive');\n };\n var getSelectorConverter = function (editor) {\n return editor.getParam('importcss_selector_converter');\n };\n var getSelectorFilter = function (editor) {\n return editor.getParam('importcss_selector_filter');\n };\n var getCssGroups = function (editor) {\n return editor.getParam('importcss_groups');\n };\n var shouldAppend = function (editor) {\n return editor.getParam('importcss_append');\n };\n var getFileFilter = function (editor) {\n return editor.getParam('importcss_file_filter');\n };\n var Settings = {\n shouldMergeClasses: shouldMergeClasses,\n shouldImportExclusive: shouldImportExclusive,\n getSelectorConverter: getSelectorConverter,\n getSelectorFilter: getSelectorFilter,\n getCssGroups: getCssGroups,\n shouldAppend: shouldAppend,\n getFileFilter: getFileFilter\n };\n\n var removeCacheSuffix = function (url) {\n var cacheSuffix = global$3.cacheSuffix;\n if (typeof url === 'string') {\n url = url.replace('?' + cacheSuffix, '').replace('&' + cacheSuffix, '');\n }\n return url;\n };\n var isSkinContentCss = function (editor, href) {\n var settings = editor.settings, skin = settings.skin !== false ? settings.skin || 'lightgray' : false;\n if (skin) {\n var skinUrl = settings.skin_url ? editor.documentBaseURI.toAbsolute(settings.skin_url) : global$2.baseURL + '/skins/' + skin;\n return href === skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css';\n }\n return false;\n };\n var compileFilter = function (filter) {\n if (typeof filter === 'string') {\n return function (value) {\n return value.indexOf(filter) !== -1;\n };\n } else if (filter instanceof RegExp) {\n return function (value) {\n return filter.test(value);\n };\n }\n return filter;\n };\n var getSelectors = function (editor, doc, fileFilter) {\n var selectors = [], contentCSSUrls = {};\n function append(styleSheet, imported) {\n var href = styleSheet.href, rules;\n href = removeCacheSuffix(href);\n if (!href || !fileFilter(href, imported) || isSkinContentCss(editor, href)) {\n return;\n }\n global$4.each(styleSheet.imports, function (styleSheet) {\n append(styleSheet, true);\n });\n try {\n rules = styleSheet.cssRules || styleSheet.rules;\n } catch (e) {\n }\n global$4.each(rules, function (cssRule) {\n if (cssRule.styleSheet) {\n append(cssRule.styleSheet, true);\n } else if (cssRule.selectorText) {\n global$4.each(cssRule.selectorText.split(','), function (selector) {\n selectors.push(global$4.trim(selector));\n });\n }\n });\n }\n global$4.each(editor.contentCSS, function (url) {\n contentCSSUrls[url] = true;\n });\n if (!fileFilter) {\n fileFilter = function (href, imported) {\n return imported || contentCSSUrls[href];\n };\n }\n try {\n global$4.each(doc.styleSheets, function (styleSheet) {\n append(styleSheet);\n });\n } catch (e) {\n }\n return selectors;\n };\n var defaultConvertSelectorToFormat = function (editor, selectorText) {\n var format;\n var selector = /^(?:([a-z0-9\\-_]+))?(\\.[a-z0-9_\\-\\.]+)$/i.exec(selectorText);\n if (!selector) {\n return;\n }\n var elementName = selector[1];\n var classes = selector[2].substr(1).split('.').join(' ');\n var inlineSelectorElements = global$4.makeMap('a,img');\n if (selector[1]) {\n format = { title: selectorText };\n if (editor.schema.getTextBlockElements()[elementName]) {\n format.block = elementName;\n } else if (editor.schema.getBlockElements()[elementName] || inlineSelectorElements[elementName.toLowerCase()]) {\n format.selector = elementName;\n } else {\n format.inline = elementName;\n }\n } else if (selector[2]) {\n format = {\n inline: 'span',\n title: selectorText.substr(1),\n classes: classes\n };\n }\n if (Settings.shouldMergeClasses(editor) !== false) {\n format.classes = classes;\n } else {\n format.attributes = { class: classes };\n }\n return format;\n };\n var getGroupsBySelector = function (groups, selector) {\n return global$4.grep(groups, function (group) {\n return !group.filter || group.filter(selector);\n });\n };\n var compileUserDefinedGroups = function (groups) {\n return global$4.map(groups, function (group) {\n return global$4.extend({}, group, {\n original: group,\n selectors: {},\n filter: compileFilter(group.filter),\n item: {\n text: group.title,\n menu: []\n }\n });\n });\n };\n var isExclusiveMode = function (editor, group) {\n return group === null || Settings.shouldImportExclusive(editor) !== false;\n };\n var isUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n return !(isExclusiveMode(editor, group) ? selector in globallyUniqueSelectors : selector in group.selectors);\n };\n var markUniqueSelector = function (editor, selector, group, globallyUniqueSelectors) {\n if (isExclusiveMode(editor, group)) {\n globallyUniqueSelectors[selector] = true;\n } else {\n group.selectors[selector] = true;\n }\n };\n var convertSelectorToFormat = function (editor, plugin, selector, group) {\n var selectorConverter;\n if (group && group.selector_converter) {\n selectorConverter = group.selector_converter;\n } else if (Settings.getSelectorConverter(editor)) {\n selectorConverter = Settings.getSelectorConverter(editor);\n } else {\n selectorConverter = function () {\n return defaultConvertSelectorToFormat(editor, selector);\n };\n }\n return selectorConverter.call(plugin, selector, group);\n };\n var setup = function (editor) {\n editor.on('renderFormatsMenu', function (e) {\n var globallyUniqueSelectors = {};\n var selectorFilter = compileFilter(Settings.getSelectorFilter(editor)), ctrl = e.control;\n var groups = compileUserDefinedGroups(Settings.getCssGroups(editor));\n var processSelector = function (selector, group) {\n if (isUniqueSelector(editor, selector, group, globallyUniqueSelectors)) {\n markUniqueSelector(editor, selector, group, globallyUniqueSelectors);\n var format = convertSelectorToFormat(editor, editor.plugins.importcss, selector, group);\n if (format) {\n var formatName = format.name || global$1.DOM.uniqueId();\n editor.formatter.register(formatName, format);\n return global$4.extend({}, ctrl.settings.itemDefaults, {\n text: format.title,\n format: formatName\n });\n }\n }\n return null;\n };\n if (!Settings.shouldAppend(editor)) {\n ctrl.items().remove();\n }\n global$4.each(getSelectors(editor, e.doc || editor.getDoc(), compileFilter(Settings.getFileFilter(editor))), function (selector) {\n if (selector.indexOf('.mce-') === -1) {\n if (!selectorFilter || selectorFilter(selector)) {\n var selectorGroups = getGroupsBySelector(groups, selector);\n if (selectorGroups.length > 0) {\n global$4.each(selectorGroups, function (group) {\n var menuItem = processSelector(selector, group);\n if (menuItem) {\n group.item.menu.push(menuItem);\n }\n });\n } else {\n var menuItem = processSelector(selector, null);\n if (menuItem) {\n ctrl.add(menuItem);\n }\n }\n }\n }\n });\n global$4.each(groups, function (group) {\n if (group.item.menu.length > 0) {\n ctrl.add(group.item);\n }\n });\n e.control.renderNew();\n });\n };\n var ImportCss = {\n defaultConvertSelectorToFormat: defaultConvertSelectorToFormat,\n setup: setup\n };\n\n var get = function (editor) {\n var convertSelectorToFormat = function (selectorText) {\n return ImportCss.defaultConvertSelectorToFormat(editor, selectorText);\n };\n return { convertSelectorToFormat: convertSelectorToFormat };\n };\n var Api = { get: get };\n\n global.add('importcss', function (editor) {\n ImportCss.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');","(function () {\nvar help = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\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 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 isFunction = isType('function');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\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 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 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 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 from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var meta = global$2.mac ? '\\u2318' : 'Ctrl';\n var access = global$2.mac ? 'Ctrl + Alt' : 'Shift + Alt';\n var shortcuts = [\n {\n shortcut: meta + ' + B',\n action: 'Bold'\n },\n {\n shortcut: meta + ' + I',\n action: 'Italic'\n },\n {\n shortcut: meta + ' + U',\n action: 'Underline'\n },\n {\n shortcut: meta + ' + A',\n action: 'Select all'\n },\n {\n shortcut: meta + ' + Y or ' + meta + ' + Shift + Z',\n action: 'Redo'\n },\n {\n shortcut: meta + ' + Z',\n action: 'Undo'\n },\n {\n shortcut: access + ' + 1',\n action: 'Header 1'\n },\n {\n shortcut: access + ' + 2',\n action: 'Header 2'\n },\n {\n shortcut: access + ' + 3',\n action: 'Header 3'\n },\n {\n shortcut: access + ' + 4',\n action: 'Header 4'\n },\n {\n shortcut: access + ' + 5',\n action: 'Header 5'\n },\n {\n shortcut: access + ' + 6',\n action: 'Header 6'\n },\n {\n shortcut: access + ' + 7',\n action: 'Paragraph'\n },\n {\n shortcut: access + ' + 8',\n action: 'Div'\n },\n {\n shortcut: access + ' + 9',\n action: 'Address'\n },\n {\n shortcut: 'Alt + F9',\n action: 'Focus to menubar'\n },\n {\n shortcut: 'Alt + F10',\n action: 'Focus to toolbar'\n },\n {\n shortcut: 'Alt + F11',\n action: 'Focus to element path'\n },\n {\n shortcut: 'Ctrl + F9',\n action: 'Focus to contextual toolbar'\n },\n {\n shortcut: meta + ' + K',\n action: 'Insert link (if link plugin activated)'\n },\n {\n shortcut: meta + ' + S',\n action: 'Save (if save plugin activated)'\n },\n {\n shortcut: meta + ' + F',\n action: 'Find (if searchreplace plugin activated)'\n }\n ];\n var KeyboardShortcuts = { shortcuts: shortcuts };\n\n var makeTab = function () {\n var makeAriaLabel = function (shortcut) {\n return 'aria-label=\"Action: ' + shortcut.action + ', Shortcut: ' + shortcut.shortcut.replace(/Ctrl/g, 'Control') + '\"';\n };\n var shortcutLisString = map(KeyboardShortcuts.shortcuts, function (shortcut) {\n return '' + '' + global$1.translate(shortcut.action) + '' + '' + shortcut.shortcut + '' + '';\n }).join('');\n return {\n title: 'Handy Shortcuts',\n type: 'container',\n style: 'overflow-y: auto; overflow-x: hidden; max-height: 250px',\n items: [{\n type: 'container',\n html: '
' + '' + '' + '' + '' + '' + shortcutLisString + '
' + global$1.translate('Action') + '' + global$1.translate('Shortcut') + '
' + '
'\n }]\n };\n };\n var KeyboardShortcutsTab = { makeTab: makeTab };\n\n var keys = Object.keys;\n\n var supplant = function (str, obj) {\n var isStringOrNumber = function (a) {\n var t = typeof a;\n return t === 'string' || t === 'number';\n };\n return str.replace(/\\$\\{([^{}]*)\\}/g, function (fullMatch, key) {\n var value = obj[key];\n return isStringOrNumber(value) ? value.toString() : fullMatch;\n });\n };\n\n var urls = [\n {\n key: 'advlist',\n name: 'Advanced List'\n },\n {\n key: 'anchor',\n name: 'Anchor'\n },\n {\n key: 'autolink',\n name: 'Autolink'\n },\n {\n key: 'autoresize',\n name: 'Autoresize'\n },\n {\n key: 'autosave',\n name: 'Autosave'\n },\n {\n key: 'bbcode',\n name: 'BBCode'\n },\n {\n key: 'charmap',\n name: 'Character Map'\n },\n {\n key: 'code',\n name: 'Code'\n },\n {\n key: 'codesample',\n name: 'Code Sample'\n },\n {\n key: 'colorpicker',\n name: 'Color Picker'\n },\n {\n key: 'compat3x',\n name: '3.x Compatibility'\n },\n {\n key: 'contextmenu',\n name: 'Context Menu'\n },\n {\n key: 'directionality',\n name: 'Directionality'\n },\n {\n key: 'emoticons',\n name: 'Emoticons'\n },\n {\n key: 'fullpage',\n name: 'Full Page'\n },\n {\n key: 'fullscreen',\n name: 'Full Screen'\n },\n {\n key: 'help',\n name: 'Help'\n },\n {\n key: 'hr',\n name: 'Horizontal Rule'\n },\n {\n key: 'image',\n name: 'Image'\n },\n {\n key: 'imagetools',\n name: 'Image Tools'\n },\n {\n key: 'importcss',\n name: 'Import CSS'\n },\n {\n key: 'insertdatetime',\n name: 'Insert Date/Time'\n },\n {\n key: 'legacyoutput',\n name: 'Legacy Output'\n },\n {\n key: 'link',\n name: 'Link'\n },\n {\n key: 'lists',\n name: 'Lists'\n },\n {\n key: 'media',\n name: 'Media'\n },\n {\n key: 'nonbreaking',\n name: 'Nonbreaking'\n },\n {\n key: 'noneditable',\n name: 'Noneditable'\n },\n {\n key: 'pagebreak',\n name: 'Page Break'\n },\n {\n key: 'paste',\n name: 'Paste'\n },\n {\n key: 'preview',\n name: 'Preview'\n },\n {\n key: 'print',\n name: 'Print'\n },\n {\n key: 'save',\n name: 'Save'\n },\n {\n key: 'searchreplace',\n name: 'Search and Replace'\n },\n {\n key: 'spellchecker',\n name: 'Spell Checker'\n },\n {\n key: 'tabfocus',\n name: 'Tab Focus'\n },\n {\n key: 'table',\n name: 'Table'\n },\n {\n key: 'template',\n name: 'Template'\n },\n {\n key: 'textcolor',\n name: 'Text Color'\n },\n {\n key: 'textpattern',\n name: 'Text Pattern'\n },\n {\n key: 'toc',\n name: 'Table of Contents'\n },\n {\n key: 'visualblocks',\n name: 'Visual Blocks'\n },\n {\n key: 'visualchars',\n name: 'Visual Characters'\n },\n {\n key: 'wordcount',\n name: 'Word Count'\n }\n ];\n var PluginUrls = { urls: urls };\n\n var makeLink = curry(supplant, '${name}');\n var maybeUrlize = function (editor, key) {\n return find(PluginUrls.urls, function (x) {\n return x.key === key;\n }).fold(function () {\n var getMetadata = editor.plugins[key].getMetadata;\n return typeof getMetadata === 'function' ? makeLink(getMetadata()) : key;\n }, function (x) {\n return makeLink({\n name: x.name,\n url: 'https://www.tinymce.com/docs/plugins/' + x.key\n });\n });\n };\n var getPluginKeys = function (editor) {\n var keys$1 = keys(editor.plugins);\n return editor.settings.forced_plugins === undefined ? keys$1 : filter(keys$1, not(curry(contains, editor.settings.forced_plugins)));\n };\n var pluginLister = function (editor) {\n var pluginKeys = getPluginKeys(editor);\n var pluginLis = map(pluginKeys, function (key) {\n return '
  • ' + maybeUrlize(editor, key) + '
  • ';\n });\n var count = pluginLis.length;\n var pluginsString = pluginLis.join('');\n return '

    ' + global$1.translate([\n 'Plugins installed ({0}):',\n count\n ]) + '

    ' + '
      ' + pluginsString + '
    ';\n };\n var installedPlugins = function (editor) {\n return {\n type: 'container',\n html: '
    ' + pluginLister(editor) + '
    ',\n flex: 1\n };\n };\n var availablePlugins = function () {\n return {\n type: 'container',\n html: '
    ' + '

    ' + global$1.translate('Premium plugins:') + '

    ' + '
      ' + '
    • PowerPaste
    • ' + '
    • Spell Checker Pro
    • ' + '
    • Accessibility Checker
    • ' + '
    • Advanced Code Editor
    • ' + '
    • Enhanced Media Embed
    • ' + '
    • Link Checker
    • ' + '

    ' + '

    ' + global$1.translate('Learn more...') + '

    ' + '
    ',\n flex: 1\n };\n };\n var makeTab$1 = function (editor) {\n return {\n title: 'Plugins',\n type: 'container',\n style: 'overflow-y: auto; overflow-x: hidden;',\n layout: 'flex',\n padding: 10,\n spacing: 10,\n items: [\n installedPlugins(editor),\n availablePlugins()\n ]\n };\n };\n var PluginsTab = { makeTab: makeTab$1 };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var getVersion = function (major, minor) {\n return major.indexOf('@') === 0 ? 'X.X.X' : major + '.' + minor;\n };\n var makeRow = function () {\n var version = getVersion(global$3.majorVersion, global$3.minorVersion);\n var changeLogLink = 'TinyMCE ' + version + '';\n return [\n {\n type: 'label',\n html: global$1.translate([\n 'You are using {0}',\n changeLogLink\n ])\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Close',\n onclick: function () {\n this.parent().parent().close();\n }\n }\n ];\n };\n var ButtonsRow = { makeRow: makeRow };\n\n var open = function (editor, pluginUrl) {\n return function () {\n editor.windowManager.open({\n title: 'Help',\n bodyType: 'tabpanel',\n layout: 'flex',\n body: [\n KeyboardShortcutsTab.makeTab(),\n PluginsTab.makeTab(editor)\n ],\n buttons: ButtonsRow.makeRow(),\n onPostRender: function () {\n var title = this.getEl('title');\n title.innerHTML = '\"TinyMCE';\n }\n });\n };\n };\n var Dialog = { open: open };\n\n var register = function (editor, pluginUrl) {\n editor.addCommand('mceHelp', Dialog.open(editor, pluginUrl));\n };\n var Commands = { register: register };\n\n var register$1 = function (editor, pluginUrl) {\n editor.addButton('help', {\n icon: 'help',\n onclick: Dialog.open(editor, pluginUrl)\n });\n editor.addMenuItem('help', {\n text: 'Help',\n icon: 'help',\n context: 'help',\n onclick: Dialog.open(editor, pluginUrl)\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('help', function (editor, pluginUrl) {\n Buttons.register(editor, pluginUrl);\n Commands.register(editor, pluginUrl);\n editor.shortcuts.add('Alt+0', 'Open help dialog', 'mceHelp');\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 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');","(function () {\nvar noneditable = (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 getNonEditableClass = function (editor) {\n return editor.getParam('noneditable_noneditable_class', 'mceNonEditable');\n };\n var getEditableClass = function (editor) {\n return editor.getParam('noneditable_editable_class', 'mceEditable');\n };\n var getNonEditableRegExps = function (editor) {\n var nonEditableRegExps = editor.getParam('noneditable_regexp', []);\n if (nonEditableRegExps && nonEditableRegExps.constructor === RegExp) {\n return [nonEditableRegExps];\n } else {\n return nonEditableRegExps;\n }\n };\n var Settings = {\n getNonEditableClass: getNonEditableClass,\n getEditableClass: getEditableClass,\n getNonEditableRegExps: getNonEditableRegExps\n };\n\n var hasClass = function (checkClassName) {\n return function (node) {\n return (' ' + node.attr('class') + ' ').indexOf(checkClassName) !== -1;\n };\n };\n var replaceMatchWithSpan = function (editor, content, cls) {\n return function (match) {\n var args = arguments, index = args[args.length - 2];\n var prevChar = index > 0 ? content.charAt(index - 1) : '';\n if (prevChar === '\"') {\n return match;\n }\n if (prevChar === '>') {\n var findStartTagIndex = content.lastIndexOf('<', index);\n if (findStartTagIndex !== -1) {\n var tagHtml = content.substring(findStartTagIndex, index);\n if (tagHtml.indexOf('contenteditable=\"false\"') !== -1) {\n return match;\n }\n }\n }\n return '' + editor.dom.encode(typeof args[1] === 'string' ? args[1] : args[0]) + '';\n };\n };\n var convertRegExpsToNonEditable = function (editor, nonEditableRegExps, e) {\n var i = nonEditableRegExps.length, content = e.content;\n if (e.format === 'raw') {\n return;\n }\n while (i--) {\n content = content.replace(nonEditableRegExps[i], replaceMatchWithSpan(editor, content, Settings.getNonEditableClass(editor)));\n }\n e.content = content;\n };\n var setup = function (editor) {\n var editClass, nonEditClass;\n var contentEditableAttrName = 'contenteditable';\n editClass = ' ' + global$1.trim(Settings.getEditableClass(editor)) + ' ';\n nonEditClass = ' ' + global$1.trim(Settings.getNonEditableClass(editor)) + ' ';\n var hasEditClass = hasClass(editClass);\n var hasNonEditClass = hasClass(nonEditClass);\n var nonEditableRegExps = Settings.getNonEditableRegExps(editor);\n editor.on('PreInit', function () {\n if (nonEditableRegExps.length > 0) {\n editor.on('BeforeSetContent', function (e) {\n convertRegExpsToNonEditable(editor, nonEditableRegExps, e);\n });\n }\n editor.parser.addAttributeFilter('class', function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (hasEditClass(node)) {\n node.attr(contentEditableAttrName, 'true');\n } else if (hasNonEditClass(node)) {\n node.attr(contentEditableAttrName, 'false');\n }\n }\n });\n editor.serializer.addAttributeFilter(contentEditableAttrName, function (nodes) {\n var i = nodes.length, node;\n while (i--) {\n node = nodes[i];\n if (!hasEditClass(node) && !hasNonEditClass(node)) {\n continue;\n }\n if (nonEditableRegExps.length > 0 && node.attr('data-mce-content')) {\n node.name = '#text';\n node.type = 3;\n node.raw = true;\n node.value = node.attr('data-mce-content');\n } else {\n node.attr(contentEditableAttrName, null);\n }\n }\n });\n });\n };\n var FilterContent = { setup: setup };\n\n global.add('noneditable', function (editor) {\n FilterContent.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-fixed\",class:{ 'sb-sidenav-toggled': _vm.checkNav }},[_c('nav',{staticClass:\"sb-topnav navbar navbar-expand navbar-dark bg-dark\"},[_c('a',{staticClass:\"navbar-brand ps-3\",attrs:{\"href\":\"#\"}},[_vm._v(\"EMGlabvn\")]),_c('button',{staticClass:\"btn btn-link btn-sm order-1 order-lg-0 me-4 me-lg-0\",attrs:{\"id\":\"sidebarToggle\"},on:{\"click\":function($event){_vm.checkNav = !_vm.checkNav}}},[_c('i',{staticClass:\"fas fa-bars\"})]),_c('form',{staticClass:\"\\n d-none d-md-inline-block\\n form-inline\\n ms-auto\\n me-0 me-md-3\\n my-2 my-md-0\\n \"}),_vm._m(0)]),_c('div',{attrs:{\"id\":\"layoutSidenav\"}},[_c('div',{attrs:{\"id\":\"layoutSidenav_nav\"}},[_c('nav',{staticClass:\"sb-sidenav accordion sb-sidenav-dark\",attrs:{\"id\":\"sidenavAccordion\"}},[_c('div',{staticClass:\"sb-sidenav-menu\"},[_c('div',{staticClass:\"nav\"},[_c('div',{staticClass:\"sb-sidenav-menu-heading\"},[_vm._v(\"Chỉnh sửa\")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 1}}},[_vm._m(1),_vm._v(\" Giới thiệu \")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 2}}},[_vm._m(2),_vm._v(\" Sản phẩm \")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 3}}},[_vm._m(3),_vm._v(\" Thành viên \")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 4}}},[_vm._m(4),_vm._v(\" Email \")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 5}}},[_vm._m(5),_vm._v(\" Dự án mới \")]),_c('a',{staticClass:\"nav-link\",on:{\"click\":function($event){_vm.controlPage = 6}}},[_vm._m(6),_vm._v(\" Đối tác \")])])])])]),_c('div',{attrs:{\"id\":\"layoutSidenav_content\"}},[(_vm.controlPage == 1)?_c('EditIntroduceEmg'):_vm._e(),(_vm.controlPage == 2)?_c('EditProduct'):_vm._e(),(_vm.controlPage == 3)?_c('EditMember'):_vm._e(),(_vm.controlPage == 4)?_c('SeeMail'):_vm._e(),(_vm.controlPage == 5)?_c('EditNewProject'):_vm._e(),(_vm.controlPage == 6)?_c('EditPartner'):_vm._e()],1)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('ul',{staticClass:\"navbar-nav ms-auto ms-md-0 me-3 me-lg-4\"},[_c('li',{staticClass:\"nav-item dropdown\"},[_c('a',{staticClass:\"nav-link dropdown-toggle\",attrs:{\"id\":\"navbarDropdown\",\"href\":\"#\",\"role\":\"button\",\"data-bs-toggle\":\"dropdown\",\"aria-expanded\":\"false\"}},[_c('i',{staticClass:\"fas fa-user fa-fw\"})]),_c('ul',{staticClass:\"dropdown-menu dropdown-menu-end\",attrs:{\"aria-labelledby\":\"navbarDropdown\"}},[_c('li',[_c('a',{staticClass:\"dropdown-item\",attrs:{\"href\":\"#!\"}},[_vm._v(\"Logout\")])])])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fas fa-address-card\",attrs:{\"aria-hidden\":\"true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fas fa-plus-square\",attrs:{\"aria-hidden\":\"true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fas fa-users\",attrs:{\"aria-hidden\":\"true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fas fa-envelope\",attrs:{\"aria-hidden\":\"true\"}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fas fa-table\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"sb-nav-link-icon\"},[_c('i',{staticClass:\"fa fa-users\",attrs:{\"aria-hidden\":\"true\"}})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"product-container-btn\"},[_c('div',{},[_c('button',{staticClass:\"btn btn-option\",class:_vm.statusIntro,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btIntro}},[_vm._v(\" Giới thiệu \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusStudy,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btStudy}},[_vm._v(\" Hướng nghiên cứu \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusService,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btService}},[_vm._v(\" Dịch vụ \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusBanner,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btBanner}},[_vm._v(\" Banner \")])]),_c('div',[_c('button',{staticClass:\"btn btn-option btn-danger\",on:{\"click\":_vm.updateDataIntro}},[_c('i',{staticClass:\"fa fa-paper-plane\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Cập nhật \")])])]),(!_vm.checkFormUpdateBanner)?_c('div',[_c('div',{staticClass:\"title ml-3 mr-5\"},[_c('p',{domProps:{\"innerHTML\":_vm._s(_vm.des)}})]),_c('div',{staticStyle:{\"height\":\"6vh\"}}),_c('div',{staticClass:\"editer ml-3 mr-3 mb-5\"},[_c('tinymce',{staticStyle:{\"height\":\"500px !important\"},attrs:{\"id\":\"des\",\"plugins\":_vm.plugins},model:{value:(_vm.des),callback:function ($$v) {_vm.des=$$v},expression:\"des\"}})],1)]):_c('div',[_c('form',{staticClass:\"mt-30 ml-3\"},[_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('h5',{staticClass:\"preview-title\"},[_vm._v(\"Hình ảnh banner\")]),_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":_vm.onFileChangeBanner}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.linkBanner)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.linkBanner}}):_vm._e()])]),_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('h5',{staticClass:\"preview-title\"},[_vm._v(\"Hình ảnh giới thiêu 1\")]),_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":_vm.onFileChangeImage1}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.linkImage1)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.linkImage1}}):_vm._e()])]),_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('h5',{staticClass:\"preview-title\"},[_vm._v(\"Hình ảnh giới thiệu 2\")]),_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":_vm.onFileChangeImage2}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.linkImage2)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.linkImage2}}):_vm._e()])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('textarea',{attrs:{\"id\":_vm.id}},[_vm._v(_vm._s(_vm.content))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--13-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--1-0!../../../vue-loader/lib/index.js??vue-loader-options!./TinymceVue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../cache-loader/dist/cjs.js??ref--13-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--1-0!../../../vue-loader/lib/index.js??vue-loader-options!./TinymceVue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TinymceVue.vue?vue&type=template&id=7a7628c1&scoped=true&\"\nimport script from \"./TinymceVue.vue?vue&type=script&lang=js&\"\nexport * from \"./TinymceVue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7a7628c1\",\n null\n \n)\n\nexport default component.exports","import tinymce from './components/TinymceVue'\n\nexport default tinymce\nexport { tinymce }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditIntroduceEmg.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditIntroduceEmg.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditIntroduceEmg.vue?vue&type=template&id=650f0582&\"\nimport script from \"./EditIntroduceEmg.vue?vue&type=script&lang=js&\"\nexport * from \"./EditIntroduceEmg.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditIntroduceEmg.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"list-group col-lg-4\"},[_c('h4',[_vm._v(\"Dự án mới\")]),_vm._l((_vm.newProjectList),function(newProject,index){return _c('button',{key:index,staticClass:\"list-group-item list-group-item-action border-btn\",attrs:{\"type\":\"button\",\"id\":index},on:{\"click\":function($event){return _vm.clickBtn(index)}}},[_vm._v(\" \"+_vm._s(index + 1 + \". \" + newProject.nameProject)+\" \")])})],2),_c('form',{staticClass:\"col-lg-8\"},[_c('div',{staticClass:\"product-container-btn\"},[_c('div',[_c('button',{staticClass:\"btn btn-option\",class:_vm.statusCreate,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btCreate}},[_vm._v(\" Tạo mới \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusEdit,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btEdit}},[_vm._v(\" Chỉnh sửa \")])]),(!_vm.typeBtn)?_c('div',[_c('button',{staticClass:\"btn btn-option btn-danger\",on:{\"click\":function($event){$event.preventDefault();return _vm.deleteData.apply(null, arguments)}}},[_c('i',{staticClass:\"fa fa-trash\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Xóa \")])]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Tên dự án mới\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforProject.nameProject),expression:\"inforProject.nameProject\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"inputAddress\",\"placeholder\":\"Nhập tên dự án\"},domProps:{\"value\":(_vm.inforProject.nameProject)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforProject, \"nameProject\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Link hình ảnh\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforProject.linkImage),expression:\"inforProject.linkImage\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"inputAddress\",\"placeholder\":\"Nhập link hình ảnh \"},domProps:{\"value\":(_vm.inforProject.linkImage)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforProject, \"linkImage\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress2\"}},[_vm._v(\"Mô tả dự án\")]),_c('tinymce',{attrs:{\"id\":\"des\",\"plugins\":_vm.plugins},model:{value:(_vm.inforProject.description),callback:function ($$v) {_vm.$set(_vm.inforProject, \"description\", $$v)},expression:\"inforProject.description\"}})],1),_c('button',{staticClass:\"btn btn-primary mb-4\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.btUpdateData}},[_c('i',{staticClass:\"fa fa-paper-plane\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Cập nhật \")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditNewProject.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditNewProject.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditNewProject.vue?vue&type=template&id=f203a98c&\"\nimport script from \"./EditNewProject.vue?vue&type=script&lang=js&\"\nexport * from \"./EditNewProject.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditNewProject.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._v(\" Hiện tại chưa có \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeeMail.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SeeMail.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SeeMail.vue?vue&type=template&id=ee712ad8&\"\nimport script from \"./SeeMail.vue?vue&type=script&lang=js&\"\nexport * from \"./SeeMail.vue?vue&type=script&lang=js&\"\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"list-group col-lg-4 ml-3\"},[_c('h4',[_vm._v(\"Sản phẩm\")]),_vm._l((_vm.productList),function(product,index){return _c('button',{key:index,staticClass:\"list-group-item list-group-item-action border-btn\",attrs:{\"type\":\"button\",\"id\":index},on:{\"click\":function($event){return _vm.clickBtn(index)}}},[_vm._v(\" \"+_vm._s(index + 1 + \". \" + product.nameProduct)+\" \")])})],2),_c('form',{staticClass:\"col-lg-7 ml-1 mr-4\"},[_c('div',{staticClass:\"product-container-btn\"},[_c('div',[_c('button',{staticClass:\"btn btn-option\",class:_vm.statusCreate,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btCreate}},[_vm._v(\" Tạo mới \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusEdit,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btEdit}},[_vm._v(\" Chỉnh sửa \")])]),(!_vm.typeBtn)?_c('div',[_c('button',{staticClass:\"btn btn-option btn-danger\",on:{\"click\":function($event){$event.preventDefault();return _vm.deleteData.apply(null, arguments)}}},[_c('i',{staticClass:\"fa fa-trash\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Xóa \")])]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Tên sản phẩm\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforProduct.nameProduct),expression:\"inforProduct.nameProduct\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"inputAddress\",\"placeholder\":\"Nhập tên sản phẩm\"},domProps:{\"value\":(_vm.inforProduct.nameProduct)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforProduct, \"nameProduct\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('p',{staticClass:\"preview-product-title\"},[_vm._v(\"Hình ảnh\")]),_c('input',{attrs:{\"id\":\"inputImageProduct\",\"type\":\"file\"},on:{\"change\":_vm.onFileChange}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.inforProduct.linkImage)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.inforProduct.linkImage}}):_vm._e()])])]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress2\"}},[_vm._v(\"Mô tả sản phẩm\")]),_c('tinymce',{attrs:{\"id\":\"des\",\"plugins\":_vm.plugins},model:{value:(_vm.inforProduct.desProduct),callback:function ($$v) {_vm.$set(_vm.inforProduct, \"desProduct\", $$v)},expression:\"inforProduct.desProduct\"}})],1),_c('button',{staticClass:\"btn btn-primary mb-4\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.btUpdateData}},[_c('i',{staticClass:\"fa fa-paper-plane\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Cập nhật \")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProduct.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditProduct.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditProduct.vue?vue&type=template&id=9a2be19a&\"\nimport script from \"./EditProduct.vue?vue&type=script&lang=js&\"\nexport * from \"./EditProduct.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditProduct.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"list-group col-lg-4 ml-3\"},[_c('div',{staticClass:\"product-container-btn\"},[_c('div',[_c('button',{staticClass:\"btn btn-option\",class:_vm.btPrimaryClass,attrs:{\"type\":\"button\"},on:{\"click\":_vm.fetchDataMember}},[_vm._v(\" Thành viên hiện tại \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.btSecondaryClass,attrs:{\"type\":\"button\"},on:{\"click\":_vm.fetchDataOldMember}},[_vm._v(\" Cựu thành viên \")])])]),_vm._l((_vm.members),function(member,index){return _c('button',{key:index,staticClass:\"list-group-item list-group-item-action border-btn\",attrs:{\"type\":\"button\",\"id\":index},on:{\"click\":function($event){return _vm.clickBtn(index)}}},[_vm._v(\" \"+_vm._s(index + 1 + \". \" + member.fullName)+\" \")])})],2),_c('form',{staticClass:\"col-lg-7 ml-1 mr-4\",attrs:{\"id\":\"form\"}},[_c('div',{staticClass:\"product-container-btn\"},[_c('div',[_c('button',{staticClass:\"btn btn-option\",class:_vm.statusCreate,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btCreate}},[_vm._v(\" Tạo mới \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusEdit,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btEdit}},[_vm._v(\" Chỉnh sửa \")])]),(!_vm.typeBtn)?_c('div',[_c('button',{staticClass:\"btn btn-option btn-danger\",on:{\"click\":function($event){$event.preventDefault();return _vm.deleteData.apply(null, arguments)}}},[_c('i',{staticClass:\"fa fa-trash\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Xóa \")])]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Họ và tên\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforMember.fullName),expression:\"inforMember.fullName\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":\"Nhập tên đầy đủ\"},domProps:{\"value\":(_vm.inforMember.fullName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforMember, \"fullName\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('p',{staticClass:\"preview-product-title\"},[_vm._v(\"Hình ảnh\")]),_c('input',{attrs:{\"id\":\"inputImageMember\",\"type\":\"file\"},on:{\"change\":_vm.onFileChange}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.inforMember.linkImage)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.inforMember.linkImage}}):_vm._e()])])]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Email\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforMember.email),expression:\"inforMember.email\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":\"Nhập Email\"},domProps:{\"value\":(_vm.inforMember.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforMember, \"email\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Vị trí\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforMember.position),expression:\"inforMember.position\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":\"Nhập vị trí trong lab\"},domProps:{\"value\":(_vm.inforMember.position)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforMember, \"position\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Chuyên môn\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforMember.specialize),expression:\"inforMember.specialize\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":\"Nhập chuyên môn\"},domProps:{\"value\":(_vm.inforMember.specialize)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforMember, \"specialize\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress\"}},[_vm._v(\"Trình độ\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforMember.level),expression:\"inforMember.level\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"placeholder\":\"Nhập trình độ\",\"required\":\"true\"},domProps:{\"value\":(_vm.inforMember.level)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforMember, \"level\", $event.target.value)}}})]),_c('button',{staticClass:\"btn btn-primary mb-4\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.btUpdateData}},[_c('i',{staticClass:\"fa fa-paper-plane\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Cập nhật \")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditMember.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditMember.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditMember.vue?vue&type=template&id=2d034f76&\"\nimport script from \"./EditMember.vue?vue&type=script&lang=js&\"\nexport * from \"./EditMember.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditMember.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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"list-group col-lg-4 ml-3\"},[_c('h4',[_vm._v(\"Đối tác\")]),_vm._l((_vm.partnerList),function(partner,index){return _c('button',{key:index,staticClass:\"list-group-item list-group-item-action border-btn\",attrs:{\"type\":\"button\",\"id\":index},on:{\"click\":function($event){return _vm.clickBtn(index)}}},[_vm._v(\" \"+_vm._s(index + 1 + \". \" + partner.namePartner)+\" \")])})],2),_c('form',{staticClass:\"col-lg-7 ml-1 mr-4\"},[_c('div',{staticClass:\"product-container-btn\"},[_c('div',[_c('button',{staticClass:\"btn btn-option\",class:_vm.statusCreate,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btCreate}},[_vm._v(\" Tạo mới \")]),_c('button',{staticClass:\"btn btn-option\",class:_vm.statusEdit,attrs:{\"type\":\"button\"},on:{\"click\":_vm.btEdit}},[_vm._v(\" Chỉnh sửa \")])]),(!_vm.typeBtn)?_c('div',[_c('button',{staticClass:\"btn btn-option btn-danger\",on:{\"click\":function($event){$event.preventDefault();return _vm.deleteData.apply(null, arguments)}}},[_c('i',{staticClass:\"fa fa-trash\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Xóa \")])]):_vm._e()]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputNamePartner\"}},[_vm._v(\"Tên đối tác\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforPartner.nameProduct),expression:\"inforPartner.nameProduct\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"inputNamePartner\",\"placeholder\":\"Nhập tên đối tác\"},domProps:{\"value\":(_vm.inforPartner.nameProduct)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforPartner, \"nameProduct\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputShortDes\"}},[_vm._v(\"Mô tả ngắn\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inforPartner.note),expression:\"inforPartner.note\"}],staticClass:\"form-control\",attrs:{\"type\":\"text\",\"id\":\"inputShortDes\",\"placeholder\":\"Nhập mô tả ngắn\"},domProps:{\"value\":(_vm.inforPartner.note)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.inforPartner, \"note\", $event.target.value)}}})]),_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"form-group mb-2 mr-3\"},[_c('p',{staticClass:\"preview-product-title\"},[_vm._v(\"Hình ảnh\")]),_c('input',{attrs:{\"id\":\"inputImagePartner\",\"type\":\"file\"},on:{\"change\":_vm.onFileChange}}),_c('div',{attrs:{\"id\":\"preview\"}},[(_vm.inforPartner.linkImage)?_c('img',{staticClass:\"preview-img\",attrs:{\"src\":_vm.inforPartner.linkImage}}):_vm._e()])])]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"inputAddress2\"}},[_vm._v(\"Mô tả chi tiết đối tác\")]),_c('tinymce',{attrs:{\"id\":\"des\",\"plugins\":_vm.plugins},model:{value:(_vm.inforPartner.content),callback:function ($$v) {_vm.$set(_vm.inforPartner, \"content\", $$v)},expression:\"inforPartner.content\"}})],1),_c('button',{staticClass:\"btn btn-primary mb-4\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.btUpdateData}},[_c('i',{staticClass:\"fa fa-paper-plane\",attrs:{\"aria-hidden\":\"true\"}}),_vm._v(\" Cập nhật \")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditPartner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditPartner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EditPartner.vue?vue&type=template&id=ced8bf0a&\"\nimport script from \"./EditPartner.vue?vue&type=script&lang=js&\"\nexport * from \"./EditPartner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./EditPartner.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","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Account.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Account.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Account.vue?vue&type=template&id=b3f052a8&\"\nimport script from \"./Account.vue?vue&type=script&lang=js&\"\nexport * from \"./Account.vue?vue&type=script&lang=js&\"\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","// Exports the \"legacyoutput\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/legacyoutput')\n// ES2015:\n// import 'tinymce/plugins/legacyoutput'\nrequire('./plugin.js');","// 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 \"tabfocus\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/tabfocus')\n// ES2015:\n// import 'tinymce/plugins/tabfocus'\nrequire('./plugin.js');","(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');","(function () {\nvar preview = (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 getPreviewDialogWidth = function (editor) {\n return parseInt(editor.getParam('plugin_preview_width', '650'), 10);\n };\n var getPreviewDialogHeight = function (editor) {\n return parseInt(editor.getParam('plugin_preview_height', '500'), 10);\n };\n var getContentStyle = function (editor) {\n return editor.getParam('content_style', '');\n };\n var Settings = {\n getPreviewDialogWidth: getPreviewDialogWidth,\n getPreviewDialogHeight: getPreviewDialogHeight,\n getContentStyle: getContentStyle\n };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getPreviewHtml = function (editor) {\n var previewHtml;\n var headHtml = '';\n var encode = editor.dom.encode;\n var contentStyle = Settings.getContentStyle(editor);\n headHtml += '';\n if (contentStyle) {\n headHtml += '';\n }\n global$2.each(editor.contentCSS, function (url) {\n headHtml += '';\n });\n var bodyId = editor.settings.body_id || 'tinymce';\n if (bodyId.indexOf('=') !== -1) {\n bodyId = editor.getParam('body_id', '', 'hash');\n bodyId = bodyId[editor.id] || bodyId;\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 var preventClicksOnLinksScript = ' ';\n var dirAttr = editor.settings.directionality ? ' dir=\"' + editor.settings.directionality + '\"' : '';\n previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';\n return previewHtml;\n };\n var injectIframeContent = function (editor, iframe, sandbox) {\n var previewHtml = getPreviewHtml(editor);\n if (!sandbox) {\n var doc = iframe.contentWindow.document;\n doc.open();\n doc.write(previewHtml);\n doc.close();\n } else {\n iframe.src = 'data:text/html;charset=utf-8,' + encodeURIComponent(previewHtml);\n }\n };\n var IframeContent = {\n getPreviewHtml: getPreviewHtml,\n injectIframeContent: injectIframeContent\n };\n\n var open = function (editor) {\n var sandbox = !global$1.ie;\n var dialogHtml = '';\n var dialogWidth = Settings.getPreviewDialogWidth(editor);\n var dialogHeight = Settings.getPreviewDialogHeight(editor);\n editor.windowManager.open({\n title: 'Preview',\n width: dialogWidth,\n height: dialogHeight,\n html: dialogHtml,\n buttons: {\n text: 'Close',\n onclick: function (e) {\n e.control.parent().parent().close();\n }\n },\n onPostRender: function (e) {\n var iframeElm = e.control.getEl('body').firstChild;\n IframeContent.injectIframeContent(editor, iframeElm, sandbox);\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mcePreview', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('preview', {\n title: 'Preview',\n cmd: 'mcePreview'\n });\n editor.addMenuItem('preview', {\n text: 'Preview',\n cmd: 'mcePreview',\n context: 'view'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('preview', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 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');","(function () {\nvar fullpage = (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 var global$2 = tinymce.util.Tools.resolve('tinymce.html.DomParser');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.html.Node');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.html.Serializer');\n\n var shouldHideInSourceView = function (editor) {\n return editor.getParam('fullpage_hide_in_source_view');\n };\n var getDefaultXmlPi = function (editor) {\n return editor.getParam('fullpage_default_xml_pi');\n };\n var getDefaultEncoding = function (editor) {\n return editor.getParam('fullpage_default_encoding');\n };\n var getDefaultFontFamily = function (editor) {\n return editor.getParam('fullpage_default_font_family');\n };\n var getDefaultFontSize = function (editor) {\n return editor.getParam('fullpage_default_font_size');\n };\n var getDefaultTextColor = function (editor) {\n return editor.getParam('fullpage_default_text_color');\n };\n var getDefaultTitle = function (editor) {\n return editor.getParam('fullpage_default_title');\n };\n var getDefaultDocType = function (editor) {\n return editor.getParam('fullpage_default_doctype', '');\n };\n var Settings = {\n shouldHideInSourceView: shouldHideInSourceView,\n getDefaultXmlPi: getDefaultXmlPi,\n getDefaultEncoding: getDefaultEncoding,\n getDefaultFontFamily: getDefaultFontFamily,\n getDefaultFontSize: getDefaultFontSize,\n getDefaultTextColor: getDefaultTextColor,\n getDefaultTitle: getDefaultTitle,\n getDefaultDocType: getDefaultDocType\n };\n\n var parseHeader = function (head) {\n return global$2({\n validate: false,\n root_name: '#document'\n }).parse(head);\n };\n var htmlToData = function (editor, head) {\n var headerFragment = parseHeader(head);\n var data = {};\n var elm, matches;\n function getAttr(elm, name) {\n var value = elm.attr(name);\n return value || '';\n }\n data.fontface = Settings.getDefaultFontFamily(editor);\n data.fontsize = Settings.getDefaultFontSize(editor);\n elm = headerFragment.firstChild;\n if (elm.type === 7) {\n data.xml_pi = true;\n matches = /encoding=\"([^\"]+)\"/.exec(elm.value);\n if (matches) {\n data.docencoding = matches[1];\n }\n }\n elm = headerFragment.getAll('#doctype')[0];\n if (elm) {\n data.doctype = '';\n }\n elm = headerFragment.getAll('title')[0];\n if (elm && elm.firstChild) {\n data.title = elm.firstChild.value;\n }\n global$1.each(headerFragment.getAll('meta'), function (meta) {\n var name = meta.attr('name');\n var httpEquiv = meta.attr('http-equiv');\n var matches;\n if (name) {\n data[name.toLowerCase()] = meta.attr('content');\n } else if (httpEquiv === 'Content-Type') {\n matches = /charset\\s*=\\s*(.*)\\s*/gi.exec(meta.attr('content'));\n if (matches) {\n data.docencoding = matches[1];\n }\n }\n });\n elm = headerFragment.getAll('html')[0];\n if (elm) {\n data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');\n }\n data.stylesheets = [];\n global$1.each(headerFragment.getAll('link'), function (link) {\n if (link.attr('rel') === 'stylesheet') {\n data.stylesheets.push(link.attr('href'));\n }\n });\n elm = headerFragment.getAll('body')[0];\n if (elm) {\n data.langdir = getAttr(elm, 'dir');\n data.style = getAttr(elm, 'style');\n data.visited_color = getAttr(elm, 'vlink');\n data.link_color = getAttr(elm, 'link');\n data.active_color = getAttr(elm, 'alink');\n }\n return data;\n };\n var dataToHtml = function (editor, data, head) {\n var headerFragment, headElement, html, elm, value;\n var dom = editor.dom;\n function setAttr(elm, name, value) {\n elm.attr(name, value ? value : undefined);\n }\n function addHeadNode(node) {\n if (headElement.firstChild) {\n headElement.insert(node, headElement.firstChild);\n } else {\n headElement.append(node);\n }\n }\n headerFragment = parseHeader(head);\n headElement = headerFragment.getAll('head')[0];\n if (!headElement) {\n elm = headerFragment.getAll('html')[0];\n headElement = new global$3('head', 1);\n if (elm.firstChild) {\n elm.insert(headElement, elm.firstChild, true);\n } else {\n elm.append(headElement);\n }\n }\n elm = headerFragment.firstChild;\n if (data.xml_pi) {\n value = 'version=\"1.0\"';\n if (data.docencoding) {\n value += ' encoding=\"' + data.docencoding + '\"';\n }\n if (elm.type !== 7) {\n elm = new global$3('xml', 7);\n headerFragment.insert(elm, headerFragment.firstChild, true);\n }\n elm.value = value;\n } else if (elm && elm.type === 7) {\n elm.remove();\n }\n elm = headerFragment.getAll('#doctype')[0];\n if (data.doctype) {\n if (!elm) {\n elm = new global$3('#doctype', 10);\n if (data.xml_pi) {\n headerFragment.insert(elm, headerFragment.firstChild);\n } else {\n addHeadNode(elm);\n }\n }\n elm.value = data.doctype.substring(9, data.doctype.length - 1);\n } else if (elm) {\n elm.remove();\n }\n elm = null;\n global$1.each(headerFragment.getAll('meta'), function (meta) {\n if (meta.attr('http-equiv') === 'Content-Type') {\n elm = meta;\n }\n });\n if (data.docencoding) {\n if (!elm) {\n elm = new global$3('meta', 1);\n elm.attr('http-equiv', 'Content-Type');\n elm.shortEnded = true;\n addHeadNode(elm);\n }\n elm.attr('content', 'text/html; charset=' + data.docencoding);\n } else if (elm) {\n elm.remove();\n }\n elm = headerFragment.getAll('title')[0];\n if (data.title) {\n if (!elm) {\n elm = new global$3('title', 1);\n addHeadNode(elm);\n } else {\n elm.empty();\n }\n elm.append(new global$3('#text', 3)).value = data.title;\n } else if (elm) {\n elm.remove();\n }\n global$1.each('keywords,description,author,copyright,robots'.split(','), function (name) {\n var nodes = headerFragment.getAll('meta');\n var i, meta;\n var value = data[name];\n for (i = 0; i < nodes.length; i++) {\n meta = nodes[i];\n if (meta.attr('name') === name) {\n if (value) {\n meta.attr('content', value);\n } else {\n meta.remove();\n }\n return;\n }\n }\n if (value) {\n elm = new global$3('meta', 1);\n elm.attr('name', name);\n elm.attr('content', value);\n elm.shortEnded = true;\n addHeadNode(elm);\n }\n });\n var currentStyleSheetsMap = {};\n global$1.each(headerFragment.getAll('link'), function (stylesheet) {\n if (stylesheet.attr('rel') === 'stylesheet') {\n currentStyleSheetsMap[stylesheet.attr('href')] = stylesheet;\n }\n });\n global$1.each(data.stylesheets, function (stylesheet) {\n if (!currentStyleSheetsMap[stylesheet]) {\n elm = new global$3('link', 1);\n elm.attr({\n rel: 'stylesheet',\n text: 'text/css',\n href: stylesheet\n });\n elm.shortEnded = true;\n addHeadNode(elm);\n }\n delete currentStyleSheetsMap[stylesheet];\n });\n global$1.each(currentStyleSheetsMap, function (stylesheet) {\n stylesheet.remove();\n });\n elm = headerFragment.getAll('body')[0];\n if (elm) {\n setAttr(elm, 'dir', data.langdir);\n setAttr(elm, 'style', data.style);\n setAttr(elm, 'vlink', data.visited_color);\n setAttr(elm, 'link', data.link_color);\n setAttr(elm, 'alink', data.active_color);\n dom.setAttribs(editor.getBody(), {\n style: data.style,\n dir: data.dir,\n vLink: data.visited_color,\n link: data.link_color,\n aLink: data.active_color\n });\n }\n elm = headerFragment.getAll('html')[0];\n if (elm) {\n setAttr(elm, 'lang', data.langcode);\n setAttr(elm, 'xml:lang', data.langcode);\n }\n if (!headElement.firstChild) {\n headElement.remove();\n }\n html = global$4({\n validate: false,\n indent: true,\n apply_source_formatting: true,\n indent_before: 'head,html,body,meta,title,script,link,style',\n indent_after: 'head,html,body,meta,title,script,link,style'\n }).serialize(headerFragment);\n return html.substring(0, html.indexOf(''));\n };\n var Parser = {\n parseHeader: parseHeader,\n htmlToData: htmlToData,\n dataToHtml: dataToHtml\n };\n\n var open = function (editor, headState) {\n var data = Parser.htmlToData(editor, headState.get());\n editor.windowManager.open({\n title: 'Document properties',\n data: data,\n defaults: {\n type: 'textbox',\n size: 40\n },\n body: [\n {\n name: 'title',\n label: 'Title'\n },\n {\n name: 'keywords',\n label: 'Keywords'\n },\n {\n name: 'description',\n label: 'Description'\n },\n {\n name: 'robots',\n label: 'Robots'\n },\n {\n name: 'author',\n label: 'Author'\n },\n {\n name: 'docencoding',\n label: 'Encoding'\n }\n ],\n onSubmit: function (e) {\n var headHtml = Parser.dataToHtml(editor, global$1.extend(data, e.data), headState.get());\n headState.set(headHtml);\n }\n });\n };\n var Dialog = { open: open };\n\n var register = function (editor, headState) {\n editor.addCommand('mceFullPageProperties', function () {\n Dialog.open(editor, headState);\n });\n };\n var Commands = { register: register };\n\n var protectHtml = function (protect, html) {\n global$1.each(protect, function (pattern) {\n html = html.replace(pattern, function (str) {\n return '';\n });\n });\n return html;\n };\n var unprotectHtml = function (html) {\n return html.replace(//g, function (a, m) {\n return unescape(m);\n });\n };\n var Protect = {\n protectHtml: protectHtml,\n unprotectHtml: unprotectHtml\n };\n\n var each = global$1.each;\n var low = function (s) {\n return s.replace(/<\\/?[A-Z]+/g, function (a) {\n return a.toLowerCase();\n });\n };\n var handleSetContent = function (editor, headState, footState, evt) {\n var startPos, endPos, content, headerFragment, styles = '';\n var dom = editor.dom;\n var elm;\n if (evt.selection) {\n return;\n }\n content = Protect.protectHtml(editor.settings.protect, evt.content);\n if (evt.format === 'raw' && headState.get()) {\n return;\n }\n if (evt.source_view && Settings.shouldHideInSourceView(editor)) {\n return;\n }\n if (content.length === 0 && !evt.source_view) {\n content = global$1.trim(headState.get()) + '\\n' + global$1.trim(content) + '\\n' + global$1.trim(footState.get());\n }\n content = content.replace(/<(\\/?)BODY/gi, '<$1body');\n startPos = content.indexOf('', startPos);\n headState.set(low(content.substring(0, startPos + 1)));\n endPos = content.indexOf('\\n');\n }\n headerFragment = Parser.parseHeader(headState.get());\n each(headerFragment.getAll('style'), function (node) {\n if (node.firstChild) {\n styles += node.firstChild.value;\n }\n });\n elm = headerFragment.getAll('body')[0];\n if (elm) {\n dom.setAttribs(editor.getBody(), {\n style: elm.attr('style') || '',\n dir: elm.attr('dir') || '',\n vLink: elm.attr('vlink') || '',\n link: elm.attr('link') || '',\n aLink: elm.attr('alink') || ''\n });\n }\n dom.remove('fullpage_styles');\n var headElm = editor.getDoc().getElementsByTagName('head')[0];\n if (styles) {\n dom.add(headElm, 'style', { id: 'fullpage_styles' }, styles);\n elm = dom.get('fullpage_styles');\n if (elm.styleSheet) {\n elm.styleSheet.cssText = styles;\n }\n }\n var currentStyleSheetsMap = {};\n global$1.each(headElm.getElementsByTagName('link'), function (stylesheet) {\n if (stylesheet.rel === 'stylesheet' && stylesheet.getAttribute('data-mce-fullpage')) {\n currentStyleSheetsMap[stylesheet.href] = stylesheet;\n }\n });\n global$1.each(headerFragment.getAll('link'), function (stylesheet) {\n var href = stylesheet.attr('href');\n if (!href) {\n return true;\n }\n if (!currentStyleSheetsMap[href] && stylesheet.attr('rel') === 'stylesheet') {\n dom.add(headElm, 'link', {\n 'rel': 'stylesheet',\n 'text': 'text/css',\n 'href': href,\n 'data-mce-fullpage': '1'\n });\n }\n delete currentStyleSheetsMap[href];\n });\n global$1.each(currentStyleSheetsMap, function (stylesheet) {\n stylesheet.parentNode.removeChild(stylesheet);\n });\n };\n var getDefaultHeader = function (editor) {\n var header = '', value, styles = '';\n if (Settings.getDefaultXmlPi(editor)) {\n var piEncoding = Settings.getDefaultEncoding(editor);\n header += '\\n';\n }\n header += Settings.getDefaultDocType(editor);\n header += '\\n\\n\\n';\n if (value = Settings.getDefaultTitle(editor)) {\n header += '' + value + '\\n';\n }\n if (value = Settings.getDefaultEncoding(editor)) {\n header += '\\n';\n }\n if (value = Settings.getDefaultFontFamily(editor)) {\n styles += 'font-family: ' + value + ';';\n }\n if (value = Settings.getDefaultFontSize(editor)) {\n styles += 'font-size: ' + value + ';';\n }\n if (value = Settings.getDefaultTextColor(editor)) {\n styles += 'color: ' + value + ';';\n }\n header += '\\n\\n';\n return header;\n };\n var handleGetContent = function (editor, head, foot, evt) {\n if (!evt.selection && (!evt.source_view || !Settings.shouldHideInSourceView(editor))) {\n evt.content = Protect.unprotectHtml(global$1.trim(head) + '\\n' + global$1.trim(evt.content) + '\\n' + global$1.trim(foot));\n }\n };\n var setup = function (editor, headState, footState) {\n editor.on('BeforeSetContent', function (evt) {\n handleSetContent(editor, headState, footState, evt);\n });\n editor.on('GetContent', function (evt) {\n handleGetContent(editor, headState.get(), footState.get(), evt);\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('fullpage', {\n title: 'Document properties',\n cmd: 'mceFullPageProperties'\n });\n editor.addMenuItem('fullpage', {\n text: 'Document properties',\n cmd: 'mceFullPageProperties',\n context: 'file'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('fullpage', function (editor) {\n var headState = Cell(''), footState = Cell('');\n Commands.register(editor, headState);\n Buttons.register(editor);\n FilterContent.setup(editor, headState, footState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar legacyoutput = (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 overrideFormats = function (editor) {\n var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', fontSizes = global$1.explode(editor.settings.font_size_style_values), schema = editor.schema;\n editor.formatter.register({\n alignleft: {\n selector: alignElements,\n attributes: { align: 'left' }\n },\n aligncenter: {\n selector: alignElements,\n attributes: { align: 'center' }\n },\n alignright: {\n selector: alignElements,\n attributes: { align: 'right' }\n },\n alignjustify: {\n selector: alignElements,\n attributes: { align: 'justify' }\n },\n bold: [\n {\n inline: 'b',\n remove: 'all'\n },\n {\n inline: 'strong',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontWeight: 'bold' }\n }\n ],\n italic: [\n {\n inline: 'i',\n remove: 'all'\n },\n {\n inline: 'em',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { fontStyle: 'italic' }\n }\n ],\n underline: [\n {\n inline: 'u',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { textDecoration: 'underline' },\n exact: true\n }\n ],\n strikethrough: [\n {\n inline: 'strike',\n remove: 'all'\n },\n {\n inline: 'span',\n styles: { textDecoration: 'line-through' },\n exact: true\n }\n ],\n fontname: {\n inline: 'font',\n attributes: { face: '%value' }\n },\n fontsize: {\n inline: 'font',\n attributes: {\n size: function (vars) {\n return global$1.inArray(fontSizes, vars.value) + 1;\n }\n }\n },\n forecolor: {\n inline: 'font',\n attributes: { color: '%value' }\n },\n hilitecolor: {\n inline: 'font',\n styles: { backgroundColor: '%value' }\n }\n });\n global$1.each('b,i,u,strike'.split(','), function (name) {\n schema.addValidElements(name + '[*]');\n });\n if (!schema.getElementRule('font')) {\n schema.addValidElements('font[face|size|color|style]');\n }\n global$1.each(alignElements.split(','), function (name) {\n var rule = schema.getElementRule(name);\n if (rule) {\n if (!rule.attributes.align) {\n rule.attributes.align = {};\n rule.attributesOrder.push('align');\n }\n }\n });\n };\n var setup = function (editor) {\n editor.settings.inline_styles = false;\n editor.on('init', function () {\n overrideFormats(editor);\n });\n };\n var Formats = { setup: setup };\n\n var register = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = [], defaultFontsizeFormats = '8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7';\n var fontsizeFormats = editor.settings.fontsizeFormats || defaultFontsizeFormats;\n editor.$.each(fontsizeFormats.split(' '), function (i, 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 items.push({\n text: text,\n value: value\n });\n });\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: function () {\n var self = this;\n editor.on('NodeChange', function () {\n var fontElm;\n fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\n if (fontElm) {\n self.value(fontElm.size);\n } else {\n self.value('');\n }\n });\n },\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n editor.addButton('fontselect', function () {\n function createFormats(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 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 items = [], fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n editor.$.each(fonts, function (i, font) {\n items.push({\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n });\n });\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: function () {\n var self = this;\n editor.on('NodeChange', function () {\n var fontElm;\n fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\n if (fontElm) {\n self.value(fontElm.face);\n } else {\n self.value('');\n }\n });\n },\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 Buttons = { register: register };\n\n global.add('legacyoutput', function (editor) {\n Formats.setup(editor);\n Buttons.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 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');","(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 \"print\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/print')\n// ES2015:\n// import 'tinymce/plugins/print'\nrequire('./plugin.js');","// 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');","// Exports the \"imagetools\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/imagetools')\n// ES2015:\n// import 'tinymce/plugins/imagetools'\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","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditIntroduceEmg.vue?vue&type=style&index=0&lang=css&\"","(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","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditNewProject.vue?vue&type=style&index=0&lang=css&\"","// 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","(function () {\nvar bbcode = (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 html2bbcode = function (s) {\n s = global$1.trim(s);\n var rep = function (re, str) {\n s = s.replace(re, str);\n };\n rep(/(.*?)<\\/a>/gi, '[url=$1]$2[/url]');\n rep(/(.*?)<\\/font>/gi, '[code][color=$1]$2[/color][/code]');\n rep(/(.*?)<\\/font>/gi, '[quote][color=$1]$2[/color][/quote]');\n rep(/(.*?)<\\/font>/gi, '[code][color=$1]$2[/color][/code]');\n rep(/(.*?)<\\/font>/gi, '[quote][color=$1]$2[/color][/quote]');\n rep(/(.*?)<\\/span>/gi, '[color=$1]$2[/color]');\n rep(/(.*?)<\\/font>/gi, '[color=$1]$2[/color]');\n rep(/(.*?)<\\/span>/gi, '[size=$1]$2[/size]');\n rep(/(.*?)<\\/font>/gi, '$1');\n rep(//gi, '[img]$1[/img]');\n rep(/(.*?)<\\/span>/gi, '[code]$1[/code]');\n rep(/(.*?)<\\/span>/gi, '[quote]$1[/quote]');\n rep(/(.*?)<\\/strong>/gi, '[code][b]$1[/b][/code]');\n rep(/(.*?)<\\/strong>/gi, '[quote][b]$1[/b][/quote]');\n rep(/(.*?)<\\/em>/gi, '[code][i]$1[/i][/code]');\n rep(/(.*?)<\\/em>/gi, '[quote][i]$1[/i][/quote]');\n rep(/(.*?)<\\/u>/gi, '[code][u]$1[/u][/code]');\n rep(/(.*?)<\\/u>/gi, '[quote][u]$1[/u][/quote]');\n rep(/<\\/(strong|b)>/gi, '[/b]');\n rep(/<(strong|b)>/gi, '[b]');\n rep(/<\\/(em|i)>/gi, '[/i]');\n rep(/<(em|i)>/gi, '[i]');\n rep(/<\\/u>/gi, '[/u]');\n rep(/(.*?)<\\/span>/gi, '[u]$1[/u]');\n rep(//gi, '[u]');\n rep(/]*>/gi, '[quote]');\n rep(/<\\/blockquote>/gi, '[/quote]');\n rep(/
    /gi, '\\n');\n rep(//gi, '\\n');\n rep(/
    /gi, '\\n');\n rep(/

    /gi, '');\n rep(/<\\/p>/gi, '\\n');\n rep(/ |\\u00a0/gi, ' ');\n rep(/"/gi, '\"');\n rep(/</gi, '<');\n rep(/>/gi, '>');\n rep(/&/gi, '&');\n return s;\n };\n var bbcode2html = function (s) {\n s = global$1.trim(s);\n var rep = function (re, str) {\n s = s.replace(re, str);\n };\n rep(/\\n/gi, '
    ');\n rep(/\\[b\\]/gi, '');\n rep(/\\[\\/b\\]/gi, '');\n rep(/\\[i\\]/gi, '');\n rep(/\\[\\/i\\]/gi, '');\n rep(/\\[u\\]/gi, '');\n rep(/\\[\\/u\\]/gi, '');\n rep(/\\[url=([^\\]]+)\\](.*?)\\[\\/url\\]/gi, '$2');\n rep(/\\[url\\](.*?)\\[\\/url\\]/gi, '$1');\n rep(/\\[img\\](.*?)\\[\\/img\\]/gi, '');\n rep(/\\[color=(.*?)\\](.*?)\\[\\/color\\]/gi, '$2');\n rep(/\\[code\\](.*?)\\[\\/code\\]/gi, '$1 ');\n rep(/\\[quote.*?\\](.*?)\\[\\/quote\\]/gi, '$1 ');\n return s;\n };\n var Convert = {\n html2bbcode: html2bbcode,\n bbcode2html: bbcode2html\n };\n\n global.add('bbcode', function () {\n return {\n init: function (editor) {\n editor.on('beforeSetContent', function (e) {\n e.content = Convert.bbcode2html(e.content);\n });\n editor.on('postProcess', function (e) {\n if (e.set) {\n e.content = Convert.bbcode2html(e.content);\n }\n if (e.get) {\n e.content = Convert.html2bbcode(e.content);\n }\n });\n }\n };\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(function () {\nvar imagetools = (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.Tools');\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 function create(width, height) {\n return resize(domGlobals.document.createElement('canvas'), width, height);\n }\n function clone(canvas) {\n var tCanvas = create(canvas.width, canvas.height);\n var ctx = get2dContext(tCanvas);\n ctx.drawImage(canvas, 0, 0);\n return tCanvas;\n }\n function get2dContext(canvas) {\n return canvas.getContext('2d');\n }\n function resize(canvas, width, height) {\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n\n function getWidth(image) {\n return image.naturalWidth || image.width;\n }\n function getHeight(image) {\n return image.naturalHeight || image.height;\n }\n\n var promise = function () {\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 window.setImmediate === 'function' && window.setImmediate || function (fn) {\n domGlobals.setTimeout(fn, 1);\n };\n function bind(fn, thisArg) {\n return function () {\n return fn.apply(thisArg, arguments);\n };\n }\n var isArray = Array.isArray || function (value) {\n return Object.prototype.toString.call(value) === '[object Array]';\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, _a = this._deferreds; _i < _a.length; _i++) {\n var deferred = _a[_i];\n handle.call(this, deferred);\n }\n this._deferreds = [];\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 values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n var args = Array.prototype.slice.call(values.length === 1 && isArray(values[0]) ? values[0] : values);\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 (reason) {\n return new Promise(function (resolve, reject) {\n reject(reason);\n });\n };\n Promise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n value.then(resolve, reject);\n }\n });\n };\n return Promise;\n };\n var Promise = window.Promise ? window.Promise : promise();\n\n function imageToBlob(image) {\n var src = image.src;\n if (src.indexOf('data:') === 0) {\n return dataUriToBlob(src);\n }\n return anyUriToBlob(src);\n }\n function blobToImage(blob) {\n return new Promise(function (resolve, reject) {\n var blobUrl = domGlobals.URL.createObjectURL(blob);\n var image = new domGlobals.Image();\n var removeListeners = function () {\n image.removeEventListener('load', loaded);\n image.removeEventListener('error', error);\n };\n function loaded() {\n removeListeners();\n resolve(image);\n }\n function error() {\n removeListeners();\n reject('Unable to load data of type ' + blob.type + ': ' + blobUrl);\n }\n image.addEventListener('load', loaded);\n image.addEventListener('error', error);\n image.src = blobUrl;\n if (image.complete) {\n loaded();\n }\n });\n }\n function anyUriToBlob(url) {\n return new Promise(function (resolve, reject) {\n var xhr = new domGlobals.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 }\n };\n xhr.onerror = function () {\n var _this = this;\n var corsError = function () {\n var obj = new Error('No access to download image');\n obj.code = 18;\n obj.name = 'SecurityError';\n return obj;\n };\n var genericError = function () {\n return new Error('Error ' + _this.status + ' downloading image');\n };\n reject(this.status === 0 ? corsError() : genericError());\n };\n xhr.send();\n });\n }\n function dataUriToBlobSync(uri) {\n var data = uri.split(',');\n var matches = /data:([^;]+)/.exec(data[0]);\n if (!matches) {\n return Option.none();\n }\n var mimetype = matches[1];\n var base64 = data[1];\n var sliceSize = 1024;\n var byteCharacters = domGlobals.atob(base64);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n var bytes = new Array(end - begin);\n for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n return Option.some(new domGlobals.Blob(byteArrays, { type: mimetype }));\n }\n function dataUriToBlob(uri) {\n return new Promise(function (resolve, reject) {\n dataUriToBlobSync(uri).fold(function () {\n reject('uri is not base64: ' + uri);\n }, resolve);\n });\n }\n function canvasToBlob(canvas, type, quality) {\n type = type || 'image/png';\n if (domGlobals.HTMLCanvasElement.prototype.toBlob) {\n return new Promise(function (resolve, reject) {\n canvas.toBlob(function (blob) {\n if (blob) {\n resolve(blob);\n } else {\n reject();\n }\n }, type, quality);\n });\n } else {\n return dataUriToBlob(canvas.toDataURL(type, quality));\n }\n }\n function canvasToDataURL(canvas, type, quality) {\n type = type || 'image/png';\n return canvas.toDataURL(type, quality);\n }\n function blobToCanvas(blob) {\n return blobToImage(blob).then(function (image) {\n revokeImageUrl(image);\n var canvas = create(getWidth(image), getHeight(image));\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0);\n return canvas;\n });\n }\n function blobToDataUri(blob) {\n return new Promise(function (resolve) {\n var reader = new domGlobals.FileReader();\n reader.onloadend = function () {\n resolve(reader.result);\n };\n reader.readAsDataURL(blob);\n });\n }\n function revokeImageUrl(image) {\n domGlobals.URL.revokeObjectURL(image.src);\n }\n\n var blobToImage$1 = function (blob) {\n return blobToImage(blob);\n };\n var imageToBlob$1 = function (image) {\n return imageToBlob(image);\n };\n\n function create$1(getCanvas, blob, uri) {\n var initialType = blob.type;\n var getType = constant(initialType);\n function toBlob() {\n return Promise.resolve(blob);\n }\n function toDataURL() {\n return uri;\n }\n function toBase64() {\n return uri.split(',')[1];\n }\n function toAdjustedBlob(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n }\n function toAdjustedDataURL(type, quality) {\n return getCanvas.then(function (canvas) {\n return canvasToDataURL(canvas, type, quality);\n });\n }\n function toAdjustedBase64(type, quality) {\n return toAdjustedDataURL(type, quality).then(function (dataurl) {\n return dataurl.split(',')[1];\n });\n }\n function toCanvas() {\n return getCanvas.then(clone);\n }\n return {\n getType: getType,\n toBlob: toBlob,\n toDataURL: toDataURL,\n toBase64: toBase64,\n toAdjustedBlob: toAdjustedBlob,\n toAdjustedDataURL: toAdjustedDataURL,\n toAdjustedBase64: toAdjustedBase64,\n toCanvas: toCanvas\n };\n }\n function fromBlob(blob) {\n return blobToDataUri(blob).then(function (uri) {\n return create$1(blobToCanvas(blob), blob, uri);\n });\n }\n function fromCanvas(canvas, type) {\n return canvasToBlob(canvas, type).then(function (blob) {\n return create$1(Promise.resolve(canvas), blob, canvas.toDataURL());\n });\n }\n\n function clamp(value, min, max) {\n var parsedValue = typeof value === 'string' ? parseFloat(value) : value;\n if (parsedValue > max) {\n parsedValue = max;\n } else if (parsedValue < min) {\n parsedValue = min;\n }\n return parsedValue;\n }\n function identity() {\n return [\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ];\n }\n var DELTA_INDEX = [\n 0,\n 0.01,\n 0.02,\n 0.04,\n 0.05,\n 0.06,\n 0.07,\n 0.08,\n 0.1,\n 0.11,\n 0.12,\n 0.14,\n 0.15,\n 0.16,\n 0.17,\n 0.18,\n 0.2,\n 0.21,\n 0.22,\n 0.24,\n 0.25,\n 0.27,\n 0.28,\n 0.3,\n 0.32,\n 0.34,\n 0.36,\n 0.38,\n 0.4,\n 0.42,\n 0.44,\n 0.46,\n 0.48,\n 0.5,\n 0.53,\n 0.56,\n 0.59,\n 0.62,\n 0.65,\n 0.68,\n 0.71,\n 0.74,\n 0.77,\n 0.8,\n 0.83,\n 0.86,\n 0.89,\n 0.92,\n 0.95,\n 0.98,\n 1,\n 1.06,\n 1.12,\n 1.18,\n 1.24,\n 1.3,\n 1.36,\n 1.42,\n 1.48,\n 1.54,\n 1.6,\n 1.66,\n 1.72,\n 1.78,\n 1.84,\n 1.9,\n 1.96,\n 2,\n 2.12,\n 2.25,\n 2.37,\n 2.5,\n 2.62,\n 2.75,\n 2.87,\n 3,\n 3.2,\n 3.4,\n 3.6,\n 3.8,\n 4,\n 4.3,\n 4.7,\n 4.9,\n 5,\n 5.5,\n 6,\n 6.5,\n 6.8,\n 7,\n 7.3,\n 7.5,\n 7.8,\n 8,\n 8.4,\n 8.7,\n 9,\n 9.4,\n 9.6,\n 9.8,\n 10\n ];\n function multiply(matrix1, matrix2) {\n var col = [];\n var out = new Array(25);\n var val;\n for (var i = 0; i < 5; i++) {\n for (var j = 0; j < 5; j++) {\n col[j] = matrix2[j + i * 5];\n }\n for (var j = 0; j < 5; j++) {\n val = 0;\n for (var k = 0; k < 5; k++) {\n val += matrix1[j + k * 5] * col[k];\n }\n out[j + i * 5] = val;\n }\n }\n return out;\n }\n function adjust(matrix, adjustValue) {\n adjustValue = clamp(adjustValue, 0, 1);\n return matrix.map(function (value, index) {\n if (index % 6 === 0) {\n value = 1 - (1 - value) * adjustValue;\n } else {\n value *= adjustValue;\n }\n return clamp(value, 0, 1);\n });\n }\n function adjustContrast(matrix, value) {\n var x;\n value = clamp(value, -1, 1);\n value *= 100;\n if (value < 0) {\n x = 127 + value / 100 * 127;\n } else {\n x = value % 1;\n if (x === 0) {\n x = DELTA_INDEX[value];\n } else {\n x = DELTA_INDEX[Math.floor(value)] * (1 - x) + DELTA_INDEX[Math.floor(value) + 1] * x;\n }\n x = x * 127 + 127;\n }\n return multiply(matrix, [\n x / 127,\n 0,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n x / 127,\n 0,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n x / 127,\n 0,\n 0.5 * (127 - x),\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustSaturation(matrix, value) {\n value = clamp(value, -1, 1);\n var x = 1 + (value > 0 ? 3 * value : value);\n var lumR = 0.3086;\n var lumG = 0.6094;\n var lumB = 0.082;\n return multiply(matrix, [\n lumR * (1 - x) + x,\n lumG * (1 - x),\n lumB * (1 - x),\n 0,\n 0,\n lumR * (1 - x),\n lumG * (1 - x) + x,\n lumB * (1 - x),\n 0,\n 0,\n lumR * (1 - x),\n lumG * (1 - x),\n lumB * (1 - x) + x,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustHue(matrix, angle) {\n angle = clamp(angle, -180, 180) / 180 * Math.PI;\n var cosVal = Math.cos(angle);\n var sinVal = Math.sin(angle);\n var lumR = 0.213;\n var lumG = 0.715;\n var lumB = 0.072;\n return multiply(matrix, [\n lumR + cosVal * (1 - lumR) + sinVal * -lumR,\n lumG + cosVal * -lumG + sinVal * -lumG,\n lumB + cosVal * -lumB + sinVal * (1 - lumB),\n 0,\n 0,\n lumR + cosVal * -lumR + sinVal * 0.143,\n lumG + cosVal * (1 - lumG) + sinVal * 0.14,\n lumB + cosVal * -lumB + sinVal * -0.283,\n 0,\n 0,\n lumR + cosVal * -lumR + sinVal * -(1 - lumR),\n lumG + cosVal * -lumG + sinVal * lumG,\n lumB + cosVal * (1 - lumB) + sinVal * lumB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustBrightness(matrix, value) {\n value = clamp(255 * value, -255, 255);\n return multiply(matrix, [\n 1,\n 0,\n 0,\n 0,\n value,\n 0,\n 1,\n 0,\n 0,\n value,\n 0,\n 0,\n 1,\n 0,\n value,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustColors(matrix, adjustR, adjustG, adjustB) {\n adjustR = clamp(adjustR, 0, 2);\n adjustG = clamp(adjustG, 0, 2);\n adjustB = clamp(adjustB, 0, 2);\n return multiply(matrix, [\n adjustR,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustG,\n 0,\n 0,\n 0,\n 0,\n 0,\n adjustB,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n }\n function adjustSepia(matrix, value) {\n value = clamp(value, 0, 1);\n return multiply(matrix, adjust([\n 0.393,\n 0.769,\n 0.189,\n 0,\n 0,\n 0.349,\n 0.686,\n 0.168,\n 0,\n 0,\n 0.272,\n 0.534,\n 0.131,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ], value));\n }\n function adjustGrayscale(matrix, value) {\n value = clamp(value, 0, 1);\n return multiply(matrix, adjust([\n 0.33,\n 0.34,\n 0.33,\n 0,\n 0,\n 0.33,\n 0.34,\n 0.33,\n 0,\n 0,\n 0.33,\n 0.34,\n 0.33,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ], value));\n }\n\n function colorFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyColorFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyColorFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(pixelsData, m) {\n var r, g, b, a;\n var data = pixelsData.data, m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5], m6 = m[6], m7 = m[7], m8 = m[8], m9 = m[9], m10 = m[10], m11 = m[11], m12 = m[12], m13 = m[13], m14 = m[14], m15 = m[15], m16 = m[16], m17 = m[17], m18 = m[18], m19 = m[19];\n for (var i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n data[i] = r * m0 + g * m1 + b * m2 + a * m3 + m4;\n data[i + 1] = r * m5 + g * m6 + b * m7 + a * m8 + m9;\n data[i + 2] = r * m10 + g * m11 + b * m12 + a * m13 + m14;\n data[i + 3] = r * m15 + g * m16 + b * m17 + a * m18 + m19;\n }\n return pixelsData;\n }\n var pixels = applyMatrix(context.getImageData(0, 0, canvas.width, canvas.height), matrix);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n }\n function convoluteFilter(ir, matrix) {\n return ir.toCanvas().then(function (canvas) {\n return applyConvoluteFilter(canvas, ir.getType(), matrix);\n });\n }\n function applyConvoluteFilter(canvas, type, matrix) {\n var context = get2dContext(canvas);\n function applyMatrix(pIn, pOut, aMatrix) {\n function clamp(value, min, max) {\n if (value > max) {\n value = max;\n } else if (value < min) {\n value = min;\n }\n return value;\n }\n var side = Math.round(Math.sqrt(aMatrix.length));\n var halfSide = Math.floor(side / 2);\n var rgba = pIn.data;\n var drgba = pOut.data;\n var w = pIn.width;\n var h = pIn.height;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n var r = 0;\n var g = 0;\n var b = 0;\n for (var cy = 0; cy < side; cy++) {\n for (var cx = 0; cx < side; cx++) {\n var scx = clamp(x + cx - halfSide, 0, w - 1);\n var scy = clamp(y + cy - halfSide, 0, h - 1);\n var innerOffset = (scy * w + scx) * 4;\n var wt = aMatrix[cy * side + cx];\n r += rgba[innerOffset] * wt;\n g += rgba[innerOffset + 1] * wt;\n b += rgba[innerOffset + 2] * wt;\n }\n }\n var offset = (y * w + x) * 4;\n drgba[offset] = clamp(r, 0, 255);\n drgba[offset + 1] = clamp(g, 0, 255);\n drgba[offset + 2] = clamp(b, 0, 255);\n }\n }\n return pOut;\n }\n var pixelsIn = context.getImageData(0, 0, canvas.width, canvas.height);\n var pixelsOut = context.getImageData(0, 0, canvas.width, canvas.height);\n pixelsOut = applyMatrix(pixelsIn, pixelsOut, matrix);\n context.putImageData(pixelsOut, 0, 0);\n return fromCanvas(canvas, type);\n }\n function functionColorFilter(colorFn) {\n var filterImpl = function (canvas, type, value) {\n var context = get2dContext(canvas);\n var lookup = new Array(256);\n function applyLookup(pixelsData, lookupData) {\n var data = pixelsData.data;\n for (var i = 0; i < data.length; i += 4) {\n data[i] = lookupData[data[i]];\n data[i + 1] = lookupData[data[i + 1]];\n data[i + 2] = lookupData[data[i + 2]];\n }\n return pixelsData;\n }\n for (var i = 0; i < lookup.length; i++) {\n lookup[i] = colorFn(i, value);\n }\n var pixels = applyLookup(context.getImageData(0, 0, canvas.width, canvas.height), lookup);\n context.putImageData(pixels, 0, 0);\n return fromCanvas(canvas, type);\n };\n return function (ir, value) {\n return ir.toCanvas().then(function (canvas) {\n return filterImpl(canvas, ir.getType(), value);\n });\n };\n }\n function complexAdjustableColorFilter(matrixAdjustFn) {\n return function (ir, adjust) {\n return colorFilter(ir, matrixAdjustFn(identity(), adjust));\n };\n }\n function basicColorFilter(matrix) {\n return function (ir) {\n return colorFilter(ir, matrix);\n };\n }\n function basicConvolutionFilter(kernel) {\n return function (ir) {\n return convoluteFilter(ir, kernel);\n };\n }\n var invert = basicColorFilter([\n -1,\n 0,\n 0,\n 0,\n 255,\n 0,\n -1,\n 0,\n 0,\n 255,\n 0,\n 0,\n -1,\n 0,\n 255,\n 0,\n 0,\n 0,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 1\n ]);\n var brightness = complexAdjustableColorFilter(adjustBrightness);\n var hue = complexAdjustableColorFilter(adjustHue);\n var saturate = complexAdjustableColorFilter(adjustSaturation);\n var contrast = complexAdjustableColorFilter(adjustContrast);\n var grayscale = complexAdjustableColorFilter(adjustGrayscale);\n var sepia = complexAdjustableColorFilter(adjustSepia);\n var colorize = function (ir, adjustR, adjustG, adjustB) {\n return colorFilter(ir, adjustColors(identity(), adjustR, adjustG, adjustB));\n };\n var sharpen = basicConvolutionFilter([\n 0,\n -1,\n 0,\n -1,\n 5,\n -1,\n 0,\n -1,\n 0\n ]);\n var emboss = basicConvolutionFilter([\n -2,\n -1,\n 0,\n -1,\n 1,\n 1,\n 0,\n 1,\n 2\n ]);\n var gamma = functionColorFilter(function (color, value) {\n return Math.pow(color / 255, 1 - value) * 255;\n });\n var exposure = functionColorFilter(function (color, value) {\n return 255 * (1 - Math.exp(-(color / 255) * value));\n });\n\n function scale(image, dW, dH) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var wRatio = dW / sW;\n var hRatio = dH / sH;\n var scaleCapped = false;\n if (wRatio < 0.5 || wRatio > 2) {\n wRatio = wRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n if (hRatio < 0.5 || hRatio > 2) {\n hRatio = hRatio < 0.5 ? 0.5 : 2;\n scaleCapped = true;\n }\n var scaled = _scale(image, wRatio, hRatio);\n return !scaleCapped ? scaled : scaled.then(function (tCanvas) {\n return scale(tCanvas, dW, dH);\n });\n }\n function _scale(image, wRatio, hRatio) {\n return new Promise(function (resolve) {\n var sW = getWidth(image);\n var sH = getHeight(image);\n var dW = Math.floor(sW * wRatio);\n var dH = Math.floor(sH * hRatio);\n var canvas = create(dW, dH);\n var context = get2dContext(canvas);\n context.drawImage(image, 0, 0, sW, sH, 0, 0, dW, dH);\n resolve(canvas);\n });\n }\n\n function rotate(ir, angle) {\n return ir.toCanvas().then(function (canvas) {\n return applyRotate(canvas, ir.getType(), angle);\n });\n }\n function applyRotate(image, type, angle) {\n var canvas = create(image.width, image.height);\n var context = get2dContext(canvas);\n var translateX = 0;\n var translateY = 0;\n angle = angle < 0 ? 360 + angle : angle;\n if (angle === 90 || angle === 270) {\n resize(canvas, canvas.height, canvas.width);\n }\n if (angle === 90 || angle === 180) {\n translateX = canvas.width;\n }\n if (angle === 270 || angle === 180) {\n translateY = canvas.height;\n }\n context.translate(translateX, translateY);\n context.rotate(angle * Math.PI / 180);\n context.drawImage(image, 0, 0);\n return fromCanvas(canvas, type);\n }\n function flip(ir, axis) {\n return ir.toCanvas().then(function (canvas) {\n return applyFlip(canvas, ir.getType(), axis);\n });\n }\n function applyFlip(image, type, axis) {\n var canvas = create(image.width, image.height);\n var context = get2dContext(canvas);\n if (axis === 'v') {\n context.scale(1, -1);\n context.drawImage(image, 0, -canvas.height);\n } else {\n context.scale(-1, 1);\n context.drawImage(image, -canvas.width, 0);\n }\n return fromCanvas(canvas, type);\n }\n function crop(ir, x, y, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return applyCrop(canvas, ir.getType(), x, y, w, h);\n });\n }\n function applyCrop(image, type, x, y, w, h) {\n var canvas = create(w, h);\n var context = get2dContext(canvas);\n context.drawImage(image, -x, -y);\n return fromCanvas(canvas, type);\n }\n function resize$1(ir, w, h) {\n return ir.toCanvas().then(function (canvas) {\n return scale(canvas, w, h).then(function (newCanvas) {\n return fromCanvas(newCanvas, ir.getType());\n });\n });\n }\n\n var invert$1 = function (ir) {\n return invert(ir);\n };\n var sharpen$1 = function (ir) {\n return sharpen(ir);\n };\n var emboss$1 = function (ir) {\n return emboss(ir);\n };\n var gamma$1 = function (ir, value) {\n return gamma(ir, value);\n };\n var exposure$1 = function (ir, value) {\n return exposure(ir, value);\n };\n var colorize$1 = function (ir, adjustR, adjustG, adjustB) {\n return colorize(ir, adjustR, adjustG, adjustB);\n };\n var brightness$1 = function (ir, adjust) {\n return brightness(ir, adjust);\n };\n var hue$1 = function (ir, adjust) {\n return hue(ir, adjust);\n };\n var saturate$1 = function (ir, adjust) {\n return saturate(ir, adjust);\n };\n var contrast$1 = function (ir, adjust) {\n return contrast(ir, adjust);\n };\n var grayscale$1 = function (ir, adjust) {\n return grayscale(ir, adjust);\n };\n var sepia$1 = function (ir, adjust) {\n return sepia(ir, adjust);\n };\n var flip$1 = function (ir, axis) {\n return flip(ir, axis);\n };\n var crop$1 = function (ir, x, y, w, h) {\n return crop(ir, x, y, w, h);\n };\n var resize$2 = function (ir, w, h) {\n return resize$1(ir, w, h);\n };\n var rotate$1 = function (ir, angle) {\n return rotate(ir, angle);\n };\n\n var blobToImageResult = function (blob) {\n return fromBlob(blob);\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 global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var getToolbarItems = function (editor) {\n return editor.getParam('imagetools_toolbar', 'rotateleft rotateright | flipv fliph | crop editimage imageoptions');\n };\n var getProxyUrl = function (editor) {\n return editor.getParam('imagetools_proxy');\n };\n var getCorsHosts = function (editor) {\n return editor.getParam('imagetools_cors_hosts', [], 'string[]');\n };\n var getCredentialsHosts = function (editor) {\n return editor.getParam('imagetools_credentials_hosts', [], 'string[]');\n };\n var getApiKey = function (editor) {\n return editor.getParam('api_key', editor.getParam('imagetools_api_key', '', 'string'), 'string');\n };\n var getUploadTimeout = function (editor) {\n return editor.getParam('images_upload_timeout', 30000, 'number');\n };\n var shouldReuseFilename = function (editor) {\n return editor.getParam('images_reuse_filename', false, 'boolean');\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n function UndoStack () {\n var data = [];\n var index = -1;\n function add(state) {\n var removed;\n removed = data.splice(++index);\n data.push(state);\n return {\n state: state,\n removed: removed\n };\n }\n function undo() {\n if (canUndo()) {\n return data[--index];\n }\n }\n function redo() {\n if (canRedo()) {\n return data[++index];\n }\n }\n function canUndo() {\n return index > 0;\n }\n function canRedo() {\n return index !== -1 && index < data.length - 1;\n }\n return {\n data: data,\n add: add,\n undo: undo,\n redo: redo,\n canUndo: canUndo,\n canRedo: canRedo\n };\n }\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var loadImage = function (image) {\n return new global$3(function (resolve) {\n var loaded = function () {\n image.removeEventListener('load', loaded);\n resolve(image);\n };\n if (image.complete) {\n resolve(image);\n } else {\n image.addEventListener('load', loaded);\n }\n });\n };\n var LoadImage = { loadImage: loadImage };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n var global$a = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var count = 0;\n function CropRect (currentRect, viewPortRect, clampRect, containerElm, action) {\n var instance;\n var handles;\n var dragHelpers;\n var blockers;\n var prefix = 'mce-';\n var id = prefix + 'crid-' + count++;\n handles = [\n {\n name: 'move',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: 0,\n deltaH: 0,\n label: 'Crop Mask'\n },\n {\n name: 'nw',\n xMul: 0,\n yMul: 0,\n deltaX: 1,\n deltaY: 1,\n deltaW: -1,\n deltaH: -1,\n label: 'Top Left Crop Handle'\n },\n {\n name: 'ne',\n xMul: 1,\n yMul: 0,\n deltaX: 0,\n deltaY: 1,\n deltaW: 1,\n deltaH: -1,\n label: 'Top Right Crop Handle'\n },\n {\n name: 'sw',\n xMul: 0,\n yMul: 1,\n deltaX: 1,\n deltaY: 0,\n deltaW: -1,\n deltaH: 1,\n label: 'Bottom Left Crop Handle'\n },\n {\n name: 'se',\n xMul: 1,\n yMul: 1,\n deltaX: 0,\n deltaY: 0,\n deltaW: 1,\n deltaH: 1,\n label: 'Bottom Right Crop Handle'\n }\n ];\n blockers = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ];\n function getAbsoluteRect(outerRect, relativeRect) {\n return {\n x: relativeRect.x + outerRect.x,\n y: relativeRect.y + outerRect.y,\n w: relativeRect.w,\n h: relativeRect.h\n };\n }\n function getRelativeRect(outerRect, innerRect) {\n return {\n x: innerRect.x - outerRect.x,\n y: innerRect.y - outerRect.y,\n w: innerRect.w,\n h: innerRect.h\n };\n }\n function getInnerRect() {\n return getRelativeRect(clampRect, currentRect);\n }\n function moveRect(handle, startRect, deltaX, deltaY) {\n var x, y, w, h, rect;\n x = startRect.x;\n y = startRect.y;\n w = startRect.w;\n h = startRect.h;\n x += deltaX * handle.deltaX;\n y += deltaY * handle.deltaY;\n w += deltaX * handle.deltaW;\n h += deltaY * handle.deltaH;\n if (w < 20) {\n w = 20;\n }\n if (h < 20) {\n h = 20;\n }\n rect = currentRect = global$7.clamp({\n x: x,\n y: y,\n w: w,\n h: h\n }, clampRect, handle.name === 'move');\n rect = getRelativeRect(clampRect, rect);\n instance.fire('updateRect', { rect: rect });\n setInnerRect(rect);\n }\n function render() {\n function createDragHelper(handle) {\n var startRect;\n var DragHelper = global$6.get('DragHelper');\n return new DragHelper(id, {\n document: containerElm.ownerDocument,\n handle: id + '-' + handle.name,\n start: function () {\n startRect = currentRect;\n },\n drag: function (e) {\n moveRect(handle, startRect, e.deltaX, e.deltaY);\n }\n });\n }\n global$8('

    ').appendTo(containerElm);\n global$1.each(blockers, function (blocker) {\n global$8('#' + id, containerElm).append('
    ');\n });\n global$1.each(handles, function (handle) {\n global$8('#' + id, containerElm).append('
    ');\n });\n dragHelpers = global$1.map(handles, createDragHelper);\n repaint(currentRect);\n global$8(containerElm).on('focusin focusout', function (e) {\n global$8(e.target).attr('aria-grabbed', e.type === 'focus');\n });\n global$8(containerElm).on('keydown', function (e) {\n var activeHandle;\n global$1.each(handles, function (handle) {\n if (e.target.id === id + '-' + handle.name) {\n activeHandle = handle;\n return false;\n }\n });\n function moveAndBlock(evt, handle, startRect, deltaX, deltaY) {\n evt.stopPropagation();\n evt.preventDefault();\n moveRect(activeHandle, startRect, deltaX, deltaY);\n }\n switch (e.keyCode) {\n case global$a.LEFT:\n moveAndBlock(e, activeHandle, currentRect, -10, 0);\n break;\n case global$a.RIGHT:\n moveAndBlock(e, activeHandle, currentRect, 10, 0);\n break;\n case global$a.UP:\n moveAndBlock(e, activeHandle, currentRect, 0, -10);\n break;\n case global$a.DOWN:\n moveAndBlock(e, activeHandle, currentRect, 0, 10);\n break;\n case global$a.ENTER:\n case global$a.SPACEBAR:\n e.preventDefault();\n action();\n break;\n }\n });\n }\n function toggleVisibility(state) {\n var selectors;\n selectors = global$1.map(handles, function (handle) {\n return '#' + id + '-' + handle.name;\n }).concat(global$1.map(blockers, function (blocker) {\n return '#' + id + '-' + blocker;\n })).join(',');\n if (state) {\n global$8(selectors, containerElm).show();\n } else {\n global$8(selectors, containerElm).hide();\n }\n }\n function repaint(rect) {\n function updateElementRect(name, rect) {\n if (rect.h < 0) {\n rect.h = 0;\n }\n if (rect.w < 0) {\n rect.w = 0;\n }\n global$8('#' + id + '-' + name, containerElm).css({\n left: rect.x,\n top: rect.y,\n width: rect.w,\n height: rect.h\n });\n }\n global$1.each(handles, function (handle) {\n global$8('#' + id + '-' + handle.name, containerElm).css({\n left: rect.w * handle.xMul + rect.x,\n top: rect.h * handle.yMul + rect.y\n });\n });\n updateElementRect('top', {\n x: viewPortRect.x,\n y: viewPortRect.y,\n w: viewPortRect.w,\n h: rect.y - viewPortRect.y\n });\n updateElementRect('right', {\n x: rect.x + rect.w,\n y: rect.y,\n w: viewPortRect.w - rect.x - rect.w + viewPortRect.x,\n h: rect.h\n });\n updateElementRect('bottom', {\n x: viewPortRect.x,\n y: rect.y + rect.h,\n w: viewPortRect.w,\n h: viewPortRect.h - rect.y - rect.h + viewPortRect.y\n });\n updateElementRect('left', {\n x: viewPortRect.x,\n y: rect.y,\n w: rect.x - viewPortRect.x,\n h: rect.h\n });\n updateElementRect('move', rect);\n }\n function setRect(rect) {\n currentRect = rect;\n repaint(currentRect);\n }\n function setViewPortRect(rect) {\n viewPortRect = rect;\n repaint(currentRect);\n }\n function setInnerRect(rect) {\n setRect(getAbsoluteRect(clampRect, rect));\n }\n function setClampRect(rect) {\n clampRect = rect;\n repaint(currentRect);\n }\n function destroy() {\n global$1.each(dragHelpers, function (helper) {\n helper.destroy();\n });\n dragHelpers = [];\n }\n render();\n instance = global$1.extend({\n toggleVisibility: toggleVisibility,\n setClampRect: setClampRect,\n setRect: setRect,\n getInnerRect: getInnerRect,\n setInnerRect: setInnerRect,\n setViewPortRect: setViewPortRect,\n destroy: destroy\n }, global$9);\n return instance;\n }\n\n var create$2 = function (settings) {\n var Control = global$6.get('Control');\n var ImagePanel = Control.extend({\n Defaults: { classes: 'imagepanel' },\n selection: function (rect) {\n if (arguments.length) {\n this.state.set('rect', rect);\n return this;\n }\n return this.state.get('rect');\n },\n imageSize: function () {\n var viewRect = this.state.get('viewRect');\n return {\n w: viewRect.w,\n h: viewRect.h\n };\n },\n toggleCropRect: function (state) {\n this.state.set('cropEnabled', state);\n },\n imageSrc: function (url) {\n var self = this, img = new domGlobals.Image();\n img.src = url;\n LoadImage.loadImage(img).then(function () {\n var rect, $img;\n var lastRect = self.state.get('viewRect');\n $img = self.$el.find('img');\n if ($img[0]) {\n $img.replaceWith(img);\n } else {\n var bg = domGlobals.document.createElement('div');\n bg.className = 'mce-imagepanel-bg';\n self.getEl().appendChild(bg);\n self.getEl().appendChild(img);\n }\n rect = {\n x: 0,\n y: 0,\n w: img.naturalWidth,\n h: img.naturalHeight\n };\n self.state.set('viewRect', rect);\n self.state.set('rect', global$7.inflate(rect, -20, -20));\n if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n self.zoomFit();\n }\n self.repaintImage();\n self.fire('load');\n });\n },\n zoom: function (value) {\n if (arguments.length) {\n this.state.set('zoom', value);\n return this;\n }\n return this.state.get('zoom');\n },\n postRender: function () {\n this.imageSrc(this.settings.imageSrc);\n return this._super();\n },\n zoomFit: function () {\n var self = this;\n var $img, pw, ph, w, h, zoom, padding;\n padding = 10;\n $img = self.$el.find('img');\n pw = self.getEl().clientWidth;\n ph = self.getEl().clientHeight;\n w = $img[0].naturalWidth;\n h = $img[0].naturalHeight;\n zoom = Math.min((pw - padding) / w, (ph - padding) / h);\n if (zoom >= 1) {\n zoom = 1;\n }\n self.zoom(zoom);\n },\n repaintImage: function () {\n var x, y, w, h, pw, ph, $img, $bg, zoom, rect, elm;\n elm = this.getEl();\n zoom = this.zoom();\n rect = this.state.get('rect');\n $img = this.$el.find('img');\n $bg = this.$el.find('.mce-imagepanel-bg');\n pw = elm.offsetWidth;\n ph = elm.offsetHeight;\n w = $img[0].naturalWidth * zoom;\n h = $img[0].naturalHeight * zoom;\n x = Math.max(0, pw / 2 - w / 2);\n y = Math.max(0, ph / 2 - h / 2);\n $img.css({\n left: x,\n top: y,\n width: w,\n height: h\n });\n $bg.css({\n left: x,\n top: y,\n width: w,\n height: h\n });\n if (this.cropRect) {\n this.cropRect.setRect({\n x: rect.x * zoom + x,\n y: rect.y * zoom + y,\n w: rect.w * zoom,\n h: rect.h * zoom\n });\n this.cropRect.setClampRect({\n x: x,\n y: y,\n w: w,\n h: h\n });\n this.cropRect.setViewPortRect({\n x: 0,\n y: 0,\n w: pw,\n h: ph\n });\n }\n },\n bindStates: function () {\n var self = this;\n function setupCropRect(rect) {\n self.cropRect = CropRect(rect, self.state.get('viewRect'), self.state.get('viewRect'), self.getEl(), function () {\n self.fire('crop');\n });\n self.cropRect.on('updateRect', function (e) {\n var rect = e.rect;\n var zoom = self.zoom();\n rect = {\n x: Math.round(rect.x / zoom),\n y: Math.round(rect.y / zoom),\n w: Math.round(rect.w / zoom),\n h: Math.round(rect.h / zoom)\n };\n self.state.set('rect', rect);\n });\n self.on('remove', self.cropRect.destroy);\n }\n self.state.on('change:cropEnabled', function (e) {\n self.cropRect.toggleVisibility(e.value);\n self.repaintImage();\n });\n self.state.on('change:zoom', function () {\n self.repaintImage();\n });\n self.state.on('change:rect', function (e) {\n var rect = e.value;\n if (!self.cropRect) {\n setupCropRect(rect);\n }\n self.cropRect.setRect(rect);\n });\n }\n });\n return new ImagePanel(settings);\n };\n var ImagePanel = { create: create$2 };\n\n function createState(blob) {\n return {\n blob: blob,\n url: URL.createObjectURL(blob)\n };\n }\n function destroyState(state) {\n if (state) {\n URL.revokeObjectURL(state.url);\n }\n }\n function destroyStates(states) {\n global$1.each(states, destroyState);\n }\n function open(editor, currentState, resolve, reject) {\n var win, undoStack = UndoStack(), mainPanel, filtersPanel, tempState, cropPanel, resizePanel, flipRotatePanel, imagePanel, sidePanel, mainViewContainer, invertPanel, brightnessPanel, huePanel, saturatePanel, contrastPanel, grayscalePanel, sepiaPanel, colorizePanel, sharpenPanel, embossPanel, gammaPanel, exposurePanel, panels, width, height, ratioW, ratioH;\n var reverseIfRtl = function (items) {\n return editor.rtl ? items.reverse() : items;\n };\n function recalcSize(e) {\n var widthCtrl, heightCtrl, newWidth, newHeight;\n widthCtrl = win.find('#w')[0];\n heightCtrl = win.find('#h')[0];\n newWidth = parseInt(widthCtrl.value(), 10);\n newHeight = parseInt(heightCtrl.value(), 10);\n if (win.find('#constrain')[0].checked() && width && height && newWidth && newHeight) {\n if (e.control.settings.name === 'w') {\n newHeight = Math.round(newWidth * ratioW);\n heightCtrl.value(newHeight);\n } else {\n newWidth = Math.round(newHeight * ratioH);\n widthCtrl.value(newWidth);\n }\n }\n width = newWidth;\n height = newHeight;\n }\n function floatToPercent(value) {\n return Math.round(value * 100) + '%';\n }\n function updateButtonUndoStates() {\n win.find('#undo').disabled(!undoStack.canUndo());\n win.find('#redo').disabled(!undoStack.canRedo());\n win.statusbar.find('#save').disabled(!undoStack.canUndo());\n }\n function disableUndoRedo() {\n win.find('#undo').disabled(true);\n win.find('#redo').disabled(true);\n }\n function displayState(state) {\n if (state) {\n imagePanel.imageSrc(state.url);\n }\n }\n function switchPanel(targetPanel) {\n return function () {\n var hidePanels = global$1.grep(panels, function (panel) {\n return panel.settings.name !== targetPanel;\n });\n global$1.each(hidePanels, function (panel) {\n panel.hide();\n });\n targetPanel.show();\n targetPanel.focus();\n };\n }\n function addTempState(blob) {\n tempState = createState(blob);\n displayState(tempState);\n }\n function addBlobState(blob) {\n currentState = createState(blob);\n displayState(currentState);\n destroyStates(undoStack.add(currentState).removed);\n updateButtonUndoStates();\n }\n function crop() {\n var rect = imagePanel.selection();\n blobToImageResult(currentState.blob).then(function (ir) {\n crop$1(ir, rect.x, rect.y, rect.w, rect.h).then(imageResultToBlob).then(function (blob) {\n addBlobState(blob);\n cancel();\n });\n });\n }\n var tempAction = function (fn) {\n var args = [].slice.call(arguments, 1);\n return function () {\n var state = tempState || currentState;\n blobToImageResult(state.blob).then(function (ir) {\n fn.apply(this, [ir].concat(args)).then(imageResultToBlob).then(addTempState);\n });\n };\n };\n function action(fn) {\n var arg = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n arg[_i - 1] = arguments[_i];\n }\n var args = [].slice.call(arguments, 1);\n return function () {\n blobToImageResult(currentState.blob).then(function (ir) {\n fn.apply(this, [ir].concat(args)).then(imageResultToBlob).then(addBlobState);\n });\n };\n }\n function cancel() {\n displayState(currentState);\n destroyState(tempState);\n switchPanel(mainPanel)();\n updateButtonUndoStates();\n }\n function waitForTempState(times, applyCall) {\n if (tempState) {\n applyCall();\n } else {\n setTimeout(function () {\n if (times-- > 0) {\n waitForTempState(times, applyCall);\n } else {\n editor.windowManager.alert('Error: failed to apply image operation.');\n }\n }, 10);\n }\n }\n function applyTempState() {\n if (tempState) {\n addBlobState(tempState.blob);\n cancel();\n } else {\n waitForTempState(100, applyTempState);\n }\n }\n function zoomIn() {\n var zoom = imagePanel.zoom();\n if (zoom < 2) {\n zoom += 0.1;\n }\n imagePanel.zoom(zoom);\n }\n function zoomOut() {\n var zoom = imagePanel.zoom();\n if (zoom > 0.1) {\n zoom -= 0.1;\n }\n imagePanel.zoom(zoom);\n }\n function undo() {\n currentState = undoStack.undo();\n displayState(currentState);\n updateButtonUndoStates();\n }\n function redo() {\n currentState = undoStack.redo();\n displayState(currentState);\n updateButtonUndoStates();\n }\n function save() {\n resolve(currentState.blob);\n win.close();\n }\n function createPanel(items) {\n return global$6.create('Form', {\n layout: 'flex',\n direction: 'row',\n labelGap: 5,\n border: '0 0 1 0',\n align: 'center',\n pack: 'center',\n padding: '0 10 0 10',\n spacing: 5,\n flex: 0,\n minHeight: 60,\n defaults: {\n classes: 'imagetool',\n type: 'button'\n },\n items: items\n });\n }\n var imageResultToBlob = function (ir) {\n return ir.toBlob();\n };\n function createFilterPanel(title, filter) {\n return createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: applyTempState\n }\n ])).hide().on('show', function () {\n disableUndoRedo();\n blobToImageResult(currentState.blob).then(function (ir) {\n return filter(ir);\n }).then(imageResultToBlob).then(function (blob) {\n var newTempState = createState(blob);\n displayState(newTempState);\n destroyState(tempState);\n tempState = newTempState;\n });\n });\n }\n function createVariableFilterPanel(title, filter, value, min, max) {\n function update(value) {\n blobToImageResult(currentState.blob).then(function (ir) {\n return filter(ir, value);\n }).then(imageResultToBlob).then(function (blob) {\n var newTempState = createState(blob);\n displayState(newTempState);\n destroyState(tempState);\n tempState = newTempState;\n });\n }\n return createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n type: 'slider',\n flex: 1,\n ondragend: function (e) {\n update(e.value);\n },\n minValue: editor.rtl ? max : min,\n maxValue: editor.rtl ? min : max,\n value: value,\n previewFilter: floatToPercent\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: applyTempState\n }\n ])).hide().on('show', function () {\n this.find('slider').value(value);\n disableUndoRedo();\n });\n }\n function createRgbFilterPanel(title, filter) {\n function update() {\n var r, g, b;\n r = win.find('#r')[0].value();\n g = win.find('#g')[0].value();\n b = win.find('#b')[0].value();\n blobToImageResult(currentState.blob).then(function (ir) {\n return filter(ir, r, g, b);\n }).then(imageResultToBlob).then(function (blob) {\n var newTempState = createState(blob);\n displayState(newTempState);\n destroyState(tempState);\n tempState = newTempState;\n });\n }\n var min = editor.rtl ? 2 : 0;\n var max = editor.rtl ? 0 : 2;\n return createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n type: 'slider',\n label: 'R',\n name: 'r',\n minValue: min,\n value: 1,\n maxValue: max,\n ondragend: update,\n previewFilter: floatToPercent\n },\n {\n type: 'slider',\n label: 'G',\n name: 'g',\n minValue: min,\n value: 1,\n maxValue: max,\n ondragend: update,\n previewFilter: floatToPercent\n },\n {\n type: 'slider',\n label: 'B',\n name: 'b',\n minValue: min,\n value: 1,\n maxValue: max,\n ondragend: update,\n previewFilter: floatToPercent\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: applyTempState\n }\n ])).hide().on('show', function () {\n win.find('#r,#g,#b').value(1);\n disableUndoRedo();\n });\n }\n cropPanel = createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: crop\n }\n ])).hide().on('show hide', function (e) {\n imagePanel.toggleCropRect(e.type === 'show');\n }).on('show', disableUndoRedo);\n function toggleConstrain(e) {\n if (e.control.value() === true) {\n ratioW = height / width;\n ratioH = width / height;\n }\n }\n resizePanel = createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n type: 'textbox',\n name: 'w',\n label: 'Width',\n size: 4,\n onkeyup: recalcSize\n },\n {\n type: 'textbox',\n name: 'h',\n label: 'Height',\n size: 4,\n onkeyup: recalcSize\n },\n {\n type: 'checkbox',\n name: 'constrain',\n text: 'Constrain proportions',\n checked: true,\n onchange: toggleConstrain\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: 'submit'\n }\n ])).hide().on('submit', function (e) {\n var width = parseInt(win.find('#w').value(), 10), height = parseInt(win.find('#h').value(), 10);\n e.preventDefault();\n action(resize$2, width, height)();\n cancel();\n }).on('show', disableUndoRedo);\n flipRotatePanel = createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n icon: 'fliph',\n tooltip: 'Flip horizontally',\n onclick: tempAction(flip$1, 'h')\n },\n {\n icon: 'flipv',\n tooltip: 'Flip vertically',\n onclick: tempAction(flip$1, 'v')\n },\n {\n icon: 'rotateleft',\n tooltip: 'Rotate counterclockwise',\n onclick: tempAction(rotate$1, -90)\n },\n {\n icon: 'rotateright',\n tooltip: 'Rotate clockwise',\n onclick: tempAction(rotate$1, 90)\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'Apply',\n subtype: 'primary',\n onclick: applyTempState\n }\n ])).hide().on('show', disableUndoRedo);\n invertPanel = createFilterPanel('Invert', invert$1);\n sharpenPanel = createFilterPanel('Sharpen', sharpen$1);\n embossPanel = createFilterPanel('Emboss', emboss$1);\n brightnessPanel = createVariableFilterPanel('Brightness', brightness$1, 0, -1, 1);\n huePanel = createVariableFilterPanel('Hue', hue$1, 180, 0, 360);\n saturatePanel = createVariableFilterPanel('Saturate', saturate$1, 0, -1, 1);\n contrastPanel = createVariableFilterPanel('Contrast', contrast$1, 0, -1, 1);\n grayscalePanel = createVariableFilterPanel('Grayscale', grayscale$1, 0, 0, 1);\n sepiaPanel = createVariableFilterPanel('Sepia', sepia$1, 0, 0, 1);\n colorizePanel = createRgbFilterPanel('Colorize', colorize$1);\n gammaPanel = createVariableFilterPanel('Gamma', gamma$1, 0, -1, 1);\n exposurePanel = createVariableFilterPanel('Exposure', exposure$1, 1, 0, 2);\n filtersPanel = createPanel(reverseIfRtl([\n {\n text: 'Back',\n onclick: cancel\n },\n {\n type: 'spacer',\n flex: 1\n },\n {\n text: 'hue',\n icon: 'hue',\n onclick: switchPanel(huePanel)\n },\n {\n text: 'saturate',\n icon: 'saturate',\n onclick: switchPanel(saturatePanel)\n },\n {\n text: 'sepia',\n icon: 'sepia',\n onclick: switchPanel(sepiaPanel)\n },\n {\n text: 'emboss',\n icon: 'emboss',\n onclick: switchPanel(embossPanel)\n },\n {\n text: 'exposure',\n icon: 'exposure',\n onclick: switchPanel(exposurePanel)\n },\n {\n type: 'spacer',\n flex: 1\n }\n ])).hide();\n mainPanel = createPanel(reverseIfRtl([\n {\n tooltip: 'Crop',\n icon: 'crop',\n onclick: switchPanel(cropPanel)\n },\n {\n tooltip: 'Resize',\n icon: 'resize2',\n onclick: switchPanel(resizePanel)\n },\n {\n tooltip: 'Orientation',\n icon: 'orientation',\n onclick: switchPanel(flipRotatePanel)\n },\n {\n tooltip: 'Brightness',\n icon: 'sun',\n onclick: switchPanel(brightnessPanel)\n },\n {\n tooltip: 'Sharpen',\n icon: 'sharpen',\n onclick: switchPanel(sharpenPanel)\n },\n {\n tooltip: 'Contrast',\n icon: 'contrast',\n onclick: switchPanel(contrastPanel)\n },\n {\n tooltip: 'Color levels',\n icon: 'drop',\n onclick: switchPanel(colorizePanel)\n },\n {\n tooltip: 'Gamma',\n icon: 'gamma',\n onclick: switchPanel(gammaPanel)\n },\n {\n tooltip: 'Invert',\n icon: 'invert',\n onclick: switchPanel(invertPanel)\n }\n ]));\n imagePanel = ImagePanel.create({\n flex: 1,\n imageSrc: currentState.url\n });\n sidePanel = global$6.create('Container', {\n layout: 'flex',\n direction: 'column',\n pack: 'start',\n border: '0 1 0 0',\n padding: 5,\n spacing: 5,\n items: [\n {\n type: 'button',\n icon: 'undo',\n tooltip: 'Undo',\n name: 'undo',\n onclick: undo\n },\n {\n type: 'button',\n icon: 'redo',\n tooltip: 'Redo',\n name: 'redo',\n onclick: redo\n },\n {\n type: 'button',\n icon: 'zoomin',\n tooltip: 'Zoom in',\n onclick: zoomIn\n },\n {\n type: 'button',\n icon: 'zoomout',\n tooltip: 'Zoom out',\n onclick: zoomOut\n }\n ]\n });\n mainViewContainer = global$6.create('Container', {\n type: 'container',\n layout: 'flex',\n direction: 'row',\n align: 'stretch',\n flex: 1,\n items: reverseIfRtl([\n sidePanel,\n imagePanel\n ])\n });\n panels = [\n mainPanel,\n cropPanel,\n resizePanel,\n flipRotatePanel,\n filtersPanel,\n invertPanel,\n brightnessPanel,\n huePanel,\n saturatePanel,\n contrastPanel,\n grayscalePanel,\n sepiaPanel,\n colorizePanel,\n sharpenPanel,\n embossPanel,\n gammaPanel,\n exposurePanel\n ];\n win = editor.windowManager.open({\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n minWidth: Math.min(global$5.DOM.getViewPort().w, 800),\n minHeight: Math.min(global$5.DOM.getViewPort().h, 650),\n title: 'Edit image',\n items: panels.concat([mainViewContainer]),\n buttons: reverseIfRtl([\n {\n text: 'Save',\n name: 'save',\n subtype: 'primary',\n onclick: save\n },\n {\n text: 'Cancel',\n onclick: 'close'\n }\n ])\n });\n win.on('close', function () {\n reject();\n destroyStates(undoStack.data);\n undoStack = null;\n tempState = null;\n });\n undoStack.add(currentState);\n updateButtonUndoStates();\n imagePanel.on('load', function () {\n width = imagePanel.imageSize().w;\n height = imagePanel.imageSize().h;\n ratioW = height / width;\n ratioH = width / height;\n win.find('#w').value(width);\n win.find('#h').value(height);\n });\n imagePanel.on('crop', crop);\n }\n function edit(editor, imageResult) {\n return new global$3(function (resolve, reject) {\n return imageResult.toBlob().then(function (blob) {\n open(editor, createState(blob), resolve, reject);\n });\n });\n }\n var Dialog = { edit: edit };\n\n function getImageSize(img) {\n var width, height;\n function isPxValue(value) {\n return /^[0-9\\.]+px$/.test(value);\n }\n width = img.style.width;\n height = img.style.height;\n if (width || height) {\n if (isPxValue(width) && isPxValue(height)) {\n return {\n w: parseInt(width, 10),\n h: parseInt(height, 10)\n };\n }\n return null;\n }\n width = img.width;\n height = img.height;\n if (width && height) {\n return {\n w: parseInt(width, 10),\n h: parseInt(height, 10)\n };\n }\n return null;\n }\n function setImageSize(img, size) {\n var width, height;\n if (size) {\n width = img.style.width;\n height = img.style.height;\n if (width || height) {\n img.style.width = size.w + 'px';\n img.style.height = size.h + 'px';\n img.removeAttribute('data-mce-style');\n }\n width = img.width;\n height = img.height;\n if (width || height) {\n img.setAttribute('width', size.w);\n img.setAttribute('height', size.h);\n }\n }\n }\n function getNaturalImageSize(img) {\n return {\n w: img.naturalWidth,\n h: img.naturalHeight\n };\n }\n var ImageSize = {\n getImageSize: getImageSize,\n setImageSize: setImageSize,\n getNaturalImageSize: getNaturalImageSize\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 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 from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n var isValue = function (obj) {\n return obj !== null && obj !== undefined;\n };\n var traverse = function (json, path) {\n var value;\n value = path.reduce(function (result, key) {\n return isValue(result) ? result[key] : undefined;\n }, json);\n return isValue(value) ? value : null;\n };\n var requestUrlAsBlob = function (url, headers, withCredentials) {\n return new global$3(function (resolve) {\n var xhr;\n xhr = XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n resolve({\n status: xhr.status,\n blob: this.response\n });\n }\n };\n xhr.open('GET', url, true);\n xhr.withCredentials = withCredentials;\n global$1.each(headers, function (value, key) {\n xhr.setRequestHeader(key, value);\n });\n xhr.responseType = 'blob';\n xhr.send();\n });\n };\n var readBlob = function (blob) {\n return new global$3(function (resolve) {\n var fr = FileReader();\n fr.onload = function (e) {\n var data = e.target;\n resolve(data.result);\n };\n fr.readAsText(blob);\n });\n };\n var parseJson = function (text) {\n var json;\n try {\n json = JSON.parse(text);\n } catch (ex) {\n }\n return json;\n };\n var Utils = {\n traverse: traverse,\n readBlob: readBlob,\n requestUrlAsBlob: requestUrlAsBlob,\n parseJson: parseJson\n };\n\n var friendlyHttpErrors = [\n {\n code: 404,\n message: 'Could not find Image Proxy'\n },\n {\n code: 403,\n message: 'Rejected request'\n },\n {\n code: 0,\n message: 'Incorrect Image Proxy URL'\n }\n ];\n var friendlyServiceErrors = [\n {\n type: 'key_missing',\n message: 'The request did not include an api key.'\n },\n {\n type: 'key_not_found',\n message: 'The provided api key could not be found.'\n },\n {\n type: 'domain_not_trusted',\n message: 'The api key is not valid for the request origins.'\n }\n ];\n var isServiceErrorCode = function (code) {\n return code === 400 || code === 403 || code === 500;\n };\n var getHttpErrorMsg = function (status) {\n var message = find(friendlyHttpErrors, function (error) {\n return status === error.code;\n }).fold(constant('Unknown ImageProxy error'), function (error) {\n return error.message;\n });\n return 'ImageProxy HTTP error: ' + message;\n };\n var handleHttpError = function (status) {\n var message = getHttpErrorMsg(status);\n return global$3.reject(message);\n };\n var getServiceErrorMsg = function (type) {\n return find(friendlyServiceErrors, function (error) {\n return error.type === type;\n }).fold(constant('Unknown service error'), function (error) {\n return error.message;\n });\n };\n var getServiceError = function (text) {\n var serviceError = Utils.parseJson(text);\n var errorType = Utils.traverse(serviceError, [\n 'error',\n 'type'\n ]);\n var errorMsg = errorType ? getServiceErrorMsg(errorType) : 'Invalid JSON in service error message';\n return 'ImageProxy Service error: ' + errorMsg;\n };\n var handleServiceError = function (status, blob) {\n return Utils.readBlob(blob).then(function (text) {\n var serviceError = getServiceError(text);\n return global$3.reject(serviceError);\n });\n };\n var handleServiceErrorResponse = function (status, blob) {\n return isServiceErrorCode(status) ? handleServiceError(status, blob) : handleHttpError(status);\n };\n var Errors = {\n handleServiceErrorResponse: handleServiceErrorResponse,\n handleHttpError: handleHttpError,\n getHttpErrorMsg: getHttpErrorMsg,\n getServiceErrorMsg: getServiceErrorMsg\n };\n\n var appendApiKey = function (url, apiKey) {\n var separator = url.indexOf('?') === -1 ? '?' : '&';\n if (/[?&]apiKey=/.test(url) || !apiKey) {\n return url;\n } else {\n return url + separator + 'apiKey=' + encodeURIComponent(apiKey);\n }\n };\n var requestServiceBlob = function (url, apiKey) {\n var headers = {\n 'Content-Type': 'application/json;charset=UTF-8',\n 'tiny-api-key': apiKey\n };\n return Utils.requestUrlAsBlob(appendApiKey(url, apiKey), headers, false).then(function (result) {\n return result.status < 200 || result.status >= 300 ? Errors.handleServiceErrorResponse(result.status, result.blob) : global$3.resolve(result.blob);\n });\n };\n function requestBlob(url, withCredentials) {\n return Utils.requestUrlAsBlob(url, {}, withCredentials).then(function (result) {\n return result.status < 200 || result.status >= 300 ? Errors.handleHttpError(result.status) : global$3.resolve(result.blob);\n });\n }\n var getUrl = function (url, apiKey, withCredentials) {\n return apiKey ? requestServiceBlob(url, apiKey) : requestBlob(url, withCredentials);\n };\n var Proxy = { getUrl: getUrl };\n\n var count$1 = 0;\n var isEditableImage = function (editor, img) {\n var selectorMatched = editor.dom.is(img, 'img:not([data-mce-object],[data-mce-placeholder])');\n return selectorMatched && (isLocalImage(editor, img) || isCorsImage(editor, img) || editor.settings.imagetools_proxy);\n };\n var displayError = function (editor, error) {\n editor.notificationManager.open({\n text: error,\n type: 'error'\n });\n };\n var getSelectedImage = function (editor) {\n return editor.selection.getNode();\n };\n var extractFilename = function (editor, url) {\n var m = url.match(/\\/([^\\/\\?]+)?\\.(?:jpeg|jpg|png|gif)(?:\\?|$)/i);\n if (m) {\n return editor.dom.encode(m[1]);\n }\n return null;\n };\n var createId = function () {\n return 'imagetools' + count$1++;\n };\n var isLocalImage = function (editor, img) {\n var url = img.src;\n return url.indexOf('data:') === 0 || url.indexOf('blob:') === 0 || new global$4(url).host === editor.documentBaseURI.host;\n };\n var isCorsImage = function (editor, img) {\n return global$1.inArray(getCorsHosts(editor), new global$4(img.src).host) !== -1;\n };\n var isCorsWithCredentialsImage = function (editor, img) {\n return global$1.inArray(getCredentialsHosts(editor), new global$4(img.src).host) !== -1;\n };\n var imageToBlob$2 = function (editor, img) {\n var src = img.src, apiKey;\n if (isCorsImage(editor, img)) {\n return Proxy.getUrl(img.src, null, isCorsWithCredentialsImage(editor, img));\n }\n if (!isLocalImage(editor, img)) {\n src = getProxyUrl(editor);\n src += (src.indexOf('?') === -1 ? '?' : '&') + 'url=' + encodeURIComponent(img.src);\n apiKey = getApiKey(editor);\n return Proxy.getUrl(src, apiKey, false);\n }\n return imageToBlob$1(img);\n };\n var findSelectedBlob = function (editor) {\n var blobInfo;\n blobInfo = editor.editorUpload.blobCache.getByUri(getSelectedImage(editor).src);\n if (blobInfo) {\n return global$3.resolve(blobInfo.blob());\n }\n return imageToBlob$2(editor, getSelectedImage(editor));\n };\n var startTimedUpload = function (editor, imageUploadTimerState) {\n var imageUploadTimer = global$2.setEditorTimeout(editor, function () {\n editor.editorUpload.uploadImagesAuto();\n }, getUploadTimeout(editor));\n imageUploadTimerState.set(imageUploadTimer);\n };\n var cancelTimedUpload = function (imageUploadTimerState) {\n clearTimeout(imageUploadTimerState.get());\n };\n var updateSelectedImage = function (editor, ir, uploadImmediately, imageUploadTimerState, size) {\n return ir.toBlob().then(function (blob) {\n var uri, name, blobCache, blobInfo, selectedImage;\n blobCache = editor.editorUpload.blobCache;\n selectedImage = getSelectedImage(editor);\n uri = selectedImage.src;\n if (shouldReuseFilename(editor)) {\n blobInfo = blobCache.getByUri(uri);\n if (blobInfo) {\n uri = blobInfo.uri();\n name = blobInfo.name();\n } else {\n name = extractFilename(editor, uri);\n }\n }\n blobInfo = blobCache.create({\n id: createId(),\n blob: blob,\n base64: ir.toBase64(),\n uri: uri,\n name: name\n });\n blobCache.add(blobInfo);\n editor.undoManager.transact(function () {\n function imageLoadedHandler() {\n editor.$(selectedImage).off('load', imageLoadedHandler);\n editor.nodeChanged();\n if (uploadImmediately) {\n editor.editorUpload.uploadImagesAuto();\n } else {\n cancelTimedUpload(imageUploadTimerState);\n startTimedUpload(editor, imageUploadTimerState);\n }\n }\n editor.$(selectedImage).on('load', imageLoadedHandler);\n if (size) {\n editor.$(selectedImage).attr({\n width: size.w,\n height: size.h\n });\n }\n editor.$(selectedImage).attr({ src: blobInfo.blobUri() }).removeAttr('data-mce-src');\n });\n return blobInfo;\n });\n };\n var selectedImageOperation = function (editor, imageUploadTimerState, fn, size) {\n return function () {\n return editor._scanForImages().then(curry(findSelectedBlob, editor)).then(blobToImageResult).then(fn).then(function (imageResult) {\n return updateSelectedImage(editor, imageResult, false, imageUploadTimerState, size);\n }, function (error) {\n displayError(editor, error);\n });\n };\n };\n var rotate$2 = function (editor, imageUploadTimerState, angle) {\n return function () {\n var size = ImageSize.getImageSize(getSelectedImage(editor));\n var flippedSize = size ? {\n w: size.h,\n h: size.w\n } : null;\n return selectedImageOperation(editor, imageUploadTimerState, function (imageResult) {\n return rotate$1(imageResult, angle);\n }, flippedSize)();\n };\n };\n var flip$2 = function (editor, imageUploadTimerState, axis) {\n return function () {\n return selectedImageOperation(editor, imageUploadTimerState, function (imageResult) {\n return flip$1(imageResult, axis);\n })();\n };\n };\n var editImageDialog = function (editor, imageUploadTimerState) {\n return function () {\n var img = getSelectedImage(editor), originalSize = ImageSize.getNaturalImageSize(img);\n var handleDialogBlob = function (blob) {\n return new global$3(function (resolve) {\n blobToImage$1(blob).then(function (newImage) {\n var newSize = ImageSize.getNaturalImageSize(newImage);\n if (originalSize.w !== newSize.w || originalSize.h !== newSize.h) {\n if (ImageSize.getImageSize(img)) {\n ImageSize.setImageSize(img, newSize);\n }\n }\n URL.revokeObjectURL(newImage.src);\n resolve(blob);\n });\n });\n };\n var openDialog = function (editor, imageResult) {\n return Dialog.edit(editor, imageResult).then(handleDialogBlob).then(blobToImageResult).then(function (imageResult) {\n return updateSelectedImage(editor, imageResult, true, imageUploadTimerState);\n }, function () {\n });\n };\n findSelectedBlob(editor).then(blobToImageResult).then(curry(openDialog, editor), function (error) {\n displayError(editor, error);\n });\n };\n };\n var Actions = {\n rotate: rotate$2,\n flip: flip$2,\n editImageDialog: editImageDialog,\n isEditableImage: isEditableImage,\n cancelTimedUpload: cancelTimedUpload\n };\n\n var register = function (editor, imageUploadTimerState) {\n global$1.each({\n mceImageRotateLeft: Actions.rotate(editor, imageUploadTimerState, -90),\n mceImageRotateRight: Actions.rotate(editor, imageUploadTimerState, 90),\n mceImageFlipVertical: Actions.flip(editor, imageUploadTimerState, 'v'),\n mceImageFlipHorizontal: Actions.flip(editor, imageUploadTimerState, 'h'),\n mceEditImage: Actions.editImageDialog(editor, imageUploadTimerState)\n }, function (fn, cmd) {\n editor.addCommand(cmd, fn);\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor, imageUploadTimerState, lastSelectedImageState) {\n editor.on('NodeChange', function (e) {\n var lastSelectedImage = lastSelectedImageState.get();\n if (lastSelectedImage && lastSelectedImage.src !== e.element.src) {\n Actions.cancelTimedUpload(imageUploadTimerState);\n editor.editorUpload.uploadImagesAuto();\n lastSelectedImageState.set(null);\n }\n if (Actions.isEditableImage(editor, e.element)) {\n lastSelectedImageState.set(e.element);\n }\n });\n };\n var UploadSelectedImage = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('rotateleft', {\n title: 'Rotate counterclockwise',\n cmd: 'mceImageRotateLeft'\n });\n editor.addButton('rotateright', {\n title: 'Rotate clockwise',\n cmd: 'mceImageRotateRight'\n });\n editor.addButton('flipv', {\n title: 'Flip vertically',\n cmd: 'mceImageFlipVertical'\n });\n editor.addButton('fliph', {\n title: 'Flip horizontally',\n cmd: 'mceImageFlipHorizontal'\n });\n editor.addButton('editimage', {\n title: 'Edit image',\n cmd: 'mceEditImage'\n });\n editor.addButton('imageoptions', {\n title: 'Image options',\n icon: 'options',\n cmd: 'mceImage'\n });\n };\n var Buttons = { register: register$1 };\n\n var register$2 = function (editor) {\n editor.addContextToolbar(curry(Actions.isEditableImage, editor), getToolbarItems(editor));\n };\n var ContextToolbar = { register: register$2 };\n\n global.add('imagetools', function (editor) {\n var imageUploadTimerState = Cell(0);\n var lastSelectedImageState = Cell(null);\n Commands.register(editor, imageUploadTimerState);\n Buttons.register(editor);\n ContextToolbar.register(editor);\n UploadSelectedImage.setup(editor, imageUploadTimerState, lastSelectedImageState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\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","// Exports the \"bbcode\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/bbcode')\n// ES2015:\n// import 'tinymce/plugins/bbcode'\nrequire('./plugin.js');","(function () {\nvar codesample = (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.dom.DOMUtils');\n\n var getContentCss = function (editor) {\n return editor.settings.codesample_content_css;\n };\n var getLanguages = function (editor) {\n return editor.settings.codesample_languages;\n };\n var getDialogMinWidth = function (editor) {\n return Math.min(global$1.DOM.getViewPort().w, editor.getParam('codesample_dialog_width', 800));\n };\n var getDialogMinHeight = function (editor) {\n return Math.min(global$1.DOM.getViewPort().w, editor.getParam('codesample_dialog_height', 650));\n };\n var Settings = {\n getContentCss: getContentCss,\n getLanguages: getLanguages,\n getDialogMinWidth: getDialogMinWidth,\n getDialogMinHeight: getDialogMinHeight\n };\n\n var window = {};\n var global$2 = window;\n var _self = typeof window !== 'undefined' ? window : typeof WorkerGlobalScope !== 'undefined' && domGlobals.self instanceof WorkerGlobalScope ? domGlobals.self : {};\n var Prism = function () {\n var lang = /\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i;\n var _ = _self.Prism = {\n util: {\n encode: function (tokens) {\n if (tokens instanceof Token) {\n return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias);\n } else if (_.util.type(tokens) === 'Array') {\n return tokens.map(_.util.encode);\n } else {\n return tokens.replace(/&/g, '&').replace(/ text.length) {\n break tokenloop;\n }\n if (str instanceof Token) {\n continue;\n }\n pattern.lastIndex = 0;\n var match = pattern.exec(str);\n if (match) {\n if (lookbehind) {\n lookbehindLength = match[1].length;\n }\n var from = match.index - 1 + lookbehindLength;\n match = match[0].slice(lookbehindLength);\n var len = match.length, to = from + len, before = str.slice(0, from + 1), after = str.slice(to + 1);\n var args = [\n i,\n 1\n ];\n if (before) {\n args.push(before);\n }\n var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias);\n args.push(wrapped);\n if (after) {\n args.push(after);\n }\n Array.prototype.splice.apply(strarr, args);\n }\n }\n }\n }\n return strarr;\n },\n hooks: {\n all: {},\n add: function (name, callback) {\n var hooks = _.hooks.all;\n hooks[name] = hooks[name] || [];\n hooks[name].push(callback);\n },\n run: function (name, env) {\n var callbacks = _.hooks.all[name];\n if (!callbacks || !callbacks.length) {\n return;\n }\n for (var i = 0, callback = void 0; callback = callbacks[i++];) {\n callback(env);\n }\n }\n }\n };\n var Token = _.Token = function (type, content, alias) {\n this.type = type;\n this.content = content;\n this.alias = alias;\n };\n Token.stringify = function (o, language, parent) {\n if (typeof o === 'string') {\n return o;\n }\n if (_.util.type(o) === 'Array') {\n return o.map(function (element) {\n return Token.stringify(element, language, o);\n }).join('');\n }\n var env = {\n type: o.type,\n content: Token.stringify(o.content, language, parent),\n tag: 'span',\n classes: [\n 'token',\n o.type\n ],\n attributes: {},\n language: language,\n parent: parent\n };\n if (env.type === 'comment') {\n env.attributes.spellcheck = 'true';\n }\n if (o.alias) {\n var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias];\n Array.prototype.push.apply(env.classes, aliases);\n }\n _.hooks.run('wrap', env);\n var attributes = '';\n for (var name in env.attributes) {\n attributes += (attributes ? ' ' : '') + name + '=\"' + (env.attributes[name] || '') + '\"';\n }\n return '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\" ' + attributes + '>' + env.content + '';\n };\n if (!_self.document) {\n if (!_self.addEventListener) {\n return _self.Prism;\n }\n _self.addEventListener('message', function (evt) {\n var message = JSON.parse(evt.data), lang = message.language, code = message.code, immediateClose = message.immediateClose;\n _self.postMessage(_.highlight(code, _.languages[lang], lang));\n if (immediateClose) {\n _self.close();\n }\n }, false);\n return _self.Prism;\n }\n }();\n if (typeof global$2 !== 'undefined') {\n global$2.Prism = Prism;\n }\n Prism.languages.markup = {\n comment: //,\n prolog: /<\\?[\\w\\W]+?\\?>/,\n doctype: //,\n cdata: //i,\n tag: {\n pattern: /<\\/?[^\\s>\\/=.]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,\n inside: {\n 'tag': {\n pattern: /^<\\/?[^\\s>\\/]+/i,\n inside: {\n punctuation: /^<\\/?/,\n namespace: /^[^\\s>\\/:]+:/\n }\n },\n 'attr-value': {\n pattern: /=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,\n inside: { punctuation: /[=>\"']/ }\n },\n 'punctuation': /\\/?>/,\n 'attr-name': {\n pattern: /[^\\s>\\/]+/,\n inside: { namespace: /^[^\\s>\\/:]+:/ }\n }\n }\n },\n entity: /&#?[\\da-z]{1,8};/i\n };\n Prism.hooks.add('wrap', function (env) {\n if (env.type === 'entity') {\n env.attributes.title = env.content.replace(/&/, '&');\n }\n });\n Prism.languages.xml = Prism.languages.markup;\n Prism.languages.html = Prism.languages.markup;\n Prism.languages.mathml = Prism.languages.markup;\n Prism.languages.svg = Prism.languages.markup;\n Prism.languages.css = {\n comment: /\\/\\*[\\w\\W]*?\\*\\//,\n atrule: {\n pattern: /@[\\w-]+?.*?(;|(?=\\s*\\{))/i,\n inside: { rule: /@[\\w-]+/ }\n },\n url: /url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,\n selector: /[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,\n string: /(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n property: /(\\b|\\B)[\\w-]+(?=\\s*:)/i,\n important: /\\B!important\\b/i,\n function: /[-a-z0-9]+(?=\\()/i,\n punctuation: /[(){};:]/\n };\n Prism.languages.css.atrule.inside.rest = Prism.util.clone(Prism.languages.css);\n if (Prism.languages.markup) {\n Prism.languages.insertBefore('markup', 'tag', {\n style: {\n pattern: /[\\w\\W]*?<\\/style>/i,\n inside: {\n tag: {\n pattern: /|<\\/style>/i,\n inside: Prism.languages.markup.tag.inside\n },\n rest: Prism.languages.css\n },\n alias: 'language-css'\n }\n });\n Prism.languages.insertBefore('inside', 'attr-value', {\n 'style-attr': {\n pattern: /\\s*style=(\"|').*?\\1/i,\n inside: {\n 'attr-name': {\n pattern: /^\\s*style/i,\n inside: Prism.languages.markup.tag.inside\n },\n 'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n 'attr-value': {\n pattern: /.+/i,\n inside: Prism.languages.css\n }\n },\n alias: 'language-css'\n }\n }, Prism.languages.markup.tag);\n }\n Prism.languages.clike = {\n 'comment': [\n {\n pattern: /(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,\n lookbehind: true\n },\n {\n pattern: /(^|[^\\\\:])\\/\\/.*/,\n lookbehind: true\n }\n ],\n 'string': /([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n 'class-name': {\n pattern: /((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,\n lookbehind: true,\n inside: { punctuation: /(\\.|\\\\)/ }\n },\n 'keyword': /\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n 'boolean': /\\b(true|false)\\b/,\n 'function': /[a-z0-9_]+(?=\\()/i,\n 'number': /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,\n 'operator': /--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,\n 'punctuation': /[{}[\\];(),.:]/\n };\n Prism.languages.javascript = Prism.languages.extend('clike', {\n keyword: /\\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b/,\n number: /\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\n function: /[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i\n });\n Prism.languages.insertBefore('javascript', 'keyword', {\n regex: {\n pattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,\n lookbehind: true\n }\n });\n Prism.languages.insertBefore('javascript', 'class-name', {\n 'template-string': {\n pattern: /`(?:\\\\`|\\\\?[^`])*`/,\n inside: {\n interpolation: {\n pattern: /\\$\\{[^}]+\\}/,\n inside: {\n 'interpolation-punctuation': {\n pattern: /^\\$\\{|\\}$/,\n alias: 'punctuation'\n },\n 'rest': Prism.languages.javascript\n }\n },\n string: /[\\s\\S]+/\n }\n }\n });\n if (Prism.languages.markup) {\n Prism.languages.insertBefore('markup', 'tag', {\n script: {\n pattern: /[\\w\\W]*?<\\/script>/i,\n inside: {\n tag: {\n pattern: /|<\\/script>/i,\n inside: Prism.languages.markup.tag.inside\n },\n rest: Prism.languages.javascript\n },\n alias: 'language-javascript'\n }\n });\n }\n Prism.languages.js = Prism.languages.javascript;\n Prism.languages.c = Prism.languages.extend('clike', {\n keyword: /\\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\\b/,\n operator: /\\-[>-]?|\\+\\+?|!=?|<>?=?|==?|&&?|\\|?\\||[~^%?*\\/]/,\n number: /\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)[ful]*\\b/i\n });\n Prism.languages.insertBefore('c', 'string', {\n macro: {\n pattern: /(^\\s*)#\\s*[a-z]+([^\\r\\n\\\\]|\\\\.|\\\\(?:\\r\\n?|\\n))*/im,\n lookbehind: true,\n alias: 'property',\n inside: {\n string: {\n pattern: /(#\\s*include\\s*)(<.+?>|(\"|')(\\\\?.)+?\\3)/,\n lookbehind: true\n }\n }\n }\n });\n delete Prism.languages.c['class-name'];\n delete Prism.languages.c.boolean;\n Prism.languages.csharp = Prism.languages.extend('clike', {\n keyword: /\\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\\b/,\n string: [\n /@(\"|')(\\1\\1|\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1/,\n /(\"|')(\\\\?.)*?\\1/\n ],\n number: /\\b-?(0x[\\da-f]+|\\d*\\.?\\d+)\\b/i\n });\n Prism.languages.insertBefore('csharp', 'keyword', {\n preprocessor: {\n pattern: /(^\\s*)#.*/m,\n lookbehind: true\n }\n });\n Prism.languages.cpp = Prism.languages.extend('c', {\n keyword: /\\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/,\n boolean: /\\b(true|false)\\b/,\n operator: /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\\->|:{1,2}|={1,2}|\\^|~|%|&{1,2}|\\|?\\||\\?|\\*|\\/|\\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/\n });\n Prism.languages.insertBefore('cpp', 'keyword', {\n 'class-name': {\n pattern: /(class\\s+)[a-z0-9_]+/i,\n lookbehind: true\n }\n });\n Prism.languages.java = Prism.languages.extend('clike', {\n keyword: /\\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\\b/,\n number: /\\b0b[01]+\\b|\\b0x[\\da-f]*\\.?[\\da-fp\\-]+\\b|\\b\\d*\\.?\\d+(?:e[+-]?\\d+)?[df]?\\b/i,\n operator: {\n pattern: /(^|[^.])(?:\\+[+=]?|-[-=]?|!=?|<>?>?=?|==?|&[&=]?|\\|[|=]?|\\*=?|\\/=?|%=?|\\^=?|[?:~])/m,\n lookbehind: true\n }\n });\n Prism.languages.php = Prism.languages.extend('clike', {\n keyword: /\\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\\b/i,\n constant: /\\b[A-Z0-9_]{2,}\\b/,\n comment: {\n pattern: /(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,\n lookbehind: true\n }\n });\n Prism.languages.insertBefore('php', 'class-name', {\n 'shell-comment': {\n pattern: /(^|[^\\\\])#.*/,\n lookbehind: true,\n alias: 'comment'\n }\n });\n Prism.languages.insertBefore('php', 'keyword', {\n delimiter: /\\?>|<\\?(?:php)?/i,\n variable: /\\$\\w+\\b/i,\n package: {\n pattern: /(\\\\|namespace\\s+|use\\s+)[\\w\\\\]+/,\n lookbehind: true,\n inside: { punctuation: /\\\\/ }\n }\n });\n Prism.languages.insertBefore('php', 'operator', {\n property: {\n pattern: /(->)[\\w]+/,\n lookbehind: true\n }\n });\n if (Prism.languages.markup) {\n Prism.hooks.add('before-highlight', function (env) {\n if (env.language !== 'php') {\n return;\n }\n env.tokenStack = [];\n env.backupCode = env.code;\n env.code = env.code.replace(/(?:<\\?php|<\\?)[\\w\\W]*?(?:\\?>)/ig, function (match) {\n env.tokenStack.push(match);\n return '{{{PHP' + env.tokenStack.length + '}}}';\n });\n });\n Prism.hooks.add('before-insert', function (env) {\n if (env.language === 'php') {\n env.code = env.backupCode;\n delete env.backupCode;\n }\n });\n Prism.hooks.add('after-highlight', function (env) {\n if (env.language !== 'php') {\n return;\n }\n for (var i = 0, t = void 0; t = env.tokenStack[i]; i++) {\n env.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php').replace(/\\$/g, '$$$$'));\n }\n env.element.innerHTML = env.highlightedCode;\n });\n Prism.hooks.add('wrap', function (env) {\n if (env.language === 'php' && env.type === 'markup') {\n env.content = env.content.replace(/(\\{\\{\\{PHP[0-9]+\\}\\}\\})/g, '$1');\n }\n });\n Prism.languages.insertBefore('php', 'comment', {\n markup: {\n pattern: /<[^?]\\/?(.*?)>/,\n inside: Prism.languages.markup\n },\n php: /\\{\\{\\{PHP[0-9]+\\}\\}\\}/\n });\n }\n Prism.languages.python = {\n 'comment': {\n pattern: /(^|[^\\\\])#.*/,\n lookbehind: true\n },\n 'string': /\"\"\"[\\s\\S]+?\"\"\"|'''[\\s\\S]+?'''|(\"|')(?:\\\\?.)*?\\1/,\n 'function': {\n pattern: /((?:^|\\s)def[ \\t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\\()/g,\n lookbehind: true\n },\n 'class-name': {\n pattern: /(\\bclass\\s+)[a-z0-9_]+/i,\n lookbehind: true\n },\n 'keyword': /\\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\\b/,\n 'boolean': /\\b(?:True|False)\\b/,\n 'number': /\\b-?(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,\n 'operator': /[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:or|and|not)\\b/,\n 'punctuation': /[{}[\\];(),.:]/\n };\n (function (Prism) {\n Prism.languages.ruby = Prism.languages.extend('clike', {\n comment: /#(?!\\{[^\\r\\n]*?\\}).*/,\n keyword: /\\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\\b/\n });\n var interpolation = {\n pattern: /#\\{[^}]+\\}/,\n inside: {\n delimiter: {\n pattern: /^#\\{|\\}$/,\n alias: 'tag'\n },\n rest: Prism.util.clone(Prism.languages.ruby)\n }\n };\n Prism.languages.insertBefore('ruby', 'keyword', {\n regex: [\n {\n pattern: /%r([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[gim]{0,3}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%r\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[gim]{0,3}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%r\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}[gim]{0,3}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%r\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\][gim]{0,3}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%r<(?:[^<>\\\\]|\\\\[\\s\\S])*>[gim]{0,3}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /(^|[^/])\\/(?!\\/)(\\[.+?]|\\\\.|[^/\\r\\n])+\\/[gim]{0,3}(?=\\s*($|[\\r\\n,.;})]))/,\n lookbehind: true\n }\n ],\n variable: /[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/,\n symbol: /:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/\n });\n Prism.languages.insertBefore('ruby', 'number', {\n builtin: /\\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\\b/,\n constant: /\\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\\b)/\n });\n Prism.languages.ruby.string = [\n {\n pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%[qQiIwWxs]?\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%[qQiIwWxs]?\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%[qQiIwWxs]?\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\]/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /%[qQiIwWxs]?<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,\n inside: { interpolation: interpolation }\n },\n {\n pattern: /(\"|')(#\\{[^}]+\\}|\\\\(?:\\r?\\n|\\r)|\\\\?.)*?\\1/,\n inside: { interpolation: interpolation }\n }\n ];\n }(Prism));\n\n function isCodeSample(elm) {\n return elm && elm.nodeName === 'PRE' && elm.className.indexOf('language-') !== -1;\n }\n function trimArg(predicateFn) {\n return function (arg1, arg2) {\n return predicateFn(arg2);\n };\n }\n var Utils = {\n isCodeSample: isCodeSample,\n trimArg: trimArg\n };\n\n var getSelectedCodeSample = function (editor) {\n var node = editor.selection.getNode();\n if (Utils.isCodeSample(node)) {\n return node;\n }\n return null;\n };\n var insertCodeSample = function (editor, language, code) {\n editor.undoManager.transact(function () {\n var node = getSelectedCodeSample(editor);\n code = global$1.DOM.encode(code);\n if (node) {\n editor.dom.setAttrib(node, 'class', 'language-' + language);\n node.innerHTML = code;\n Prism.highlightElement(node);\n editor.selection.select(node);\n } else {\n editor.insertContent('
    ' + code + '
    ');\n editor.selection.select(editor.$('#__new').removeAttr('id')[0]);\n }\n });\n };\n var getCurrentCode = function (editor) {\n var node = getSelectedCodeSample(editor);\n if (node) {\n return node.textContent;\n }\n return '';\n };\n var CodeSample = {\n getSelectedCodeSample: getSelectedCodeSample,\n insertCodeSample: insertCodeSample,\n getCurrentCode: getCurrentCode\n };\n\n var getLanguages$1 = function (editor) {\n var defaultLanguages = [\n {\n text: 'HTML/XML',\n value: 'markup'\n },\n {\n text: 'JavaScript',\n value: 'javascript'\n },\n {\n text: 'CSS',\n value: 'css'\n },\n {\n text: 'PHP',\n value: 'php'\n },\n {\n text: 'Ruby',\n value: 'ruby'\n },\n {\n text: 'Python',\n value: 'python'\n },\n {\n text: 'Java',\n value: 'java'\n },\n {\n text: 'C',\n value: 'c'\n },\n {\n text: 'C#',\n value: 'csharp'\n },\n {\n text: 'C++',\n value: 'cpp'\n }\n ];\n var customLanguages = Settings.getLanguages(editor);\n return customLanguages ? customLanguages : defaultLanguages;\n };\n var getCurrentLanguage = function (editor) {\n var matches;\n var node = CodeSample.getSelectedCodeSample(editor);\n if (node) {\n matches = node.className.match(/language-(\\w+)/);\n return matches ? matches[1] : '';\n }\n return '';\n };\n var Languages = {\n getLanguages: getLanguages$1,\n getCurrentLanguage: getCurrentLanguage\n };\n\n var Dialog = {\n open: function (editor) {\n var minWidth = Settings.getDialogMinWidth(editor);\n var minHeight = Settings.getDialogMinHeight(editor);\n var currentLanguage = Languages.getCurrentLanguage(editor);\n var currentLanguages = Languages.getLanguages(editor);\n var currentCode = CodeSample.getCurrentCode(editor);\n editor.windowManager.open({\n title: 'Insert/Edit code sample',\n minWidth: minWidth,\n minHeight: minHeight,\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n body: [\n {\n type: 'listbox',\n name: 'language',\n label: 'Language',\n maxWidth: 200,\n value: currentLanguage,\n values: currentLanguages\n },\n {\n type: 'textbox',\n name: 'code',\n multiline: true,\n spellcheck: false,\n ariaLabel: 'Code view',\n flex: 1,\n style: 'direction: ltr; text-align: left',\n classes: 'monospace',\n value: currentCode,\n autofocus: true\n }\n ],\n onSubmit: function (e) {\n CodeSample.insertCodeSample(editor, e.data.language, e.data.code);\n }\n });\n }\n };\n\n var register = function (editor) {\n editor.addCommand('codesample', function () {\n var node = editor.selection.getNode();\n if (editor.selection.isCollapsed() || Utils.isCodeSample(node)) {\n Dialog.open(editor);\n } else {\n editor.formatter.toggle('code');\n }\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n var $ = editor.$;\n editor.on('PreProcess', function (e) {\n $('pre[contenteditable=false]', e.node).filter(Utils.trimArg(Utils.isCodeSample)).each(function (idx, elm) {\n var $elm = $(elm), code = elm.textContent;\n $elm.attr('class', $.trim($elm.attr('class')));\n $elm.removeAttr('contentEditable');\n $elm.empty().append($('').each(function () {\n this.textContent = code;\n }));\n });\n });\n editor.on('SetContent', function () {\n var unprocessedCodeSamples = $('pre').filter(Utils.trimArg(Utils.isCodeSample)).filter(function (idx, elm) {\n return elm.contentEditable !== 'false';\n });\n if (unprocessedCodeSamples.length) {\n editor.undoManager.transact(function () {\n unprocessedCodeSamples.each(function (idx, elm) {\n $(elm).find('br').each(function (idx, elm) {\n elm.parentNode.replaceChild(editor.getDoc().createTextNode('\\n'), elm);\n });\n elm.contentEditable = false;\n elm.innerHTML = editor.dom.encode(elm.textContent);\n Prism.highlightElement(elm);\n elm.className = $.trim(elm.className);\n });\n });\n }\n });\n };\n var FilterContent = { setup: setup };\n\n var loadCss = function (editor, pluginUrl, addedInlineCss, addedCss) {\n var linkElm;\n var contentCss = Settings.getContentCss(editor);\n if (editor.inline && addedInlineCss.get()) {\n return;\n }\n if (!editor.inline && addedCss.get()) {\n return;\n }\n if (editor.inline) {\n addedInlineCss.set(true);\n } else {\n addedCss.set(true);\n }\n if (contentCss !== false) {\n linkElm = editor.dom.create('link', {\n rel: 'stylesheet',\n href: contentCss ? contentCss : pluginUrl + '/css/prism.css'\n });\n editor.getDoc().getElementsByTagName('head')[0].appendChild(linkElm);\n }\n };\n var LoadCss = { loadCss: loadCss };\n\n var register$1 = function (editor) {\n editor.addButton('codesample', {\n cmd: 'codesample',\n title: 'Insert/Edit code sample'\n });\n editor.addMenuItem('codesample', {\n cmd: 'codesample',\n text: 'Code sample',\n icon: 'codesample'\n });\n };\n var Buttons = { register: register$1 };\n\n var addedInlineCss = Cell(false);\n global.add('codesample', function (editor, pluginUrl) {\n var addedCss = Cell(false);\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n editor.on('init', function () {\n LoadCss.loadCss(editor, pluginUrl, addedInlineCss, addedCss);\n });\n editor.on('dblclick', function (ev) {\n if (Utils.isCodeSample(ev.target)) {\n Dialog.open(editor);\n }\n });\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\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","// 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');","(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","(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","// Exports the \"noneditable\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/noneditable')\n// ES2015:\n// import 'tinymce/plugins/noneditable'\nrequire('./plugin.js');","(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 print = (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 register = function (editor) {\n editor.addCommand('mcePrint', function () {\n if (global$1.ie && global$1.ie <= 11) {\n editor.getDoc().execCommand('print', false, null);\n } else {\n editor.getWin().print();\n }\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('print', {\n title: 'Print',\n cmd: 'mcePrint'\n });\n editor.addMenuItem('print', {\n text: 'Print',\n cmd: 'mcePrint',\n icon: 'print'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('print', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n editor.addShortcut('Meta+P', '', 'mcePrint');\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","(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","// Exports the \"spellchecker\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/spellchecker')\n// ES2015:\n// import 'tinymce/plugins/spellchecker'\nrequire('./plugin.js');","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\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","// Exports the \"fullpage\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/fullpage')\n// ES2015:\n// import 'tinymce/plugins/fullpage'\nrequire('./plugin.js');","// 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","(function () {\nvar spellchecker = (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 hasProPlugin = function (editor) {\n if (/(^|[ ,])tinymcespellchecker([, ]|$)/.test(editor.settings.plugins) && global.get('tinymcespellchecker')) {\n if (typeof domGlobals.window.console !== 'undefined' && domGlobals.window.console.log) {\n domGlobals.window.console.log('Spell Checker Pro is incompatible with Spell Checker plugin! ' + 'Remove \\'spellchecker\\' from the \\'plugins\\' option.');\n }\n return true;\n } else {\n return false;\n }\n };\n var DetectProPlugin = { hasProPlugin: hasProPlugin };\n\n var getLanguages = function (editor) {\n var defaultLanguages = 'English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv';\n return editor.getParam('spellchecker_languages', defaultLanguages);\n };\n var getLanguage = function (editor) {\n var defaultLanguage = editor.getParam('language', 'en');\n return editor.getParam('spellchecker_language', defaultLanguage);\n };\n var getRpcUrl = function (editor) {\n return editor.getParam('spellchecker_rpc_url');\n };\n var getSpellcheckerCallback = function (editor) {\n return editor.getParam('spellchecker_callback');\n };\n var getSpellcheckerWordcharPattern = function (editor) {\n var defaultPattern = new RegExp('[^' + '\\\\s!\"#$%&()*+,-./:;<=>?@[\\\\]^_{|}`' + '\\xA7\\xA9\\xAB\\xAE\\xB1\\xB6\\xB7\\xB8\\xBB' + '\\xBC\\xBD\\xBE\\xBF\\xD7\\xF7\\xA4\\u201D\\u201C\\u201E\\xA0\\u2002\\u2003\\u2009' + ']+', 'g');\n return editor.getParam('spellchecker_wordchar_pattern', defaultPattern);\n };\n var Settings = {\n getLanguages: getLanguages,\n getLanguage: getLanguage,\n getRpcUrl: getRpcUrl,\n getSpellcheckerCallback: getSpellcheckerCallback,\n getSpellcheckerWordcharPattern: getSpellcheckerWordcharPattern\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.URI');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var fireSpellcheckStart = function (editor) {\n return editor.fire('SpellcheckStart');\n };\n var fireSpellcheckEnd = function (editor) {\n return editor.fire('SpellcheckEnd');\n };\n var Events = {\n fireSpellcheckStart: fireSpellcheckStart,\n fireSpellcheckEnd: fireSpellcheckEnd\n };\n\n function isContentEditableFalse(node) {\n return node && node.nodeType === 1 && node.contentEditable === 'false';\n }\n var DomTextMatcher = function (node, editor) {\n var m, matches = [], text;\n var dom = editor.dom;\n var blockElementsMap, hiddenTextElementsMap, shortEndedElementsMap;\n blockElementsMap = editor.schema.getBlockElements();\n hiddenTextElementsMap = editor.schema.getWhiteSpaceElements();\n shortEndedElementsMap = editor.schema.getShortEndedElements();\n function createMatch(m, data) {\n if (!m[0]) {\n throw new Error('findAndReplaceDOMText cannot handle zero-length matches');\n }\n return {\n start: m.index,\n end: m.index + m[0].length,\n text: m[0],\n data: data\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 if (isContentEditableFalse(node)) {\n return '\\n';\n }\n txt = '';\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, matchIndex = 0;\n matches = matches.slice(0);\n matches.sort(function (a, b) {\n return a.start - b.start;\n });\n matchLocation = matches.shift();\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.end) {\n endNode = curNode;\n endNodeIndex = matchLocation.end - atIndex;\n } else if (startNode) {\n innerNodes.push(curNode);\n }\n if (!startNode && curNode.length + atIndex > matchLocation.start) {\n startNode = curNode;\n startNodeIndex = matchLocation.start - 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.text,\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(callback) {\n function makeReplacementNode(fill, matchIndex) {\n var match = matches[matchIndex];\n if (!match.stencil) {\n match.stencil = callback(match);\n }\n var clone = match.stencil.cloneNode(false);\n clone.setAttribute('data-mce-index', matchIndex);\n if (fill) {\n clone.appendChild(dom.doc.createTextNode(fill));\n }\n return clone;\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 var doc = dom.doc;\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, 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 function unwrapElement(element) {\n var parentNode = element.parentNode;\n parentNode.insertBefore(element.firstChild, element);\n element.parentNode.removeChild(element);\n }\n function hasClass(elm) {\n return elm.className.indexOf('mce-spellchecker-word') !== -1;\n }\n function getWrappersByIndex(index) {\n var elements = node.getElementsByTagName('*'), wrappers = [];\n index = typeof index === 'number' ? '' + index : null;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i], dataIndex = element.getAttribute('data-mce-index');\n if (dataIndex !== null && dataIndex.length && hasClass(element)) {\n if (dataIndex === index || index === null) {\n wrappers.push(element);\n }\n }\n }\n return wrappers;\n }\n function indexOf(match) {\n var i = matches.length;\n while (i--) {\n if (matches[i] === match) {\n return i;\n }\n }\n return -1;\n }\n function filter(callback) {\n var filteredMatches = [];\n each(function (match, i) {\n if (callback(match, i)) {\n filteredMatches.push(match);\n }\n });\n matches = filteredMatches;\n return this;\n }\n function each(callback) {\n for (var i = 0, l = matches.length; i < l; i++) {\n if (callback(matches[i], i) === false) {\n break;\n }\n }\n return this;\n }\n function wrap(callback) {\n if (matches.length) {\n stepThroughMatches(node, matches, genReplacer(callback));\n }\n return this;\n }\n function find(regex, data) {\n if (text && regex.global) {\n while (m = regex.exec(text)) {\n matches.push(createMatch(m, data));\n }\n }\n return this;\n }\n function unwrap(match) {\n var i;\n var elements = getWrappersByIndex(match ? indexOf(match) : null);\n i = elements.length;\n while (i--) {\n unwrapElement(elements[i]);\n }\n return this;\n }\n function matchFromElement(element) {\n return matches[element.getAttribute('data-mce-index')];\n }\n function elementFromMatch(match) {\n return getWrappersByIndex(indexOf(match))[0];\n }\n function add(start, length, data) {\n matches.push({\n start: start,\n end: start + length,\n text: text.substr(start, length),\n data: data\n });\n return this;\n }\n function rangeFromMatch(match) {\n var wrappers = getWrappersByIndex(indexOf(match));\n var rng = editor.dom.createRng();\n rng.setStartBefore(wrappers[0]);\n rng.setEndAfter(wrappers[wrappers.length - 1]);\n return rng;\n }\n function replace(match, text) {\n var rng = rangeFromMatch(match);\n rng.deleteContents();\n if (text.length > 0) {\n rng.insertNode(editor.dom.doc.createTextNode(text));\n }\n return rng;\n }\n function reset() {\n matches.splice(0, matches.length);\n unwrap();\n return this;\n }\n text = getText(node);\n return {\n text: text,\n matches: matches,\n each: each,\n filter: filter,\n reset: reset,\n matchFromElement: matchFromElement,\n elementFromMatch: elementFromMatch,\n find: find,\n add: add,\n wrap: wrap,\n unwrap: unwrap,\n replace: replace,\n rangeFromMatch: rangeFromMatch,\n indexOf: indexOf\n };\n };\n\n var getTextMatcher = function (editor, textMatcherState) {\n if (!textMatcherState.get()) {\n var textMatcher = DomTextMatcher(editor.getBody(), editor);\n textMatcherState.set(textMatcher);\n }\n return textMatcherState.get();\n };\n var isEmpty = function (obj) {\n for (var _ in obj) {\n return false;\n }\n return true;\n };\n var defaultSpellcheckCallback = function (editor, pluginUrl, currentLanguageState) {\n return function (method, text, doneCallback, errorCallback) {\n var data = {\n method: method,\n lang: currentLanguageState.get()\n };\n var postData = '';\n data[method === 'addToDictionary' ? 'word' : 'text'] = text;\n global$1.each(data, function (value, key) {\n if (postData) {\n postData += '&';\n }\n postData += key + '=' + encodeURIComponent(value);\n });\n global$3.send({\n url: new global$2(pluginUrl).toAbsolute(Settings.getRpcUrl(editor)),\n type: 'post',\n content_type: 'application/x-www-form-urlencoded',\n data: postData,\n success: function (result) {\n result = JSON.parse(result);\n if (!result) {\n var message = editor.translate('Server response wasn\\'t proper JSON.');\n errorCallback(message);\n } else if (result.error) {\n errorCallback(result.error);\n } else {\n doneCallback(result);\n }\n },\n error: function () {\n var message = editor.translate('The spelling service was not found: (') + Settings.getRpcUrl(editor) + editor.translate(')');\n errorCallback(message);\n }\n });\n };\n };\n var sendRpcCall = function (editor, pluginUrl, currentLanguageState, name, data, successCallback, errorCallback) {\n var userSpellcheckCallback = Settings.getSpellcheckerCallback(editor);\n var spellCheckCallback = userSpellcheckCallback ? userSpellcheckCallback : defaultSpellcheckCallback(editor, pluginUrl, currentLanguageState);\n spellCheckCallback.call(editor.plugins.spellchecker, name, data, successCallback, errorCallback);\n };\n var spellcheck = function (editor, pluginUrl, startedState, textMatcherState, lastSuggestionsState, currentLanguageState) {\n if (finish(editor, startedState, textMatcherState)) {\n return;\n }\n var errorCallback = function (message) {\n editor.notificationManager.open({\n text: message,\n type: 'error'\n });\n editor.setProgressState(false);\n finish(editor, startedState, textMatcherState);\n };\n var successCallback = function (data) {\n markErrors(editor, startedState, textMatcherState, lastSuggestionsState, data);\n };\n editor.setProgressState(true);\n sendRpcCall(editor, pluginUrl, currentLanguageState, 'spellcheck', getTextMatcher(editor, textMatcherState).text, successCallback, errorCallback);\n editor.focus();\n };\n var checkIfFinished = function (editor, startedState, textMatcherState) {\n if (!editor.dom.select('span.mce-spellchecker-word').length) {\n finish(editor, startedState, textMatcherState);\n }\n };\n var addToDictionary = function (editor, pluginUrl, startedState, textMatcherState, currentLanguageState, word, spans) {\n editor.setProgressState(true);\n sendRpcCall(editor, pluginUrl, currentLanguageState, 'addToDictionary', word, function () {\n editor.setProgressState(false);\n editor.dom.remove(spans, true);\n checkIfFinished(editor, startedState, textMatcherState);\n }, function (message) {\n editor.notificationManager.open({\n text: message,\n type: 'error'\n });\n editor.setProgressState(false);\n });\n };\n var ignoreWord = function (editor, startedState, textMatcherState, word, spans, all) {\n editor.selection.collapse();\n if (all) {\n global$1.each(editor.dom.select('span.mce-spellchecker-word'), function (span) {\n if (span.getAttribute('data-mce-word') === word) {\n editor.dom.remove(span, true);\n }\n });\n } else {\n editor.dom.remove(spans, true);\n }\n checkIfFinished(editor, startedState, textMatcherState);\n };\n var finish = function (editor, startedState, textMatcherState) {\n var bookmark = editor.selection.getBookmark();\n getTextMatcher(editor, textMatcherState).reset();\n editor.selection.moveToBookmark(bookmark);\n textMatcherState.set(null);\n if (startedState.get()) {\n startedState.set(false);\n Events.fireSpellcheckEnd(editor);\n return true;\n }\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 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 markErrors = function (editor, startedState, textMatcherState, lastSuggestionsState, data) {\n var suggestions, hasDictionarySupport;\n if (typeof data !== 'string' && data.words) {\n hasDictionarySupport = !!data.dictionary;\n suggestions = data.words;\n } else {\n suggestions = data;\n }\n editor.setProgressState(false);\n if (isEmpty(suggestions)) {\n var message = editor.translate('No misspellings found.');\n editor.notificationManager.open({\n text: message,\n type: 'info'\n });\n startedState.set(false);\n return;\n }\n lastSuggestionsState.set({\n suggestions: suggestions,\n hasDictionarySupport: hasDictionarySupport\n });\n var bookmark = editor.selection.getBookmark();\n getTextMatcher(editor, textMatcherState).find(Settings.getSpellcheckerWordcharPattern(editor)).filter(function (match) {\n return !!suggestions[match.text];\n }).wrap(function (match) {\n return editor.dom.create('span', {\n 'class': 'mce-spellchecker-word',\n 'data-mce-bogus': 1,\n 'data-mce-word': match.text\n });\n });\n editor.selection.moveToBookmark(bookmark);\n startedState.set(true);\n Events.fireSpellcheckStart(editor);\n };\n var Actions = {\n spellcheck: spellcheck,\n checkIfFinished: checkIfFinished,\n addToDictionary: addToDictionary,\n ignoreWord: ignoreWord,\n findSpansByIndex: findSpansByIndex,\n getElmIndex: getElmIndex,\n markErrors: markErrors\n };\n\n var get = function (editor, startedState, lastSuggestionsState, textMatcherState, currentLanguageState, url) {\n var getLanguage = function () {\n return currentLanguageState.get();\n };\n var getWordCharPattern = function () {\n return Settings.getSpellcheckerWordcharPattern(editor);\n };\n var markErrors = function (data) {\n Actions.markErrors(editor, startedState, textMatcherState, lastSuggestionsState, data);\n };\n var getTextMatcher = function () {\n return textMatcherState.get();\n };\n return {\n getTextMatcher: getTextMatcher,\n getWordCharPattern: getWordCharPattern,\n markErrors: markErrors,\n getLanguage: getLanguage\n };\n };\n var Api = { get: get };\n\n var register = function (editor, pluginUrl, startedState, textMatcherState, lastSuggestionsState, currentLanguageState) {\n editor.addCommand('mceSpellCheck', function () {\n Actions.spellcheck(editor, pluginUrl, startedState, textMatcherState, lastSuggestionsState, currentLanguageState);\n });\n };\n var Commands = { register: register };\n\n var buildMenuItems = function (listName, languageValues) {\n var items = [];\n global$1.each(languageValues, function (languageValue) {\n items.push({\n selectable: true,\n text: languageValue.name,\n data: languageValue.value\n });\n });\n return items;\n };\n var updateSelection = function (editor, currentLanguageState) {\n return function (e) {\n var selectedLanguage = currentLanguageState.get();\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.data === selectedLanguage);\n });\n };\n };\n var getItems = function (editor) {\n return global$1.map(Settings.getLanguages(editor).split(','), function (langPair) {\n langPair = langPair.split('=');\n return {\n name: langPair[0],\n value: langPair[1]\n };\n });\n };\n var register$1 = function (editor, pluginUrl, startedState, textMatcherState, currentLanguageState, lastSuggestionsState) {\n var languageMenuItems = buildMenuItems('Language', getItems(editor));\n var startSpellchecking = function () {\n Actions.spellcheck(editor, pluginUrl, startedState, textMatcherState, lastSuggestionsState, currentLanguageState);\n };\n var buttonArgs = {\n tooltip: 'Spellcheck',\n onclick: startSpellchecking,\n onPostRender: function (e) {\n var ctrl = e.control;\n editor.on('SpellcheckStart SpellcheckEnd', function () {\n ctrl.active(startedState.get());\n });\n }\n };\n if (languageMenuItems.length > 1) {\n buttonArgs.type = 'splitbutton';\n buttonArgs.menu = languageMenuItems;\n buttonArgs.onshow = updateSelection(editor, currentLanguageState);\n buttonArgs.onselect = function (e) {\n currentLanguageState.set(e.control.settings.data);\n };\n }\n editor.addButton('spellchecker', buttonArgs);\n editor.addMenuItem('spellchecker', {\n text: 'Spellcheck',\n context: 'tools',\n onclick: startSpellchecking,\n selectable: true,\n onPostRender: function () {\n var self = this;\n self.active(startedState.get());\n editor.on('SpellcheckStart SpellcheckEnd', function () {\n self.active(startedState.get());\n });\n }\n });\n };\n var Buttons = { register: register$1 };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var suggestionsMenu;\n var showSuggestions = function (editor, pluginUrl, lastSuggestionsState, startedState, textMatcherState, currentLanguageState, word, spans) {\n var items = [], suggestions = lastSuggestionsState.get().suggestions[word];\n global$1.each(suggestions, function (suggestion) {\n items.push({\n text: suggestion,\n onclick: function () {\n editor.insertContent(editor.dom.encode(suggestion));\n editor.dom.remove(spans);\n Actions.checkIfFinished(editor, startedState, textMatcherState);\n }\n });\n });\n items.push({ text: '-' });\n var hasDictionarySupport = lastSuggestionsState.get().hasDictionarySupport;\n if (hasDictionarySupport) {\n items.push({\n text: 'Add to Dictionary',\n onclick: function () {\n Actions.addToDictionary(editor, pluginUrl, startedState, textMatcherState, currentLanguageState, word, spans);\n }\n });\n }\n items.push.apply(items, [\n {\n text: 'Ignore',\n onclick: function () {\n Actions.ignoreWord(editor, startedState, textMatcherState, word, spans);\n }\n },\n {\n text: 'Ignore all',\n onclick: function () {\n Actions.ignoreWord(editor, startedState, textMatcherState, word, spans, true);\n }\n }\n ]);\n suggestionsMenu = global$5.create('menu', {\n items: items,\n context: 'contextmenu',\n onautohide: function (e) {\n if (e.target.className.indexOf('spellchecker') !== -1) {\n e.preventDefault();\n }\n },\n onhide: function () {\n suggestionsMenu.remove();\n suggestionsMenu = null;\n }\n });\n suggestionsMenu.renderTo(domGlobals.document.body);\n var pos = global$4.DOM.getPos(editor.getContentAreaContainer());\n var targetPos = editor.dom.getPos(spans[0]);\n var root = editor.dom.getRoot();\n if (root.nodeName === 'BODY') {\n targetPos.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n targetPos.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n } else {\n targetPos.x -= root.scrollLeft;\n targetPos.y -= root.scrollTop;\n }\n pos.x += targetPos.x;\n pos.y += targetPos.y;\n suggestionsMenu.moveTo(pos.x, pos.y + spans[0].offsetHeight);\n };\n var setup = function (editor, pluginUrl, lastSuggestionsState, startedState, textMatcherState, currentLanguageState) {\n editor.on('click', function (e) {\n var target = e.target;\n if (target.className === 'mce-spellchecker-word') {\n e.preventDefault();\n var spans = Actions.findSpansByIndex(editor, Actions.getElmIndex(target));\n if (spans.length > 0) {\n var rng = editor.dom.createRng();\n rng.setStartBefore(spans[0]);\n rng.setEndAfter(spans[spans.length - 1]);\n editor.selection.setRng(rng);\n showSuggestions(editor, pluginUrl, lastSuggestionsState, startedState, textMatcherState, currentLanguageState, target.getAttribute('data-mce-word'), spans);\n }\n }\n });\n };\n var SuggestionsMenu = { setup: setup };\n\n global.add('spellchecker', function (editor, pluginUrl) {\n if (DetectProPlugin.hasProPlugin(editor) === false) {\n var startedState = Cell(false);\n var currentLanguageState = Cell(Settings.getLanguage(editor));\n var textMatcherState = Cell(null);\n var lastSuggestionsState = Cell(null);\n Buttons.register(editor, pluginUrl, startedState, textMatcherState, currentLanguageState, lastSuggestionsState);\n SuggestionsMenu.setup(editor, pluginUrl, lastSuggestionsState, startedState, textMatcherState, currentLanguageState);\n Commands.register(editor, pluginUrl, startedState, textMatcherState, lastSuggestionsState, currentLanguageState);\n return Api.get(editor, startedState, lastSuggestionsState, textMatcherState, currentLanguageState, pluginUrl);\n }\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\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 \"pagebreak\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/pagebreak')\n// ES2015:\n// import 'tinymce/plugins/pagebreak'\nrequire('./plugin.js');","// 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","// Exports the \"toc\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/toc')\n// ES2015:\n// import 'tinymce/plugins/toc'\nrequire('./plugin.js');","(function () {\nvar fullscreen = (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 (fullscreenState) {\n return {\n isFullscreen: function () {\n return fullscreenState.get() !== null;\n }\n };\n };\n var Api = { get: get };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var fireFullscreenStateChanged = function (editor, state) {\n editor.fire('FullscreenStateChanged', { state: state });\n };\n var Events = { fireFullscreenStateChanged: fireFullscreenStateChanged };\n\n var DOM = global$1.DOM;\n var getWindowSize = function () {\n var w;\n var h;\n var win = domGlobals.window;\n var doc = domGlobals.document;\n var body = doc.body;\n if (body.offsetWidth) {\n w = body.offsetWidth;\n h = body.offsetHeight;\n }\n if (win.innerWidth && win.innerHeight) {\n w = win.innerWidth;\n h = win.innerHeight;\n }\n return {\n w: w,\n h: h\n };\n };\n var getScrollPos = function () {\n var vp = DOM.getViewPort();\n return {\n x: vp.x,\n y: vp.y\n };\n };\n var setScrollPos = function (pos) {\n domGlobals.window.scrollTo(pos.x, pos.y);\n };\n var toggleFullscreen = function (editor, fullscreenState) {\n var body = domGlobals.document.body;\n var documentElement = domGlobals.document.documentElement;\n var editorContainerStyle;\n var editorContainer, iframe, iframeStyle;\n var fullscreenInfo = fullscreenState.get();\n var resize = function () {\n DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));\n };\n var removeResize = function () {\n DOM.unbind(domGlobals.window, 'resize', resize);\n };\n editorContainer = editor.getContainer();\n editorContainerStyle = editorContainer.style;\n iframe = editor.getContentAreaContainer().firstChild;\n iframeStyle = iframe.style;\n if (!fullscreenInfo) {\n var newFullScreenInfo = {\n scrollPos: getScrollPos(),\n containerWidth: editorContainerStyle.width,\n containerHeight: editorContainerStyle.height,\n iframeWidth: iframeStyle.width,\n iframeHeight: iframeStyle.height,\n resizeHandler: resize,\n removeHandler: removeResize\n };\n iframeStyle.width = iframeStyle.height = '100%';\n editorContainerStyle.width = editorContainerStyle.height = '';\n DOM.addClass(body, 'mce-fullscreen');\n DOM.addClass(documentElement, 'mce-fullscreen');\n DOM.addClass(editorContainer, 'mce-fullscreen');\n DOM.bind(domGlobals.window, 'resize', resize);\n editor.on('remove', removeResize);\n resize();\n fullscreenState.set(newFullScreenInfo);\n Events.fireFullscreenStateChanged(editor, true);\n } else {\n iframeStyle.width = fullscreenInfo.iframeWidth;\n iframeStyle.height = fullscreenInfo.iframeHeight;\n if (fullscreenInfo.containerWidth) {\n editorContainerStyle.width = fullscreenInfo.containerWidth;\n }\n if (fullscreenInfo.containerHeight) {\n editorContainerStyle.height = fullscreenInfo.containerHeight;\n }\n DOM.removeClass(body, 'mce-fullscreen');\n DOM.removeClass(documentElement, 'mce-fullscreen');\n DOM.removeClass(editorContainer, 'mce-fullscreen');\n setScrollPos(fullscreenInfo.scrollPos);\n DOM.unbind(domGlobals.window, 'resize', fullscreenInfo.resizeHandler);\n editor.off('remove', fullscreenInfo.removeHandler);\n fullscreenState.set(null);\n Events.fireFullscreenStateChanged(editor, false);\n }\n };\n var Actions = { toggleFullscreen: toggleFullscreen };\n\n var register = function (editor, fullscreenState) {\n editor.addCommand('mceFullScreen', function () {\n Actions.toggleFullscreen(editor, fullscreenState);\n });\n };\n var Commands = { register: register };\n\n var postRender = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('FullscreenStateChanged', function (e) {\n ctrl.active(e.state);\n });\n };\n };\n var register$1 = function (editor) {\n editor.addMenuItem('fullscreen', {\n text: 'Fullscreen',\n shortcut: 'Ctrl+Shift+F',\n selectable: true,\n cmd: 'mceFullScreen',\n onPostRender: postRender(editor),\n context: 'view'\n });\n editor.addButton('fullscreen', {\n active: false,\n tooltip: 'Fullscreen',\n cmd: 'mceFullScreen',\n onPostRender: postRender(editor)\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('fullscreen', function (editor) {\n var fullscreenState = Cell(null);\n if (editor.settings.inline) {\n return Api.get(fullscreenState);\n }\n Commands.register(editor, fullscreenState);\n Buttons.register(editor);\n editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');\n return Api.get(fullscreenState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\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');","(function () {\nvar tabfocus = (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.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var getTabFocusElements = function (editor) {\n return editor.getParam('tabfocus_elements', ':prev,:next');\n };\n var getTabFocus = function (editor) {\n return editor.getParam('tab_focus', getTabFocusElements(editor));\n };\n var Settings = { getTabFocus: getTabFocus };\n\n var DOM = global$1.DOM;\n var tabCancel = function (e) {\n if (e.keyCode === global$6.TAB && !e.ctrlKey && !e.altKey && !e.metaKey) {\n e.preventDefault();\n }\n };\n var setup = function (editor) {\n function tabHandler(e) {\n var x, el, v, i;\n if (e.keyCode !== global$6.TAB || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {\n return;\n }\n function find(direction) {\n el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');\n function canSelectRecursive(e) {\n return e.nodeName === 'BODY' || e.type !== 'hidden' && e.style.display !== 'none' && e.style.visibility !== 'hidden' && canSelectRecursive(e.parentNode);\n }\n function canSelect(el) {\n return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && global$2.get(e.id) && el.tabIndex !== -1 && canSelectRecursive(el);\n }\n global$5.each(el, function (e, i) {\n if (e.id === editor.id) {\n x = i;\n return false;\n }\n });\n if (direction > 0) {\n for (i = x + 1; i < el.length; i++) {\n if (canSelect(el[i])) {\n return el[i];\n }\n }\n } else {\n for (i = x - 1; i >= 0; i--) {\n if (canSelect(el[i])) {\n return el[i];\n }\n }\n }\n return null;\n }\n v = global$5.explode(Settings.getTabFocus(editor));\n if (v.length === 1) {\n v[1] = v[0];\n v[0] = ':prev';\n }\n if (e.shiftKey) {\n if (v[0] === ':prev') {\n el = find(-1);\n } else {\n el = DOM.get(v[0]);\n }\n } else {\n if (v[1] === ':next') {\n el = find(1);\n } else {\n el = DOM.get(v[1]);\n }\n }\n if (el) {\n var focusEditor = global$2.get(el.id || el.name);\n if (el.id && focusEditor) {\n focusEditor.focus();\n } else {\n global$4.setTimeout(function () {\n if (!global$3.webkit) {\n domGlobals.window.focus();\n }\n el.focus();\n }, 10);\n }\n e.preventDefault();\n }\n }\n editor.on('init', function () {\n if (editor.inline) {\n DOM.setAttrib(editor.getBody(), 'tabIndex', null);\n }\n editor.on('keyup', tabCancel);\n if (global$3.gecko) {\n editor.on('keypress keydown', tabHandler);\n } else {\n editor.on('keydown', tabHandler);\n }\n });\n };\n var Keyboard = { setup: setup };\n\n global.add('tabfocus', function (editor) {\n Keyboard.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","// Exports the \"importcss\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/importcss')\n// ES2015:\n// import 'tinymce/plugins/importcss'\nrequire('./plugin.js');","(function () {\nvar toc = (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.I18n');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTocClass = function (editor) {\n return editor.getParam('toc_class', 'mce-toc');\n };\n var getTocHeader = function (editor) {\n var tagName = editor.getParam('toc_header', 'h2');\n return /^h[1-6]$/.test(tagName) ? tagName : 'h2';\n };\n var getTocDepth = function (editor) {\n var depth = parseInt(editor.getParam('toc_depth', '3'), 10);\n return depth >= 1 && depth <= 9 ? depth : 3;\n };\n var Settings = {\n getTocClass: getTocClass,\n getTocHeader: getTocHeader,\n getTocDepth: getTocDepth\n };\n\n var create = function (prefix) {\n var counter = 0;\n return function () {\n var guid = new Date().getTime().toString(32);\n return prefix + guid + (counter++).toString(32);\n };\n };\n var Guid = { create: create };\n\n var tocId = Guid.create('mcetoc_');\n var generateSelector = function generateSelector(depth) {\n var i;\n var selector = [];\n for (i = 1; i <= depth; i++) {\n selector.push('h' + i);\n }\n return selector.join(',');\n };\n var hasHeaders = function (editor) {\n return readHeaders(editor).length > 0;\n };\n var readHeaders = function (editor) {\n var tocClass = Settings.getTocClass(editor);\n var headerTag = Settings.getTocHeader(editor);\n var selector = generateSelector(Settings.getTocDepth(editor));\n var headers = editor.$(selector);\n if (headers.length && /^h[1-9]$/i.test(headerTag)) {\n headers = headers.filter(function (i, el) {\n return !editor.dom.hasClass(el.parentNode, tocClass);\n });\n }\n return global$3.map(headers, function (h) {\n return {\n id: h.id ? h.id : tocId(),\n level: parseInt(h.nodeName.replace(/^H/i, ''), 10),\n title: editor.$.text(h),\n element: h\n };\n });\n };\n var getMinLevel = function (headers) {\n var i, minLevel = 9;\n for (i = 0; i < headers.length; i++) {\n if (headers[i].level < minLevel) {\n minLevel = headers[i].level;\n }\n if (minLevel === 1) {\n return minLevel;\n }\n }\n return minLevel;\n };\n var generateTitle = function (tag, title) {\n var openTag = '<' + tag + ' contenteditable=\"true\">';\n var closeTag = '';\n return openTag + global$1.DOM.encode(title) + closeTag;\n };\n var generateTocHtml = function (editor) {\n var html = generateTocContentHtml(editor);\n return '
    ' + html + '
    ';\n };\n var generateTocContentHtml = function (editor) {\n var html = '';\n var headers = readHeaders(editor);\n var prevLevel = getMinLevel(headers) - 1;\n var i, ii, h, nextLevel;\n if (!headers.length) {\n return '';\n }\n html += generateTitle(Settings.getTocHeader(editor), global$2.translate('Table of Contents'));\n for (i = 0; i < headers.length; i++) {\n h = headers[i];\n h.element.id = h.id;\n nextLevel = headers[i + 1] && headers[i + 1].level;\n if (prevLevel === h.level) {\n html += '
  • ';\n } else {\n for (ii = prevLevel; ii < h.level; ii++) {\n html += '
    • ';\n }\n }\n html += '' + h.title + '';\n if (nextLevel === h.level || !nextLevel) {\n html += '
    • ';\n if (!nextLevel) {\n html += '
    ';\n }\n } else {\n for (ii = h.level; ii > nextLevel; ii--) {\n html += '
  • ';\n }\n }\n prevLevel = h.level;\n }\n return html;\n };\n var isEmptyOrOffscren = function (editor, nodes) {\n return !nodes.length || editor.dom.getParents(nodes[0], '.mce-offscreen-selection').length > 0;\n };\n var insertToc = function (editor) {\n var tocClass = Settings.getTocClass(editor);\n var $tocElm = editor.$('.' + tocClass);\n if (isEmptyOrOffscren(editor, $tocElm)) {\n editor.insertContent(generateTocHtml(editor));\n } else {\n updateToc(editor);\n }\n };\n var updateToc = function (editor) {\n var tocClass = Settings.getTocClass(editor);\n var $tocElm = editor.$('.' + tocClass);\n if ($tocElm.length) {\n editor.undoManager.transact(function () {\n $tocElm.html(generateTocContentHtml(editor));\n });\n }\n };\n var Toc = {\n hasHeaders: hasHeaders,\n insertToc: insertToc,\n updateToc: updateToc\n };\n\n var register = function (editor) {\n editor.addCommand('mceInsertToc', function () {\n Toc.insertToc(editor);\n });\n editor.addCommand('mceUpdateToc', function () {\n Toc.updateToc(editor);\n });\n };\n var Commands = { register: register };\n\n var setup = function (editor) {\n var $ = editor.$, tocClass = Settings.getTocClass(editor);\n editor.on('PreProcess', function (e) {\n var $tocElm = $('.' + tocClass, e.node);\n if ($tocElm.length) {\n $tocElm.removeAttr('contentEditable');\n $tocElm.find('[contenteditable]').removeAttr('contentEditable');\n }\n });\n editor.on('SetContent', function () {\n var $tocElm = $('.' + tocClass);\n if ($tocElm.length) {\n $tocElm.attr('contentEditable', false);\n $tocElm.children(':first-child').attr('contentEditable', true);\n }\n });\n };\n var FilterContent = { setup: setup };\n\n var toggleState = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('LoadContent SetContent change', function () {\n ctrl.disabled(editor.readonly || !Toc.hasHeaders(editor));\n });\n };\n };\n var isToc = function (editor) {\n return function (elm) {\n return elm && editor.dom.is(elm, '.' + Settings.getTocClass(editor)) && editor.getBody().contains(elm);\n };\n };\n var register$1 = function (editor) {\n editor.addButton('toc', {\n tooltip: 'Table of Contents',\n cmd: 'mceInsertToc',\n icon: 'toc',\n onPostRender: toggleState(editor)\n });\n editor.addButton('tocupdate', {\n tooltip: 'Update',\n cmd: 'mceUpdateToc',\n icon: 'reload'\n });\n editor.addMenuItem('toc', {\n text: 'Table of Contents',\n context: 'insert',\n cmd: 'mceInsertToc',\n onPostRender: toggleState(editor)\n });\n editor.addContextToolbar(isToc(editor), 'tocupdate');\n };\n var Buttons = { register: register$1 };\n\n global.add('toc', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n FilterContent.setup(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\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":""}