{"version":3,"sources":["webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/tinymce/plugins/template/index.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/ja.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:///./node_modules/tinymce/plugins/advlist/index.js","webpack:///./node_modules/tinymce/plugins/textcolor/plugin.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/tinymce/plugins/preview/index.js","webpack:///./node_modules/tinymce/plugins/help/index.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/tinymce/plugins/visualblocks/index.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/tinymce/plugins/template/plugin.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/tinymce/plugins/anchor/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/plugin.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/tinymce/plugins/lists/plugin.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/tinymce/plugins/autolink/plugin.js","webpack:///./node_modules/tinymce/plugins/searchreplace/plugin.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/tinymce/plugins/hr/index.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/tinymce/plugins/colorpicker/index.js","webpack:///./node_modules/moment/locale/uz.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/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/tinymce/plugins/textpattern/plugin.js","webpack:///./node_modules/tinymce/plugins/media/index.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/tinymce/plugins/help/plugin.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/tinymce/plugins/link/index.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/tinymce/plugins/noneditable/plugin.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/index.js","webpack:///./node_modules/tinymce/plugins/visualblocks/plugin.js","webpack:///./node_modules/tinymce/plugins/legacyoutput/index.js","webpack:///./node_modules/tinymce/plugins/image/index.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/tinymce/plugins/tabfocus/index.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./src/assets/img/backgroundTutor.png","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/tinymce/plugins/contextmenu/plugin.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/tinymce/plugins/searchreplace/index.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/tinymce/plugins/code/index.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?7a53","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.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/moment/locale/nb.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/tinymce/plugins/legacyoutput/plugin.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/tinymce/plugins/autoresize/index.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/sw.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/moment/locale/sk.js","webpack:///./node_modules/tinymce/plugins/paste/plugin.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/tinymce/plugins/print/index.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/tinymce/plugins/lists/index.js","webpack:///./node_modules/tinymce/plugins/directionality/index.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/tinymce/plugins/imagetools/index.js","webpack:///./node_modules/tinymce/plugins/advlist/plugin.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?43eb","webpack:///node_modules/vue-spinner/src/PulseLoader.vue","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue?2038","webpack:///./node_modules/vue-spinner/src/PulseLoader.vue","webpack:///./node_modules/tinymce/plugins/autosave/plugin.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/tinymce/plugins/wordcount/index.js","webpack:///./node_modules/tinymce/plugins/table/plugin.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/vue2-timepicker/dist/VueTimepicker.common.js","webpack:///./node_modules/tinymce/plugins/bbcode/plugin.js","webpack:///./node_modules/tinymce/plugins/imagetools/plugin.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/tinymce/plugins/insertdatetime/plugin.js","webpack:///./node_modules/tinymce/plugins/bbcode/index.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/tinymce/plugins/codesample/plugin.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/tinymce/plugins/autoresize/plugin.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./src/views/QuizTeacherCreateQuestion.vue?2a53","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?8d97","webpack:///node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue?501e","webpack:///./node_modules/vue-tinymce-editor/src/components/TinymceVue.vue","webpack:///./node_modules/vue-tinymce-editor/src/index.js","webpack:///src/views/QuizTeacherCreateQuestion.vue","webpack:///./src/views/QuizTeacherCreateQuestion.vue?7041","webpack:///./src/views/QuizTeacherCreateQuestion.vue","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/tinymce/plugins/paste/index.js","webpack:///./node_modules/tinymce/plugins/link/plugin.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/tinymce/plugins/nonbreaking/plugin.js","webpack:///./node_modules/tinymce/plugins/charmap/index.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/tinymce/plugins/image/plugin.js","webpack:///./node_modules/tinymce/plugins/visualchars/plugin.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/tinymce/plugins/noneditable/index.js","webpack:///./node_modules/tinymce/plugins/emoticons/plugin.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/tinymce/plugins/anchor/index.js","webpack:///./src/assets/img/bgApps.jpg","webpack:///./node_modules/tinymce/plugins/print/plugin.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/tinymce/plugins/hr/plugin.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/tinymce/plugins/spellchecker/index.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/en-ie.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/moment/locale/km.js","webpack:///./node_modules/tinymce/plugins/wordcount/plugin.js","webpack:///./node_modules/tinymce/plugins/pagebreak/index.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/si.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:///./src/views/QuizTeacherCreateQuestion.vue?6f42","webpack:///./node_modules/tinymce/plugins/fullscreen/plugin.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/tinymce/plugins/contextmenu/index.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/tinymce/plugins/tabfocus/plugin.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/tinymce/plugins/importcss/index.js","webpack:///./node_modules/tinymce/plugins/toc/plugin.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/tinymce/plugins/autosave/index.js","webpack:///./node_modules/moment/locale/se.js"],"names":["global","factory","this","moment","uzLatn","defineLocale","months","split","monthsShort","weekdays","weekdaysShort","weekdaysMin","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","m","mm","h","hh","d","dd","M","MM","y","yy","week","dow","doy","ml","monthsParseExact","meridiemParse","meridiemHour","hour","meridiem","minute","isLower","cv","output","affix","exec","dayOfMonthOrdinalParse","ordinal","plural","n","translate","number","withoutSuffix","key","isFuture","result","is","fo","ja","eras","since","offset","name","narrow","abbr","until","Infinity","eraYearOrdinalRegex","eraYearOrdinalParse","input","match","parseInt","l","ll","lll","llll","isPM","now","period","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","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","count","id","DOM","uniqueId","getColorCellHtml","isNoColor","ColorPickerHtml","setDivColor","div","background","setAttribute","onButtonClick","ctrl","control","_color","execCommand","onPanelClick","buttonCtrl","currentColor","selectColor","hidePanel","resetColor","getParent","colorPickerCallback","call","customColorCells","tableElm","panel","getEl","getElementsByTagName","map","childNodes","firstChild","getAttribute","lastId","get","renderColorPicker","foreColor","tooltip","role","ariaRemember","onclick","monthsShortDot","monthsParse","monthsRegex","esDo","test","month","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","weekdaysParseExact","hours","w","ww","arMa","processRelativeTime","gomLatn","standalone","isFormat","frCh","enAu","b","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","tr","minutes","c","da","tlPh","curry","fn","initialArgs","_i","arguments","restArgs","all","concat","getCreationDateClasses","getModificationDateClasses","getSelectedContentClasses","getPreviewReplaceValues","getTemplateReplaceValues","getTemplates","editorSettings","templates","getCdateFormat","getLang","getMdateFormat","getDialogWidth","getDialogHeight","Math","min","getViewPort","addZeros","len","getDateTime","fmt","date","daysShort","daysLong","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","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","eu","th","translator","words","correctGrammaticalCase","wordKey","srCyrl","day","lastWeekDays","ocLnc","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","chrText","String","fromCharCode","GridHtml","getParentTd","charMapPanel","charDiv","hasAttribute","charCodeString","isNaN","ctrlKey","onmouseover","td","buttons","mt","symbolMap","0","pluralForm","plurals","pluralize","u","string","f","str","arLy","preparse","postformat","word","num","forms","relativeTimeWithPlural","be","ka","$0","$1","$2","ko","token","isUpper","domGlobals","global$4","global$5","global$6","isTextNode","nodeType","isListNode","isOlUlNode","isListItemNode","isDlItemNode","isTableCellNode","isBr","isFirstChild","isLastChild","lastChild","isTextBlock","getTextBlockElements","isBlock","blockElements","isBogusBr","nextSibling","previousSibling","isEmpty","keepBookmarks","empty","isChildOfBody","isChildOf","getRoot","NodeType","getNormalizedPoint","container","normalizeRange","rng","outRng","cloneRange","rangeStart","startContainer","startOffset","setStart","rangeEnd","endContainer","endOffset","setEnd","Range","createBookmark","bookmark","setupEndPoint","start","offsetNode","hasChildNodes","insertBefore","insertAfter","collapsed","resolveBookmark","restoreEndPoint","nodeIndex","idx","createRng","Bookmark","noop","constant","not","args","never","always","none","NONE","eq","isNone","thunk","me","fold","isSome","getOr","getOrThunk","getOrDie","msg","Error","getOrNull","getOrUndefined","undefined","or","orThunk","bind","exists","forall","filter","equals","equals_","toArray","toString","Object","freeze","some","constant_a","self","elementEq","from","Option","typeOf","t","Array","prototype","isPrototypeOf","constructor","isType","isString","isBoolean","isFunction","isNumber","nativeSlice","slice","nativePush","xs","r","pred","groupBy","wasType","group","foldl","acc","flatten","reverse","head","Global","window","Function","path","parts","scope","p","unsafe","actual","Global$1","htmlElement","HTMLElement","global$7","getParentList","selectionStart","getClosestListRootElm","isParentListSelected","parentList","selectedBlocks","findSubLists","querySelectorAll","getSelectedSubLists","getSelectedBlocks","findParentListItemsNodes","elms","listItemsElms","parentLi","unique","getSelectedListItems","block","getSelectedDlItems","parentTableCell","root","getBody","findLastParentListNode","parentLists","getSelectedLists","firstList","subsequentLists","getSelectedListRoots","selectedLists","getUniqueListRoots","lists","listRoots","list","isList","Selection","fromHtml","createElement","console","error","fromDom","fromTag","tag","fromText","createTextNode","fromPoint","docElm","elementFromPoint","Element","lift2","oa","ob","fromElements","elements","fragment","createDocumentFragment","element","Immutable","fields","struct","keys","each$1","obj","props","compareDocumentPosition","documentPositionPreceding","DOCUMENT_POSITION_PRECEDING","documentPositionContainedBy","DOCUMENT_POSITION_CONTAINED_BY","Node","cached","called","firstMatch","regexes","find$1","agent","major","minor","Number","nu","detect","versionRegexes","cleanedAgent","toLowerCase","unknown","Version","edge","chrome","ie","opera","firefox","safari","isBrowser","current","unknown$1","nu$1","version","info","isEdge","isChrome","isIE","isOpera","isFirefox","isSafari","Browser","windows","ios","android","linux","osx","solaris","freebsd","isOS","unknown$2","nu$2","isWindows","isiOS","isAndroid","isOSX","isLinux","isSolaris","isFreeBSD","OperatingSystem","DeviceType","os","browser","userAgent","isiPad","isiPhone","isAndroid3","isAndroid4","isTablet","isTouch","isPhone","iOSwebview","isWebView","detect$1","candidates","candidate","search","detectBrowser","browsers","detectOs","oses","UaString","contains","substr","normalVersionRegex","checkContains","uastring","PlatformInfo","detect$2","deviceType","PlatformDetection","detect$3","navigator","PlatformDetection$1","ELEMENT","ATTRIBUTE_NODE","CDATA_SECTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","ELEMENT_NODE","ELEMENT$1","TEXT_NODE","PROCESSING_INSTRUCTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","NOTATION_NODE","selector","elem","matches","msMatchesSelector","webkitMatchesSelector","mozMatchesSelector","e1","e2","regularContains","d1","d2","ieContains","contains$1","is$1","children","child","cs","before","marker","parent$1","append","before$1","append$1","removeChild","isType$1","isElement","rawSet","setAll","attrs","clone","attributes","isSupported","getPropertyValue","internalSet","property","setProperty","set","clone$1","original","isDeep","deep","shallowAs","mutate","children$1","joinSegment","joinSegments","segments","appendSegments","head$1","tail","createSegment","listType","segment","createSegments","entry","populateSegments","listAttributes","itemAttributes","normalizeSegment","createItem","appendItem","writeShallow","cast","newCast","depth","writeDeep","composeList","entries","isList$1","hasFirstChildList","hasLastChildList","isIndented","isSelected","cloneItemContent","li","createEntry","indentEntry","indentation","hasOwnProperty","shallow","old","baseMerge","merger","objects","ret","j","curObject","merge","cloneListProperties","source","previousSiblingEntry","normalizeEntries","matchingEntry","Cell","initial","parseItem","itemSelection","selectionState","currentItemEntry","end","childListEntries","parseList","newDepth","parseLists","initialDepth","sourceList","global$8","createTextBlock","contentNode","textBlock","blockName","hasContentNode","createFragment","forced_root_block","setAttribs","forced_root_block_attrs","outdentedComposer","indentedComposer","contentDocument","composeEntries","groupIsIndented","indentSelectedEntries","getItemSelection","selectedListItems","listsIndentation","entrySets","entrySet","DOM$1","splitList","ul","tmpRng","bookmarks","newBlock","removeAndKeepBookmarks","targetNode","setStartAfter","setEndAfter","extractContents","SplitList","outdentDlItem","dl","indentDlItem","dlIndentation","dlItems","selectionIndentation","isHandled","getBookmark","moveToBookmark","setRng","getRng","indentListSelection","outdentListSelection","flattenListSelection","updateListStyle","detail","setStyle","updateListAttrs","updateListWithDetails","removeStyles","styles","_a","getEndPointNode","getSelectedTextBlocks","textBlocks","startNode","endNode","siblings","isBookmarkNode","hasCompatibleStyle","sib","sibStyle","getStyle","detailStyle","applyList","listName","listItemName","getContentEditable","toUpperCase","listBlock","sibling","rename","mergeWithAdjacentLists","isValidLists","list1","list2","hasSameListStyle","targetStyle","hasSameClasses","elm1","elm2","shouldMerge","updateList","newList","toggleMultipleLists","hasListStyleDetail","toggleSingleList","toggleList","selectedSubLists","ToggleList","DOM$2","normalizeList","normalizeLists","NormalizeLists","findNextCaretContainer","isForward","nonEmptyBlocks","walker","getNonEmptyElements","next","hasOnlyOneBlockChild","unwrapSingleBlockChild","moveChildren","fromElm","toElm","targetElm","mergeLiElements","listNode","$","nestedLists","mergeIntoEmptyLi","fromLi","toLi","setCursorLocation","mergeForward","mergeBackward","resolvedBookmark","backspaceDeleteFromListToListCaret","otherLi","selectionStartElm","removeBlock","parentBlock","backspaceDeleteIntoListCaret","otherLi_1","backspaceDeleteCaret","backspaceDeleteRange","startListParent","backspaceDelete","isCollapsed","keyCode","BACKSPACE","DELETE","Delete","queryListCommandState","command","addQueryStateHandler","shouldIndentOnTab","setupTabKey","TAB","metaKeyPressed","shiftKey","Keyboard","findIndex","predicate","listState","tableCellIndex","parents","active","hasPlugin","plugin","plugins","inArray","onPostRender","numberMap","ku","getAutoLinkPattern","getDefaultLinkTarget","rangeEqualsDelimiterOrSpace","rangeString","delimiter","charCodeAt","handleEclipse","parseCurrentLine","handleSpacebar","handleEnter","scopeIndex","setStartBefore","prev","rngText","autoLinkPattern","defaultLinkTarget","nodeValue","charAt","trim","setAttrib","autoUrlDetectState","ex","Keys","isContentEditableFalse","contentEditable","findAndReplaceDOMText","regex","replacementNode","captureGroup","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","FindReplaceText","getElmIndex","markAllMatches","currentIndexState","done","unwrap","findSpansByIndex","spans","moveSelection","forward","testIndex","removeClass","addClass","scrollIntoView","removeNode","matchCase","wholeWord","isMatchSpan","currentMatchIndex","hasMore","nextIndex","hasNext","hasPrev","keepEditorSelection","selectedText","updateButtonStates","statusbar","disabled","notFoundAlert","pack","onClose","onSubmit","caseState","checked","subtype","submit","labelGap","shortcut","separator","shortcuts","bs","units","translateSeconds","translateSingular","special","lt","vi","af","uz","showPreview","hexColor","setColor","rgb","toRgb","fromJSON","g","hex","toHex","onchange","defaults","spellcheck","colorPickerCtrl","autofocus","toJSON","color_picker_callback","getScripts","getAudioTemplateCallback","getVideoTemplateCallback","hasLiveEmbeds","shouldFilterHtml","getUrlResolver","hasAltSource","hasPoster","hasDimensions","has","getVideoScriptMatch","prefixes","src","VideoScript","trimPx","getEphoxEmbedData","parseStyle","source1","source2","poster","htmlToData","isEphoxEmbed","validate","allow_conditional_comments","movie","extend","videoScript","HtmlToData","guess","mimes","mp3","wav","mp4","webm","ogg","swf","fileEnd","pop","mime","Mime","addPx","setAttributes","updatedAttrs","splice","updateEphoxEmbed","styleMap","serializeStyle","updateHtml","updateAll","hasImage","writer","sourceCount","comment","cdata","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","then","catch","populateMeta","meta","generalFormItems","filetype","onpaste","setTimeout","onbeforecall","advancedFormItems","reserialise","update","embedTextBox","multiline","updateValueOnChange","forId","bodyType","get$1","sanitize","blocked","attrName","Sanitize","createPlaceholderNode","placeHolder","shortEnded","retainAttributesAndInnerHtml","createPreviewIframeNode","previewWrapper","previewNode","shimNode","allowfullscreen","class","frameborder","sourceNode","attrValue","attribs","ai","innerHtml","escape","isWithinEphoxEmbed","placeHolderConverter","ceFalse","Nodes","specialElements","getSpecialElements","boolAttrs","getBoolAttrs","addAttributeFilter","realElm","realElmName","unescape","$elm","setup$2","objectType","prependToContext","shouldMergeClasses","shouldImportExclusive","getSelectorConverter","getSelectorFilter","getCssGroups","shouldAppend","getFileFilter","removeCacheSuffix","cacheSuffix","isSkinContentCss","href","skin","skinUrl","skin_url","baseURL","inline","compileFilter","getSelectors","fileFilter","selectors","contentCSSUrls","styleSheet","imported","rules","imports","cssRules","cssRule","selectorText","styleSheets","defaultConvertSelectorToFormat","elementName","classes","join","inlineSelectorElements","makeMap","getGroupsBySelector","groups","compileUserDefinedGroups","menu","isExclusiveMode","isUniqueSelector","globallyUniqueSelectors","markUniqueSelector","convertSelectorToFormat","selectorConverter","selector_converter","selectorFilter","processSelector","importcss","formatName","itemDefaults","getDoc","selectorGroups","menuItem","renderNew","ImportCss","enCa","enGb","relativeTimeMr","mr","ne","zhMo","hm","__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","forEach","applyInlinePattern","foundPattern","applyInlinePatternSpace","wrappedTextNode","lastChar","lastCharNode","applyInlinePatternEnter","applyBlockPattern","firstTextNode","textBlockElm","max","selectionInsertText","insertData","newNode","insertNode","applyReplacement","replacement","extractChar","char","applyReplacementPattern","ch","applyReplacementPatternSpace","applyReplacementPatternEnter","patternSet","handleInlineKey","checkKeyEvent","codes","event","checkKeyCode","code","modifierPressed","checkCharCode","chars","KeyHandler","charCodes","keyCodes","setEditorTimeout","12","13","40","tg","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","ta","kn","arKw","getNonEditableClass","getEditableClass","getNonEditableRegExps","nonEditableRegExps","checkClassName","replaceMatchWithSpan","cls","prevChar","findStartTagIndex","tagHtml","convertRegExpsToNonEditable","editClass","nonEditClass","contentEditableAttrName","hasEditClass","hasNonEditClass","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","lastDigit","firstDigit","lb","webpackContext","req","webpackContextResolve","__webpack_require__","module","exports","az","zhHk","hr","fireVisualBlocks","isEnabledByDefault","getContentCss","visualblocks_content_css","cssId","load","linkElements","matchingLinkElms","linkElm","rel","LoadCss","toggleVisualBlocks","enabledState","contentCss","toggleClass","VisualBlocks","Bindings","toggleActiveState","selectable","ga","days","ur","esUs","tet","dv","tk","weekEndings","hu","zhCn","te","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","sv","ugCn","msMy","eo","sd","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","br","weekdaysParse","mi","mk","last2Digits","getPreviewDialogWidth","getPreviewDialogHeight","getContentStyle","getPreviewHtml","previewHtml","headHtml","contentStyle","getURI","bodyId","body_id","preventClicksOnLinksScript","dirAttr","directionality","injectIframeContent","iframe","sandbox","encodeURIComponent","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","link","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","cssText","header","piEncoding","handleGetContent","foot","nb","kk","arTn","it","itCh","enNz","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","monthsShortWithDots","monthsShortWithoutDots","fy","enIl","sw","enableWhenDirty","hasOnSaveCallback","hasOnCancelCallback","displayErrorMessage","save","formObj","isDirty","execCallback","setDirty","cancel","startContent","setContent","clear","stateToggle","addShortcut","isBrandingEnabled","hasMenubar","getMenubar","hasStatusbar","getToolbarSize","isReadOnly","getFixedToolbarContainer","getInlineToolbarPositionHandler","getMenu","getRemovedMenuItems","getMinWidth","getMinHeight","isSkinDisabled","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","documentElement","reposition","shouldShow","relRect","testPositions","smallElementWidthThreshold","removed","clientRect","getBoundingClientRect","offsetWidth","controlSelection","isResizable","inflate","findBestRelativePosition","clamp","relativePosition","intersect","pos1","pos2","repositionHandler","execute","findFrontMostMatch","requestAnimationFrame","bindScrollEvent","reposition_1","uiContainer_1","getScrollContainer","getWin","unbind","showContextToolbar","autohide","autofix","fixed","oncancel","reflow","hideAllContextToolbars","parentsAndSelf","ContextToolbars","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","visible","deactivateButtons","findSidebar","showPanel","btnCtrl","prepend","isModernBrowser","hasSidebar","createSidebar","image","Sidebar","fireSkinLoaded$1","_skinLoaded","SkinLoaded","switchMode","mode","editArea","editAreaContainer","render","theme","resizeHandleCtrl","startSize","skinUiCss","styleSheetLoader","onResizeStart","onResize","deltaX","deltaY","linkHtml","brandingLabel","renderBefore","setMode","iframeContainer","editorContainer","Iframe","global$9","funcs","getWindowSize","rect","offsetHeight","getElementById","css","getRuntimeStyle","off","setHTML","isStatic","isFixed","calculateRelativePosition","ctrlElm","selfW","selfH","targetW","targetH","viewport","getWindowViewPort","getUiContainerViewPort","customUiContainer","scrollWidth","scrollHeight","pageXOffset","pageYOffset","innerWidth","innerHeight","getViewPortRect","Movable","testMoveRel","rels","viewPortRect","moveRel","moveBy","layoutRect","constrain","constrainToViewport","repaint","global$a","global$b","BoxUtils","parseBox","radix","measureBox","prefix","defaultView","computedStyle","getComputedStyle","currentStyle","getSide","val","parseFloat","noop$1","ClassList","_map","array","uniqueItems","__checked","_change","curState","clsValue","Collection","Collection$1","proto","expression","chunker","whiteSpace","Selector","init","compileNameFilter","compileIdFilter","_name","compileClassesFilter","compileAttrFilter","cmp","check","compilePsuedoFilter","notSelectors","parseChunks","compile","filters","direct","pseudo","extra","_selectors","si","sl","fi","fl","collect","prop","Collection$2","Binding","model","otherModel","otherName","bindings","fromSelfToOther","fromOtherToSelf","_bindings","global$c","isNode","isEqual","animationFrameRequested","Control","ObservableObject","Mixins","oldValue","destroy","dirtyCtrls","ReflowQueue","_layout","isNative","_id","hasMouseWheelEventSupport","hasWheelEventSupport","classPrefix","idCounter","proto$1","Statics","isRtl","rtl","defaultClasses","applyClasses","Defaults","_aria","_elmCache","borderBox","paddingBox","marginBox","margin","hidden","Properties","getContainerElm","getParentCtrl","lookup","controlIdLookup","initLayoutRect","autoResize","startMinWidth","startMinHeight","initialSize","deltaW","deltaH","maxW","maxWidth","maxH","maxHeight","_layoutRect","contentW","contentH","innerW","innerH","minW","minH","scrollW","_lastLayoutRect","newRect","lastLayoutRect","deltaWidth","deltaHeight","repaintControls","curRect","bodyStyle","bodyElm","borderW","borderH","lastRepaintRect","_lastRepaintRect","_hasBody","updateLayoutRect","_lastRect","resolveCallbackName","callbacks","getEventDispatcher","bubble","isPropagationStopped","hasEventListeners","parentControls","$el","suffix","blur","aria","ariaTarget","newItems","controls","_eventsRoot","renderHtml","postRender","preRender","box","parentEventsRoot","_nativeEvents","bindPendingEvents","display","bindStates","parentCtrl","getOffset","rootElm","offsetLeft","offsetTop","offsetParent","parentWidth","parentHeight","parentElm","rootControl","_eventDispatcher","toggleEvent","eventCtrl","eventRootCtrl","nativeEvents","delegate","mouseLeaveHandler","_lastHoverCtrl","mouseEnterHandler","lastParents","lastCtrl","fixWheelEvent","wheelDelta","wheelDeltaX","eventRootDelegates","_delegates","_hasMouseEnter","Control$1","hasTabstopData","KeyboardNavigation","focusedElement","focusedControl","activeElement","getRole","getParentRole","getAriaProp","isTextInputElement","canFocus","getFocusElements","getNavigationRoot","targetControl","navigationRoot","focusFirst","focusElements","moveFocusToIndex","lastAriaIndex","moveFocus","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","button","screenX","screenY","runtimeStyle","position","zIndex","opacity","appendTo","documentClickHandler","documentScrollHandler","windowResizeHandler","hasModal","Scrollable","renderScroll","repaintScroll","hasScrollH","hasScrollV","repaintAxis","axisName","posName","sizeName","contentSizeName","hasScroll","ax","scrollBarElm","scrollThumbElm","scrollSize","ratio","posNameLower","sizeNameLower","addScroll","addScrollAxis","deltaPosName","scrollStart","axisId","draghelper","autoScroll","_hasScroll","bodyEl","Panel","_preBodyHtml","Resizable","resizeToContent","visiblePanels","zOrder","skipOrHidePanels","clickCtrl","bindDocumentClickHandler","bindDocumentScrollHandler","repositionPanel","bindWindowResizeHandler","docElm_1","clientWidth_1","clientHeight_1","FloatPanel","hideAll","scrollY","toggleFixedChildPanels","_autoFixY","addRemove","topModal","modal","modalBlockEl","currentZIndex","$modalBlockEl_1","prefix_1","popover","describedBy","removeVisiblePanel","bodyRole","isFixed$1","inlineToolbarContainer","render$1","fixedToolbarContainer","_fixed","bodyPos","scrollContainerPos","content_editable","Inline","Throbber","timer","time","clearTimeout","throbber","ProgressState","renderUI","Render","Tooltip","Widget","tooltips","_tooltip","disable","Progress","setValue","updateLiveRegion","ctx","textContent","progressBar","Notification","timeout","closeButton","notificationStyle","NotificationManagerImpl","getEditorContainer","getElement","getContainerWidth","prePositionNotifications","notifications","notification","positionNotifications","firstItem","closeCallback","extendedArgs","notif","getArgs","oldMetaValue","toggleFullScreenState","contentValue","noScaleMetaValue","overrideViewPort","toggleBodyFullScreenClasses","checkFullscreenWindows","_fullscreen","handleWindowResize","desktop","lastSize_1","setInterval","Window","closeClass","needsRecalc","headerW","headEl","headerH","headerHtml","footerHtml","fullscreen","slowRendering","_timer","getTime","_initial","dragHelper","getContentWindow","ifr","MessageBox","OK","OK_CANCEL","YES_NO","YES_NO_CANCEL","msgBox","createButton","status","primary","onClick","onCancel","confirm","WindowManagerImpl","params","commands","features","choiceCallback","getParams","setParams","getNotificationManagerImpl","getWindowManagerImpl","ThemeApi","Layout","firstControlClass","lastControlClass","containerClass","firstClass","lastClass","lastItem","controlClass","AbsoluteLayout","Button","btnStyle","btnElm","ariaPressed","textHtml","getSelection","textCls","setButtonText","$span","iconElm","BrowseButton","multiple","accept","files","stopPropagation","click","ButtonGroup","Checkbox","global$d","ComboBox","subinput","showMenu","newValue","statusLevel","statusMessage","lineHeight","openElm","innerPadding","inputElm","documentMode","openBtnHtml","extraAttrs","statusHtml","placeholder","showAutoComplete","term","previewUrl","hideMenu","statusIconElm","focusIdx","DOWN","UP","ColorBox","onaction","repaintColor","PanelButton","panelSettings","rtlRels","ltrRels","popoverAlign","isTop","DOM$3","ColorButton","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","random","floor","DOCUMENT","windows$1","DOCUMENT$1","bypassSelector","childElementCount","base","one","querySelector","descendants","hasContentEditableState","isContentEditableTrue","level","attach","isChildOfContentEditableTrue","getElementText","innerText","getOrGenerateId","isValidAnchor","isEditable","isHeader","isValidHeader","getLevel","headerTarget","headerId","anchorTarget","anchorId","anchorText","getHeaderTargets","getAnchorTargets","getTargetElements","hasTitle","find$2","LinkTargets","getActiveEditor","activeEditor","history","HISTORY_LENGTH","clearHistory","toMenuItem","toMenuItems","targets","staticMenuItem","isUniqueUrl","foundTarget","getSetting","defaultValue","createMenuItems","fileType","fromHistoryMenuItems","historyItems","uniqueHistory","fromMenuItems","filteredTargets","anchorMenuItems","topAnchor","bottomAchor","bothEmpty","typeahead_urls","filterByQuery","addToHistory","lowerCaseTerm","getTitle","linkDetails","setupAutoCompleteHandler","autocomplete","linkTargets","alt","statusToUiState","setupLinkValidatorHandler","validatorHandler","filepicker_validator_handler","validateUrl_1","uiState","FilePicker","actionCallback","fileBrowserCallback","fileBrowserCallbackTypes","file_picker_types","file_browser_callback_types","file_picker_callback","file_browser_callback","FitLayout","contLayoutRect","FlexLayout","contPaddingBox","contSettings","totalFlex","availableSpace","ctrlLayoutRect","ctrlSettings","maxSize","maxAlignEndPos","minSizeName","maxSizeName","beforeName","innerSizeName","deltaSizeName","alignAxisName","alignInnerSizeName","alignSizeName","alignMinSizeName","alignBeforeName","alignAfterName","alignDeltaSizeName","alignContentSizeName","maxSizeItems","maxFlexSize","FlowLayout","endClass","descendant","toggleFormat","addFormatChangedListener","changed","formatChanged","postRenderFormatToggle","alignFormats","defaultAlign","alignMenuItems","onShowMenu","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","readonly","registerMenuItems$2","registerButtons$5","register$7","UndoRedo","toggleVisualAidState","hasVisual","registerMenuItems$3","register$8","VisualAid","setupEnvironment","iOS","setupUiContainer","setupRtlMode","setupHideFloatPanels","FormatControls","GridLayout","posX","posY","spacingH","spacingV","alignH","alignV","maxX","maxY","ctrlMinWidth","ctrlMinHeight","availableWidth","availableHeight","reverseRows","colWidths","rowHeights","columns","sqrt","flexV","packV","flexWidths","Iframe$1","InfoBox","severity","Label","strong","startMinH","targetCtrl","forName","Toolbar$1","MenuBar","isChildOf$1","MenuButton","_renderOpen","animate","activeMenu","menuLayoutRect","selfBottom","hasVisibleSiblingMenu","overCtrl","Menu","itemsFactory","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","ref","registerToFactory","Theme","sk","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","process","ProcessFilters","isAbsoluteUrl","isImageUrl","createImage","pasteHtmlFn","createLink","linkSelection","insertImage","smartInsertContent","SmartPaste","filter$1","from$1","exports$1","define","require","amd","EphoxContactWrapper","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","runClearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","Item","nextTick","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","setImmediate","setTimeoutFunc","thisArg","Promise","TypeError","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","reject","promise","finale","_unhandledRejectionFn","Handler","reason","prom","arr","remaining","race","err","warn","_setImmediateFn","_setUnhandledRejectionFn","clearImmediate","immediateIds","nextImmediateId","Timeout","clearFn","_clearFn","clearInterval","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","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","inputValue","currentValue","removeUnderlineAndFontInAnchor","Quirks","stateChange","yo","numbersPast","numbersFuture","verbalNumber","arSa","bg","my","gl","applyListFormat","getNumberStyles","getBulletStyles","getSelectedStyleType","listElm","ListUtils","styleValueToText","ListStyles","updateSelection","listStyleType","addSplitButton","onshow","addControl","es","invalidDate","_vm","_h","$createElement","_c","_self","directives","rawName","staticClass","spinnerStyle","spinnerDelay1","spinnerDelay2","spinnerDelay3","staticRenderFns","loading","Boolean","default","radius","animationName","animationDuration","animationIterationCount","animationTimingFunction","animationFillMode","animationDelay","component","fireRestoreDraft","fireStoreDraft","fireRemoveDraft","timeString","defaultTime","multiples","toParse","parsedTime","shouldAskBeforeUnload","getAutoSavePrefix","location","pathname","hash","shouldRestoreWhenEmpty","getAutoSaveInterval","autosave_interval","getAutoSaveRetention","autosave_retention","forcedRootBlockName","hasDraft","getItem","removeDraft","removeItem","storeDraft","setItem","no_events","restoreDraft","startStoreDraft","started","interval","restoreLastDraft","_beforeUnloadHandler","autosave","onbeforeunload","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsNominative","monthsSubjective","pl","fa","ar","bn","zhTw","compose","fb","identity","die","eachr","foldr","map$1","tupleMap","tuple","reqMessage","required","unsuppMessage","unsupported","validateStrArr","invalidTypeMessage","incorrect","checkDupes","everything","sorted","dupe","MixedBag","optional","allReqd","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","dest","intercepts","finish","inside","parentCell","innerCell","isContainedBy","c1","c2","CellFinder","moveBy$1","deltaRow","deltaColumn","getWarehouse","intercepts$1","nestedIntercepts","firstTable","lastTable","optStartCell","optLastCell","lastCell","getBox$1","TablePositions","TagBoundaries","DomUniverse","isBoundary","isEmptyTag","comparePosition","other","copyAttributesTo","destination","as","copyTo","afterAll","appendAll","query","setText","leftRight","brokenPath","bisect","universe","ind","breakToRight","second","breakToLeft","prior","breakPath","breaker","splits","breakage","nextChild","all$1","look","oneAll","unsafeOne","commonElement","eq$1","unsafeSubset","common","ps1","ps2","finder","ps","topDown","startIndex","endIndex","sIndex","eIndex","ancestors$2","prune","pruned1","pruned2","shared","firstpath","secondpath","subset","ancs","SubsetFn","sharedOne","subset$1","ancestors$3","breakToLeft$1","breakToRight$1","breakPath$1","Parent","sharedOne$1","_universe","subset$2","ancestors$4","breakToLeft$2","breakToRight$2","breakPath$2","DomParent","Identified","lookupTable","identify","getIsRoot","rootTable","boxes","startTable","finishTable","ancestorCells","lca","lcaTable","finishAncestorCells","startAncestorCells","retrieve","sels","getLast","lastSelectedSelector","getEdges","firstSelectedSelector","tbl","expandTo","identified","shiftSelection","CellSelection","retrieve$1","retrieveBox","edges","firstAncestor","lastAncestor","fA","lA","TableSelection","attributeSelector","firstSelected","lastSelected","Ephemera","generate$1","cases","constructors","adt","acase","argLength","branches","branchKeys","reqKey","Adt","type$1","single","cata","onNone","onMultiple","onSingle","SelectionTypes","selections","unmergable","hasSpan","mergable","_env","CellOperations","noMenu","forMenu","notCell$1","paste$1","pasteRows","generators","TableTargets","extractSelected","serializeElements","getTextContent","registerEvents","actions","cellSelection","multiCellContext","cellOpt","domCell","pasteCells","Dimension","getOuter","aggregate","properties","cumulativeInclusions","absoluteMax","api$1","get$3","api$2","get$4","getOuter$1","platform","needManualCalc","toNumber","getProp","getCalculatedHeight","paddingTop","paddingBottom","borderTop","borderBottom","boxSizing","borders","getWidth","getHeight","RuntimeSize","genericSizeRegex","percentageBasedSizeRegex","pixelBasedSizeRegex","setPixelWidth","amount","setPercentageWidth","setHeight","getHeightValue","getter","setter","newSize","total","normalizePixelSize","getTotalHeight","get$5","span","getSpan","getRawWidth","cssWidth","normalizePercentageWidth","cellWidth","tableSize","pixelWidth","choosePercentageSize","percentMatch","intWidth","getPercentageWidth","normalizePixelWidth","choosePixelSize","pixelMatch","floatWidth","getPixelWidth","getHeight$1","getGenericWidth","unit","setGenericWidth","Sizes","halve","main","CellMutations","Position","boxPosition","firstDefinedOrZero","absolute","clientTop","clientLeft","rowInfo","colInfo","rtlEdge","ltrEdge","getLeftEdge","getRightEdge","getTop","getTopEdge","getBottomEdge","findPositions","getInnerEdge","getOuterEdge","lines","cellOption","lastLine","negate","step","positions","optElements","ltr","BarPositions","ResizeDirection","TableDirection","directionAt","auto","getGridSize","TableGridSize","__assign","assign","cat","findMap","setIfNot","ignore","newRows","newCells","renderSection","gridSection","sectionName","tb","isNew","removeSection","renderOrRemoveSection","headSection","bodySection","footSection","copy$2","clonedCell","Redraw","read","remove$3","supports","classList","get$6","add$1","clazz","remove$4","add$2","cleanClass","remove$5","has$1","repeat","repititions","deduce","rest","aa","extras","abs","rowsArr","col","getBlock","isSingle","getFallback","decide","inBlock","singleInBlock","detailOption","rows$1","Blocks","namespace","dashNamespace","Styles","blocker","row$1","Bar","resizeBar","resizeRowBar","resizeColBar","BAR_THICKNESS","wire","previous","drawBar","origin","cpOption","cp","bar","refreshCol","colPositions","tableHeight","colBar","refreshRow","rowPositions","tableWidth","rowBar","refreshGrid","hdirection","vdirection","refresh","each$2","bars","isRowBar","isColBar","Bars","addCell","gridRow","setCells","mutateCell","mapCells","getCell","getCellElement","cellLength","GridRow","getColumn","getRow","findDiff","comp","subgrid","restOfRow","endColIndex","restOfColumn","endRowIndex","TableGrid","toDetails","seen","ri","ci","updateSeen","toGrid","rowCells","Transitions","fromWarehouse","deriveRows","rendered","findRow","rowOfCells","toDetailList","findInWarehouse","operation","adjustment","postAction","genWrappers","newElements","onCell","onPaste","onPasteRows","lc","onMergable","_warehouse","onUnmergable","onCells","mapError","_","onValue","toOption","isValue","isError","onError","fromOption","Result","measure","startAddress","gridA","gridB","rowRemainder","colRemainder","colRequired","rowRequired","rowDelta","colDelta","measureWidth","colLengthA","colLengthB","generator","rowFill","_row","colFill","tailor","fillCols","fillRows","modifiedCols","tailoredGrid","Fitment","substitution","unmerge","isToReplace","uniqueCells","currentCell","splitRows","rowPrevCells","_loop_2","sub","MergingOperations","isSpanning","matching","mergeTables","mergeHeight","mergeWidth","merge$1","fittedGrid","fittedNewGrid","secondDelta","fittedOldGrid","TableMerge","insertRowAt","between","withinSpan","insertColumnAt","splitCellIntoColumns","exampleRow","exampleCol","isTargetCell","splitCellIntoRows","deleteColumnsAt","deleteRowsAt","ModificationOperations","replaceIn","isTarget","notStartRow","colIndex","notStartColumn","replaceColumn","alreadyAdded","replaceRow","targetRow","TransformOperations","only","middle","ColumnContext","neighbours$1","determine","zero","onOnly","singleColumnWidth","newNext","minCellWidth","newThis","diffx","onLeft","onMiddle","_prev","onRight","Deltas","getSpan$1","hasColspan","hasRowspan","getInt","CellUtils","getRaw$1","getRawW","getRawH","getWidthFrom","backups","columnCell","deduced","getDeduced","getRawWidths","getPercentageWidths","getPixelWidths","getHeightFrom","rowCell","getPixelHeights","getRawHeights","ColumnSizes","measures","recalculateWidth","widths","recalculateHeight","heights","matchRowHeight","Recalculations","percentageSize","getCellDelta","_delta","setTableWidth","_newWidths","change","getWidths","setElementWidth","pixelSize","newWidths","chooseSize","fallbackWidth","getTableSize","TableSize","getWarehouse$1","sumUp","getTableWarehouse","adjustWidth","deltas","newSizes","adjustHeight","newHeights","newCellSizes","newRowSizes","adjustWidthTo","Adjustments","handleUnsupported","baseWith","invalidKeys","handleExact","exactly","verifyGenerators","elementToData","modification","toData","nuFrom","recent","getOrInit","transform","makeNew","replaceOrInit","merging","combine","Generators","blockList","isFormatting","isHeading","isContainer","isFrame","Structure","universe$1","isBlock$1","isFormatting$1","isHeading$1","isContainer$1","isEmptyTag$1","isFrame$1","isInline$1","DomStructure","merge$2","advancedBr","isListItem","siblingIsBlock","rightSibling","markCell","rightSiblingIsBlock","markContent","contents","TableContent","outcome","elementFromGrid","findIn","bundle","uniqueRows","currentDetail","uniqueColumns","insertRowBefore","targetIndex","newGrid","insertRowsBefore","newG","insertRowAfter","insertRowsAfter","insertColumnBefore","insertColumnsBefore","insertColumnAfter","insertColumnsAfter","makeRowHeader","makeColumnHeader","unmakeRowHeader","unmakeColumnHeader","splitCellIntoColumns$1","splitCellIntoRows$1","eraseColumns","_comparator","_genWrappers","eraseRows","mergeCells","unmergeCells","pasteDetails","gridify","wh","mergedGrid","nuGrid","gridifyRows","pasteRowsBefore","pasteRowsAfter","TableOperations","getBody$1","getPixelWidth$1","getPixelHeight","removePxSuffix","addSizeSuffix","removeDataStyle","dataStyleCells","getDirection","ltr$1","rtl$1","Direction","defaultTableToolbar","defaultStyles","defaultAttributes","getDefaultAttributes","getDefaultStyles","hasTableResizeBars","hasTabNavigation","hasAdvancedCellTab","hasAdvancedRowTab","hasAdvancedTableTab","hasAppearanceOptions","hasTableGrid","shouldStyleWithCss","getCellClassList","getRowClassList","getTableClassList","isPixelsForced","getCloneElements","cloneElements","hasObjectResizing","objectResizing","getToolbar","fireNewRow","fireNewCell","fireObjectResizeStart","fireObjectResized","TableActions","lazyWire","isTableBody","lastRowGuard","lastColumnGuard","guard","deleteRow","deleteColumn","copyRows","selectedCells","slicedGrid","slicedDetails","CopyRows","getTDTHOverallStyle","firstChildStyle","checkChildren","applyAlign","applyVAlign","unApplyAlign","unApplyVAlign","Styles$1","buildListItems","inputList","itemCallback","startItems","appendItems","styleFieldHasFocus","isEqualNode","syncAdvancedStyleFields","updateAdvancedFields","updateStyleField","borderStyle","borderColor","extractAdvancedStyles","createStyleForm","createColorPickAction","Helpers","updateStyles","dataset","mceStyle","extractDataFromElement","valign","onSubmitCellForm","cellElm","classListCtrl","generalCellForm","CellDialog","extractDataFromElement$1","switchRowType","rowElm","toType","oldParentElm","onSubmitRowForm","oldData","open$1","generalRowForm","RowDialog","DefaultRenderOptions","percentages","makeTable","tableBody","tableRow","tableHeaderCell","tableCell","rowHeaders","columnHeaders","renderOpts","tbody","trs","get$7","getOuter$2","placeCaretInCell","selectFirstCellInTable","fireEvents","isPercentage","insert$1","InsertTable","styleTDTH","extractDataFromElement$2","cellspacing","cellpadding","caption","applyDataToElement","onSubmitTableForm","captionElm","open$2","isProps","colsCtrl","rowsCtrl","generalTableForm","TableDialog","each$3","registerCommands","clipboardRows","eraseTable","getSelectionStartCell","getSelectionStartCaption","cellOrCaption","getSelectionStartFromSelector","getTableFromCell","resizeChange","oldSize","actOnSelection","beforeSize","copyRowSelection","pasteOnSelection","clonedRows","mceTableSplitCells","mceTableMergeCells","mceTableInsertRowBefore","mceTableInsertRowAfter","mceTableInsertColBefore","mceTableInsertColAfter","mceTableDeleteCol","mceTableDeleteRow","mceTableCutRow","mceTableCopyRow","mceTablePasteRowBefore","mceTablePasteRowAfter","mceTableDelete","func","mceInsertTable","mceTableProps","mceTableRowProps","mceTableCellProps","detached","editable","body$1","ResizeWire","Event","handlers","create$1","typeDefs","registry","mkEvent","prevent","kill","rawEvent","binder","useCapture","wrapped","addEventListener","bind$1","removeEventListener","bind$2","shallow$1","merge$3","styles$1","Styles$2","Blocker","layerClass","DragMode","DragSink","DragApi","compare","extract$1","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","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","ru","mn","ky","bnBd","ro","cy","modules","installedModules","moduleId","defineProperty","enumerable","Symbol","toStringTag","__esModule","object","wellKnownSymbol","TO_STRING_TAG","aFunction","that","toIndexedObject","nativeGetOwnPropertyNames","windowNames","getOwnPropertyNames","getWindowNames","DESCRIPTORS","propertyIsEnumerableModule","createPropertyDescriptor","toPrimitive","IE8_DOM_DEFINE","nativeGetOwnPropertyDescriptor","getOwnPropertyDescriptor","O","P","fails","fixRegExpWellKnownSymbolLogic","isRegExp","anObject","requireObjectCoercible","speciesConstructor","advanceStringIndex","toLength","callRegExpExec","regexpExec","arrayPush","MAX_UINT32","SUPPORTS_Y","SPLIT","nativeSplit","maybeCallNative","internalSplit","limit","lim","lastIndex","lastLength","flags","ignoreCase","unicode","sticky","lastLastIndex","separatorCopy","splitter","regexp","rx","S","C","unicodeMatching","q","A","z","classof","R","DOMIterables","createNonEnumerableProperty","COLLECTION_NAME","CollectionPrototype","$forEach","arrayMethodIsStrict","arrayMethodUsesToLength","STRICT_METHOD","USES_TO_LENGTH","callbackfn","getBuiltIn","ITERATOR","SAFE_CLOSING","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","V8_VERSION","SPECIES","METHOD_NAME","foo","toInteger","integer","redefine","setGlobal","copyConstructorProperties","isForced","FORCED","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","forced","sham","internalObjectKeys","enumBugKeys","hiddenKeys","notARegExp","correctIsRegExpLogic","includes","searchString","TO_STRING","RegExpPrototype","nativeToString","NOT_GENERIC","INCORRECT_NAME","rf","definePropertyModule","CONSTRUCTOR_NAME","Constructor","configurable","v8","Iterators","objectKeys","defineProperties","isObject","InternalStateModule","defineIterator","STRING_ITERATOR","setInternalState","getInternalState","getterFor","iterated","propertyIsEnumerable","UNSCOPABLES","ArrayPrototype","MATCH","$some","regExpExec","nativeMatch","matcher","fullUnicode","matchStr","defaultConstructor","getOwnPropertySymbols","$trim","forcedStringTrimMethod","inheritIfRequired","getFlags","stickyHelpers","setSpecies","NativeRegExp","re1","re2","CORRECT_NEW","UNSUPPORTED_Y","RegExpWrapper","thisIsRegExp","patternIsRegExp","flagsAreUndefined","proxy","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","$filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","iterator","argumentsLength","mapfn","mapping","iteratorMethod","argument","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","REPLACE","nativeReplace","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","getSubstitution","tailPos","symbols","capture","IS_PURE","store","copyright","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","whitespaces","whitespace","ltrim","rtrim","TYPE","bitmap","writable","IndexedObject","nativeAssign","B","symbol","alphabet","T","CONVERT_TO_STRING","codeAt","originalArray","NATIVE_WEAK_MAP","objectHas","sharedKey","WeakMap","enforce","wmget","wmhas","wmset","metadata","STATE","inspectSource","enforceInternalState","TEMPLATE","simple","setPrototypeOf","dummy","Wrapper","NewTarget","NewTargetPrototype","wrappedWellKnownSymbolModule","NAME","activeXDocument","documentCreateElement","GT","PROTOTYPE","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","NullProtoObjectViaActiveX","temp","parentWindow","NullProtoObjectViaIFrame","iframeDocument","JS","F","NullProtoObject","domain","ActiveXObject","createIteratorConstructor","getPrototypeOf","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","ENTRIES","returnThis","Iterable","IteratorConstructor","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","propertyKey","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","getCurrentScript","currentScript","pageSource","inlineScriptSourceRegExp","inlineScriptSource","ieStackRegExp","ffStackRegExp","stackDetails","stack","scriptLocation","line","currentLocation","scripts","readyState","functionToString","postfix","regexpFlags","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","BROKEN_CARET","NPCG_INCLUDED","PATCH","reCopy","charsAdded","strCopy","feature","normalize","POLYFILL","NATIVE","arraySpeciesCreate","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","arg","E","returnMethod","nativeDefineProperty","Attributes","RE","nativeJoin","ES3_STRINGS","ACCESSORS","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","deleteCount","insertCount","actualDeleteCount","to","actualStart","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","nativeObjectCreate","getOwnPropertyNamesExternal","getOwnPropertyDescriptorModule","uid","defineWellKnownSymbol","HIDDEN","SYMBOL","TO_PRIMITIVE","ObjectPrototype","$Symbol","$stringify","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","isSymbol","$defineProperty","$defineProperties","$getOwnPropertySymbols","$propertyIsEnumerable","$create","V","$getOwnPropertyDescriptor","$getOwnPropertyNames","IS_OBJECT_PROTOTYPE","keyFor","sym","useSetter","useSimple","FORCED_JSON_STRINGIFY","stringify","$replacer","valueOf","checkCorrectnessOfIteration","INCORRECT_ITERATION","iterable","method","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","third","maxCode","digits","NaN","NumberWrapper","__webpack_exports__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vue_timepicker_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0__","_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_vue_timepicker_vue_vue_type_style_index_0_lang_css___WEBPACK_IMPORTED_MODULE_0___default","dotAll","thrower","argument0","argument1","PrototypeOfArrayIteratorPrototype","arrayIterator","TO_STRING_TAG_SUPPORT","FunctionPrototype","FunctionPrototypeToString","nameRE","createWellKnownSymbol","withoutSetter","nativeKeys","FAILS_ON_PRIMITIVES","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","specificCreate","boundFunction","every","PREFERRED_STRING","SHARED","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","non","$indexOf","NEGATIVE_ZERO","searchElement","$includes","EXISTS","variable","NASHORN_BUG","aPossiblePrototype","CORRECT_SETTER","__proto__","TAG","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","stringMethod","regexMethod","$map","globalThis","ArrayIteratorMethods","ArrayValues","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","desc","CORRECT_PROTOTYPE_GETTER","ARRAY_ITERATOR","kind","Arguments","ownKeys","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","inputClass","inputIsEmpty","hasInvalidInput","allValueSelected","$slots","formatString","tabindex","manualInput","domProps","customDisplayTime","onFocus","$event","debounceBlur","blurEvent","onMouseDown","keyDownHandler","_k","altKey","metaKey","escBlur","onCompostionStart","onCompostionEnd","pasteHandler","showClearBtn","showDropdownBtn","isActive","clearButton","clearTime","_t","_v","_e","dropdownButton","setDropdownState","fixedDropdownButton","showDropdown","keepFocusing","toggleActive","dropdownDirClass","advancedKeyboard","_l","_s","hourLabelText","hIndex","opts","hideDisabledHours","isDisabled","minuteLabelText","mIndex","hideDisabledMinutes","secondLabelText","hideDisabledSeconds","apmLabelText","aIndex","apm","apmDisplayText","onTab","prevItem","nextItem","toLeftColumn","toRightColumn","_typeof","_arrayLikeToArray","arr2","_unsupportedIterableToArray","minLen","_createForOfIteratorHelper","normalCompletion","didErr","_e2","CONFIG","HOUR_TOKENS","MINUTE_TOKENS","SECOND_TOKENS","APM_TOKENS","BASIC_TYPES","DEFAULT_OPTIONS","minuteInterval","secondInterval","hourRange","minuteRange","secondRange","hideDisabledItems","hideDropdown","blurDelay","manualInputTimeout","dropOffsetHeight","vue_timepickervue_type_script_lang_js_","hideClearButton","closeOnComplete","inputWidth","hourLabel","minuteLabel","secondLabel","apmLabel","amText","pmText","lazy","dropDirection","containerId","appendToBody","debugMode","timeValue","seconds","apms","isFocusing","debounceTimer","hourType","minuteType","secondType","apmType","fullValues","bakDisplayTime","doClearApmChecking","selectionTimer","kbInputTimer","kbInputLog","bakCurrentPos","forceDropOnTop","computed","debugLog","useStringValue","inUse","_this","typesInUse","getTokenByType","tokensInUse","tokens","displayTime","columnsSequence","baseOn12Hours","hourRangeIn24HrFormat","_this2","is12hRange","translate12hRange","restrictedHourRange","validHoursList","_this3","formatValue","am12Index","customApmText","apmEnabled","am","pm","minuteRangeList","renderRangeList","secondRangeList","inputWidthStyle","tokenRegexBase","tokenChunks","_step","tokensRegxStr","tokensMatchAll","getMatchAllByRegex","_iterator","tkMatch","rawToken","tokenMatchItem","getTokenType","needsCalibrate","needsPosCalibrate","chk","tokenChunksPos","_this4","calibrateLen","chunkCurrentLen","invalidValues","isEmptyValue","isValidValue","notInInterval","autoDirectionEnabled","watch","renderFormat","newInteval","renderList","readValues","fillValues","toDisabled","newLength","oldLength","$emit","checkAcceptingType","validValues","newFormat","_this5","renderHoursList","renderApmList","$nextTick","hoursCount","isMinuteOrSecond","isMinute","readStringValues","readObjectValues","objValue","_this6","sanitizedValue","addFallbackValues","testString","regexString","needsPolyfill","matchAll","polyfillMatchAll","stringValue","_this7","_step2","othersRegxStr","othersMatchAll","chunks","_iterator2","isValueToken","_step3","_iterator3","otMatch","regexCombo","chunk","tokenRegex","getTokenRegex","safeChars","comboReg","matchResults","valueResults","vrIndex","targetToken","setValueFromString","tokenChunksForLog","tChunk","targetString","regxStr","matchesList","indicesReg","matchedItem","existIndex","idxItem","itemIndicesRegex","_this8","parsedValue","tokenType","stdValue","forceEmit","apmValue","_this9","baseHour","baseHourType","hourValue","_apmValue","lowerCasedApm","emitTimeValue","getFullData","fullData","valueT","match12hRange","isBasicType","isDisabledHour","rawRange","_this10","formatedValue","fullList","validItems","forceApmSelection","emptyApmSelection","_this11","$refs","selectionEnd","selectFirstSlot","checkForAutoScroll","toShow","fromUserClick","appendDropdownToBody","checkDropDirection","removeDropdownFromBody","dropdown","updateDropdownPos","_this12","scrollToSelectedValues","firstColumn","scrollToSelected","allowFallback","targetList","targetValue","activeItemInCol","validItemsInCol","_this13","inputBox","_this14","onBlur","firstValidValue","columnClass","getClosestSibling","dataKey","getPrevious","siblingsInCol","selfIndex","sbl","isManualInput","targetItem","getSideColumnName","currentColumn","toLeft","currentColumnIndex","getFirstItemInSideColumn","targetColumn","listItems","getActiveItemInSideColumn","activeItems","_this15","nearestSlot","getNearestChunkByPos","debounceSetInputSelection","isComposing","keyboardInput","clearKbInputLog","arrowHandler","tabHandler","toNextSlot","getCurrentTokenChunk","_this16","cpsData","inputIsCustomApmText","isCustomApmText","setSanitizedValueToSection","bakPos","pastingText","replaceCustomApmText","setKbInput","debounceClearKbLog","37","38","39","selectFirstValidValue","currentChunk","getClosestValidItemInCol","newChunkPos","toLateralToken","firstChunk","lastChunk","newChar","isApm","_this17","validValue","chunkType","chunkToken","lastInputValue","autoFillValue","nearest","nearestDelta","firstSlotType","getClosestHourItem","_this18","currentIndex","valueKey","setManualHour","hourT","_ref","_this19","_ref$start","_ref$end","setInputSelectionRange","setSelectionRange","firstChunkPos","currentChunkIndex","targetSlotPos","inputData","inputString","spaceDown","docHeight","isFinite","testValue","tokenRegexStr","logText","_this20","identifier","inputClasses","clsName","_step4","_iterator4","finalLogText","debug","mounted","beforeDestroy","src_vue_timepickervue_type_script_lang_js_","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","existing","beforeCreate","vue_timepicker","src_0","fin","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","html2bbcode","rep","bbcode2html","Convert","canvas","tCanvas","get2dContext","drawImage","getContext","naturalWidth","naturalHeight","asap","immediateFn","values_1","imageToBlob","dataUriToBlob","anyUriToBlob","blobToImage","blobUrl","URL","createObjectURL","removeListeners","loaded","complete","xhr","XMLHttpRequest","responseType","onerror","corsError","genericError","dataUriToBlobSync","mimetype","sliceSize","byteCharacters","atob","bytesLength","slicesCount","byteArrays","sliceIndex","begin","bytes","Uint8Array","Blob","canvasToBlob","quality","HTMLCanvasElement","toBlob","toDataURL","canvasToDataURL","blobToCanvas","revokeImageUrl","blobToDataUri","onloadend","revokeObjectURL","blobToImage$1","imageToBlob$1","getCanvas","initialType","getType","toBase64","toAdjustedBlob","toAdjustedDataURL","toAdjustedBase64","dataurl","toCanvas","fromBlob","fromCanvas","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","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","imageSize","viewRect","toggleCropRect","imageSrc","$img","replaceWith","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","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","onreadystatechange","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","host","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","arDz","getDateFormat","getTimeFormat","getFormats","getDefaultDateTime","shouldInsertTimeElement","updateElement","timeElm","computerTime","userTime","newTimeElm","datetime","insertDateTime","lastFormatState","lastFormat","bm","codesample_content_css","getLanguages","codesample_languages","getDialogMinWidth","getDialogMinHeight","WorkerGlobalScope","Prism","lang","Token","alias","languages","redef","grammar","newToken","DFS","highlightAll","async","highlightElement","language","hooks","Worker","worker","filename","onmessage","highlightedCode","postMessage","immediateClose","highlight","tokenize","strarr","tokenloop","lookbehind","lookbehindLength","aliases","isCodeSample","trimArg","predicateFn","arg1","markup","prolog","punctuation","entity","xml","mathml","svg","atrule","important","function","clike","javascript","keyword","interpolation","script","js","operator","macro","boolean","csharp","preprocessor","cpp","java","php","package","tokenStack","backupCode","python","ruby","builtin","getSelectedCodeSample","insertCodeSample","getCurrentCode","CodeSample","getLanguages$1","defaultLanguages","customLanguages","getCurrentLanguage","Languages","currentLanguage","currentLanguages","currentCode","unprocessedCodeSamples","loadCss","addedInlineCss","addedCss","ev","gomDeva","weekdaysCaseReplace","nounCase","nominative","accusative","genitive","processHoursFunction","uk","getAutoResizeMinHeight","getAutoResizeMaxHeight","getAutoResizeOverflowPadding","getAutoResizeBottomMargin","shouldAutoResizeOnInit","isFullscreen","wait","toggleScrolling","overflowY","deltaSize","resizeHeight","myHeight","marginTop","marginBottom","iframeElement","overflowPadding","bottomMargin","paddingLeft","paddingRight","lo","deAt","de","tzmLatn","jv","esMx","staticStyle","backgroundImage","backgroundBanner","_m","qSummary","grade","quizName","quizNo","$$v","Question","choiceA","choiceB","choiceC","choiceD","choiceE","choiceF","choiceG","onFileChangeUploadPhoto","urlApp","_q","answer","ansId","GoToPageList","CreateQuestion","PublishQuiz","components","PulseLoader","QuestionId","imageId","SubmittedForm","question","togglePress","app","img1","HandleFileInputPhoto","photo","myapp","SubmitFilePhoto","formData","$route","userId","quizTitleId","$API","GoToPageCreateQuestion","reload","GoToPageOverview","$router","enSg","nn","relativeTimeWithSingular","relativeSeconds","lv","deCh","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","gotoLink","targetEl","gotoSelectedLink","leftClickedOnAHref","setupGotoLinks","toggleViewLinkState","setupButtons","onpostrender","setupMenuItems","setupContextToolbars","Controls","tzm","hookCallback","setHookCallback","hasOwnProp","isObjectEmpty","isUndefined","isDate","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","parsedParts","isNowValid","_d","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","momentProperties","updateInProgress","copyConfig","_isAMomentObject","_f","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","_relativeTime","pastFuture","diff","addUnitAlias","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","makeGetSet","keepTime","daysInMonth","stringGet","stringSet","prioritized","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","_meridiem","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","minl","normalizeLocale","chooseLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","getLocale","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","W","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","score","configFromObject","dayOrDate","millisecond","createFromConfig","prepareConfig","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","cloneWithOffset","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","diffRes","parseIso","momentsDifference","positiveMomentsDifference","isAfter","isBefore","createAdder","dur","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","monthDiff","anchor2","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","zone","defaultFormatUtc","defaultFormat","humanize","fromNow","toNow","newLocaleData","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","isValid$2","parsingFlags","invalidAt","creationData","localeEras","_eras","localeErasParse","eraName","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","field","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","subtract$1","absCeil","monthsFromDays","monthsToDays","daysToMonths","valueOf$1","makeAs","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","stringRepeat","repeats","isVisualCharsEnabled","visualchars","isEnabled","insertNbsp","nbsp","getKeyboardSpaces","he","sq","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","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","tzl","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","tlh","emoticons","emoticonsHtml","emoticonUrl","PanelHtml","insertEmoticon","panelHtml","bo","ptBr","print","fil","hyAm","ca","frCa","nlBe","hi","gu","enIe","setDir","curDir","generateSelector","ie11","ie12","iDevice","fileApi","phone","tablet","windowsPhone","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","attachEvent","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","support","Expr","isXML","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","strundefined","MAX_NEGATIVE","hasOwn","push_native","indexOf$1","booleans","pseudos","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","els","Sizzle","seed","nid","newContext","newSelector","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","siblingCheck","cur","sourceIndex","createInputPseudo","createButtonPseudo","createPositionalPseudo","matchIndexes","hasCompare","getById","attrId","disconnectedMatch","adown","bup","sortDetached","aup","ap","bp","expr","matchesSelector","attrHandle","getAttributeNode","specified","uniqueSort","duplicates","detectDuplicates","sortStable","createPseudo","preFilter","excess","unquoted","nodeNameSelector","what","ofType","outerCache","useCache","setFilters","unmatched","elemLang","hasFocus","tabIndex","enabled","selectedIndex","even","odd","gt","nth","radio","checkbox","password","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","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","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","cssFix","float","attrHooks","cssHooks","whiteSpaceRegExp$1","trim$1","camel","dashed","prependTo","wrapAll","wrapInner","existingClassName","classState","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","wsElements","lazyLookup","isVoid","isTableSection","isTableCell","isWsPreserveElement","isNodeType","isRestrictedNode","isElement$1","matchNodeNames","matchStyleValues","cssValue","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","attributePatterns","setValidElements","addCustomElements","customElements","customElementRegExp","text_block_elements","block_elements","cloneName","customRule","elmName","addValidChildren","validChildren","childRuleRegExp","custom_elements","extended_valid_elements","dt","thead","tfoot","legend","area","param","parentsRequired","invalid_elements","getValidStyles","getInvalidStyles","getValidClasses","getTextInlineElements","getSelfClosingElements","getMoveCaretBeforeOnEnterElements","isValidChild","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","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","loadScript","isDone","markDone","loadQueue","loadScripts","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","findMarkers","isAnnotation","findAll","markers","directory","nodesAlready","changeCallbacks","initData","withCallbacks","updateCallbacks","callbackMap","outputData","fireCallbacks","fireNoAnnotation","onNodeChange","identifyParserNode","optAnnotation","persistent","__rest","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","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","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","11","sortedAttrs","elementRule","createRange$1","normalizeBlockSelectionRange","commonAncestorContainer","newEndPos","RangeNormalizer","isAfterNbsp","trimOrPadLeftRight","hasSiblingText","trimNbspAfterDeleteAndPadValue","isTableCell$2","selectionSetContent","validInsertion","trimBrsFromTableCell","reduceInlineTextElements","textInlineElements","root_1","elementUtils_1","testNode","markFragmentElements","umarkFragmentElements","isPartOfFragment","canHaveChildren","moveSelectionToMarker","parentEditableFalseElm","nextRng","getContentEditableFalseParent","findNextCaretRng","insertHtmlAtCaret","bookmarkHtml","caretElement","parentElement","parserArgs","_selectionOverrides","showBlockCaretContainer","processValue","insertAtCaret$1","InsertContent","strongRtl","hasStrongRtl","getBodySetting","bodyObj","getIframeAttrs","getDocType","getDocumentBaseUrl","getBodyId","getBodyClass","getContentSecurityPolicy","shouldPutBrInPre","getForcedRootBlock","getForcedRootBlockAttrs","getBrNewLineSelector","getNoNewLineSelector","shouldKeepStyles","shouldEndContainerOnEmptyBlock","getFontStyleValues","getFontSizeClasses","getImagesDataImgFilter","isAutomaticUploadsEnabled","shouldReuseFileName","shouldReplaceBlobUris","getImageUploadUrl","getImageUploadBasePath","getImagesUploadCredentials","getImagesUploadHandler","shouldUseContentCssCors","getInlineBoundarySelector","isInlineTarget","findInlineParents","findRootInline","hasSameParentBlock","block1","block2","isAtZwsp","normalizePosition","normalizeForwards","normalizeBackwards","InlineUtils","isBeforeRoot","getParentBlock$1","placeCaretInEmptyBody","paddEmptyBody","willDeleteLastPositionInElement","fromPos","firstPos","lastPos","normalizedFirstPos","normalizedLastPos","normalizedFromPos","nextPos","prevPos","DeleteUtils","hasWhitespacePreserveParent","rootElement","isWhitespace","isNamedAnchor","isContent","isBookmark","isBogus$2","isBogusAll$1","isEmptyNode","isEmpty$1","Empty","BlockPosition","BlockBoundary","getBlockPosition","isDifferentBlocks","blockBoundary","hasSameParent","parent1","parent2","skipLastBr","blockPosition","lastPositionInBlock","readFromRange","fromBlockPos","toBlockPos","blockPos","read$1","BlockMergeBoundary","dropLast","parentsUntil$1","parents$1","Parents","getChildrenUntilBlockBoundary","extractChildren","removeEmptyRoot","isEmptyBefore","nestedBlockMerge","fromBlock","toBlock","insertionPoint","sidelongBlockMerge","findInsertionPoint","getInsertionPoint","trimBr","mergeBlockInto","mergeBlocks","MergeBlocks","BlockBoundaryDelete","deleteRangeMergeBlocks","deleteContents","isRawNodeInTable","isSelectionInTable","isEverythingSelected","noPrevious","noNext","emptyEditor","deleteRange","backspaceDelete$1","BlockRangeDelete","isBr$5","parentBlocks","isBeforeBr","isAfterBr","findPreviousBr","findNextBr","is$2","expected","isNbsp","isWhiteSpace$1","isContent$1","isChar","isBeforeSpace","isAfterSpace","isEmptyText","isNextToContentEditableFalse","isBeforeContentEditableFalse","isAfterContentEditableFalse","isNextToTable","isBeforeTable","isAfterTable","isCompoundElement","DeleteAction","moveToElement","moveToPosition","isAtContentEditableBlockCaret","caretLocation","isDeleteFromCefDifferentBlocks","deleteEmptyBlockOrMoveToCef","toCefElm","blockElm","findCefPosition","getContentEditableBlockAction","skipMoveToActionFromInlineCefToContent","deleteAction","getContentEditableAction","read$2","isCollapsibleWhitespace","normalizeContent","isStartOfContent","isEndOfContent","previousCharIsSpace","normalize$1","replaceData","normalizeWhitespaceAfter","whitespaceCount","normalizeWhitespaceBefore","mergeTextNodes","prevNode","normalizeWhitespace","whitespaceOffset","needsReposition","beforeOrStartOf","afterOrEndOf","getPreviousSiblingCaretPosition","getNextSiblingCaretPosition","findCaretPositionBackwardsFromElm","startPosition","findCaretPositionForwardsFromElm","findCaretPositionBackwards","findCaretPositionForward","findCaretPosition$1","findCaretPosOutsideElmAfterDelete","eqRawNode","isBlock$2","paddEmptyBlock","deleteNormalized","afterDeletePosOpt","prevTextOpt","nextTextOpt","isInlineElement","deleteElement","moveCaret","afterDeletePos","normalizedAfterDeletePos","paddPos","DeleteElement","deleteElement$1","hideFakeCaret","deleteOffscreenSelection","selectedElement","getContentEditableRoot","paddEmptyElement","ceRoot","backspaceDelete$2","CefDelete","isText$8","startsWithCaretContainer$1","endsWithCaretContainer$1","createZwsp","insertBefore$1","insertAfter$1","insertInline$1","insertInlineBefore","insertInlineAfter","insertInlinePos","isPosCaretContainer","caretNode","renderCaret","BoundaryCaret","evaluateUntil","fns","LazyEvaluator","Location","rescope","nPos","isNotInsideFormatCaretContainer","findInsideRootInline","isValidLocation","readLocation","getName","outside","isEq$1","location1","location2","betweenInlines","fromInline","toInline","skipNoMovement","fromLocation","toLocation","findLocationTraverse","findLocationSimple","findLocation","BoundaryLocation","prevLocation","nextLocation","hasSelectionModifyApi","getSel","modify","moveByWord","WordSelection","setCaretPosition","isFeatureEnabled","inline_boundaries","renderCaretLocation","findLocation$1","toggleInlines","selectedInlines","targetInlines","safeRemoveCaretContainer","composing","renderInsideInlineCaret","inlines","moveWord","setupSelectedState","moveNextWord","movePrevWord","BoundarySelection","isFeatureEnabled$1","rangeFromPositions","hasOnlyTwoOrLessPositionsLeft","setCaretLocation","deleteFromTo","rescope$1","backspaceDeleteCollapsed","toPosition","backspaceDelete$3","InlineBoundaryDelete","tableCellRng","tableSelection","removeTable","emptyCells","isRootFromElement","getClosestCell","getClosestTable","isExpandedCellRng","cellRng","getTableFromCellRng","startParentTable","endParentTable","getTableCells","getCellRangeFromStartTable","endCell","partialSelection","isWithinSameTable","getCellRng","getTableSelectionFromCellRng","getTableSelectionFromRng","getCellIndex","getSelectedCells","getAction","getActionFromCells","getActionFromRange","TableDeleteAction","getSelectedNodes","hasMultipleRanges","MultiRange","getCellsFromRanges","getCellsFromElement","getCellsFromElementOrRanges","rangeCells","getCellsFromEditor","TableCellSelection","deleteTableElement","deleteCellRange","deleteCaptionRange","emptyElement","deleteTableRange","startElm","getParentCaption","deleteRange$1","getParentCell","deleteBetweenCells","fromCell","toCell","isDeleteOfLastCharPos","fromCaption","emptyCaretCaption","validateCaretCaption","toCaption","deleteCaretInsideCaption","deleteCaretCells","deleteCaretCaption","deleteCaret","backspaceDelete$4","TableDelete","isEq$2","matchesUnInheritedFormatSelector","formatList","inherit","matchParents","matchName","matchItems","similar","onmatch","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","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","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","getLangData","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","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","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","filteredUrlAttrs","scriptUriRegExp","processEndTag","valid","parseAttribute","val3","attrRule","trimRegExp","self_closing_elements","remove_internals","bogusValue","findEndTag","SaxParser$1","tempAttrs","trimContentRegExp","trimInternal","endTagIndex","matchLength","bogusAllRegExp","getTempAttrs","trimExternal","TrimHtml","KEEP","INSERT","vDown","vUp","snake","diag","buildScript","start1","end1","start2","end2","getMiddleSnake","i2","buildSnake","sum","Diff","getOuterHtml","createFragment$1","insertAt","removeAt","applyDiff","read$3","currentFragments","Fragments","undoLevelDocument","lazyTempDocument","implementation","createHTMLDocument","hasIframes","createFragmentedLevel","beforeBookmark","createCompleteLevel","createFromEditor","trimmedFragments","trimmed","applyToEditor","getLevelContent","getCleanLevelContent","hasEqualContent","level1","level2","hasEqualCleanedContent","isEq$4","Levels","UndoManager","isFirstTypedCharacter","locks","isUnlocked","setTyping","typing","addNonTypingUndoLevel","endTyping","beforeChange","modKey","isInsertReplacementText","inputType","isInsertTextDataNull","currentLevel","custom_undo_redo_levels","hasUndo","hasRedo","callback1","callback2","postProcessHooks","filter$2","each$c","addPostProcessHook","isPre","hasPreSibling","pre","joinPre","pre1","pre2","Hooks","MCE_ATTR_RE","each$d","isEq$5","isTableCell$4","isChildOfInlineParent","lastIdx","wrap$2","wrapWithSiblings","matchName$1","isColorFormatAndAnchor","links","find$3","removeNode$1","rootBlockElm","list_block","compareNode","stylesModified","remove_similar","valueOut","findFormatRoot","formatRoot","wrapAndSplit","lastClone","firstClone","formatRootParent","mixed","splitToFormatRoot","isRemoveBookmarkNode","lastContentEditable","removeRngStyle","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","$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","se","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","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","initEditor","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","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","protocol","toAbsPath","part","userInfo","port","setPath","toRelative","tu","uu","toRelPath","noHost","isSameOrigin","defaultPort","breakPoint","outPath","noProtoHost","loc","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","base_url","pluginBaseUrls","plugin_base_urls","invalidInlineTargets","isInvalidInlineTarget","findTargets","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","member","mixins","mixin","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","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","ignoreWord","suggestions","hasDictionarySupport","dictionary","getWordCharPattern","languageValues","languageValue","selectedLanguage","getItems","langPair","languageMenuItems","startSpellchecking","buttonArgs","showSuggestions","suggestion","onautohide","SuggestionsMenu","km","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","getWords","WordGetter","treeWalker","getCount","WordCount","wordsToText","debouncedUpdate","Statusbar","et","enIn","Content","fullscreenState","fireFullscreenStateChanged","getScrollPos","vp","setScrollPos","toggleFullscreen","editorContainerStyle","iframeStyle","fullscreenInfo","removeResize","iframeWidth","containerWidth","containerHeight","scrollPos","removeHandler","newFullScreenInfo","paIn","gd","getTabFocusElements","getTabFocus","tabCancel","canSelectRecursive","canSelect","nl","getTocClass","getTocHeader","getTocDepth","guid","Guid","tocId","hasHeaders","readHeaders","tocClass","headerTag","getMinLevel","minLevel","generateTitle","openTag","closeTag","generateTocHtml","generateTocContentHtml","nextLevel","prevLevel","isEmptyOrOffscren","insertToc","$tocElm","updateToc","Toc","isToc","xPseudo"],"mappings":"sGAIE,SAAUA,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIC,EAASD,EAAOE,aAAa,UAAW,CACxCC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,oDAAoDD,MAAM,KACvEE,SAAU,+DAA+DF,MACrE,KAEJG,cAAe,kCAAkCH,MAAM,KACvDI,YAAa,yBAAyBJ,MAAM,KAC5CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,uBACTC,QAAS,mBACTC,SAAU,2BACVC,QAAS,uBACTC,SAAU,oCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,kBACRC,KAAM,qBACNC,EAAG,SACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOvC,M,wBCzDT,SAAUJ,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIyC,EAAKzC,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,yEAAyED,MAClF,KAEJsC,kBAAkB,EAClBpC,SAAU,wEAAwEF,MAC9E,KAEJG,cAAe,2CAA2CH,MAAM,KAChEI,YAAa,wBAAwBJ,MAAM,KAC3CK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,aACTC,QAAS,YACTC,SAAU,WACVC,QAAS,cACTC,SAAU,oBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,aACRC,KAAM,WACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,WAERM,cAAe,gDACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAGO,WAAbC,GAAyBD,GAAQ,GACrB,iBAAbC,GACa,eAAbA,EAEOD,EAAO,GAEPA,GAGfC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,SACAA,EAAO,GACP,SACAA,EAAO,GACP,eACAA,EAAO,GACP,aAEA,YAKnB,OAAOJ,M,uBClFX,EAAQ,S,wBCFN,SAAU5C,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIiD,EAAKjD,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,gEAAgEC,MACpE,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,oEAAoEF,MAC1E,KAEJG,cAAe,6BAA6BH,MAAM,KAClDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,sCACJC,IAAK,6CACLC,KAAM,oDAEVC,SAAU,CACNC,QAAS,sBACTC,QAAS,sBACTE,QAAS,sBACTD,SAAU,4BACVE,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU0B,GACd,IAAIC,EAAQ,UAAUC,KAAKF,GACrB,MACA,QAAQE,KAAKF,GACb,MACA,MACN,OAAOA,EAASC,GAEpB1B,KAAM,YACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,SACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,UAERgB,uBAAwB,cACxBC,QAAS,SACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOS,M,wBClET,SAAUpD,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASuD,EAAOC,GACZ,OAAIA,EAAI,MAAQ,IAELA,EAAI,KAAO,EAK1B,SAASC,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAClB,mBACA,mBACV,IAAK,KACD,OAAIN,EAAOG,GAEHI,GACCH,GAAiBE,EAAW,WAAa,YAG3CC,EAAS,UACpB,IAAK,IACD,OAAOH,EAAgB,SAAW,SACtC,IAAK,KACD,OAAIJ,EAAOG,GAEHI,GAAUH,GAAiBE,EAAW,UAAY,WAE/CF,EACAG,EAAS,SAEbA,EAAS,SACpB,IAAK,KACD,OAAIP,EAAOG,GAEHI,GACCH,GAAiBE,EACZ,gBACA,iBAGPC,EAAS,cACpB,IAAK,IACD,OAAIH,EACO,QAEJE,EAAW,MAAQ,OAC9B,IAAK,KACD,OAAIN,EAAOG,GACHC,EACOG,EAAS,QAEbA,GAAUD,EAAW,OAAS,SAC9BF,EACAG,EAAS,QAEbA,GAAUD,EAAW,MAAQ,QACxC,IAAK,IACD,OAAIF,EACO,UAEJE,EAAW,QAAU,SAChC,IAAK,KACD,OAAIN,EAAOG,GACHC,EACOG,EAAS,UAEbA,GAAUD,EAAW,SAAW,WAChCF,EACAG,EAAS,UAEbA,GAAUD,EAAW,QAAU,UAC1C,IAAK,IACD,OAAOF,GAAiBE,EAAW,KAAO,MAC9C,IAAK,KACD,OAAIN,EAAOG,GACAI,GAAUH,GAAiBE,EAAW,KAAO,QAEjDC,GAAUH,GAAiBE,EAAW,KAAO,QAIhE,IAAIE,EAAK/D,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,mFAAmFF,MACzF,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,iBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,iBACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG,cACHC,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOuB,M,wBC9IT,SAAUlE,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgE,EAAKhE,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,qFAAqFC,MACzF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,4EAA4EF,MAClF,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,YACNC,EAAG,YACHC,GAAI,cACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WACJC,EAAG,YACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aACJC,EAAG,UACHC,GAAI,SAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwB,M,wBC5DT,SAAUnE,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIiE,EAAKjE,EAAOE,aAAa,KAAM,CAC/BgE,KAAM,CACF,CACIC,MAAO,aACPC,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,IACRC,KAAM,KAEV,CACIJ,MAAO,aACPK,MAAO,aACPJ,OAAQ,EACRC,KAAM,KACNC,OAAQ,KACRC,KAAM,MAEV,CACIJ,MAAO,aACPK,OAAQC,IACRL,OAAQ,EACRC,KAAM,MACNC,OAAQ,KACRC,KAAM,OAGdG,oBAAqB,WACrBC,oBAAqB,SAAUC,EAAOC,GAClC,MAAoB,MAAbA,EAAM,GAAa,EAAIC,SAASD,EAAM,IAAMD,EAAO,KAE9DzE,OAAQ,yCAAyCC,MAAM,KACvDC,YAAa,yCAAyCD,MAClD,KAEJE,SAAU,8BAA8BF,MAAM,KAC9CG,cAAe,gBAAgBH,MAAM,KACrCI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,uBACNgE,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,wBAEVvC,cAAe,SACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,KAEA,MAGf7B,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,SAAUiE,GAChB,OAAIA,EAAI9C,SAAWvC,KAAKuC,OACb,cAEA,WAGflB,QAAS,UACTC,SAAU,SAAU+D,GAChB,OAAIrF,KAAKuC,SAAW8C,EAAI9C,OACb,cAEA,WAGfhB,SAAU,KAEd+B,uBAAwB,WACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACD,OAAkB,IAAX3B,EAAe,KAAOA,EAAS,IAC1C,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAOA,EAAS,IACpB,QACI,OAAOA,IAGnBnC,aAAc,CACVC,OAAQ,MACRC,KAAM,MACNC,EAAG,KACHC,GAAI,MACJC,EAAG,KACHC,GAAI,MACJC,EAAG,MACHC,GAAI,OACJC,EAAG,KACHC,GAAI,MACJC,EAAG,MACHC,GAAI,OACJC,EAAG,KACHC,GAAI,SAIZ,OAAO4B,M,uBCtJX,EAAQ,S,uBCAR,EAAQ,S,sBCNR,YACiB,WACb,aAEA,IAAIpE,EAASyF,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,eAEtCE,EAAmB,SAAUC,GAC/B,OAAOA,EAAOC,SAAS,sBAAuB,6BAE5CC,EAAmB,SAAUF,GAC/B,OAAOA,EAAOC,SAAS,yBAAyB,IAE9CE,EAAW,CACbJ,iBAAkBA,EAClBG,iBAAkBA,GAGhBE,EAAoB,WACtB,MAAO,iBAELC,EAAqB,WACvB,MAAO,aAAeP,EAASQ,eAAiB,YAAcF,IAAsB,qDAElFG,EAAQ,SAAUP,GACpB,IAAIQ,EAAgBL,EAASJ,iBAAiBC,GAC1CS,EAA2B,IAAIC,OAAOF,EAAcG,QAAQ,iCAAiC,SAAUC,GACzG,MAAO,KAAOA,KACZ,MACJZ,EAAOa,GAAG,oBAAoB,SAAUC,GACtCA,EAAEC,QAAUD,EAAEC,QAAQJ,QAAQF,EAA0BJ,QAE1DL,EAAOa,GAAG,WAAW,WACnBb,EAAOgB,WAAWC,cAAc,OAAO,SAAUC,GAC/C,IAAsBC,EAAMC,EAAxBC,EAAIH,EAAMI,OACd,MAAOD,IAGL,GAFAF,EAAOD,EAAMG,GACbD,EAAYD,EAAKI,KAAK,SAClBH,IAAqD,IAAxCA,EAAUI,QAAQ,iBAAyB,CAC1D,IAAIC,EAAaN,EAAKO,OACtB,GAAI1B,EAAO2B,OAAOC,mBAAmBH,EAAWhD,OAAS0B,EAASD,iBAAiBF,GAAS,CAC1FyB,EAAWI,KAAO,EAClBJ,EAAWK,MAAQtB,EACnBiB,EAAWM,KAAM,EACjBZ,EAAKa,SACL,SAEFb,EAAKU,KAAO,EACZV,EAAKW,MAAQtB,EACbW,EAAKY,KAAM,UAMjBE,EAAgB,CAClB1B,MAAOA,EACPF,mBAAoBA,EACpBD,kBAAmBA,GAGjB8B,EAAW,SAAUlC,GACvBA,EAAOmC,WAAW,gBAAgB,WAC5BnC,EAAOoC,SAASC,sBAClBrC,EAAOsC,cAAc,MAAQL,EAAc5B,qBAAuB,QAElEL,EAAOsC,cAAcL,EAAc5B,0BAIrCkC,EAAW,CAAEL,SAAUA,GAEvBM,EAAU,SAAUxC,GACtBA,EAAOa,GAAG,eAAe,SAAUC,GACP,QAAtBA,EAAE2B,OAAOC,UAAsB1C,EAAO2C,IAAIC,SAAS9B,EAAE2B,OAAQR,EAAc7B,uBAC7EU,EAAErC,KAAO,iBAIXoE,EAAc,CAAEtC,MAAOiC,GAEvBM,EAAa,SAAU9C,GACzBA,EAAO+C,UAAU,YAAa,CAC5BC,MAAO,aACPC,IAAK,iBAEPjD,EAAOkD,YAAY,YAAa,CAC9BC,KAAM,aACNC,KAAM,YACNH,IAAK,eACLI,QAAS,YAGTC,EAAU,CAAEpB,SAAUY,GAQ1B,SAASS,KANTtJ,EAAOuJ,IAAI,aAAa,SAAUxD,GAChCuC,EAASL,SAASlC,GAClBsD,EAAQpB,SAASlC,GACjBiC,EAAc1B,MAAMP,GACpB6C,EAAYtC,MAAMP,OAnGR,IADhB,I,uBCMA,EAAQ,S,sBCNR,YACiB,WACb,aAEA,IAAI/F,EAASyF,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpC4D,EAAkB,SAAUzD,EAAQ0D,GACtC,IAAIC,EAOJ,OANA3D,EAAO2C,IAAIiB,WAAW5D,EAAO6D,UAAUC,YAAY,SAAUC,GAC3D,IAAIjC,GACAA,EAAQiC,EAAIC,MAAiB,cAAXN,EAAyB,QAAU,uBACvDC,EAAQA,GAAgB7B,MAGrB6B,GAELM,EAAY,SAAUC,GACxB,IAAI7C,EACA8C,EAAS,GACb,IAAK9C,EAAI,EAAGA,EAAI6C,EAAS5C,OAAQD,GAAK,EACpC8C,EAAOC,KAAK,CACVjB,KAAMe,EAAS7C,EAAI,GACnBsC,MAAO,IAAMO,EAAS7C,KAG1B,OAAO8C,GAELE,EAAc,SAAUrE,EAAQ0D,EAAQ5B,GAC1C9B,EAAOsE,YAAYC,UAAS,WAC1BvE,EAAOwE,QACPxE,EAAOyE,UAAUC,MAAMhB,EAAQ,CAAE5B,MAAOA,IACxC9B,EAAO2E,kBAGPC,EAAe,SAAU5E,EAAQ0D,GACnC1D,EAAOsE,YAAYC,UAAS,WAC1BvE,EAAOwE,QACPxE,EAAOyE,UAAUzC,OAAO0B,EAAQ,CAAE5B,MAAO,MAAQ,MAAM,GACvD9B,EAAO2E,kBAGPE,EAAY,CACdpB,gBAAiBA,EACjBQ,UAAWA,EACXI,YAAaA,EACbO,aAAcA,GAGZ1C,EAAW,SAAUlC,GACvBA,EAAOmC,WAAW,qBAAqB,SAAUuB,EAAQ5B,GACvD+C,EAAUR,YAAYrE,EAAQ0D,EAAQ5B,MAExC9B,EAAOmC,WAAW,sBAAsB,SAAUuB,GAChDmB,EAAUD,aAAa5E,EAAQ0D,OAG/BnB,EAAW,CAAEL,SAAUA,GAEvBpC,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCiF,EAAWpF,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCkF,EAAkB,CACpB,SACA,QACA,SACA,eACA,SACA,aACA,SACA,aACA,SACA,aACA,SACA,YACA,SACA,SACA,SACA,iBACA,SACA,SACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,OACA,SACA,OACA,SACA,eACA,SACA,OACA,SACA,MACA,SACA,QACA,SACA,eACA,SACA,YACA,SACA,YACA,SACA,aACA,SACA,SACA,SACA,cACA,SACA,UACA,SACA,OACA,SACA,SACA,SACA,OACA,SACA,OACA,SACA,WACA,SACA,aACA,SACA,QACA,SACA,OACA,SACA,QACA,SACA,eACA,SACA,aACA,SACA,YACA,SACA,iBACA,SACA,QAEEC,EAAkB,SAAUhF,GAC9B,OAAOA,EAAOC,SAAS,gBAAiB8E,IAEtCE,EAAkB,SAAUjF,GAC9B,OAAOA,EAAOC,SAAS,gBAAiB+E,EAAgBhF,KAEtDkF,EAAkB,SAAUlF,GAC9B,OAAOA,EAAOC,SAAS,gBAAiB+E,EAAgBhF,KAEtDmF,EAAmB,SAAUnF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkB,IAEvCmF,EAAmB,SAAUpF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkB,IAEvCoF,EAAmB,SAAUrF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkBkF,EAAiBnF,KAExDsF,EAAmB,SAAUtF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkBkF,EAAiBnF,KAExDuF,EAAmB,SAAUvF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkBmF,EAAiBpF,KAExDwF,EAAmB,SAAUxF,GAC/B,OAAOA,EAAOC,SAAS,iBAAkBmF,EAAiBpF,KAExDyF,EAAyB,SAAUzF,GACrC,OAAOA,EAAOC,SAAS,wBAAyB,OAE9CyF,EAAiB,SAAU1F,GAC7B,MAAiD,oBAAnCyF,EAAuBzF,IAEnCG,EAAW,CACb8E,gBAAiBA,EACjBC,gBAAiBA,EACjBG,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,iBAAkBA,EAClBC,uBAAwBA,EACxBC,eAAgBA,GAGdC,EAAWjG,QAAQC,KAAKC,MAAMC,QAAQ,qBAEtC+F,EAAU,SAAUC,EAAMC,EAAM5B,EAAUwB,GAC5C,IAAIvB,EAAQR,EAAOoC,EAAMC,EAAMC,EAAGzJ,EAAG6E,EAAG6E,EAAQ,EAC5CC,EAAKrG,EAASsG,IAAIC,SAAS,WAC3BC,EAAmB,SAAU3C,EAAOX,GACtC,IAAIuD,EAAsB,gBAAV5C,EAChB,MAAO,4BAA8B4C,EAAY,sBAAwB,IAAlE,cAA6FJ,EAAK,IAAMD,IAAxG,sBAA+IvC,GAAgB,IAA/J,yCAA+NA,EAAQ,qBAAuBA,EAAQ,IAAtQ,YAA+RgC,EAAS9H,UAAUmF,GAAS,MAAQuD,EAAY,SAAW,IAA1V,eAST,IAPApC,EAASU,EAAUZ,UAAUC,GAC7BC,EAAOC,KAAK,CACVjB,KAAMwC,EAAS9H,UAAU,YACzB8F,MAAO,gBAEToC,EAAO,mGACPC,EAAO7B,EAAO7C,OAAS,EAClB9E,EAAI,EAAGA,EAAIsJ,EAAMtJ,IAAK,CAEzB,IADAuJ,GAAQ,OACHE,EAAI,EAAGA,EAAIJ,EAAMI,IACpB5E,EAAI7E,EAAIqJ,EAAOI,EACX5E,EAAI2E,EACND,GAAQ,aAERpC,EAAQQ,EAAO9C,GACf0E,GAAQO,EAAiB3C,EAAMA,MAAOA,EAAMR,OAGhD4C,GAAQ,QAEV,GAAIL,EAAgB,CAGlB,IAFAK,GAAQ,oBAA2BF,EAA3B,2CAAoFM,EAApF,0GAA0MA,EAA1M,mFAAySR,EAAS9H,UAAU,aAA5T,4BACRkI,GAAQ,OACHE,EAAI,EAAGA,EAAIJ,EAAMI,IACpBF,GAAQO,EAAiB,GAAI,gBAE/BP,GAAQ,QAGV,OADAA,GAAQ,mBACDA,GAELS,EAAkB,CAAEZ,QAASA,GAE7Ba,EAAc,SAAqBC,EAAK5E,GAC1C4E,EAAI1C,MAAM2C,WAAa7E,EACvB4E,EAAIE,aAAa,iBAAkB9E,IAEjC+E,EAAgB,SAAU7G,GAC5B,OAAO,SAAUc,GACf,IAAIgG,EAAOhG,EAAEiG,QACTD,EAAKE,OACPhH,EAAOiH,YAAY,oBAAqBH,EAAK1E,SAASsB,OAAQoD,EAAKE,QAEnEhH,EAAOiH,YAAY,qBAAsBH,EAAK1E,SAASsB,UAIzDwD,EAAe,SAAUlH,EAAQ6F,GACnC,OAAO,SAAU/E,GACf,IACIgB,EADAqF,EAAahN,KAAKuH,SAElB0F,EAAevC,EAAUpB,gBAAgBzD,EAAQmH,EAAW/E,SAASsB,QACrE2D,EAAc,SAAUvF,GAC1B9B,EAAOiH,YAAY,oBAAqBE,EAAW/E,SAASsB,OAAQ5B,GACpEqF,EAAWG,YACXH,EAAWxD,MAAM7B,IAEfyF,EAAa,WACfvH,EAAOiH,YAAY,qBAAsBE,EAAW/E,SAASsB,QAC7DyD,EAAWG,YACXH,EAAWI,cAEb,GAAIzH,EAASsG,IAAIoB,UAAU1G,EAAE2B,OAAQ,yBAA0B,CAC7D0E,EAAWG,YACX,IAAIG,EAAsBtH,EAASsF,uBAAuBzF,GAC1DyH,EAAoBC,KAAK1H,GAAQ,SAAU8B,GACzC,IACI6F,EAAkBjB,EAAKrF,EADvBuG,EAAWT,EAAWU,MAAMC,QAAQC,qBAAqB,SAAS,GAKtE,IAHAJ,EAAmB7C,EAASkD,IAAIJ,EAAS9B,KAAK8B,EAAS9B,KAAKxE,OAAS,GAAG2G,YAAY,SAAUlE,GAC5F,OAAOA,EAAImE,cAER7G,EAAI,EAAGA,EAAIsG,EAAiBrG,OAAQD,IAEvC,GADAqF,EAAMiB,EAAiBtG,IAClBqF,EAAIyB,aAAa,kBACpB,MAGJ,GAAI9G,IAAMwE,EACR,IAAKxE,EAAI,EAAGA,EAAIwE,EAAO,EAAGxE,IACxBoF,EAAYkB,EAAiBtG,GAAIsG,EAAiBtG,EAAI,GAAG8G,aAAa,mBAG1E1B,EAAYC,EAAK5E,GACjBuF,EAAYvF,KACXsF,GAELtF,EAAQhB,EAAE2B,OAAO0F,aAAa,kBAC1BrG,GACE3H,KAAKiO,QACPtI,EAASsG,IAAIiC,IAAIlO,KAAKiO,QAAQxB,aAAa,gBAAiB,SAE9D9F,EAAE2B,OAAOmE,aAAa,iBAAiB,GACvCzM,KAAKiO,OAAStH,EAAE2B,OAAO0D,GACT,gBAAVrE,EACFyF,IAEAF,EAAYvF,IAEK,OAAVA,GACTqF,EAAWG,cAIbgB,EAAoB,SAAUtI,EAAQuI,GACxC,OAAO,WACL,IAAI1C,EAAO0C,EAAYpI,EAASoF,iBAAiBvF,GAAUG,EAASqF,iBAAiBxF,GACjF8F,EAAOyC,EAAYpI,EAASkF,iBAAiBrF,GAAUG,EAASmF,iBAAiBtF,GACjFkE,EAAWqE,EAAYpI,EAAS8E,gBAAgBjF,GAAUG,EAAS+E,gBAAgBlF,GACnF0F,EAAiBvF,EAASuF,eAAe1F,GAC7C,OAAOwG,EAAgBZ,QAAQC,EAAMC,EAAM5B,EAAUwB,KAGrD5C,EAAa,SAAU9C,GACzBA,EAAO+C,UAAU,YAAa,CAC5BlB,KAAM,cACN2G,QAAS,aACT9E,OAAQ,YACRmE,MAAO,CACLY,KAAM,cACNC,cAAc,EACd3C,KAAMuC,EAAkBtI,GAAQ,GAChC2I,QAASzB,EAAalH,EAAQG,EAASoF,iBAAiBvF,KAE1D2I,QAAS9B,EAAc7G,KAEzBA,EAAO+C,UAAU,YAAa,CAC5BlB,KAAM,cACN2G,QAAS,mBACT9E,OAAQ,cACRmE,MAAO,CACLY,KAAM,cACNC,cAAc,EACd3C,KAAMuC,EAAkBtI,GAAQ,GAChC2I,QAASzB,EAAalH,EAAQG,EAASqF,iBAAiBxF,KAE1D2I,QAAS9B,EAAc7G,MAGvBsD,EAAU,CAAEpB,SAAUY,GAM1B,SAASS,KAJTtJ,EAAOuJ,IAAI,aAAa,SAAUxD,GAChCuC,EAASL,SAASlC,GAClBsD,EAAQpB,SAASlC,OAhVP,IADhB,I,wBCGE,SAAU/F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIwO,EAAiB,8DAA8DpO,MAC3E,KAEJC,EAAc,kDAAkDD,MAAM,KACtEqO,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EAAc,mLAEdC,EAAO3O,EAAOE,aAAa,QAAS,CACpCC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAUuB,EAAG0H,GACtB,OAAK1H,EAEM,QAAQgN,KAAKtF,GACbjJ,EAAYuB,EAAEiN,SAEdL,EAAe5M,EAAEiN,SAJjBL,GAOfE,YAAaA,EACbI,iBAAkBJ,EAClBK,kBAAmB,+FACnBC,uBAAwB,0FACxBP,YAAaA,EACbQ,gBAAiBR,EACjBS,iBAAkBT,EAClBnO,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,+BACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBlB,KAAKqP,QAAgB,IAAM,IAAM,QAE3DlO,QAAS,WACL,MAAO,gBAAmC,IAAjBnB,KAAKqP,QAAgB,IAAM,IAAM,QAE9DjO,SAAU,WACN,MAAO,cAAiC,IAAjBpB,KAAKqP,QAAgB,IAAM,IAAM,QAE5DhO,QAAS,WACL,MAAO,cAAiC,IAAjBrB,KAAKqP,QAAgB,IAAM,IAAM,QAE5D/N,SAAU,WACN,MACI,0BACkB,IAAjBtB,KAAKqP,QAAgB,IAAM,IAC5B,QAGR9N,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJoN,EAAG,aACHC,GAAI,aACJpN,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOmM,M,wBC3GT,SAAU9O,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIuP,EAAOvP,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wEAAwEC,MAC5E,KAEJC,YAAa,wEAAwED,MACjF,KAEJE,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnC+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,wBACTC,QAAS,sBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,OACHC,GAAI,WACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,YAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO+M,M,uBCzDX,EAAQ,S,uBCAR,EAAQ,S,wBCFN,SAAU1P,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASwP,EAAoB9L,EAAQC,EAAeC,EAAKC,GACrD,IAAIyF,EAAS,CACT5H,EAAG,CAAC,qBAAsB,iBAC1BC,GAAI,CAAC+B,EAAS,cAAeA,EAAS,WACtC9B,EAAG,CAAC,aAAc,YAClBC,GAAI,CAAC6B,EAAS,YAAaA,EAAS,WACpC5B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAAC2B,EAAS,WAAYA,EAAS,UACnC1B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACyB,EAAS,WAAYA,EAAS,QACnCxB,EAAG,CAAC,eAAgB,aACpBC,GAAI,CAACuB,EAAS,cAAeA,EAAS,WACtCtB,EAAG,CAAC,aAAc,YAClBC,GAAI,CAACqB,EAAS,YAAaA,EAAS,YAExC,OAAOG,EAAWyF,EAAO1F,GAAK,GAAK0F,EAAO1F,GAAK,GAGnD,IAAI6L,EAAUzP,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,CACJuP,WAAY,4EAA4EtP,MACpF,KAEJkJ,OAAQ,wIAAwIlJ,MAC5I,KAEJuP,SAAU,mBAEdtP,YAAa,4DAA4DD,MACrE,KAEJsC,kBAAkB,EAClBpC,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,iBACJC,IAAK,oBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,6BACLC,KAAM,sCACNmE,KAAM,mCAEVlE,SAAU,CACNC,QAAS,WACTC,QAAS,cACTC,SAAU,sBACVC,QAAS,WACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAG8N,EACH7N,GAAI6N,EACJ5N,EAAG4N,EACH3N,GAAI2N,EACJ1N,EAAG0N,EACHzN,GAAIyN,EACJxN,EAAGwN,EACHvN,GAAIuN,EACJtN,EAAGsN,EACHrN,GAAIqN,EACJpN,EAAGoN,EACHnN,GAAImN,GAERnM,uBAAwB,cACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO3B,EAAS,KACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETG,cAAe,+BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,SAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,aAAbC,EACAD,EACa,aAAbC,EACAD,EAAO,GAAKA,EAAOA,EAAO,GACb,UAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,WACAA,EAAO,GACP,WACAA,EAAO,GACP,QAEA,UAKnB,OAAO4M,M,wBChIT,SAAU5P,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI4P,EAAO5P,EAAOE,aAAa,QAAS,CACpCC,OAAQ,uFAAuFC,MAC3F,KAEJC,YAAa,iEAAiED,MAC1E,KAEJsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,gBACTC,SAAU,cACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,gBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,QACA,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAO3B,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOoN,M,wBC7ET,SAAU/P,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI6P,EAAO7P,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wFAAwFC,MAC5F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,mBACTC,SAAU,eACVC,QAAS,oBACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,aACJC,EAAG,UACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UACJC,EAAG,UACHC,GAAI,YACJC,EAAG,SACHC,GAAI,YAERgB,uBAAwB,uBACxBC,QAAS,SAAUI,GACf,IAAIoM,EAAIpM,EAAS,GACbR,EACgC,OAAxBQ,EAAS,IAAO,IACd,KACM,IAANoM,EACA,KACM,IAANA,EACA,KACM,IAANA,EACA,KACA,KACd,OAAOpM,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOqN,M,wBCvET,SAAUhQ,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+P,EAAW,CACXC,EAAG,QACHC,EAAG,QACHC,EAAG,QACHC,GAAI,QACJC,GAAI,QACJC,EAAG,OACHC,EAAG,OACHC,GAAI,OACJC,GAAI,OACJC,EAAG,QACHC,EAAG,QACHC,IAAK,QACLC,EAAG,OACHC,EAAG,QACHC,GAAI,QACJC,GAAI,QACJC,GAAI,QACJC,GAAI,SAGJC,EAAKlR,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,6EAA6EC,MACjF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C0C,SAAU,SAAUsM,EAAO+B,EAASnO,GAChC,OAAIoM,EAAQ,GACDpM,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCL,cAAe,cACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAA4B,OAAVA,GAE7BnE,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,2BACVC,QAAS,WACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,YACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJoN,EAAG,YACHC,GAAI,WACJpN,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERiB,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,KACL,IAAK,KACD,OAAO3B,EACX,QACI,GAAe,IAAXA,EAEA,OAAOA,EAAS,QAEpB,IAAI8C,EAAI9C,EAAS,GACboM,EAAKpM,EAAS,IAAO8C,EACrB4K,EAAI1N,GAAU,IAAM,IAAM,KAC9B,OAAOA,GAAUqM,EAASvJ,IAAMuJ,EAASD,IAAMC,EAASqB,MAGpE9O,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO0O,M,uBC5GX,EAAQ,S,wBCFN,SAAUrR,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIqR,EAAKrR,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,sFAAsFC,MAC1F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,qDAAqDF,MAAM,KACrEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,sCAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,oBACTC,SAAU,mBACVC,QAAS,iBACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,WACNC,EAAG,cACHC,GAAI,cACJC,EAAG,WACHC,GAAI,cACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,WACHC,GAAI,aACJC,EAAG,QACHC,GAAI,SAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO6O,M,wBCzDT,SAAUxR,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIsR,EAAOtR,EAAOE,aAAa,QAAS,CACpCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,wBAAwBJ,MAAM,KAC3CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,YACHC,GAAI,eACJC,IAAK,qBACLC,KAAM,6BAEVC,SAAU,CACNC,QAAS,oBACTC,QAAS,gBACTC,SAAU,0BACVC,QAAS,eACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,mBACNC,EAAG,gBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,cACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WAERgB,uBAAwB,UACxBC,QAAS,SAAUI,GACf,OAAOA,GAEXpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8O,M,sBCjEX,YACgB,WACZ,aAEA,IAAIzR,EAASyF,QAAQC,KAAKC,MAAMC,QAAQ,yBAExC,SAAS8L,EAAMC,GAEb,IADA,IAAIC,EAAc,GACTC,EAAK,EAAGA,EAAKC,UAAUzK,OAAQwK,IACtCD,EAAYC,EAAK,GAAKC,UAAUD,GAElC,OAAO,WAEL,IADA,IAAIE,EAAW,GACNF,EAAK,EAAGA,EAAKC,UAAUzK,OAAQwK,IACtCE,EAASF,GAAMC,UAAUD,GAE3B,IAAIG,EAAMJ,EAAYK,OAAOF,GAC7B,OAAOJ,EAAGlH,MAAM,KAAMuH,IAI1B,IAAInM,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCiF,EAAWpF,QAAQC,KAAKC,MAAMC,QAAQ,oBAEtC8F,EAAWjG,QAAQC,KAAKC,MAAMC,QAAQ,wBAEtCsM,EAAyB,SAAUnM,GACrC,OAAOA,EAAOC,SAAS,yBAA0B,UAE/CmM,EAA6B,SAAUpM,GACzC,OAAOA,EAAOC,SAAS,yBAA0B,UAE/CoM,EAA4B,SAAUrM,GACxC,OAAOA,EAAOC,SAAS,oCAAqC,eAE1DqM,EAA0B,SAAUtM,GACtC,OAAOA,EAAOC,SAAS,oCAErBsM,EAA2B,SAAUvM,GACvC,OAAOA,EAAOC,SAAS,4BAErBuM,EAAe,SAAUC,GAC3B,OAAOA,EAAeC,WAEpBC,EAAiB,SAAU3M,GAC7B,OAAOA,EAAOC,SAAS,wBAAyBD,EAAO4M,QAAQ,2BAE7DC,EAAiB,SAAU7M,GAC7B,OAAOA,EAAOC,SAAS,wBAAyBD,EAAO4M,QAAQ,2BAE7DE,EAAiB,SAAU9M,GAC7B,OAAOA,EAAOC,SAAS,uBAAwB,MAE7C8M,EAAkB,SAAU/M,GAC9B,OAAOgN,KAAKC,IAAItH,EAASS,IAAI8G,cAAchR,EAAG8D,EAAOC,SAAS,wBAAyB,OAErFE,EAAW,CACbgM,uBAAwBA,EACxBC,2BAA4BA,EAC5BC,0BAA2BA,EAC3BC,wBAAyBA,EACzBC,yBAA0BA,EAC1BC,aAAcA,EACdG,eAAgBA,EAChBE,eAAgBA,EAChBC,eAAgBA,EAChBC,gBAAiBA,GAGfI,EAAW,SAAUrL,EAAOsL,GAE9B,GADAtL,EAAQ,GAAKA,EACTA,EAAMR,OAAS8L,EACjB,IAAK,IAAI/L,EAAI,EAAGA,EAAI+L,EAAMtL,EAAMR,OAAQD,IACtCS,EAAQ,IAAMA,EAGlB,OAAOA,GAELuL,EAAc,SAAUrN,EAAQsN,EAAKC,GACvC,IAAIC,EAAY,kCAAkChT,MAAM,KACpDiT,EAAW,kEAAkEjT,MAAM,KACnFC,EAAc,kDAAkDD,MAAM,KACtEkT,EAAa,wFAAwFlT,MAAM,KAkB/G,OAjBA+S,EAAOA,GAAQ,IAAII,KACnBL,EAAMA,EAAI3M,QAAQ,KAAM,YACxB2M,EAAMA,EAAI3M,QAAQ,KAAM,eACxB2M,EAAMA,EAAI3M,QAAQ,KAAM,GAAK4M,EAAKK,eAClCN,EAAMA,EAAI3M,QAAQ,KAAM,GAAK4M,EAAKM,WAClCP,EAAMA,EAAI3M,QAAQ,KAAMwM,EAASI,EAAKO,WAAa,EAAG,IACtDR,EAAMA,EAAI3M,QAAQ,KAAMwM,EAASI,EAAKQ,UAAW,IACjDT,EAAMA,EAAI3M,QAAQ,KAAM,GAAKwM,EAASI,EAAKS,WAAY,IACvDV,EAAMA,EAAI3M,QAAQ,KAAM,GAAKwM,EAASI,EAAKU,aAAc,IACzDX,EAAMA,EAAI3M,QAAQ,KAAM,GAAKwM,EAASI,EAAKW,aAAc,IACzDZ,EAAMA,EAAI3M,QAAQ,KAAM,KAAO4M,EAAKS,WAAa,IAAM,GAAK,IAC5DV,EAAMA,EAAI3M,QAAQ,KAAY4M,EAAKS,WAAa,GAAK,KAAO,MAC5DV,EAAMA,EAAI3M,QAAQ,KAAM,GAAKX,EAAOnC,UAAU6P,EAAWH,EAAKO,cAC9DR,EAAMA,EAAI3M,QAAQ,KAAM,GAAKX,EAAOnC,UAAUpD,EAAY8S,EAAKO,cAC/DR,EAAMA,EAAI3M,QAAQ,KAAM,GAAKX,EAAOnC,UAAU4P,EAASF,EAAKY,YAC5Db,EAAMA,EAAI3M,QAAQ,KAAM,GAAKX,EAAOnC,UAAU2P,EAAUD,EAAKY,YAC7Db,EAAMA,EAAI3M,QAAQ,KAAM,KACjB2M,GAELc,EAAiB,CAAEf,YAAaA,GAEhCgB,EAAqB,SAAU5B,EAAgB6B,GACjD,OAAO,WACL,IAAIC,EAAepO,EAASqM,aAAaC,GACb,oBAAjB8B,EAIiB,kBAAjBA,EACTzJ,EAAS0J,KAAK,CACZC,IAAKF,EACLG,QAAS,SAAUvL,GACjBmL,EAASK,KAAKC,MAAMzL,OAIxBmL,EAASC,GAXTA,EAAaD,KAefO,EAAwB,SAAU7O,EAAQ+F,EAAM+I,GAOlD,OANAhP,EAASiP,KAAKD,GAAgB,SAAUE,EAAGC,GACxB,oBAAND,IACTA,EAAIA,EAAEC,IAERlJ,EAAOA,EAAKpF,QAAQ,IAAID,OAAO,SAAWuO,EAAI,MAAO,KAAMD,MAEtDjJ,GAELmJ,EAAc,SAAUlP,EAAQc,GAClC,IAAI6B,EAAM3C,EAAO2C,IAAKwM,EAAKhP,EAASoM,yBAAyBvM,GAC7DF,EAASiP,KAAKpM,EAAIyM,OAAO,IAAKtO,IAAI,SAAUA,GAC1ChB,EAASiP,KAAKI,GAAI,SAAUH,EAAGC,GACzBtM,EAAIC,SAAS9B,EAAGmO,IACG,oBAAVE,EAAGF,IACZE,EAAGF,GAAGnO,UAMZ8B,EAAW,SAAUhF,EAAG4N,GAC1B,OAAO,IAAI9K,OAAO,MAAQ8K,EAAI,MAAO,KAAKxC,KAAKpL,EAAEwD,YAE/CiO,EAAiB,SAAUrP,EAAQsP,EAAIvJ,GACzC,IAAIwJ,EACA3R,EACA+E,EAAM3C,EAAO2C,IACb6M,EAAMxP,EAAO6D,UAAU4L,aAC3B1J,EAAO8I,EAAsB7O,EAAQ+F,EAAM5F,EAASoM,yBAAyBvM,IAC7EuP,EAAK5M,EAAI+M,OAAO,MAAO,KAAM3J,GAC7BnI,EAAI+E,EAAIyM,OAAO,WAAYG,GACvB3R,GAAKA,EAAE0D,OAAS,IAClBiO,EAAK5M,EAAI+M,OAAO,MAAO,MACvBH,EAAGI,YAAY/R,EAAE,GAAGgS,WAAU,KAEhC9P,EAASiP,KAAKpM,EAAIyM,OAAO,IAAKG,IAAK,SAAU3R,GACvCgF,EAAShF,EAAGuC,EAASgM,uBAAuBnM,GAAQW,QAAQ,OAAQ,QACtE/C,EAAEiS,UAAYzB,EAAef,YAAYrN,EAAQG,EAASwM,eAAe3M,KAEvE4C,EAAShF,EAAGuC,EAASiM,2BAA2BpM,GAAQW,QAAQ,OAAQ,QAC1E/C,EAAEiS,UAAYzB,EAAef,YAAYrN,EAAQG,EAAS0M,eAAe7M,KAEvE4C,EAAShF,EAAGuC,EAASkM,0BAA0BrM,GAAQW,QAAQ,OAAQ,QACzE/C,EAAEiS,UAAYL,MAGlBN,EAAYlP,EAAQuP,GACpBvP,EAAOiH,YAAY,oBAAoB,EAAOsI,EAAGM,WACjD7P,EAAO8P,aAELC,EAAY,CACd1B,mBAAoBA,EACpBQ,sBAAuBA,EACvBK,YAAaA,EACbG,eAAgBA,GAGdnN,EAAW,SAAUlC,GACvBA,EAAOmC,WAAW,oBAAqBwJ,EAAMoE,EAAUV,eAAgBrP,KAErEuC,EAAW,CAAEL,SAAUA,GAEvB3B,EAAQ,SAAUP,GACpBA,EAAOa,GAAG,cAAc,SAAUmP,GAChC,IAAIrN,EAAM3C,EAAO2C,IAAKsN,EAAa9P,EAAS0M,eAAe7M,GAC3DF,EAASiP,KAAKpM,EAAIyM,OAAO,MAAOY,EAAE7O,OAAO,SAAUL,GAC7C6B,EAAIC,SAAS9B,EAAG,aAClBhB,EAASiP,KAAKpM,EAAIyM,OAAO,IAAKtO,IAAI,SAAUA,GACtC6B,EAAIC,SAAS9B,EAAGd,EAAOC,SAAS,yBAA0B,SAASU,QAAQ,OAAQ,QACrFG,EAAE+O,UAAYzB,EAAef,YAAYrN,EAAQiQ,OAGrDF,EAAUb,YAAYlP,EAAQc,WAKlCmB,EAAgB,CAAE1B,MAAOA,GAEzB2P,EAAmB,SAAUlQ,EAAQmQ,EAAKpK,GAC5C,IAAgC,IAA5BA,EAAKvE,QAAQ,UAAkB,CACjC,IAAI4O,EAAoB,GACxBtQ,EAASiP,KAAK/O,EAAOqQ,YAAY,SAAU5B,GACzC2B,GAAqB,gDAAkDpQ,EAAOsQ,gBAAgBC,WAAW9B,GAAO,QAElH,IAAI+B,EAAYxQ,EAAOoC,SAASqO,YAAc,IACd,IAA5BD,EAAUhP,QAAQ,OACpBgP,EAAYxQ,EAAOC,SAAS,aAAc,GAAI,QAC9CuQ,EAAYA,EAAUxQ,EAAOmG,KAAO,IAEtCJ,EAAO,8BAA0CqK,EAA1C,uBAA4FI,EAAY,KAAOzK,EAA/G,iBAETA,EAAOgK,EAAUlB,sBAAsB7O,EAAQ+F,EAAM5F,EAASmM,wBAAwBtM,IACtF,IAAI0Q,EAAMP,EAAIQ,KAAK,UAAU,GAAG7I,QAAQ8I,cAAcC,SACtDH,EAAII,OACJJ,EAAIK,MAAMhL,GACV2K,EAAIM,SAEFF,EAAO,SAAU9Q,EAAQuO,GAC3B,IAAI4B,EAEAc,EADAC,EAAS,GAEb,GAAK3C,GAAwC,IAAxBA,EAAajN,OAAlC,CAQAxB,EAASiP,KAAKR,GAAc,SAAU4C,GACpCD,EAAO9M,KAAK,CACVgN,UAAWF,EAAO5P,OAClB6B,KAAMgO,EAASnO,MACflB,MAAO,CACL2M,IAAK0C,EAAS1C,IACd1N,QAASoQ,EAASpQ,QAClBsQ,YAAaF,EAASE,kBAI5B,IAAIC,EAAmB,SAAUxQ,GAC/B,IAAIgB,EAAQhB,EAAEiG,QAAQjF,QAClBA,EAAM2M,IACR3J,EAAS0J,KAAK,CACZC,IAAK3M,EAAM2M,IACXC,QAAS,SAAU3I,GACjBkL,EAAelL,EACfmK,EAAiBlQ,EAAQmQ,EAAKc,OAIlCA,EAAenP,EAAMf,QACrBmP,EAAiBlQ,EAAQmQ,EAAKc,IAEhCd,EAAIQ,KAAK,gBAAgB,GAAGxN,KAAKrC,EAAEiG,QAAQjF,QAAQuP,cAErDlB,EAAMnQ,EAAOuR,cAAcT,KAAK,CAC9B9N,MAAO,kBACPwO,OAAQ,OACRC,UAAW,SACXC,MAAO,UACPC,QAAS,GACTC,QAAS,GACTC,MAAO,CACL,CACEhQ,KAAM,OACNiQ,KAAM,EACNH,QAAS,EACTE,MAAO,CAAC,CACJhQ,KAAM,YACNkQ,MAAO,YACPF,MAAO,CACLhQ,KAAM,UACNkQ,MAAO,YACPtT,KAAM,WACNyS,OAAQA,EACRc,SAAUV,MAIlB,CACEzP,KAAM,QACNpD,KAAM,cACNsT,MAAO,cACP5O,KAAM,KAER,CACEtB,KAAM,SACNiQ,KAAM,EACNG,OAAQ,IAGZC,SAAU,WACRnC,EAAUV,eAAerP,GAAQ,EAAOiR,IAE1CkB,SAAUhS,EAAS2M,eAAe9M,GAClCoS,UAAWjS,EAAS4M,gBAAgB/M,KAEtCmQ,EAAIQ,KAAK,WAAW,GAAG0B,KAAK,cA7E5B,CACE,IAAIC,EAAUtS,EAAOnC,UAAU,yBAC/BmC,EAAOuS,oBAAoBzB,KAAK,CAC9B3N,KAAMmP,EACNzQ,KAAM,WA2ER2Q,EAAS,CAAE1B,KAAMA,GAEjB2B,EAAa,SAAUzS,GACzB,OAAO,SAAU0M,GACf8F,EAAO1B,KAAK9Q,EAAQ0M,KAGpB5J,EAAa,SAAU9C,GACzBA,EAAO+C,UAAU,WAAY,CAC3BC,MAAO,kBACP2F,QAASoH,EAAU1B,mBAAmBrO,EAAOoC,SAAUqQ,EAAWzS,MAEpEA,EAAOkD,YAAY,WAAY,CAC7BC,KAAM,WACNwF,QAASoH,EAAU1B,mBAAmBrO,EAAOoC,SAAUqQ,EAAWzS,IAClEoD,KAAM,WACNC,QAAS,YAGTC,EAAU,CAAEpB,SAAUY,GAO1B,SAASS,KALTtJ,EAAOuJ,IAAI,YAAY,SAAUxD,GAC/BsD,EAAQpB,SAASlC,GACjBuC,EAASL,SAASlC,GAClBiC,EAAc1B,MAAMP,OAzUX,IADf,I,wBCIE,SAAU/F,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIsY,EAAKtY,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,+FAA+FC,MACnG,KAEJC,YAAa,8DAA8DD,MACvE,KAEJsC,kBAAkB,EAClBpC,SAAU,sEAAsEF,MAC5E,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,0BACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHC,GAAI,oBACJC,IAAK,0BACLC,KAAM,gCAEVlE,SAAU,CACNC,QAAS,kBACTC,QAAS,mBACTC,SAAU,gBACVC,QAAS,kBACTC,SAAU,0BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,aACJC,EAAG,aACHC,GAAI,YACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,eACHC,GAAI,cACJC,EAAG,WACHC,GAAI,WAERgB,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO8V,M,wBCnET,SAAUzY,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIuY,EAAKvY,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oGAAoGC,MACxG,KAEJC,YAAa,iEAAiED,MAC1E,KAEJsC,kBAAkB,EAClBpC,SAAU,iDAAiDF,MAAM,KACjEG,cAAe,8CAA8CH,MAAM,KACnEI,YAAa,yBAAyBJ,MAAM,KAC5C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,wBACLC,KAAM,oCAEV4B,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAiB,eAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,aAEA,cAGf7B,SAAU,CACNC,QAAS,mBACTC,QAAS,qBACTC,SAAU,qBACVC,QAAS,wBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,YACNC,EAAG,eACHC,GAAI,YACJC,EAAG,SACHC,GAAI,UACJC,EAAG,YACHC,GAAI,aACJC,EAAG,QACHC,GAAI,SACJoN,EAAG,YACHC,GAAI,aACJpN,EAAG,UACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WAIZ,OAAOkW,M,wBCnET,SAAU1Y,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIwY,EAAa,CACbC,MAAO,CAEH9W,GAAI,CAAC,UAAW,UAAW,WAC3BC,EAAG,CAAC,cAAe,gBACnBC,GAAI,CAAC,QAAS,SAAU,UACxBC,EAAG,CAAC,YAAa,eACjBC,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,MAAO,OAAQ,QACpBE,GAAI,CAAC,QAAS,SAAU,UACxBE,GAAI,CAAC,SAAU,SAAU,WAE7BqW,uBAAwB,SAAUhV,EAAQiV,GACtC,OAAkB,IAAXjV,EACDiV,EAAQ,GACRjV,GAAU,GAAKA,GAAU,EACzBiV,EAAQ,GACRA,EAAQ,IAElBlV,UAAW,SAAUC,EAAQC,EAAeC,GACxC,IAAI+U,EAAUH,EAAWC,MAAM7U,GAC/B,OAAmB,IAAfA,EAAIsD,OACGvD,EAAgBgV,EAAQ,GAAKA,EAAQ,GAGxCjV,EACA,IACA8U,EAAWE,uBAAuBhV,EAAQiV,KAMtDC,EAAS5Y,EAAOE,aAAa,UAAW,CACxCC,OAAQ,mFAAmFC,MACvF,KAEJC,YAAa,2DAA2DD,MACpE,KAEJsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,cACHC,GAAI,gBACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,WACN,OAAQpB,KAAK8Y,OACT,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,qBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,oBAGnBzX,QAAS,cACTC,SAAU,WACN,IAAIyX,EAAe,CACf,2BACA,+BACA,4BACA,0BACA,8BACA,2BACA,4BAEJ,OAAOA,EAAa/Y,KAAK8Y,QAE7BvX,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,mBACHC,GAAI6W,EAAW/U,UACf7B,EAAG4W,EAAW/U,UACd5B,GAAI2W,EAAW/U,UACf3B,EAAG0W,EAAW/U,UACd1B,GAAIyW,EAAW/U,UACfzB,EAAG,MACHC,GAAIuW,EAAW/U,UACfvB,EAAG,QACHC,GAAIqW,EAAW/U,UACfrB,EAAG,SACHC,GAAImW,EAAW/U,WAEnBJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOoW,M,wBCxHT,SAAU/Y,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI+Y,EAAQ/Y,EAAOE,aAAa,SAAU,CACtCC,OAAQ,CACJuP,WAAY,qFAAqFtP,MAC7F,KAEJkJ,OAAQ,sHAAsHlJ,MAC1H,KAEJuP,SAAU,mBAEdtP,YAAa,+DAA+DD,MACxE,KAEJsC,kBAAkB,EAClBpC,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C+O,oBAAoB,EACpB1O,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,mBACJmE,GAAI,aACJlE,IAAK,4BACLmE,IAAK,mBACLlE,KAAM,iCACNmE,KAAM,wBAEVlE,SAAU,CACNC,QAAS,aACTC,QAAS,eACTC,SAAU,cACVC,QAAS,aACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,QACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,UACHC,GAAI,UACJC,EAAG,UACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,qBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,IAAInC,EACW,IAAXQ,EACM,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACW,IAAXA,EACA,IACA,IAIV,MAHe,MAAX2B,GAA6B,MAAXA,IAClBnC,EAAS,KAENQ,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOuW,M,sBC3FX,YACc,WACV,aAEA,IAAIlZ,EAASyF,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCuT,EAAY,SAAUjN,GACxB,MAAO,8BAA8B6C,KAAK7C,IAExCkN,EAAQ,SAAUrT,GACpB,IAAIsT,EAAetT,EAAO6D,UAAU0P,UAChCC,EAAoC,MAAzBF,EAAaG,SAAkE,KAA/CzT,EAAO2C,IAAI+Q,UAAUJ,EAAc,QAClF,OAAOE,EAAWF,EAAanN,IAAMmN,EAAa7U,KAAO,IAEvDkV,EAAS,SAAU3T,EAAQmG,GAC7B,IAAImN,EAAetT,EAAO6D,UAAU0P,UAChCC,EAAoC,MAAzBF,EAAaG,SAAkE,KAA/CzT,EAAO2C,IAAI+Q,UAAUJ,EAAc,QAC9EE,GACFF,EAAaM,gBAAgB,QAC7BN,EAAanN,GAAKA,EAClBnG,EAAOsE,YAAYd,QAEnBxD,EAAOwE,QACPxE,EAAO6D,UAAUgQ,UAAS,GAC1B7T,EAAOiH,YAAY,oBAAoB,EAAOjH,EAAO2C,IAAImR,WAAW,IAAK,CAAE3N,GAAIA,OAG/E4N,EAAS,CACXX,UAAWA,EACXC,MAAOA,EACPM,OAAQA,GAGNK,EAAe,SAAUhU,EAAQiU,GACnC,OAAKF,EAAOX,UAAUa,IAIpBF,EAAOJ,OAAO3T,EAAQiU,IACf,IAJPjU,EAAOuR,cAAc2C,MAAM,2GACpB,IAMPpD,EAAO,SAAU9Q,GACnB,IAAImU,EAAYJ,EAAOV,MAAMrT,GAC7BA,EAAOuR,cAAcT,KAAK,CACxB9N,MAAO,SACPoR,KAAM,CACJvS,KAAM,UACNpD,KAAM,KACN4V,KAAM,GACNtC,MAAO,KACPjQ,MAAOqS,GAETjC,SAAU,SAAUpR,GAClB,IAAImT,EAAQnT,EAAEwT,KAAKnO,GACf6N,EAAahU,EAAQiU,IACvBnT,EAAEyT,qBAKN/B,EAAS,CAAE1B,KAAMA,GAEjB5O,EAAW,SAAUlC,GACvBA,EAAOmC,WAAW,aAAa,WAC7BqQ,EAAO1B,KAAK9Q,OAGZuC,EAAW,CAAEL,SAAUA,GAEvBsS,EAAe,SAAUrT,GAC3B,OAAQA,EAAKI,KAAK,UAAYJ,EAAKI,KAAK,OAASJ,EAAKI,KAAK,WAAaJ,EAAK+G,YAE3EuM,EAAqB,SAAUC,GACjC,OAAO,SAAUxT,GACf,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAMI,OAAQD,IAC5BmT,EAAatT,EAAMG,KACrBH,EAAMG,GAAGE,KAAK,kBAAmBmT,KAKrCnU,EAAQ,SAAUP,GACpBA,EAAOa,GAAG,WAAW,WACnBb,EAAO2U,OAAO1T,cAAc,IAAKwT,EAAmB,UACpDzU,EAAOgB,WAAWC,cAAc,IAAKwT,EAAmB,WAGxDxS,EAAgB,CAAE1B,MAAOA,GAEzBuC,EAAa,SAAU9C,GACzBA,EAAO+C,UAAU,SAAU,CACzBK,KAAM,SACNoF,QAAS,SACTvF,IAAK,YACL2R,cAAe,kBAEjB5U,EAAOkD,YAAY,SAAU,CAC3BE,KAAM,SACND,KAAM,SACNE,QAAS,SACTJ,IAAK,eAGLK,EAAU,CAAEpB,SAAUY,GAO1B,SAASS,KALTtJ,EAAOuJ,IAAI,UAAU,SAAUxD,GAC7BiC,EAAc1B,MAAMP,GACpBuC,EAASL,SAASlC,GAClBsD,EAAQpB,SAASlC,OA5GV,IADb,I,sBCAA,YACe,WACX,aAEA,IAAI/F,EAASyF,QAAQC,KAAKC,MAAMC,QAAQ,yBAEpCgV,EAAuB,SAAU7U,EAAQ8U,GAC3C,OAAO9U,EAAOqS,KAAK,mBAAoB,CAAEyC,IAAKA,KAE5CC,EAAS,CAAEF,qBAAsBA,GAEjCG,EAAa,SAAUhV,EAAQ8U,GACjC,IAAIG,EAASF,EAAOF,qBAAqB7U,EAAQ8U,GAAKA,IACtD9U,EAAOiH,YAAY,oBAAoB,EAAOgO,IAE5CC,EAAU,CAAEF,WAAYA,GAExBlV,EAAWJ,QAAQC,KAAKC,MAAMC,QAAQ,sBAEtCsV,EAAa,SAAUnV,GACzB,OAAOA,EAAOoC,SAASgT,SAErBC,EAAmB,SAAUrV,GAC/B,OAAOA,EAAOoC,SAASkT,gBAErBnV,EAAW,CACbgV,WAAYA,EACZE,iBAAkBA,GAGhBE,EAAUzV,EAASyV,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,mBAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,0BAEF,CACE,OACA,wBAEF,CACE,OACA,2BAEF,CACE,OACA,0BAEF,CACE,OACA,2BAEF,CACE,OACA,aAEF,CACE,OACA,aAEF,CACE,OACA,eAEF,CACE,OACA,mBAEF,CACE,OACA,yBAEF,CACE,OACA,2BAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,iBAEF,CACE,OACA,gBAEF,CACE,OACA,gBAEF,CACE,OACA,iBAEF,CACE,OACA,cAEF,CACE,OACA,eAEF,CACE,OACA,+BAEF,CACE,OACA,gCAEF,CACE,OACA,WAEF,CACE,OACA,oBAEF,CACE,OACA,mBAEF,CACE,OACA,oBAEF,CACE,OACA,sBAEF,CACE,OACA,YAEF,CACE,OACA,YAEF,CACE,OACA,cAEF,CACE,OACA,yBAEF,CACE,OACA,qBAEF,CACE,OACA,sBAEF,CACE,OACA,wBAIFC,EAAgB,SAAUL,GAC5B,OAAOtV,EAAS4V,KAAKN,GAAS,SAAUO,GACtC,OAAOJ,EAAQI,IAAyB,IAAhBA,EAAKrU,WAG7BsU,EAAsB,SAAUC,GAClC,OAAIN,EAAQM,GACH,GAAG3J,OAAOuJ,EAAcI,IAEL,oBAAjBA,EACFA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AO,kBACPnB,KAAM,YACNmC,MAAO,0DACP6N,MAAO,CAAC,CACJhQ,KAAM,YACNkE,KAAM,oDAAqEjG,EAASjC,UAAU,UAAxF,YAAuHiC,EAASjC,UAAU,YAA1I,gBAA+K28C,EAA/K,qBAIVC,EAAuB,CAAEH,QAASA,GAElCl1B,EAAOxG,OAAOwG,KAEds1B,EAAW,SAAUziC,EAAKqN,GAC5B,IAAIq1B,EAAmB,SAAU/5C,GAC/B,IAAIye,SAAWze,EACf,MAAa,WAANye,GAAwB,WAANA,GAE3B,OAAOpH,EAAItX,QAAQ,mBAAmB,SAAUi6C,EAAW58C,GACzD,IAAI8D,EAAQwjB,EAAItnB,GAChB,OAAO28C,EAAiB74C,GAASA,EAAM6c,WAAai8B,MAIpDC,EAAO,CACT,CACE78C,IAAK,UACLS,KAAM,iBAER,CACET,IAAK,SACLS,KAAM,UAER,CACET,IAAK,WACLS,KAAM,YAER,CACET,IAAK,aACLS,KAAM,cAER,CACET,IAAK,WACLS,KAAM,YAER,CACET,IAAK,SACLS,KAAM,UAER,CACET,IAAK,UACLS,KAAM,iBAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,cACLS,KAAM,gBAER,CACET,IAAK,WACLS,KAAM,qBAER,CACET,IAAK,cACLS,KAAM,gBAER,CACET,IAAK,iBACLS,KAAM,kBAER,CACET,IAAK,YACLS,KAAM,aAER,CACET,IAAK,WACLS,KAAM,aAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,KACLS,KAAM,mBAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,aACLS,KAAM,eAER,CACET,IAAK,YACLS,KAAM,cAER,CACET,IAAK,iBACLS,KAAM,oBAER,CACET,IAAK,eACLS,KAAM,iBAER,CACET,IAAK,OACLS,KAAM,QAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,QACLS,KAAM,SAER,CACET,IAAK,cACLS,KAAM,eAER,CACET,IAAK,cACLS,KAAM,eAER,C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H,GAAU,SAAUnZ,GACtByY,GAAiBzY,GACjB,IAAIl5C,EAAW54C,GAAK7S,EAAOjC,QACvBggH,EAAU,SAAUvqB,GAItB,OAHI/nC,EAASviE,MAAMgV,UACjButD,EAASr8C,IAAIpP,EAAOL,KAAK6zF,IAEpB,WACL,IAAI5wG,EAAM+hH,EAAWnR,KAAK,CACxB3tF,QAASnI,EAAS81F,GAClBgB,QAAS92F,EAAS,GAClB62F,QAAS72F,EAAS,KAIpB,OAFAozF,GAASluG,EAAK,SACdkuG,GAAS0C,EAAM,SACR5wG,IAGX,MAAO,CACLm7H,QAASA,EACT5yD,OAAQM,EAASviE,MAGjB80H,GAAa,CACfV,aAAcA,GACdK,UAAWA,GACXG,QAASA,IAGPG,GAAY,CACd,OACA,IACA,MACA,UACA,QACA,aACA,SACA,SACA,SACA,MACA,UACA,KACA,KACA,QACA,QACA,QACA,QACA,UACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,aACA,MACA,WAEE15G,GAAS,SAAU+4F,EAAU9mG,GAC/B,IAAIlC,EAAUgpG,EAASpuF,WAAW5vB,KAAKkX,GACvC,OAAO8U,EAAS,CACd,KACA,MACChX,IAEDyG,GAAU,SAAUuiG,EAAU9mG,GAChC,IAAIlC,EAAUgpG,EAASpuF,WAAW5vB,KAAKkX,GACvC,OAAO8U,EAAS2yG,GAAW3pH,IAEzB4pH,GAAe,SAAU5gB,EAAU9mG,GACrC,IAAIlC,EAAUgpG,EAASpuF,WAAW5vB,KAAKkX,GACvC,OAAO8U,EAAS,CACd,UACA,MACA,IACA,KACA,KACA,KACA,KACA,KACA,MACChX,IAED6pH,GAAY,SAAU7gB,EAAU9mG,GAClC,IAAIlC,EAAUgpG,EAASpuF,WAAW5vB,KAAKkX,GACvC,OAAO8U,EAAS,CACd,KACA,KACA,KACA,KACA,KACA,MACChX,IAED8pH,GAAc,SAAU9gB,EAAU9mG,GACpC,OAAO8U,EAAS,CACd,MACA,KACA,KACA,KACA,aACA,OACA,WACCgyF,EAASpuF,WAAW5vB,KAAKkX,KAE1BgmG,GAAa,SAAUc,EAAU9mG,GACnC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wD,EAAOmL,EAAK+qC,GACzB,IAAIs9H,EAA+B,kBAAVxzK,EAAqBi6D,WAAWj6D,GAASA,EAMlE,OALIwzK,EAAct9H,EAChBs9H,EAAct9H,EACLs9H,EAAcroK,IACvBqoK,EAAcroK,GAETqoK,EAET,SAASvnE,IACP,MAAO,CACL,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAGJ,IAAIm4E,EAAc,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,IAEIvqH,EAFAuxD,EAAM,GACN5tF,EAAM,IAAIngB,MAAM,IAEXje,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IAAK,IAAImwB,EAAI,EAAGA,EAAI,EAAGA,IACrB67F,EAAI77F,GAAK60J,EAAQ70J,EAAQ,EAAJnwB,GAEvB,IAASmwB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1BsqC,EAAM,EACN,IAAK,IAAI7sD,EAAI,EAAGA,EAAI,EAAGA,IACrB6sD,GAAOsqH,EAAQ50J,EAAQ,EAAJviB,GAASo+G,EAAIp+G,GAElCwwB,EAAIjO,EAAQ,EAAJnw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S51B,EAAQwrB,EACrB,GAAI/rB,EAAM,CAER,GADAm2B,EAAUn2B,EAAKyuO,GACXp4I,GAAYlgE,IAAYkgE,EAC1B,OAEF,GAAIlgE,EAAS,CACX,IAAKpG,EACH,IAAKhE,EAAQoK,EAAQq8M,GAAYzmN,EAAOA,EAAQA,EAAMymN,GACpD,IAAKzmN,EAAMymN,GACT,OAAOzmN,EAIb,OAAOoK,EAGT,GADA51B,EAASP,EAAKM,WACVC,GAAUA,IAAW81F,EACvB,OAAO91F,IAIbvH,KAAKktB,QAAU,WACb,OAAOlmB,GAEThH,KAAKg/B,KAAO,SAAUjI,GAEpB,OADA/vB,EAAOuyO,EAAYvyO,EAAM,aAAc,cAAe+vB,GAC/C/vB,GAEThH,KAAKojC,KAAO,SAAUrM,GAEpB,OADA/vB,EAAOuyO,EAAYvyO,EAAM,YAAa,kBAAmB+vB,GAClD/vB,GAEThH,KAAK05O,MAAQ,SAAU3iN,GAErB,OADA/vB,EAAOyyO,EAAiBzyO,EAAM,YAAa,kBAAmB+vB,GACvD/vB,GAIX,IAwSI2yO,GAAeC,GAAcC,GAxS7B1tJ,GAAS,CACX,UACA,QACA,UACA,MACA,KACA,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,WAEE2tJ,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,SAEE79M,GAAa,CACf,KACA,KACA,KACA,KACA,KACA,KACA,IACA,MACA,UACA,MACA,OACA,aACA,SACA,MACA,WACA,SACA,SACA,UACA,UACA,SACA,QACA,MACA,UAEE89M,GAAW,CACb,KACA,KACA,KACA,KACA,KACA,MAEE56D,GAAY,CACd,KACA,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","file":"js/chunk-c4ab5a72.a5666ffe.js","sourcesContent":["//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uzLatn = moment.defineLocale('uz-latn', {\n months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n '_'\n ),\n weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Bugun soat] LT [da]',\n nextDay: '[Ertaga] LT [da]',\n nextWeek: 'dddd [kuni soat] LT [da]',\n lastDay: '[Kecha soat] LT [da]',\n lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Yaqin %s ichida',\n past: 'Bir necha %s oldin',\n s: 'soniya',\n ss: '%d soniya',\n m: 'bir daqiqa',\n mm: '%d daqiqa',\n h: 'bir soat',\n hh: '%d soat',\n d: 'bir kun',\n dd: '%d kun',\n M: 'bir oy',\n MM: '%d oy',\n y: 'bir yil',\n yy: '%d yil',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return uzLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ml = moment.defineLocale('ml', {\n months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n '_'\n ),\n monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n '_'\n ),\n weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm -നു',\n LTS: 'A h:mm:ss -നു',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm -നു',\n LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n },\n calendar: {\n sameDay: '[ഇന്ന്] LT',\n nextDay: '[നാളെ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ഇന്നലെ] LT',\n lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s കഴിഞ്ഞ്',\n past: '%s മുൻപ്',\n s: 'അൽപ നിമിഷങ്ങൾ',\n ss: '%d സെക്കൻഡ്',\n m: 'ഒരു മിനിറ്റ്',\n mm: '%d മിനിറ്റ്',\n h: 'ഒരു മണിക്കൂർ',\n hh: '%d മണിക്കൂർ',\n d: 'ഒരു ദിവസം',\n dd: '%d ദിവസം',\n M: 'ഒരു മാസം',\n MM: '%d മാസം',\n y: 'ഒരു വർഷം',\n yy: '%d വർഷം',\n },\n meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'രാത്രി' && hour >= 4) ||\n meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n meridiem === 'വൈകുന്നേരം'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'രാത്രി';\n } else if (hour < 12) {\n return 'രാവിലെ';\n } else if (hour < 17) {\n return 'ഉച്ച കഴിഞ്ഞ്';\n } else if (hour < 20) {\n return 'വൈകുന്നേരം';\n } else {\n return 'രാത്രി';\n }\n },\n });\n\n return ml;\n\n})));\n","// Exports the \"template\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/template')\n// ES2015:\n// import 'tinymce/plugins/template'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cv = moment.defineLocale('cv', {\n months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n '_'\n ),\n monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n '_'\n ),\n weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n },\n calendar: {\n sameDay: '[Паян] LT [сехетре]',\n nextDay: '[Ыран] LT [сехетре]',\n lastDay: '[Ӗнер] LT [сехетре]',\n nextWeek: '[Ҫитес] dddd LT [сехетре]',\n lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (output) {\n var affix = /сехет$/i.exec(output)\n ? 'рен'\n : /ҫул$/i.exec(output)\n ? 'тан'\n : 'ран';\n return output + affix;\n },\n past: '%s каялла',\n s: 'пӗр-ик ҫеккунт',\n ss: '%d ҫеккунт',\n m: 'пӗр минут',\n mm: '%d минут',\n h: 'пӗр сехет',\n hh: '%d сехет',\n d: 'пӗр кун',\n dd: '%d кун',\n M: 'пӗр уйӑх',\n MM: '%d уйӑх',\n y: 'пӗр ҫул',\n yy: '%d ҫул',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n ordinal: '%d-мӗш',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(n) {\n if (n % 100 === 11) {\n return true;\n } else if (n % 10 === 1) {\n return false;\n }\n return true;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nokkrar sekúndur'\n : 'nokkrum sekúndum';\n case 'ss':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n );\n }\n return result + 'sekúnda';\n case 'm':\n return withoutSuffix ? 'mínúta' : 'mínútu';\n case 'mm':\n if (plural(number)) {\n return (\n result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n );\n } else if (withoutSuffix) {\n return result + 'mínúta';\n }\n return result + 'mínútu';\n case 'hh':\n if (plural(number)) {\n return (\n result +\n (withoutSuffix || isFuture\n ? 'klukkustundir'\n : 'klukkustundum')\n );\n }\n return result + 'klukkustund';\n case 'd':\n if (withoutSuffix) {\n return 'dagur';\n }\n return isFuture ? 'dag' : 'degi';\n case 'dd':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'dagar';\n }\n return result + (isFuture ? 'daga' : 'dögum');\n } else if (withoutSuffix) {\n return result + 'dagur';\n }\n return result + (isFuture ? 'dag' : 'degi');\n case 'M':\n if (withoutSuffix) {\n return 'mánuður';\n }\n return isFuture ? 'mánuð' : 'mánuði';\n case 'MM':\n if (plural(number)) {\n if (withoutSuffix) {\n return result + 'mánuðir';\n }\n return result + (isFuture ? 'mánuði' : 'mánuðum');\n } else if (withoutSuffix) {\n return result + 'mánuður';\n }\n return result + (isFuture ? 'mánuð' : 'mánuði');\n case 'y':\n return withoutSuffix || isFuture ? 'ár' : 'ári';\n case 'yy':\n if (plural(number)) {\n return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n }\n return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n }\n }\n\n var is = moment.defineLocale('is', {\n months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n },\n calendar: {\n sameDay: '[í dag kl.] LT',\n nextDay: '[á morgun kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[í gær kl.] LT',\n lastWeek: '[síðasta] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'eftir %s',\n past: 'fyrir %s síðan',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: 'klukkustund',\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fo = moment.defineLocale('fo', {\n months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n '_'\n ),\n weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D. MMMM, YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Í dag kl.] LT',\n nextDay: '[Í morgin kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[Í gjár kl.] LT',\n lastWeek: '[síðstu] dddd [kl] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'um %s',\n past: '%s síðani',\n s: 'fá sekund',\n ss: '%d sekundir',\n m: 'ein minuttur',\n mm: '%d minuttir',\n h: 'ein tími',\n hh: '%d tímar',\n d: 'ein dagur',\n dd: '%d dagar',\n M: 'ein mánaður',\n MM: '%d mánaðir',\n y: 'eitt ár',\n yy: '%d ár',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ja = moment.defineLocale('ja', {\n eras: [\n {\n since: '2019-05-01',\n offset: 1,\n name: '令和',\n narrow: '㋿',\n abbr: 'R',\n },\n {\n since: '1989-01-08',\n until: '2019-04-30',\n offset: 1,\n name: '平成',\n narrow: '㍻',\n abbr: 'H',\n },\n {\n since: '1926-12-25',\n until: '1989-01-07',\n offset: 1,\n name: '昭和',\n narrow: '㍼',\n abbr: 'S',\n },\n {\n since: '1912-07-30',\n until: '1926-12-24',\n offset: 1,\n name: '大正',\n narrow: '㍽',\n abbr: 'T',\n },\n {\n since: '1873-01-01',\n until: '1912-07-29',\n offset: 6,\n name: '明治',\n narrow: '㍾',\n abbr: 'M',\n },\n {\n since: '0001-01-01',\n until: '1873-12-31',\n offset: 1,\n name: '西暦',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: '紀元前',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n eraYearOrdinalRegex: /(元|\\d+)年/,\n eraYearOrdinalParse: function (input, match) {\n return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n },\n months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日 dddd HH:mm',\n l: 'YYYY/MM/DD',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日(ddd) HH:mm',\n },\n meridiemParse: /午前|午後/i,\n isPM: function (input) {\n return input === '午後';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return '午前';\n } else {\n return '午後';\n }\n },\n calendar: {\n sameDay: '[今日] LT',\n nextDay: '[明日] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[来週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n lastDay: '[昨日] LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[先週]dddd LT';\n } else {\n return 'dddd LT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}日/,\n ordinal: function (number, period) {\n switch (period) {\n case 'y':\n return number === 1 ? '元年' : number + '年';\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '数秒',\n ss: '%d秒',\n m: '1分',\n mm: '%d分',\n h: '1時間',\n hh: '%d時間',\n d: '1日',\n dd: '%d日',\n M: '1ヶ月',\n MM: '%dヶ月',\n y: '1年',\n yy: '%d年',\n },\n });\n\n return ja;\n\n})));\n","// Exports the \"table\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/table')\n// ES2015:\n// import 'tinymce/plugins/table'\nrequire('./plugin.js');","// Exports the \"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","// 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","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esDo = moment.defineLocale('es-do', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return esDo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arMa = moment.defineLocale('ar-ma', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arMa;\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');","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['thoddea sekondamni', 'thodde sekond'],\n ss: [number + ' sekondamni', number + ' sekond'],\n m: ['eka mintan', 'ek minut'],\n mm: [number + ' mintamni', number + ' mintam'],\n h: ['eka voran', 'ek vor'],\n hh: [number + ' voramni', number + ' voram'],\n d: ['eka disan', 'ek dis'],\n dd: [number + ' disamni', number + ' dis'],\n M: ['eka mhoinean', 'ek mhoino'],\n MM: [number + ' mhoineamni', number + ' mhoine'],\n y: ['eka vorsan', 'ek voros'],\n yy: [number + ' vorsamni', number + ' vorsam'],\n };\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var gomLatn = moment.defineLocale('gom-latn', {\n months: {\n standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n '_'\n ),\n format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n '_'\n ),\n isFormat: /MMMM(\\s)+D[oD]?/,\n },\n monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'A h:mm [vazta]',\n LTS: 'A h:mm:ss [vazta]',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY A h:mm [vazta]',\n LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n },\n calendar: {\n sameDay: '[Aiz] LT',\n nextDay: '[Faleam] LT',\n nextWeek: '[Fuddlo] dddd[,] LT',\n lastDay: '[Kal] LT',\n lastWeek: '[Fattlo] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s',\n past: '%s adim',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n ordinal: function (number, period) {\n switch (period) {\n // the ordinal 'er' only applies to day of the month\n case 'D':\n return number + 'er';\n default:\n case 'M':\n case 'Q':\n case 'DDD':\n case 'd':\n case 'w':\n case 'W':\n return number;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week\n doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n },\n meridiemParse: /rati|sokallim|donparam|sanje/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'rati') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'sokallim') {\n return hour;\n } else if (meridiem === 'donparam') {\n return hour > 12 ? hour : hour + 12;\n } else if (meridiem === 'sanje') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'rati';\n } else if (hour < 12) {\n return 'sokallim';\n } else if (hour < 16) {\n return 'donparam';\n } else if (hour < 20) {\n return 'sanje';\n } else {\n return 'rati';\n }\n },\n });\n\n return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCh = moment.defineLocale('fr-ch', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enAu = moment.defineLocale('en-au', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//! Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inci\",\n 5: \"'inci\",\n 8: \"'inci\",\n 70: \"'inci\",\n 80: \"'inci\",\n 2: \"'nci\",\n 7: \"'nci\",\n 20: \"'nci\",\n 50: \"'nci\",\n 3: \"'üncü\",\n 4: \"'üncü\",\n 100: \"'üncü\",\n 6: \"'ncı\",\n 9: \"'uncu\",\n 10: \"'uncu\",\n 30: \"'uncu\",\n 60: \"'ıncı\",\n 90: \"'ıncı\",\n };\n\n var tr = moment.defineLocale('tr', {\n months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n '_'\n ),\n monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n '_'\n ),\n weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'öö' : 'ÖÖ';\n } else {\n return isLower ? 'ös' : 'ÖS';\n }\n },\n meridiemParse: /öö|ÖÖ|ös|ÖS/,\n isPM: function (input) {\n return input === 'ös' || input === 'ÖS';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün saat] LT',\n nextDay: '[yarın saat] LT',\n nextWeek: '[gelecek] dddd [saat] LT',\n lastDay: '[dün] LT',\n lastWeek: '[geçen] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s sonra',\n past: '%s önce',\n s: 'birkaç saniye',\n ss: '%d saniye',\n m: 'bir dakika',\n mm: '%d dakika',\n h: 'bir saat',\n hh: '%d saat',\n d: 'bir gün',\n dd: '%d gün',\n w: 'bir hafta',\n ww: '%d hafta',\n M: 'bir ay',\n MM: '%d ay',\n y: 'bir yıl',\n yy: '%d yıl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'ıncı\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tr;\n\n})));\n","// Exports the \"visualblocks\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/visualblocks')\n// ES2015:\n// import 'tinymce/plugins/visualblocks'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var da = moment.defineLocale('da', {\n months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'på dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[i] dddd[s kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'få sekunder',\n ss: '%d sekunder',\n m: 'et minut',\n mm: '%d minutter',\n h: 'en time',\n hh: '%d timer',\n d: 'en dag',\n dd: '%d dage',\n M: 'en måned',\n MM: '%d måneder',\n y: 'et år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tlPh = moment.defineLocale('tl-ph', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlPh;\n\n})));\n","(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","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eu = moment.defineLocale('eu', {\n months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n '_'\n ),\n monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n '_'\n ),\n weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY[ko] MMMM[ren] D[a]',\n LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n l: 'YYYY-M-D',\n ll: 'YYYY[ko] MMM D[a]',\n lll: 'YYYY[ko] MMM D[a] HH:mm',\n llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n },\n calendar: {\n sameDay: '[gaur] LT[etan]',\n nextDay: '[bihar] LT[etan]',\n nextWeek: 'dddd LT[etan]',\n lastDay: '[atzo] LT[etan]',\n lastWeek: '[aurreko] dddd LT[etan]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s barru',\n past: 'duela %s',\n s: 'segundo batzuk',\n ss: '%d segundo',\n m: 'minutu bat',\n mm: '%d minutu',\n h: 'ordu bat',\n hh: '%d ordu',\n d: 'egun bat',\n dd: '%d egun',\n M: 'hilabete bat',\n MM: '%d hilabete',\n y: 'urte bat',\n yy: '%d urte',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var th = moment.defineLocale('th', {\n months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n '_'\n ),\n monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY เวลา H:mm',\n LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n },\n meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n isPM: function (input) {\n return input === 'หลังเที่ยง';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ก่อนเที่ยง';\n } else {\n return 'หลังเที่ยง';\n }\n },\n calendar: {\n sameDay: '[วันนี้ เวลา] LT',\n nextDay: '[พรุ่งนี้ เวลา] LT',\n nextWeek: 'dddd[หน้า เวลา] LT',\n lastDay: '[เมื่อวานนี้ เวลา] LT',\n lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'อีก %s',\n past: '%sที่แล้ว',\n s: 'ไม่กี่วินาที',\n ss: '%d วินาที',\n m: '1 นาที',\n mm: '%d นาที',\n h: '1 ชั่วโมง',\n hh: '%d ชั่วโมง',\n d: '1 วัน',\n dd: '%d วัน',\n w: '1 สัปดาห์',\n ww: '%d สัปดาห์',\n M: '1 เดือน',\n MM: '%d เดือน',\n y: '1 ปี',\n yy: '%d ปี',\n },\n });\n\n return th;\n\n})));\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['секунда', 'секунде', 'секунди'],\n m: ['један минут', 'једне минуте'],\n mm: ['минут', 'минуте', 'минута'],\n h: ['један сат', 'једног сата'],\n hh: ['сат', 'сата', 'сати'],\n dd: ['дан', 'дана', 'дана'],\n MM: ['месец', 'месеца', 'месеци'],\n yy: ['година', 'године', 'година'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var srCyrl = moment.defineLocale('sr-cyrl', {\n months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n '_'\n ),\n monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[данас у] LT',\n nextDay: '[сутра у] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[у] [недељу] [у] LT';\n case 3:\n return '[у] [среду] [у] LT';\n case 6:\n return '[у] [суботу] [у] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[у] dddd [у] LT';\n }\n },\n lastDay: '[јуче у] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[прошле] [недеље] [у] LT',\n '[прошлог] [понедељка] [у] LT',\n '[прошлог] [уторка] [у] LT',\n '[прошле] [среде] [у] LT',\n '[прошлог] [четвртка] [у] LT',\n '[прошлог] [петка] [у] LT',\n '[прошле] [суботе] [у] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пре %s',\n s: 'неколико секунди',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'дан',\n dd: translator.translate,\n M: 'месец',\n MM: translator.translate,\n y: 'годину',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return srCyrl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ocLnc = moment.defineLocale('oc-lnc', {\n months: {\n standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n '_'\n ),\n format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: '[uèi a] LT',\n nextDay: '[deman a] LT',\n nextWeek: 'dddd [a] LT',\n lastDay: '[ièr a] LT',\n lastWeek: 'dddd [passat a] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'unas segondas',\n ss: '%d segondas',\n m: 'una minuta',\n mm: '%d minutas',\n h: 'una ora',\n hh: '%d oras',\n d: 'un jorn',\n dd: '%d jorns',\n M: 'un mes',\n MM: '%d meses',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4,\n },\n });\n\n return ocLnc;\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","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mt = moment.defineLocale('mt', {\n months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n '_'\n ),\n weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Illum fil-]LT',\n nextDay: '[Għada fil-]LT',\n nextWeek: 'dddd [fil-]LT',\n lastDay: '[Il-bieraħ fil-]LT',\n lastWeek: 'dddd [li għadda] [fil-]LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'f’ %s',\n past: '%s ilu',\n s: 'ftit sekondi',\n ss: '%d sekondi',\n m: 'minuta',\n mm: '%d minuti',\n h: 'siegħa',\n hh: '%d siegħat',\n d: 'ġurnata',\n dd: '%d ġranet',\n M: 'xahar',\n MM: '%d xhur',\n y: 'sena',\n yy: '%d sni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Lybia) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '1',\n 2: '2',\n 3: '3',\n 4: '4',\n 5: '5',\n 6: '6',\n 7: '7',\n 8: '8',\n 9: '9',\n 0: '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var arLy = moment.defineLocale('ar-ly', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arLy;\n\n})));\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n dd: 'дзень_дні_дзён',\n MM: 'месяц_месяцы_месяцаў',\n yy: 'год_гады_гадоў',\n };\n if (key === 'm') {\n return withoutSuffix ? 'хвіліна' : 'хвіліну';\n } else if (key === 'h') {\n return withoutSuffix ? 'гадзіна' : 'гадзіну';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n\n var be = moment.defineLocale('be', {\n months: {\n format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n '_'\n ),\n standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n '_'\n ),\n },\n monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(\n '_'\n ),\n weekdays: {\n format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n '_'\n ),\n standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n '_'\n ),\n isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n },\n weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., HH:mm',\n LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n },\n calendar: {\n sameDay: '[Сёння ў] LT',\n nextDay: '[Заўтра ў] LT',\n lastDay: '[Учора ў] LT',\n nextWeek: function () {\n return '[У] dddd [ў] LT';\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 5:\n case 6:\n return '[У мінулую] dddd [ў] LT';\n case 1:\n case 2:\n case 4:\n return '[У мінулы] dddd [ў] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'праз %s',\n past: '%s таму',\n s: 'некалькі секунд',\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithPlural,\n hh: relativeTimeWithPlural,\n d: 'дзень',\n dd: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночы|раніцы|дня|вечара/,\n isPM: function (input) {\n return /^(дня|вечара)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночы';\n } else if (hour < 12) {\n return 'раніцы';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечара';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n case 'w':\n case 'W':\n return (number % 10 === 2 || number % 10 === 3) &&\n number % 100 !== 12 &&\n number % 100 !== 13\n ? number + '-і'\n : number + '-ы';\n case 'D':\n return number + '-га';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ka = moment.defineLocale('ka', {\n months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n '_'\n ),\n monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n weekdays: {\n standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n '_'\n ),\n format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n '_'\n ),\n isFormat: /(წინა|შემდეგ)/,\n },\n weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[დღეს] LT[-ზე]',\n nextDay: '[ხვალ] LT[-ზე]',\n lastDay: '[გუშინ] LT[-ზე]',\n nextWeek: '[შემდეგ] dddd LT[-ზე]',\n lastWeek: '[წინა] dddd LT-ზე',\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (\n $0,\n $1,\n $2\n ) {\n return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n });\n },\n past: function (s) {\n if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n return s.replace(/(ი|ე)$/, 'ის წინ');\n }\n if (/წელი/.test(s)) {\n return s.replace(/წელი$/, 'წლის წინ');\n }\n return s;\n },\n s: 'რამდენიმე წამი',\n ss: '%d წამი',\n m: 'წუთი',\n mm: '%d წუთი',\n h: 'საათი',\n hh: '%d საათი',\n d: 'დღე',\n dd: '%d დღე',\n M: 'თვე',\n MM: '%d თვე',\n y: 'წელი',\n yy: '%d წელი',\n },\n dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n ordinal: function (number) {\n if (number === 0) {\n return number;\n }\n if (number === 1) {\n return number + '-ლი';\n }\n if (\n number < 20 ||\n (number <= 100 && number % 20 === 0) ||\n number % 100 === 0\n ) {\n return 'მე-' + number;\n }\n return number + '-ე';\n },\n week: {\n dow: 1,\n doy: 7,\n },\n });\n\n return ka;\n\n})));\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee \n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ko = moment.defineLocale('ko', {\n months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n '_'\n ),\n weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'YYYY.MM.DD.',\n LL: 'YYYY년 MMMM D일',\n LLL: 'YYYY년 MMMM D일 A h:mm',\n LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n l: 'YYYY.MM.DD.',\n ll: 'YYYY년 MMMM D일',\n lll: 'YYYY년 MMMM D일 A h:mm',\n llll: 'YYYY년 MMMM D일 dddd A h:mm',\n },\n calendar: {\n sameDay: '오늘 LT',\n nextDay: '내일 LT',\n nextWeek: 'dddd LT',\n lastDay: '어제 LT',\n lastWeek: '지난주 dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s 후',\n past: '%s 전',\n s: '몇 초',\n ss: '%d초',\n m: '1분',\n mm: '%d분',\n h: '한 시간',\n hh: '%d시간',\n d: '하루',\n dd: '%d일',\n M: '한 달',\n MM: '%d달',\n y: '일 년',\n yy: '%d년',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '일';\n case 'M':\n return number + '월';\n case 'w':\n case 'W':\n return number + '주';\n default:\n return number;\n }\n },\n meridiemParse: /오전|오후/,\n isPM: function (token) {\n return token === '오후';\n },\n meridiem: function (hour, minute, isUpper) {\n return hour < 12 ? '오전' : '오후';\n },\n });\n\n return ko;\n\n})));\n","(function () {\nvar lists = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var isTextNode = function (node) {\n return node && node.nodeType === 3;\n };\n var isListNode = function (node) {\n return node && /^(OL|UL|DL)$/.test(node.nodeName);\n };\n var isOlUlNode = function (node) {\n return node && /^(OL|UL)$/.test(node.nodeName);\n };\n var isListItemNode = function (node) {\n return node && /^(LI|DT|DD)$/.test(node.nodeName);\n };\n var isDlItemNode = function (node) {\n return node && /^(DT|DD)$/.test(node.nodeName);\n };\n var isTableCellNode = function (node) {\n return node && /^(TH|TD)$/.test(node.nodeName);\n };\n var isBr = function (node) {\n return node && node.nodeName === 'BR';\n };\n var isFirstChild = function (node) {\n return node.parentNode.firstChild === node;\n };\n var isLastChild = function (node) {\n return node.parentNode.lastChild === node;\n };\n var isTextBlock = function (editor, node) {\n return node && !!editor.schema.getTextBlockElements()[node.nodeName];\n };\n var isBlock = function (node, blockElements) {\n return node && node.nodeName in blockElements;\n };\n var isBogusBr = function (dom, node) {\n if (!isBr(node)) {\n return false;\n }\n if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {\n return true;\n }\n return false;\n };\n var isEmpty = function (dom, elm, keepBookmarks) {\n var empty = dom.isEmpty(elm);\n if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {\n return false;\n }\n return empty;\n };\n var isChildOfBody = function (dom, elm) {\n return dom.isChildOf(elm, dom.getRoot());\n };\n var NodeType = {\n isTextNode: isTextNode,\n isListNode: isListNode,\n isOlUlNode: isOlUlNode,\n isDlItemNode: isDlItemNode,\n isListItemNode: isListItemNode,\n isTableCellNode: isTableCellNode,\n isBr: isBr,\n isFirstChild: isFirstChild,\n isLastChild: isLastChild,\n isTextBlock: isTextBlock,\n isBlock: isBlock,\n isBogusBr: isBogusBr,\n isEmpty: isEmpty,\n isChildOfBody: isChildOfBody\n };\n\n var getNormalizedPoint = function (container, offset) {\n if (NodeType.isTextNode(container)) {\n return {\n container: container,\n offset: offset\n };\n }\n var node = global$1.getNode(container, offset);\n if (NodeType.isTextNode(node)) {\n return {\n container: node,\n offset: offset >= container.childNodes.length ? node.data.length : 0\n };\n } else if (node.previousSibling && NodeType.isTextNode(node.previousSibling)) {\n return {\n container: node.previousSibling,\n offset: node.previousSibling.data.length\n };\n } else if (node.nextSibling && NodeType.isTextNode(node.nextSibling)) {\n return {\n container: node.nextSibling,\n offset: 0\n };\n }\n return {\n container: container,\n offset: offset\n };\n };\n var normalizeRange = function (rng) {\n var outRng = rng.cloneRange();\n var rangeStart = getNormalizedPoint(rng.startContainer, rng.startOffset);\n outRng.setStart(rangeStart.container, rangeStart.offset);\n var rangeEnd = getNormalizedPoint(rng.endContainer, rng.endOffset);\n outRng.setEnd(rangeEnd.container, rangeEnd.offset);\n return outRng;\n };\n var Range = {\n getNormalizedPoint: getNormalizedPoint,\n normalizeRange: normalizeRange\n };\n\n var DOM = global$6.DOM;\n var createBookmark = function (rng) {\n var bookmark = {};\n var setupEndPoint = function (start) {\n var offsetNode, container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });\n if (container.hasChildNodes()) {\n offset = Math.min(offset, container.childNodes.length - 1);\n if (start) {\n container.insertBefore(offsetNode, container.childNodes[offset]);\n } else {\n DOM.insertAfter(offsetNode, container.childNodes[offset]);\n }\n } else {\n container.appendChild(offsetNode);\n }\n container = offsetNode;\n offset = 0;\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n };\n setupEndPoint(true);\n if (!rng.collapsed) {\n setupEndPoint();\n }\n return bookmark;\n };\n var resolveBookmark = function (bookmark) {\n function restoreEndPoint(start) {\n var container, offset, node;\n var nodeIndex = function (container) {\n var node = container.parentNode.firstChild, idx = 0;\n while (node) {\n if (node === container) {\n return idx;\n }\n if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {\n idx++;\n }\n node = node.nextSibling;\n }\n return -1;\n };\n container = node = bookmark[start ? 'startContainer' : 'endContainer'];\n offset = bookmark[start ? 'startOffset' : 'endOffset'];\n if (!container) {\n return;\n }\n if (container.nodeType === 1) {\n offset = nodeIndex(container);\n container = container.parentNode;\n DOM.remove(node);\n if (!container.hasChildNodes() && DOM.isBlock(container)) {\n container.appendChild(DOM.create('br'));\n }\n }\n bookmark[start ? 'startContainer' : 'endContainer'] = container;\n bookmark[start ? 'startOffset' : 'endOffset'] = offset;\n }\n restoreEndPoint(true);\n restoreEndPoint();\n var rng = DOM.createRng();\n rng.setStart(bookmark.startContainer, bookmark.startOffset);\n if (bookmark.endContainer) {\n rng.setEnd(bookmark.endContainer, bookmark.endOffset);\n }\n return Range.normalizeRange(rng);\n };\n var Bookmark = {\n createBookmark: createBookmark,\n resolveBookmark: resolveBookmark\n };\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativePush = Array.prototype.push;\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var groupBy = function (xs, f) {\n if (xs.length === 0) {\n return [];\n } else {\n var wasType = f(xs[0]);\n var r = [];\n var group = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n var type = f(x);\n if (type !== wasType) {\n r.push(group);\n group = [];\n }\n wasType = type;\n group.push(x);\n }\n if (group.length !== 0) {\n r.push(group);\n }\n return r;\n }\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var head = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[0]);\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var htmlElement = function (scope) {\n return Global$1.getOrDie('HTMLElement', scope);\n };\n var isPrototypeOf = function (x) {\n var scope = resolve('ownerDocument.defaultView', x);\n return htmlElement(scope).prototype.isPrototypeOf(x);\n };\n var HTMLElement = { isPrototypeOf: isPrototypeOf };\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var getParentList = function (editor) {\n var selectionStart = editor.selection.getStart(true);\n return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));\n };\n var isParentListSelected = function (parentList, selectedBlocks) {\n return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;\n };\n var findSubLists = function (parentList) {\n return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {\n return NodeType.isListNode(elm);\n });\n };\n var getSelectedSubLists = function (editor) {\n var parentList = getParentList(editor);\n var selectedBlocks = editor.selection.getSelectedBlocks();\n if (isParentListSelected(parentList, selectedBlocks)) {\n return findSubLists(parentList);\n } else {\n return global$5.grep(selectedBlocks, function (elm) {\n return NodeType.isListNode(elm) && parentList !== elm;\n });\n }\n };\n var findParentListItemsNodes = function (editor, elms) {\n var listItemsElms = global$5.map(elms, function (elm) {\n var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));\n return parentLi ? parentLi : elm;\n });\n return global$7.unique(listItemsElms);\n };\n var getSelectedListItems = function (editor) {\n var selectedBlocks = editor.selection.getSelectedBlocks();\n return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {\n return NodeType.isListItemNode(block);\n });\n };\n var getSelectedDlItems = function (editor) {\n return filter(getSelectedListItems(editor), NodeType.isDlItemNode);\n };\n var getClosestListRootElm = function (editor, elm) {\n var parentTableCell = editor.dom.getParents(elm, 'TD,TH');\n var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();\n return root;\n };\n var findLastParentListNode = function (editor, elm) {\n var parentLists = editor.dom.getParents(elm, 'ol,ul', getClosestListRootElm(editor, elm));\n return last(parentLists);\n };\n var getSelectedLists = function (editor) {\n var firstList = findLastParentListNode(editor, editor.selection.getStart());\n var subsequentLists = filter(editor.selection.getSelectedBlocks(), NodeType.isOlUlNode);\n return firstList.toArray().concat(subsequentLists);\n };\n var getSelectedListRoots = function (editor) {\n var selectedLists = getSelectedLists(editor);\n return getUniqueListRoots(editor, selectedLists);\n };\n var getUniqueListRoots = function (editor, lists) {\n var listRoots = map(lists, function (list) {\n return findLastParentListNode(editor, list).getOr(list);\n });\n return global$7.unique(listRoots);\n };\n var isList = function (editor) {\n var list = getParentList(editor);\n return HTMLElement.isPrototypeOf(list);\n };\n var Selection = {\n isList: isList,\n getParentList: getParentList,\n getSelectedSubLists: getSelectedSubLists,\n getSelectedListItems: getSelectedListItems,\n getClosestListRootElm: getClosestListRootElm,\n getSelectedDlItems: getSelectedDlItems,\n getSelectedListRoots: getSelectedListRoots\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var lift2 = function (oa, ob, f) {\n return oa.isSome() && ob.isSome() ? Option.some(f(oa.getOrDie(), ob.getOrDie())) : Option.none();\n };\n\n var fromElements = function (elements, scope) {\n var doc = scope || domGlobals.document;\n var fragment = doc.createDocumentFragment();\n each(elements, function (element) {\n fragment.appendChild(element.dom());\n });\n return Element.fromDom(fragment);\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var ELEMENT$1 = ELEMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var lastChild = function (element) {\n return child(element, element.dom().childNodes.length - 1);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var remove = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isElement = isType$1(ELEMENT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var set = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var mutate = function (original, tag) {\n var nu = shallowAs(original, tag);\n before(original, nu);\n var children$1 = children(original);\n append$1(nu, children$1);\n remove(original);\n return nu;\n };\n\n var joinSegment = function (parent, child) {\n append(parent.item, child.list);\n };\n var joinSegments = function (segments) {\n for (var i = 1; i < segments.length; i++) {\n joinSegment(segments[i - 1], segments[i]);\n }\n };\n var appendSegments = function (head$1, tail) {\n lift2(last(head$1), head(tail), joinSegment);\n };\n var createSegment = function (scope, listType) {\n var segment = {\n list: Element.fromTag(listType, scope),\n item: Element.fromTag('li', scope)\n };\n append(segment.list, segment.item);\n return segment;\n };\n var createSegments = function (scope, entry, size) {\n var segments = [];\n for (var i = 0; i < size; i++) {\n segments.push(createSegment(scope, entry.listType));\n }\n return segments;\n };\n var populateSegments = function (segments, entry) {\n for (var i = 0; i < segments.length - 1; i++) {\n set(segments[i].item, 'list-style-type', 'none');\n }\n last(segments).each(function (segment) {\n setAll(segment.list, entry.listAttributes);\n setAll(segment.item, entry.itemAttributes);\n append$1(segment.item, entry.content);\n });\n };\n var normalizeSegment = function (segment, entry) {\n if (name(segment.list) !== entry.listType) {\n segment.list = mutate(segment.list, entry.listType);\n }\n setAll(segment.list, entry.listAttributes);\n };\n var createItem = function (scope, attr, content) {\n var item = Element.fromTag('li', scope);\n setAll(item, attr);\n append$1(item, content);\n return item;\n };\n var appendItem = function (segment, item) {\n append(segment.list, item);\n segment.item = item;\n };\n var writeShallow = function (scope, cast, entry) {\n var newCast = cast.slice(0, entry.depth);\n last(newCast).each(function (segment) {\n var item = createItem(scope, entry.itemAttributes, entry.content);\n appendItem(segment, item);\n normalizeSegment(segment, entry);\n });\n return newCast;\n };\n var writeDeep = function (scope, cast, entry) {\n var segments = createSegments(scope, entry, entry.depth - cast.length);\n joinSegments(segments);\n populateSegments(segments, entry);\n appendSegments(cast, segments);\n return cast.concat(segments);\n };\n var composeList = function (scope, entries) {\n var cast = foldl(entries, function (cast, entry) {\n return entry.depth > cast.length ? writeDeep(scope, cast, entry) : writeShallow(scope, cast, entry);\n }, []);\n return head(cast).map(function (segment) {\n return segment.list;\n });\n };\n\n var isList$1 = function (el) {\n return is$1(el, 'OL,UL');\n };\n var hasFirstChildList = function (el) {\n return firstChild(el).map(isList$1).getOr(false);\n };\n var hasLastChildList = function (el) {\n return lastChild(el).map(isList$1).getOr(false);\n };\n\n var isIndented = function (entry) {\n return entry.depth > 0;\n };\n var isSelected = function (entry) {\n return entry.isSelected;\n };\n var cloneItemContent = function (li) {\n var children$1 = children(li);\n var content = hasLastChildList(li) ? children$1.slice(0, -1) : children$1;\n return map(content, deep);\n };\n var createEntry = function (li, depth, isSelected) {\n return parent(li).filter(isElement).map(function (list) {\n return {\n depth: depth,\n isSelected: isSelected,\n content: cloneItemContent(li),\n itemAttributes: clone(li),\n listAttributes: clone(list),\n listType: name(list)\n };\n });\n };\n\n var indentEntry = function (indentation, entry) {\n switch (indentation) {\n case 'Indent':\n entry.depth++;\n break;\n case 'Outdent':\n entry.depth--;\n break;\n case 'Flatten':\n entry.depth = 0;\n }\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var cloneListProperties = function (target, source) {\n target.listType = source.listType;\n target.listAttributes = merge({}, source.listAttributes);\n };\n var previousSiblingEntry = function (entries, start) {\n var depth = entries[start].depth;\n for (var i = start - 1; i >= 0; i--) {\n if (entries[i].depth === depth) {\n return Option.some(entries[i]);\n }\n if (entries[i].depth < depth) {\n break;\n }\n }\n return Option.none();\n };\n var normalizeEntries = function (entries) {\n each(entries, function (entry, i) {\n previousSiblingEntry(entries, i).each(function (matchingEntry) {\n cloneListProperties(entry, matchingEntry);\n });\n });\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var parseItem = function (depth, itemSelection, selectionState, item) {\n return firstChild(item).filter(isList$1).fold(function () {\n itemSelection.each(function (selection) {\n if (eq(selection.start, item)) {\n selectionState.set(true);\n }\n });\n var currentItemEntry = createEntry(item, depth, selectionState.get());\n itemSelection.each(function (selection) {\n if (eq(selection.end, item)) {\n selectionState.set(false);\n }\n });\n var childListEntries = lastChild(item).filter(isList$1).map(function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n }).getOr([]);\n return currentItemEntry.toArray().concat(childListEntries);\n }, function (list) {\n return parseList(depth, itemSelection, selectionState, list);\n });\n };\n var parseList = function (depth, itemSelection, selectionState, list) {\n return bind(children(list), function (element) {\n var parser = isList$1(element) ? parseList : parseItem;\n var newDepth = depth + 1;\n return parser(newDepth, itemSelection, selectionState, element);\n });\n };\n var parseLists = function (lists, itemSelection) {\n var selectionState = Cell(false);\n var initialDepth = 0;\n return map(lists, function (list) {\n return {\n sourceList: list,\n entries: parseList(initialDepth, itemSelection, selectionState, list)\n };\n });\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var createTextBlock = function (editor, contentNode) {\n var dom = editor.dom;\n var blockElements = editor.schema.getBlockElements();\n var fragment = dom.createFragment();\n var node, textBlock, blockName, hasContentNode;\n if (editor.settings.forced_root_block) {\n blockName = editor.settings.forced_root_block;\n }\n if (blockName) {\n textBlock = dom.create(blockName);\n if (textBlock.tagName === editor.settings.forced_root_block) {\n dom.setAttribs(textBlock, editor.settings.forced_root_block_attrs);\n }\n if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {\n fragment.appendChild(textBlock);\n }\n }\n if (contentNode) {\n while (node = contentNode.firstChild) {\n var nodeName = node.nodeName;\n if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {\n hasContentNode = true;\n }\n if (NodeType.isBlock(node, blockElements)) {\n fragment.appendChild(node);\n textBlock = null;\n } else {\n if (blockName) {\n if (!textBlock) {\n textBlock = dom.create(blockName);\n fragment.appendChild(textBlock);\n }\n textBlock.appendChild(node);\n } else {\n fragment.appendChild(node);\n }\n }\n }\n }\n if (!editor.settings.forced_root_block) {\n fragment.appendChild(dom.create('br'));\n } else {\n if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {\n textBlock.appendChild(dom.create('br', { 'data-mce-bogus': '1' }));\n }\n }\n return fragment;\n };\n\n var outdentedComposer = function (editor, entries) {\n return map(entries, function (entry) {\n var content = fromElements(entry.content);\n return Element.fromDom(createTextBlock(editor, content.dom()));\n });\n };\n var indentedComposer = function (editor, entries) {\n normalizeEntries(entries);\n return composeList(editor.contentDocument, entries).toArray();\n };\n var composeEntries = function (editor, entries) {\n return bind(groupBy(entries, isIndented), function (entries) {\n var groupIsIndented = head(entries).map(isIndented).getOr(false);\n return groupIsIndented ? indentedComposer(editor, entries) : outdentedComposer(editor, entries);\n });\n };\n var indentSelectedEntries = function (entries, indentation) {\n each(filter(entries, isSelected), function (entry) {\n return indentEntry(indentation, entry);\n });\n };\n var getItemSelection = function (editor) {\n var selectedListItems = map(Selection.getSelectedListItems(editor), Element.fromDom);\n return lift2(find(selectedListItems, not(hasFirstChildList)), find(reverse(selectedListItems), not(hasFirstChildList)), function (start, end) {\n return {\n start: start,\n end: end\n };\n });\n };\n var listsIndentation = function (editor, lists, indentation) {\n var entrySets = parseLists(lists, getItemSelection(editor));\n each(entrySets, function (entrySet) {\n indentSelectedEntries(entrySet.entries, indentation);\n before$1(entrySet.sourceList, composeEntries(editor, entrySet.entries));\n remove(entrySet.sourceList);\n });\n };\n\n var DOM$1 = global$6.DOM;\n var splitList = function (editor, ul, li) {\n var tmpRng, fragment, bookmarks, node, newBlock;\n var removeAndKeepBookmarks = function (targetNode) {\n global$5.each(bookmarks, function (node) {\n targetNode.parentNode.insertBefore(node, li.parentNode);\n });\n DOM$1.remove(targetNode);\n };\n bookmarks = DOM$1.select('span[data-mce-type=\"bookmark\"]', ul);\n newBlock = createTextBlock(editor, li);\n tmpRng = DOM$1.createRng();\n tmpRng.setStartAfter(li);\n tmpRng.setEndAfter(ul);\n fragment = tmpRng.extractContents();\n for (node = fragment.firstChild; node; node = node.firstChild) {\n if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {\n DOM$1.remove(node);\n break;\n }\n }\n if (!editor.dom.isEmpty(fragment)) {\n DOM$1.insertAfter(fragment, ul);\n }\n DOM$1.insertAfter(newBlock, ul);\n if (NodeType.isEmpty(editor.dom, li.parentNode)) {\n removeAndKeepBookmarks(li.parentNode);\n }\n DOM$1.remove(li);\n if (NodeType.isEmpty(editor.dom, ul)) {\n DOM$1.remove(ul);\n }\n };\n var SplitList = { splitList: splitList };\n\n var outdentDlItem = function (editor, item) {\n if (is$1(item, 'dd')) {\n mutate(item, 'dt');\n } else if (is$1(item, 'dt')) {\n parent(item).each(function (dl) {\n return SplitList.splitList(editor, dl.dom(), item.dom());\n });\n }\n };\n var indentDlItem = function (item) {\n if (is$1(item, 'dt')) {\n mutate(item, 'dd');\n }\n };\n var dlIndentation = function (editor, indentation, dlItems) {\n if (indentation === 'Indent') {\n each(dlItems, indentDlItem);\n } else {\n each(dlItems, function (item) {\n return outdentDlItem(editor, item);\n });\n }\n };\n\n var selectionIndentation = function (editor, indentation) {\n var lists = map(Selection.getSelectedListRoots(editor), Element.fromDom);\n var dlItems = map(Selection.getSelectedDlItems(editor), Element.fromDom);\n var isHandled = false;\n if (lists.length || dlItems.length) {\n var bookmark = editor.selection.getBookmark();\n listsIndentation(editor, lists, indentation);\n dlIndentation(editor, indentation, dlItems);\n editor.selection.moveToBookmark(bookmark);\n editor.selection.setRng(Range.normalizeRange(editor.selection.getRng()));\n editor.nodeChanged();\n isHandled = true;\n }\n return isHandled;\n };\n var indentListSelection = function (editor) {\n return selectionIndentation(editor, 'Indent');\n };\n var outdentListSelection = function (editor) {\n return selectionIndentation(editor, 'Outdent');\n };\n var flattenListSelection = function (editor) {\n return selectionIndentation(editor, 'Flatten');\n };\n\n var updateListStyle = function (dom, el, detail) {\n var type = detail['list-style-type'] ? detail['list-style-type'] : null;\n dom.setStyle(el, 'list-style-type', type);\n };\n var setAttribs = function (elm, attrs) {\n global$5.each(attrs, function (value, key) {\n elm.setAttribute(key, value);\n });\n };\n var updateListAttrs = function (dom, el, detail) {\n setAttribs(el, detail['list-attributes']);\n global$5.each(dom.select('li', el), function (li) {\n setAttribs(li, detail['list-item-attributes']);\n });\n };\n var updateListWithDetails = function (dom, el, detail) {\n updateListStyle(dom, el, detail);\n updateListAttrs(dom, el, detail);\n };\n var removeStyles = function (dom, element, styles) {\n global$5.each(styles, function (style) {\n var _a;\n return dom.setStyle(element, (_a = {}, _a[style] = '', _a));\n });\n };\n var getEndPointNode = function (editor, rng, start, root) {\n var container, offset;\n container = rng[start ? 'startContainer' : 'endContainer'];\n offset = rng[start ? 'startOffset' : 'endOffset'];\n if (container.nodeType === 1) {\n container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;\n }\n if (!start && NodeType.isBr(container.nextSibling)) {\n container = container.nextSibling;\n }\n while (container.parentNode !== root) {\n if (NodeType.isTextBlock(editor, container)) {\n return container;\n }\n if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {\n return container;\n }\n container = container.parentNode;\n }\n return container;\n };\n var getSelectedTextBlocks = function (editor, rng, root) {\n var textBlocks = [], dom = editor.dom;\n var startNode = getEndPointNode(editor, rng, true, root);\n var endNode = getEndPointNode(editor, rng, false, root);\n var block;\n var siblings = [];\n for (var node = startNode; node; node = node.nextSibling) {\n siblings.push(node);\n if (node === endNode) {\n break;\n }\n }\n global$5.each(siblings, function (node) {\n if (NodeType.isTextBlock(editor, node)) {\n textBlocks.push(node);\n block = null;\n return;\n }\n if (dom.isBlock(node) || NodeType.isBr(node)) {\n if (NodeType.isBr(node)) {\n dom.remove(node);\n }\n block = null;\n return;\n }\n var nextSibling = node.nextSibling;\n if (global$4.isBookmarkNode(node)) {\n if (NodeType.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {\n block = null;\n return;\n }\n }\n if (!block) {\n block = dom.create('p');\n node.parentNode.insertBefore(block, node);\n textBlocks.push(block);\n }\n block.appendChild(node);\n });\n return textBlocks;\n };\n var hasCompatibleStyle = function (dom, sib, detail) {\n var sibStyle = dom.getStyle(sib, 'list-style-type');\n var detailStyle = detail ? detail['list-style-type'] : '';\n detailStyle = detailStyle === null ? '' : detailStyle;\n return sibStyle === detailStyle;\n };\n var applyList = function (editor, listName, detail) {\n if (detail === void 0) {\n detail = {};\n }\n var rng = editor.selection.getRng(true);\n var bookmark;\n var listItemName = 'LI';\n var root = Selection.getClosestListRootElm(editor, editor.selection.getStart(true));\n var dom = editor.dom;\n if (dom.getContentEditable(editor.selection.getNode()) === 'false') {\n return;\n }\n listName = listName.toUpperCase();\n if (listName === 'DL') {\n listItemName = 'DT';\n }\n bookmark = Bookmark.createBookmark(rng);\n global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {\n var listBlock, sibling;\n sibling = block.previousSibling;\n if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {\n listBlock = sibling;\n block = dom.rename(block, listItemName);\n sibling.appendChild(block);\n } else {\n listBlock = dom.create(listName);\n block.parentNode.insertBefore(listBlock, block);\n listBlock.appendChild(block);\n block = dom.rename(block, listItemName);\n }\n removeStyles(dom, block, [\n 'margin',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'margin-top',\n 'padding',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'padding-top'\n ]);\n updateListWithDetails(dom, listBlock, detail);\n mergeWithAdjacentLists(editor.dom, listBlock);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n };\n var isValidLists = function (list1, list2) {\n return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;\n };\n var hasSameListStyle = function (dom, list1, list2) {\n var targetStyle = dom.getStyle(list1, 'list-style-type', true);\n var style = dom.getStyle(list2, 'list-style-type', true);\n return targetStyle === style;\n };\n var hasSameClasses = function (elm1, elm2) {\n return elm1.className === elm2.className;\n };\n var shouldMerge = function (dom, list1, list2) {\n return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);\n };\n var mergeWithAdjacentLists = function (dom, listBlock) {\n var sibling, node;\n sibling = listBlock.nextSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.firstChild) {\n listBlock.appendChild(node);\n }\n dom.remove(sibling);\n }\n sibling = listBlock.previousSibling;\n if (shouldMerge(dom, listBlock, sibling)) {\n while (node = sibling.lastChild) {\n listBlock.insertBefore(node, listBlock.firstChild);\n }\n dom.remove(sibling);\n }\n };\n var updateList = function (dom, list, listName, detail) {\n if (list.nodeName !== listName) {\n var newList = dom.rename(list, listName);\n updateListWithDetails(dom, newList, detail);\n } else {\n updateListWithDetails(dom, list, detail);\n }\n };\n var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n global$5.each([parentList].concat(lists), function (elm) {\n updateList(editor.dom, elm, listName, detail);\n });\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var hasListStyleDetail = function (detail) {\n return 'list-style-type' in detail;\n };\n var toggleSingleList = function (editor, parentList, listName, detail) {\n if (parentList === editor.getBody()) {\n return;\n }\n if (parentList) {\n if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {\n flattenListSelection(editor);\n } else {\n var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));\n updateListWithDetails(editor.dom, parentList, detail);\n mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n } else {\n applyList(editor, listName, detail);\n }\n };\n var toggleList = function (editor, listName, detail) {\n var parentList = Selection.getParentList(editor);\n var selectedSubLists = Selection.getSelectedSubLists(editor);\n detail = detail ? detail : {};\n if (parentList && selectedSubLists.length > 0) {\n toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);\n } else {\n toggleSingleList(editor, parentList, listName, detail);\n }\n };\n var ToggleList = {\n toggleList: toggleList,\n mergeWithAdjacentLists: mergeWithAdjacentLists\n };\n\n var DOM$2 = global$6.DOM;\n var normalizeList = function (dom, ul) {\n var sibling;\n var parentNode = ul.parentNode;\n if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n if (NodeType.isEmpty(dom, parentNode)) {\n DOM$2.remove(parentNode);\n }\n } else {\n DOM$2.setStyle(parentNode, 'listStyleType', 'none');\n }\n }\n if (NodeType.isListNode(parentNode)) {\n sibling = parentNode.previousSibling;\n if (sibling && sibling.nodeName === 'LI') {\n sibling.appendChild(ul);\n }\n }\n };\n var normalizeLists = function (dom, element) {\n global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {\n normalizeList(dom, ul);\n });\n };\n var NormalizeLists = {\n normalizeList: normalizeList,\n normalizeLists: normalizeLists\n };\n\n var findNextCaretContainer = function (editor, rng, isForward, root) {\n var node = rng.startContainer;\n var offset = rng.startOffset;\n var nonEmptyBlocks, walker;\n if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {\n return node;\n }\n nonEmptyBlocks = editor.schema.getNonEmptyElements();\n if (node.nodeType === 1) {\n node = global$1.getNode(node, offset);\n }\n walker = new global$2(node, root);\n if (isForward) {\n if (NodeType.isBogusBr(editor.dom, node)) {\n walker.next();\n }\n }\n while (node = walker[isForward ? 'next' : 'prev2']()) {\n if (node.nodeName === 'LI' && !node.hasChildNodes()) {\n return node;\n }\n if (nonEmptyBlocks[node.nodeName]) {\n return node;\n }\n if (node.nodeType === 3 && node.data.length > 0) {\n return node;\n }\n }\n };\n var hasOnlyOneBlockChild = function (dom, elm) {\n var childNodes = elm.childNodes;\n return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);\n };\n var unwrapSingleBlockChild = function (dom, elm) {\n if (hasOnlyOneBlockChild(dom, elm)) {\n dom.remove(elm.firstChild, true);\n }\n };\n var moveChildren = function (dom, fromElm, toElm) {\n var node, targetElm;\n targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;\n unwrapSingleBlockChild(dom, fromElm);\n if (!NodeType.isEmpty(dom, fromElm, true)) {\n while (node = fromElm.firstChild) {\n targetElm.appendChild(node);\n }\n }\n };\n var mergeLiElements = function (dom, fromElm, toElm) {\n var node, listNode;\n var ul = fromElm.parentNode;\n if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {\n return;\n }\n if (NodeType.isListNode(toElm.lastChild)) {\n listNode = toElm.lastChild;\n }\n if (ul === toElm.lastChild) {\n if (NodeType.isBr(ul.previousSibling)) {\n dom.remove(ul.previousSibling);\n }\n }\n node = toElm.lastChild;\n if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {\n dom.remove(node);\n }\n if (NodeType.isEmpty(dom, toElm, true)) {\n dom.$(toElm).empty();\n }\n moveChildren(dom, fromElm, toElm);\n if (listNode) {\n toElm.appendChild(listNode);\n }\n var contains = contains$1(Element.fromDom(toElm), Element.fromDom(fromElm));\n var nestedLists = contains ? dom.getParents(fromElm, NodeType.isListNode, toElm) : [];\n dom.remove(fromElm);\n each(nestedLists, function (list) {\n if (NodeType.isEmpty(dom, list) && list !== dom.getRoot()) {\n dom.remove(list);\n }\n });\n };\n var mergeIntoEmptyLi = function (editor, fromLi, toLi) {\n editor.dom.$(toLi).empty();\n mergeLiElements(editor.dom, fromLi, toLi);\n editor.selection.setCursorLocation(toLi);\n };\n var mergeForward = function (editor, rng, fromLi, toLi) {\n var dom = editor.dom;\n if (dom.isEmpty(toLi)) {\n mergeIntoEmptyLi(editor, fromLi, toLi);\n } else {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(dom, fromLi, toLi);\n editor.selection.setRng(Bookmark.resolveBookmark(bookmark));\n }\n };\n var mergeBackward = function (editor, rng, fromLi, toLi) {\n var bookmark = Bookmark.createBookmark(rng);\n mergeLiElements(editor.dom, fromLi, toLi);\n var resolvedBookmark = Bookmark.resolveBookmark(bookmark);\n editor.selection.setRng(resolvedBookmark);\n };\n var backspaceDeleteFromListToListCaret = function (editor, isForward) {\n var dom = editor.dom, selection = editor.selection;\n var selectionStartElm = selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var li = dom.getParent(selection.getStart(), 'LI', root);\n var ul, rng, otherLi;\n if (li) {\n ul = li.parentNode;\n if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {\n return true;\n }\n rng = Range.normalizeRange(selection.getRng(true));\n otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi && otherLi !== li) {\n if (isForward) {\n mergeForward(editor, rng, otherLi, li);\n } else {\n mergeBackward(editor, rng, li, otherLi);\n }\n return true;\n } else if (!otherLi) {\n if (!isForward) {\n flattenListSelection(editor);\n return true;\n }\n }\n }\n return false;\n };\n var removeBlock = function (dom, block, root) {\n var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);\n dom.remove(block);\n if (parentBlock && dom.isEmpty(parentBlock)) {\n dom.remove(parentBlock);\n }\n };\n var backspaceDeleteIntoListCaret = function (editor, isForward) {\n var dom = editor.dom;\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var block = dom.getParent(selectionStartElm, dom.isBlock, root);\n if (block && dom.isEmpty(block)) {\n var rng = Range.normalizeRange(editor.selection.getRng(true));\n var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);\n if (otherLi_1) {\n editor.undoManager.transact(function () {\n removeBlock(dom, block, root);\n ToggleList.mergeWithAdjacentLists(dom, otherLi_1.parentNode);\n editor.selection.select(otherLi_1, true);\n editor.selection.collapse(isForward);\n });\n return true;\n }\n }\n return false;\n };\n var backspaceDeleteCaret = function (editor, isForward) {\n return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);\n };\n var backspaceDeleteRange = function (editor) {\n var selectionStartElm = editor.selection.getStart();\n var root = Selection.getClosestListRootElm(editor, selectionStartElm);\n var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);\n if (startListParent || Selection.getSelectedListItems(editor).length > 0) {\n editor.undoManager.transact(function () {\n editor.execCommand('Delete');\n NormalizeLists.normalizeLists(editor.dom, editor.getBody());\n });\n return true;\n }\n return false;\n };\n var backspaceDelete = function (editor, isForward) {\n return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);\n };\n var setup = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode === global$3.BACKSPACE) {\n if (backspaceDelete(editor, false)) {\n e.preventDefault();\n }\n } else if (e.keyCode === global$3.DELETE) {\n if (backspaceDelete(editor, true)) {\n e.preventDefault();\n }\n }\n });\n };\n var Delete = {\n setup: setup,\n backspaceDelete: backspaceDelete\n };\n\n var get = function (editor) {\n return {\n backspaceDelete: function (isForward) {\n Delete.backspaceDelete(editor, isForward);\n }\n };\n };\n var Api = { get: get };\n\n var queryListCommandState = function (editor, listName) {\n return function () {\n var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');\n return parentList && parentList.nodeName === listName;\n };\n };\n var register = function (editor) {\n editor.on('BeforeExecCommand', function (e) {\n var cmd = e.command.toLowerCase();\n if (cmd === 'indent') {\n indentListSelection(editor);\n } else if (cmd === 'outdent') {\n outdentListSelection(editor);\n }\n });\n editor.addCommand('InsertUnorderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'UL', detail);\n });\n editor.addCommand('InsertOrderedList', function (ui, detail) {\n ToggleList.toggleList(editor, 'OL', detail);\n });\n editor.addCommand('InsertDefinitionList', function (ui, detail) {\n ToggleList.toggleList(editor, 'DL', detail);\n });\n editor.addCommand('RemoveList', function () {\n flattenListSelection(editor);\n });\n editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));\n editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));\n editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));\n };\n var Commands = { register: register };\n\n var shouldIndentOnTab = function (editor) {\n return editor.getParam('lists_indent_on_tab', true);\n };\n var Settings = { shouldIndentOnTab: shouldIndentOnTab };\n\n var setupTabKey = function (editor) {\n editor.on('keydown', function (e) {\n if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {\n return;\n }\n editor.undoManager.transact(function () {\n if (e.shiftKey ? outdentListSelection(editor) : indentListSelection(editor)) {\n e.preventDefault();\n }\n });\n });\n };\n var setup$1 = function (editor) {\n if (Settings.shouldIndentOnTab(editor)) {\n setupTabKey(editor);\n }\n Delete.setup(editor);\n };\n var Keyboard = { setup: setup$1 };\n\n var findIndex = function (list, predicate) {\n for (var index = 0; index < list.length; index++) {\n var element = list[index];\n if (predicate(element)) {\n return index;\n }\n }\n return -1;\n };\n var listState = function (editor, listName) {\n return function (e) {\n var ctrl = e.control;\n editor.on('NodeChange', function (e) {\n var tableCellIndex = findIndex(e.parents, NodeType.isTableCellNode);\n var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;\n var lists = global$5.grep(parents, NodeType.isListNode);\n ctrl.active(lists.length > 0 && lists[0].nodeName === listName);\n });\n };\n };\n var register$1 = function (editor) {\n var hasPlugin = function (editor, plugin) {\n var plugins = editor.settings.plugins ? editor.settings.plugins : '';\n return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;\n };\n if (!hasPlugin(editor, 'advlist')) {\n editor.addButton('numlist', {\n active: false,\n title: 'Numbered list',\n cmd: 'InsertOrderedList',\n onPostRender: listState(editor, 'OL')\n });\n editor.addButton('bullist', {\n active: false,\n title: 'Bullet list',\n cmd: 'InsertUnorderedList',\n onPostRender: listState(editor, 'UL')\n });\n }\n editor.addButton('indent', {\n icon: 'indent',\n title: 'Increase indent',\n cmd: 'Indent'\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('lists', function (editor) {\n Keyboard.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n return Api.get(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n },\n months = [\n 'کانونی دووەم',\n 'شوبات',\n 'ئازار',\n 'نیسان',\n 'ئایار',\n 'حوزەیران',\n 'تەمموز',\n 'ئاب',\n 'ئەیلوول',\n 'تشرینی یەكەم',\n 'تشرینی دووەم',\n 'كانونی یەکەم',\n ];\n\n var ku = moment.defineLocale('ku', {\n months: months,\n monthsShort: months,\n weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n '_'\n ),\n weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(\n '_'\n ),\n weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /ئێواره‌|به‌یانی/,\n isPM: function (input) {\n return /ئێواره‌/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'به‌یانی';\n } else {\n return 'ئێواره‌';\n }\n },\n calendar: {\n sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n nextDay: '[به‌یانی كاتژمێر] LT',\n nextWeek: 'dddd [كاتژمێر] LT',\n lastDay: '[دوێنێ كاتژمێر] LT',\n lastWeek: 'dddd [كاتژمێر] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'له‌ %s',\n past: '%s',\n s: 'چه‌ند چركه‌یه‌ك',\n ss: 'چركه‌ %d',\n m: 'یه‌ك خوله‌ك',\n mm: '%d خوله‌ك',\n h: 'یه‌ك كاتژمێر',\n hh: '%d كاتژمێر',\n d: 'یه‌ك ڕۆژ',\n dd: '%d ڕۆژ',\n M: 'یه‌ك مانگ',\n MM: '%d مانگ',\n y: 'یه‌ك ساڵ',\n yy: '%d ساڵ',\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return ku;\n\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","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var bs = moment.defineLocale('bs', {\n months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n return '[prošlu] dddd [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundė_sekundžių_sekundes',\n m: 'minutė_minutės_minutę',\n mm: 'minutės_minučių_minutes',\n h: 'valanda_valandos_valandą',\n hh: 'valandos_valandų_valandas',\n d: 'diena_dienos_dieną',\n dd: 'dienos_dienų_dienas',\n M: 'mėnuo_mėnesio_mėnesį',\n MM: 'mėnesiai_mėnesių_mėnesius',\n y: 'metai_metų_metus',\n yy: 'metai_metų_metus',\n };\n function translateSeconds(number, withoutSuffix, key, isFuture) {\n if (withoutSuffix) {\n return 'kelios sekundės';\n } else {\n return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n }\n }\n function translateSingular(number, withoutSuffix, key, isFuture) {\n return withoutSuffix\n ? forms(key)[0]\n : isFuture\n ? forms(key)[1]\n : forms(key)[2];\n }\n function special(number) {\n return number % 10 === 0 || (number > 10 && number < 20);\n }\n function forms(key) {\n return units[key].split('_');\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n if (number === 1) {\n return (\n result + translateSingular(number, withoutSuffix, key[0], isFuture)\n );\n } else if (withoutSuffix) {\n return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n } else {\n if (isFuture) {\n return result + forms(key)[1];\n } else {\n return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n }\n }\n }\n var lt = moment.defineLocale('lt', {\n months: {\n format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n '_'\n ),\n standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n '_'\n ),\n isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n },\n monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n weekdays: {\n format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n '_'\n ),\n standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n '_'\n ),\n isFormat: /dddd HH:mm/,\n },\n weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY [m.] MMMM D [d.]',\n LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n l: 'YYYY-MM-DD',\n ll: 'YYYY [m.] MMMM D [d.]',\n lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n },\n calendar: {\n sameDay: '[Šiandien] LT',\n nextDay: '[Rytoj] LT',\n nextWeek: 'dddd LT',\n lastDay: '[Vakar] LT',\n lastWeek: '[Praėjusį] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'po %s',\n past: 'prieš %s',\n s: translateSeconds,\n ss: translate,\n m: translateSingular,\n mm: translate,\n h: translateSingular,\n hh: translate,\n d: translateSingular,\n dd: translate,\n M: translateSingular,\n MM: translate,\n y: translateSingular,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n ordinal: function (number) {\n return number + '-oji';\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var vi = moment.defineLocale('vi', {\n months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n '_'\n ),\n monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n '_'\n ),\n weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /sa|ch/i,\n isPM: function (input) {\n return /^ch$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'sa' : 'SA';\n } else {\n return isLower ? 'ch' : 'CH';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [năm] YYYY',\n LLL: 'D MMMM [năm] YYYY HH:mm',\n LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n l: 'DD/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hôm nay lúc] LT',\n nextDay: '[Ngày mai lúc] LT',\n nextWeek: 'dddd [tuần tới lúc] LT',\n lastDay: '[Hôm qua lúc] LT',\n lastWeek: 'dddd [tuần trước lúc] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s tới',\n past: '%s trước',\n s: 'vài giây',\n ss: '%d giây',\n m: 'một phút',\n mm: '%d phút',\n h: 'một giờ',\n hh: '%d giờ',\n d: 'một ngày',\n dd: '%d ngày',\n w: 'một tuần',\n ww: '%d tuần',\n M: 'một tháng',\n MM: '%d tháng',\n y: 'một năm',\n yy: '%d năm',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač : https://github.com/miodragnikac\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekund', 'sekunda', 'sekundi'],\n m: ['jedan minut', 'jednog minuta'],\n mm: ['minut', 'minuta', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mjesec', 'mjeseca', 'mjeseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var me = moment.defineLocale('me', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sjutra u] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedjelje] [u] LT',\n '[prošlog] [ponedjeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srijede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mjesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return me;\n\n})));\n","// Exports the \"hr\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/hr')\n// ES2015:\n// import 'tinymce/plugins/hr'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var af = moment.defineLocale('af', {\n months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n '_'\n ),\n weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n meridiemParse: /vm|nm/i,\n isPM: function (input) {\n return /^nm$/i.test(input);\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower ? 'vm' : 'VM';\n } else {\n return isLower ? 'nm' : 'NM';\n }\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Vandag om] LT',\n nextDay: '[Môre om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[Gister om] LT',\n lastWeek: '[Laas] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oor %s',\n past: '%s gelede',\n s: \"'n paar sekondes\",\n ss: '%d sekondes',\n m: \"'n minuut\",\n mm: '%d minute',\n h: \"'n uur\",\n hh: '%d ure',\n d: \"'n dag\",\n dd: '%d dae',\n M: \"'n maand\",\n MM: '%d maande',\n y: \"'n jaar\",\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n ); // Thanks to Joris Röling : https://github.com/jjupiter\n },\n week: {\n dow: 1, // Maandag is die eerste dag van die week.\n doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n },\n });\n\n return af;\n\n})));\n","// 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');","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var uz = moment.defineLocale('uz', {\n months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'D MMMM YYYY, dddd HH:mm',\n },\n calendar: {\n sameDay: '[Бугун соат] LT [да]',\n nextDay: '[Эртага] LT [да]',\n nextWeek: 'dddd [куни соат] LT [да]',\n lastDay: '[Кеча соат] LT [да]',\n lastWeek: '[Утган] dddd [куни соат] LT [да]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'Якин %s ичида',\n past: 'Бир неча %s олдин',\n s: 'фурсат',\n ss: '%d фурсат',\n m: 'бир дакика',\n mm: '%d дакика',\n h: 'бир соат',\n hh: '%d соат',\n d: 'бир кун',\n dd: '%d кун',\n M: 'бир ой',\n MM: '%d ой',\n y: 'бир йил',\n yy: '%d йил',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return uz;\n\n})));\n","// 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","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enCa = moment.defineLocale('en-ca', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'YYYY-MM-DD',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enGb = moment.defineLocale('en-gb', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enGb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n var output = '';\n if (withoutSuffix) {\n switch (string) {\n case 's':\n output = 'काही सेकंद';\n break;\n case 'ss':\n output = '%d सेकंद';\n break;\n case 'm':\n output = 'एक मिनिट';\n break;\n case 'mm':\n output = '%d मिनिटे';\n break;\n case 'h':\n output = 'एक तास';\n break;\n case 'hh':\n output = '%d तास';\n break;\n case 'd':\n output = 'एक दिवस';\n break;\n case 'dd':\n output = '%d दिवस';\n break;\n case 'M':\n output = 'एक महिना';\n break;\n case 'MM':\n output = '%d महिने';\n break;\n case 'y':\n output = 'एक वर्ष';\n break;\n case 'yy':\n output = '%d वर्षे';\n break;\n }\n } else {\n switch (string) {\n case 's':\n output = 'काही सेकंदां';\n break;\n case 'ss':\n output = '%d सेकंदां';\n break;\n case 'm':\n output = 'एका मिनिटा';\n break;\n case 'mm':\n output = '%d मिनिटां';\n break;\n case 'h':\n output = 'एका तासा';\n break;\n case 'hh':\n output = '%d तासां';\n break;\n case 'd':\n output = 'एका दिवसा';\n break;\n case 'dd':\n output = '%d दिवसां';\n break;\n case 'M':\n output = 'एका महिन्या';\n break;\n case 'MM':\n output = '%d महिन्यां';\n break;\n case 'y':\n output = 'एका वर्षा';\n break;\n case 'yy':\n output = '%d वर्षां';\n break;\n }\n }\n return output.replace(/%d/i, number);\n }\n\n var mr = moment.defineLocale('mr', {\n months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n '_'\n ),\n monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm वाजता',\n LTS: 'A h:mm:ss वाजता',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm वाजता',\n LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[उद्या] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[काल] LT',\n lastWeek: '[मागील] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमध्ये',\n past: '%sपूर्वी',\n s: relativeTimeMr,\n ss: relativeTimeMr,\n m: relativeTimeMr,\n mm: relativeTimeMr,\n h: relativeTimeMr,\n hh: relativeTimeMr,\n d: relativeTimeMr,\n dd: relativeTimeMr,\n M: relativeTimeMr,\n MM: relativeTimeMr,\n y: relativeTimeMr,\n yy: relativeTimeMr,\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n return hour;\n } else if (\n meridiem === 'दुपारी' ||\n meridiem === 'सायंकाळी' ||\n meridiem === 'रात्री'\n ) {\n return hour >= 12 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour >= 0 && hour < 6) {\n return 'पहाटे';\n } else if (hour < 12) {\n return 'सकाळी';\n } else if (hour < 17) {\n return 'दुपारी';\n } else if (hour < 20) {\n return 'सायंकाळी';\n } else {\n return 'रात्री';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return mr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n };\n\n var ne = moment.defineLocale('ne', {\n months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n '_'\n ),\n monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n '_'\n ),\n weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'Aको h:mm बजे',\n LTS: 'Aको h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, Aको h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'राति') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'बिहान') {\n return hour;\n } else if (meridiem === 'दिउँसो') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'साँझ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 3) {\n return 'राति';\n } else if (hour < 12) {\n return 'बिहान';\n } else if (hour < 16) {\n return 'दिउँसो';\n } else if (hour < 20) {\n return 'साँझ';\n } else {\n return 'राति';\n }\n },\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[भोलि] LT',\n nextWeek: '[आउँदो] dddd[,] LT',\n lastDay: '[हिजो] LT',\n lastWeek: '[गएको] dddd[,] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sमा',\n past: '%s अगाडि',\n s: 'केही क्षण',\n ss: '%d सेकेण्ड',\n m: 'एक मिनेट',\n mm: '%d मिनेट',\n h: 'एक घण्टा',\n hh: '%d घण्टा',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महिना',\n MM: '%d महिना',\n y: 'एक बर्ष',\n yy: '%d बर्ष',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhMo = moment.defineLocale('zh-mo', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'D/M/YYYY',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s內',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhMo;\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');","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ум',\n 1: '-ум',\n 2: '-юм',\n 3: '-юм',\n 4: '-ум',\n 5: '-ум',\n 6: '-ум',\n 7: '-ум',\n 8: '-ум',\n 9: '-ум',\n 10: '-ум',\n 12: '-ум',\n 13: '-ум',\n 20: '-ум',\n 30: '-юм',\n 40: '-ум',\n 50: '-ум',\n 60: '-ум',\n 70: '-ум',\n 80: '-ум',\n 90: '-ум',\n 100: '-ум',\n };\n\n var tg = moment.defineLocale('tg', {\n months: {\n format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n '_'\n ),\n standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n '_'\n ),\n },\n monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n '_'\n ),\n weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Имрӯз соати] LT',\n nextDay: '[Фардо соати] LT',\n lastDay: '[Дирӯз соати] LT',\n nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'баъди %s',\n past: '%s пеш',\n s: 'якчанд сония',\n m: 'як дақиқа',\n mm: '%d дақиқа',\n h: 'як соат',\n hh: '%d соат',\n d: 'як рӯз',\n dd: '%d рӯз',\n M: 'як моҳ',\n MM: '%d моҳ',\n y: 'як сол',\n yy: '%d сол',\n },\n meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'шаб') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'субҳ') {\n return hour;\n } else if (meridiem === 'рӯз') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'бегоҳ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'шаб';\n } else if (hour < 11) {\n return 'субҳ';\n } else if (hour < 16) {\n return 'рӯз';\n } else if (hour < 19) {\n return 'бегоҳ';\n } else {\n return 'шаб';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1th is the first week of the year.\n },\n });\n\n return tg;\n\n})));\n","(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","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n '_'\n ),\n monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n monthsParse = [\n /^led/i,\n /^úno/i,\n /^bře/i,\n /^dub/i,\n /^kvě/i,\n /^(čvn|červen$|června)/i,\n /^(čvc|červenec|července)/i,\n /^srp/i,\n /^zář/i,\n /^říj/i,\n /^lis/i,\n /^pro/i,\n ],\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n function plural(n) {\n return n > 1 && n < 5 && ~~(n / 10) !== 1;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekund');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minuty' : 'minut');\n } else {\n return result + 'minutami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodin');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'den' : 'dnem';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dny' : 'dní');\n } else {\n return result + 'dny';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'měsíce' : 'měsíců');\n } else {\n return result + 'měsíci';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokem';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'let');\n } else {\n return result + 'lety';\n }\n }\n }\n\n var cs = moment.defineLocale('cs', {\n months: months,\n monthsShort: monthsShort,\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n l: 'D. M. YYYY',\n },\n calendar: {\n sameDay: '[dnes v] LT',\n nextDay: '[zítra v] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v neděli v] LT';\n case 1:\n case 2:\n return '[v] dddd [v] LT';\n case 3:\n return '[ve středu v] LT';\n case 4:\n return '[ve čtvrtek v] LT';\n case 5:\n return '[v pátek v] LT';\n case 6:\n return '[v sobotu v] LT';\n }\n },\n lastDay: '[včera v] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulou neděli v] LT';\n case 1:\n case 2:\n return '[minulé] dddd [v] LT';\n case 3:\n return '[minulou středu v] LT';\n case 4:\n case 5:\n return '[minulý] dddd [v] LT';\n case 6:\n return '[minulou sobotu v] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'před %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '௧',\n 2: '௨',\n 3: '௩',\n 4: '௪',\n 5: '௫',\n 6: '௬',\n 7: '௭',\n 8: '௮',\n 9: '௯',\n 0: '௦',\n },\n numberMap = {\n '௧': '1',\n '௨': '2',\n '௩': '3',\n '௪': '4',\n '௫': '5',\n '௬': '6',\n '௭': '7',\n '௮': '8',\n '௯': '9',\n '௦': '0',\n };\n\n var ta = moment.defineLocale('ta', {\n months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n '_'\n ),\n weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n '_'\n ),\n weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n '_'\n ),\n weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, HH:mm',\n LLLL: 'dddd, D MMMM YYYY, HH:mm',\n },\n calendar: {\n sameDay: '[இன்று] LT',\n nextDay: '[நாளை] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[நேற்று] LT',\n lastWeek: '[கடந்த வாரம்] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s இல்',\n past: '%s முன்',\n s: 'ஒரு சில விநாடிகள்',\n ss: '%d விநாடிகள்',\n m: 'ஒரு நிமிடம்',\n mm: '%d நிமிடங்கள்',\n h: 'ஒரு மணி நேரம்',\n hh: '%d மணி நேரம்',\n d: 'ஒரு நாள்',\n dd: '%d நாட்கள்',\n M: 'ஒரு மாதம்',\n MM: '%d மாதங்கள்',\n y: 'ஒரு வருடம்',\n yy: '%d ஆண்டுகள்',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n ordinal: function (number) {\n return number + 'வது';\n },\n preparse: function (string) {\n return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // refer http://ta.wikipedia.org/s/1er1\n meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n meridiem: function (hour, minute, isLower) {\n if (hour < 2) {\n return ' யாமம்';\n } else if (hour < 6) {\n return ' வைகறை'; // வைகறை\n } else if (hour < 10) {\n return ' காலை'; // காலை\n } else if (hour < 14) {\n return ' நண்பகல்'; // நண்பகல்\n } else if (hour < 18) {\n return ' எற்பாடு'; // எற்பாடு\n } else if (hour < 22) {\n return ' மாலை'; // மாலை\n } else {\n return ' யாமம்';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'யாமம்') {\n return hour < 2 ? hour : hour + 12;\n } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n return hour;\n } else if (meridiem === 'நண்பகல்') {\n return hour >= 10 ? hour : hour + 12;\n } else {\n return hour + 12;\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '೧',\n 2: '೨',\n 3: '೩',\n 4: '೪',\n 5: '೫',\n 6: '೬',\n 7: '೭',\n 8: '೮',\n 9: '೯',\n 0: '೦',\n },\n numberMap = {\n '೧': '1',\n '೨': '2',\n '೩': '3',\n '೪': '4',\n '೫': '5',\n '೬': '6',\n '೭': '7',\n '೮': '8',\n '೯': '9',\n '೦': '0',\n };\n\n var kn = moment.defineLocale('kn', {\n months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n '_'\n ),\n monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n '_'\n ),\n weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[ಇಂದು] LT',\n nextDay: '[ನಾಳೆ] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ನಿನ್ನೆ] LT',\n lastWeek: '[ಕೊನೆಯ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ನಂತರ',\n past: '%s ಹಿಂದೆ',\n s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n ss: '%d ಸೆಕೆಂಡುಗಳು',\n m: 'ಒಂದು ನಿಮಿಷ',\n mm: '%d ನಿಮಿಷ',\n h: 'ಒಂದು ಗಂಟೆ',\n hh: '%d ಗಂಟೆ',\n d: 'ಒಂದು ದಿನ',\n dd: '%d ದಿನ',\n M: 'ಒಂದು ತಿಂಗಳು',\n MM: '%d ತಿಂಗಳು',\n y: 'ಒಂದು ವರ್ಷ',\n yy: '%d ವರ್ಷ',\n },\n preparse: function (string) {\n return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ರಾತ್ರಿ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n return hour;\n } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ಸಂಜೆ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ರಾತ್ರಿ';\n } else if (hour < 10) {\n return 'ಬೆಳಿಗ್ಗೆ';\n } else if (hour < 17) {\n return 'ಮಧ್ಯಾಹ್ನ';\n } else if (hour < 20) {\n return 'ಸಂಜೆ';\n } else {\n return 'ರಾತ್ರಿ';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n ordinal: function (number) {\n return number + 'ನೇ';\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return kn;\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');","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arKw = moment.defineLocale('ar-kw', {\n months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return arKw;\n\n})));\n","(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","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eng Minutt', 'enger Minutt'],\n h: ['eng Stonn', 'enger Stonn'],\n d: ['een Dag', 'engem Dag'],\n M: ['ee Mount', 'engem Mount'],\n y: ['ee Joer', 'engem Joer'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n function processFutureTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'a ' + string;\n }\n return 'an ' + string;\n }\n function processPastTime(string) {\n var number = string.substr(0, string.indexOf(' '));\n if (eifelerRegelAppliesToNumber(number)) {\n return 'viru ' + string;\n }\n return 'virun ' + string;\n }\n /**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\n function eifelerRegelAppliesToNumber(number) {\n number = parseInt(number, 10);\n if (isNaN(number)) {\n return false;\n }\n if (number < 0) {\n // Negative Number --> always true\n return true;\n } else if (number < 10) {\n // Only 1 digit\n if (4 <= number && number <= 7) {\n return true;\n }\n return false;\n } else if (number < 100) {\n // 2 digits\n var lastDigit = number % 10,\n firstDigit = number / 10;\n if (lastDigit === 0) {\n return eifelerRegelAppliesToNumber(firstDigit);\n }\n return eifelerRegelAppliesToNumber(lastDigit);\n } else if (number < 10000) {\n // 3 or 4 digits --> recursively check first digit\n while (number >= 10) {\n number = number / 10;\n }\n return eifelerRegelAppliesToNumber(number);\n } else {\n // Anything larger than 4 digits: recursively check first n-3 digits\n number = number / 1000;\n return eifelerRegelAppliesToNumber(number);\n }\n }\n\n var lb = moment.defineLocale('lb', {\n months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n '_'\n ),\n weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm [Auer]',\n LTS: 'H:mm:ss [Auer]',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm [Auer]',\n LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n },\n calendar: {\n sameDay: '[Haut um] LT',\n sameElse: 'L',\n nextDay: '[Muer um] LT',\n nextWeek: 'dddd [um] LT',\n lastDay: '[Gëschter um] LT',\n lastWeek: function () {\n // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n switch (this.day()) {\n case 2:\n case 4:\n return '[Leschten] dddd [um] LT';\n default:\n return '[Leschte] dddd [um] LT';\n }\n },\n },\n relativeTime: {\n future: processFutureTime,\n past: processPastTime,\n s: 'e puer Sekonnen',\n ss: '%d Sekonnen',\n m: processRelativeTime,\n mm: '%d Minutten',\n h: processRelativeTime,\n hh: '%d Stonnen',\n d: processRelativeTime,\n dd: '%d Deeg',\n M: processRelativeTime,\n MM: '%d Méint',\n y: processRelativeTime,\n yy: '%d Joer',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lb;\n\n})));\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df48\",\n\t\"./fa.js\": \"8df48\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b46\",\n\t\"./gd.js\": \"f6b46\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: '-inci',\n 5: '-inci',\n 8: '-inci',\n 70: '-inci',\n 80: '-inci',\n 2: '-nci',\n 7: '-nci',\n 20: '-nci',\n 50: '-nci',\n 3: '-üncü',\n 4: '-üncü',\n 100: '-üncü',\n 6: '-ncı',\n 9: '-uncu',\n 10: '-uncu',\n 30: '-uncu',\n 60: '-ıncı',\n 90: '-ıncı',\n };\n\n var az = moment.defineLocale('az', {\n months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n '_'\n ),\n monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n '_'\n ),\n weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün saat] LT',\n nextDay: '[sabah saat] LT',\n nextWeek: '[gələn həftə] dddd [saat] LT',\n lastDay: '[dünən] LT',\n lastWeek: '[keçən həftə] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s sonra',\n past: '%s əvvəl',\n s: 'bir neçə saniyə',\n ss: '%d saniyə',\n m: 'bir dəqiqə',\n mm: '%d dəqiqə',\n h: 'bir saat',\n hh: '%d saat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir ay',\n MM: '%d ay',\n y: 'bir il',\n yy: '%d il',\n },\n meridiemParse: /gecə|səhər|gündüz|axşam/,\n isPM: function (input) {\n return /^(gündüz|axşam)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'gecə';\n } else if (hour < 12) {\n return 'səhər';\n } else if (hour < 17) {\n return 'gündüz';\n } else {\n return 'axşam';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n ordinal: function (number) {\n if (number === 0) {\n // special case for zero\n return number + '-ıncı';\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhHk = moment.defineLocale('zh-hk', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1200) {\n return '上午';\n } else if (hm === 1200) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: '[下]ddddLT',\n lastDay: '[昨天]LT',\n lastWeek: '[上]ddddLT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhHk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n if (number === 1) {\n result += 'sekunda';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sekunde';\n } else {\n result += 'sekundi';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n case 'mm':\n if (number === 1) {\n result += 'minuta';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'minute';\n } else {\n result += 'minuta';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'jedan sat' : 'jednog sata';\n case 'hh':\n if (number === 1) {\n result += 'sat';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'sata';\n } else {\n result += 'sati';\n }\n return result;\n case 'dd':\n if (number === 1) {\n result += 'dan';\n } else {\n result += 'dana';\n }\n return result;\n case 'MM':\n if (number === 1) {\n result += 'mjesec';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'mjeseca';\n } else {\n result += 'mjeseci';\n }\n return result;\n case 'yy':\n if (number === 1) {\n result += 'godina';\n } else if (number === 2 || number === 3 || number === 4) {\n result += 'godine';\n } else {\n result += 'godina';\n }\n return result;\n }\n }\n\n var hr = moment.defineLocale('hr', {\n months: {\n format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n '_'\n ),\n standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n '_'\n ),\n },\n monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM YYYY',\n LLL: 'Do MMMM YYYY H:mm',\n LLLL: 'dddd, Do MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedjelju] [u] LT';\n case 3:\n return '[u] [srijedu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[jučer u] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prošlu] [nedjelju] [u] LT';\n case 3:\n return '[prošlu] [srijedu] [u] LT';\n case 6:\n return '[prošle] [subote] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prošli] dddd [u] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'prije %s',\n s: 'par sekundi',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: 'dan',\n dd: translate,\n M: 'mjesec',\n MM: translate,\n y: 'godinu',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hr;\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","// 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');","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var id = moment.defineLocale('id', {\n months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|siang|sore|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'siang') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'sore' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'siang';\n } else if (hours < 19) {\n return 'sore';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Besok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kemarin pukul] LT',\n lastWeek: 'dddd [lalu pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lalu',\n s: 'beberapa detik',\n ss: '%d detik',\n m: 'semenit',\n mm: '%d menit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return id;\n\n})));\n","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Eanáir',\n 'Feabhra',\n 'Márta',\n 'Aibreán',\n 'Bealtaine',\n 'Meitheamh',\n 'Iúil',\n 'Lúnasa',\n 'Meán Fómhair',\n 'Deireadh Fómhair',\n 'Samhain',\n 'Nollaig',\n ],\n monthsShort = [\n 'Ean',\n 'Feabh',\n 'Márt',\n 'Aib',\n 'Beal',\n 'Meith',\n 'Iúil',\n 'Lún',\n 'M.F.',\n 'D.F.',\n 'Samh',\n 'Noll',\n ],\n weekdays = [\n 'Dé Domhnaigh',\n 'Dé Luain',\n 'Dé Máirt',\n 'Dé Céadaoin',\n 'Déardaoin',\n 'Dé hAoine',\n 'Dé Sathairn',\n ],\n weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n var ga = moment.defineLocale('ga', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Inniu ag] LT',\n nextDay: '[Amárach ag] LT',\n nextWeek: 'dddd [ag] LT',\n lastDay: '[Inné ag] LT',\n lastWeek: 'dddd [seo caite] [ag] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i %s',\n past: '%s ó shin',\n s: 'cúpla soicind',\n ss: '%d soicind',\n m: 'nóiméad',\n mm: '%d nóiméad',\n h: 'uair an chloig',\n hh: '%d uair an chloig',\n d: 'lá',\n dd: '%d lá',\n M: 'mí',\n MM: '%d míonna',\n y: 'bliain',\n yy: '%d bliain',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ga;\n\n})));\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوری',\n 'فروری',\n 'مارچ',\n 'اپریل',\n 'مئی',\n 'جون',\n 'جولائی',\n 'اگست',\n 'ستمبر',\n 'اکتوبر',\n 'نومبر',\n 'دسمبر',\n ],\n days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n var ur = moment.defineLocale('ur', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[آج بوقت] LT',\n nextDay: '[کل بوقت] LT',\n nextWeek: 'dddd [بوقت] LT',\n lastDay: '[گذشتہ روز بوقت] LT',\n lastWeek: '[گذشتہ] dddd [بوقت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s بعد',\n past: '%s قبل',\n s: 'چند سیکنڈ',\n ss: '%d سیکنڈ',\n m: 'ایک منٹ',\n mm: '%d منٹ',\n h: 'ایک گھنٹہ',\n hh: '%d گھنٹے',\n d: 'ایک دن',\n dd: '%d دن',\n M: 'ایک ماہ',\n MM: '%d ماہ',\n y: 'ایک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ss = moment.defineLocale('ss', {\n months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n '_'\n ),\n monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n '_'\n ),\n weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Namuhla nga] LT',\n nextDay: '[Kusasa nga] LT',\n nextWeek: 'dddd [nga] LT',\n lastDay: '[Itolo nga] LT',\n lastWeek: 'dddd [leliphelile] [nga] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'nga %s',\n past: 'wenteka nga %s',\n s: 'emizuzwana lomcane',\n ss: '%d mzuzwana',\n m: 'umzuzu',\n mm: '%d emizuzu',\n h: 'lihora',\n hh: '%d emahora',\n d: 'lilanga',\n dd: '%d emalanga',\n M: 'inyanga',\n MM: '%d tinyanga',\n y: 'umnyaka',\n yy: '%d iminyaka',\n },\n meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'ekuseni';\n } else if (hours < 15) {\n return 'emini';\n } else if (hours < 19) {\n return 'entsambama';\n } else {\n return 'ebusuku';\n }\n },\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ekuseni') {\n return hour;\n } else if (meridiem === 'emini') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n if (hour === 0) {\n return 0;\n }\n return hour + 12;\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: '%d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ss;\n\n})));\n","// 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');","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var esUs = moment.defineLocale('es-us', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'MM/DD/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY h:mm A',\n LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tet = moment.defineLocale('tet', {\n months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Ohin iha] LT',\n nextDay: '[Aban iha] LT',\n nextWeek: 'dddd [iha] LT',\n lastDay: '[Horiseik iha] LT',\n lastWeek: 'dddd [semana kotuk] [iha] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'iha %s',\n past: '%s liuba',\n s: 'segundu balun',\n ss: 'segundu %d',\n m: 'minutu ida',\n mm: 'minutu %d',\n h: 'oras ida',\n hh: 'oras %d',\n d: 'loron ida',\n dd: 'loron %d',\n M: 'fulan ida',\n MM: 'fulan %d',\n y: 'tinan ida',\n yy: 'tinan %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tet;\n\n})));\n","module.exports = __webpack_public_path__ + \"img/backgroundTutor.3627cb4f.png\";","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'ޖެނުއަރީ',\n 'ފެބްރުއަރީ',\n 'މާރިޗު',\n 'އޭޕްރީލު',\n 'މޭ',\n 'ޖޫން',\n 'ޖުލައި',\n 'އޯގަސްޓު',\n 'ސެޕްޓެމްބަރު',\n 'އޮކްޓޯބަރު',\n 'ނޮވެމްބަރު',\n 'ޑިސެމްބަރު',\n ],\n weekdays = [\n 'އާދިއްތަ',\n 'ހޯމަ',\n 'އަންގާރަ',\n 'ބުދަ',\n 'ބުރާސްފަތި',\n 'ހުކުރު',\n 'ހޮނިހިރު',\n ];\n\n var dv = moment.defineLocale('dv', {\n months: months,\n monthsShort: months,\n weekdays: weekdays,\n weekdaysShort: weekdays,\n weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/M/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /މކ|މފ/,\n isPM: function (input) {\n return 'މފ' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'މކ';\n } else {\n return 'މފ';\n }\n },\n calendar: {\n sameDay: '[މިއަދު] LT',\n nextDay: '[މާދަމާ] LT',\n nextWeek: 'dddd LT',\n lastDay: '[އިއްޔެ] LT',\n lastWeek: '[ފާއިތުވި] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ތެރޭގައި %s',\n past: 'ކުރިން %s',\n s: 'ސިކުންތުކޮޅެއް',\n ss: 'd% ސިކުންތު',\n m: 'މިނިޓެއް',\n mm: 'މިނިޓު %d',\n h: 'ގަޑިއިރެއް',\n hh: 'ގަޑިއިރު %d',\n d: 'ދުވަހެއް',\n dd: 'ދުވަސް %d',\n M: 'މަހެއް',\n MM: 'މަސް %d',\n y: 'އަހަރެއް',\n yy: 'އަހަރު %d',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 7, // Sunday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 1: \"'inji\",\n 5: \"'inji\",\n 8: \"'inji\",\n 70: \"'inji\",\n 80: \"'inji\",\n 2: \"'nji\",\n 7: \"'nji\",\n 20: \"'nji\",\n 50: \"'nji\",\n 3: \"'ünji\",\n 4: \"'ünji\",\n 100: \"'ünji\",\n 6: \"'njy\",\n 9: \"'unjy\",\n 10: \"'unjy\",\n 30: \"'unjy\",\n 60: \"'ynjy\",\n 90: \"'ynjy\",\n };\n\n var tk = moment.defineLocale('tk', {\n months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n '_'\n ),\n monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n '_'\n ),\n weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[bugün sagat] LT',\n nextDay: '[ertir sagat] LT',\n nextWeek: '[indiki] dddd [sagat] LT',\n lastDay: '[düýn] LT',\n lastWeek: '[geçen] dddd [sagat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s soň',\n past: '%s öň',\n s: 'birnäçe sekunt',\n m: 'bir minut',\n mm: '%d minut',\n h: 'bir sagat',\n hh: '%d sagat',\n d: 'bir gün',\n dd: '%d gün',\n M: 'bir aý',\n MM: '%d aý',\n y: 'bir ýyl',\n yy: '%d ýyl',\n },\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'Do':\n case 'DD':\n return number;\n default:\n if (number === 0) {\n // special case for zero\n return number + \"'unjy\";\n }\n var a = number % 10,\n b = (number % 100) - a,\n c = number >= 100 ? 100 : null;\n return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt : https://github.com/passatgt\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(\n ' '\n );\n function translate(number, withoutSuffix, key, isFuture) {\n var num = number;\n switch (key) {\n case 's':\n return isFuture || withoutSuffix\n ? 'néhány másodperc'\n : 'néhány másodperce';\n case 'ss':\n return num + (isFuture || withoutSuffix)\n ? ' másodperc'\n : ' másodperce';\n case 'm':\n return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'mm':\n return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n case 'h':\n return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'hh':\n return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n case 'd':\n return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'dd':\n return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n case 'M':\n return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'MM':\n return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n case 'y':\n return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n case 'yy':\n return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n }\n return '';\n }\n function week(isFuture) {\n return (\n (isFuture ? '' : '[múlt] ') +\n '[' +\n weekEndings[this.day()] +\n '] LT[-kor]'\n );\n }\n\n var hu = moment.defineLocale('hu', {\n months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n '_'\n ),\n monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'YYYY.MM.DD.',\n LL: 'YYYY. MMMM D.',\n LLL: 'YYYY. MMMM D. H:mm',\n LLLL: 'YYYY. MMMM D., dddd H:mm',\n },\n meridiemParse: /de|du/i,\n isPM: function (input) {\n return input.charAt(1).toLowerCase() === 'u';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 12) {\n return isLower === true ? 'de' : 'DE';\n } else {\n return isLower === true ? 'du' : 'DU';\n }\n },\n calendar: {\n sameDay: '[ma] LT[-kor]',\n nextDay: '[holnap] LT[-kor]',\n nextWeek: function () {\n return week.call(this, true);\n },\n lastDay: '[tegnap] LT[-kor]',\n lastWeek: function () {\n return week.call(this, false);\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s múlva',\n past: '%s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhCn = moment.defineLocale('zh-cn', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日Ah点mm分',\n LLLL: 'YYYY年M月D日ddddAh点mm分',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n } else {\n // '中午'\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天]LT',\n nextDay: '[明天]LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n return '[下]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n lastDay: '[昨天]LT',\n lastWeek: function (now) {\n if (this.week() !== now.week()) {\n return '[上]dddLT';\n } else {\n return '[本]dddLT';\n }\n },\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '周';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s后',\n past: '%s前',\n s: '几秒',\n ss: '%d 秒',\n m: '1 分钟',\n mm: '%d 分钟',\n h: '1 小时',\n hh: '%d 小时',\n d: '1 天',\n dd: '%d 天',\n w: '1 周',\n ww: '%d 周',\n M: '1 个月',\n MM: '%d 个月',\n y: '1 年',\n yy: '%d 年',\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var te = moment.defineLocale('te', {\n months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n '_'\n ),\n monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n '_'\n ),\n weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[నేడు] LT',\n nextDay: '[రేపు] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[నిన్న] LT',\n lastWeek: '[గత] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s లో',\n past: '%s క్రితం',\n s: 'కొన్ని క్షణాలు',\n ss: '%d సెకన్లు',\n m: 'ఒక నిమిషం',\n mm: '%d నిమిషాలు',\n h: 'ఒక గంట',\n hh: '%d గంటలు',\n d: 'ఒక రోజు',\n dd: '%d రోజులు',\n M: 'ఒక నెల',\n MM: '%d నెలలు',\n y: 'ఒక సంవత్సరం',\n yy: '%d సంవత్సరాలు',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n ordinal: '%dవ',\n meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'రాత్రి') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ఉదయం') {\n return hour;\n } else if (meridiem === 'మధ్యాహ్నం') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'సాయంత్రం') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'రాత్రి';\n } else if (hour < 10) {\n return 'ఉదయం';\n } else if (hour < 17) {\n return 'మధ్యాహ్నం';\n } else if (hour < 20) {\n return 'సాయంత్రం';\n } else {\n return 'రాత్రి';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return te;\n\n})));\n","(function () {\nvar contextmenu = (function () {\n 'use strict';\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var get = function (visibleState) {\n var isContextMenuVisible = function () {\n return visibleState.get();\n };\n return { isContextMenuVisible: isContextMenuVisible };\n };\n var Api = { get: get };\n\n var shouldNeverUseNative = function (editor) {\n return editor.settings.contextmenu_never_use_native;\n };\n var getContextMenu = function (editor) {\n return editor.getParam('contextmenu', 'link openlink image inserttable | cell row column deletetable');\n };\n var Settings = {\n shouldNeverUseNative: shouldNeverUseNative,\n getContextMenu: getContextMenu\n };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getUiContainer = function (editor) {\n return global$1.DOM.select(editor.settings.ui_container)[0];\n };\n\n var nu = function (x, y) {\n return {\n x: x,\n y: y\n };\n };\n var transpose = function (pos, dx, dy) {\n return nu(pos.x + dx, pos.y + dy);\n };\n var fromPageXY = function (e) {\n return nu(e.pageX, e.pageY);\n };\n var fromClientXY = function (e) {\n return nu(e.clientX, e.clientY);\n };\n var transposeUiContainer = function (element, pos) {\n if (element && global$1.DOM.getStyle(element, 'position', true) !== 'static') {\n var containerPos = global$1.DOM.getPos(element);\n var dx = containerPos.x - element.scrollLeft;\n var dy = containerPos.y - element.scrollTop;\n return transpose(pos, -dx, -dy);\n } else {\n return transpose(pos, 0, 0);\n }\n };\n var transposeContentAreaContainer = function (element, pos) {\n var containerPos = global$1.DOM.getPos(element);\n return transpose(pos, containerPos.x, containerPos.y);\n };\n var getPos = function (editor, e) {\n if (editor.inline) {\n return transposeUiContainer(getUiContainer(editor), fromPageXY(e));\n } else {\n var iframePos = transposeContentAreaContainer(editor.getContentAreaContainer(), fromClientXY(e));\n return transposeUiContainer(getUiContainer(editor), iframePos);\n }\n };\n var Coords = { getPos: getPos };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var renderMenu = function (editor, visibleState) {\n var menu, contextmenu;\n var items = [];\n contextmenu = Settings.getContextMenu(editor);\n global$3.each(contextmenu.split(/[ ,]/), function (name) {\n var item = editor.menuItems[name];\n if (name === '|') {\n item = { text: name };\n }\n if (item) {\n item.shortcut = '';\n items.push(item);\n }\n });\n for (var i = 0; i < items.length; i++) {\n if (items[i].text === '|') {\n if (i === 0 || i === items.length - 1) {\n items.splice(i, 1);\n }\n }\n }\n menu = global$2.create('menu', {\n items: items,\n context: 'contextmenu',\n classes: 'contextmenu'\n });\n menu.uiContainer = getUiContainer(editor);\n menu.renderTo(getUiContainer(editor));\n menu.on('hide', function (e) {\n if (e.control === this) {\n visibleState.set(false);\n }\n });\n editor.on('remove', function () {\n menu.remove();\n menu = null;\n });\n return menu;\n };\n var show = function (editor, pos, visibleState, menu) {\n if (menu.get() === null) {\n menu.set(renderMenu(editor, visibleState));\n } else {\n menu.get().show();\n }\n menu.get().moveTo(pos.x, pos.y);\n visibleState.set(true);\n };\n var ContextMenu = { show: show };\n\n var isNativeOverrideKeyEvent = function (editor, e) {\n return e.ctrlKey && !Settings.shouldNeverUseNative(editor);\n };\n var setup = function (editor, visibleState, menu) {\n editor.on('contextmenu', function (e) {\n if (isNativeOverrideKeyEvent(editor, e)) {\n return;\n }\n e.preventDefault();\n ContextMenu.show(editor, Coords.getPos(editor, e), visibleState, menu);\n });\n };\n var Bind = { setup: setup };\n\n global.add('contextmenu', function (editor) {\n var menu = Cell(null), visibleState = Cell(false);\n Bind.setup(editor, visibleState, menu);\n return Api.get(visibleState);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sv = moment.defineLocale('sv', {\n months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Idag] LT',\n nextDay: '[Imorgon] LT',\n lastDay: '[Igår] LT',\n nextWeek: '[På] dddd LT',\n lastWeek: '[I] dddd[s] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: 'för %s sedan',\n s: 'några sekunder',\n ss: '%d sekunder',\n m: 'en minut',\n mm: '%d minuter',\n h: 'en timme',\n hh: '%d timmar',\n d: 'en dag',\n dd: '%d dagar',\n M: 'en månad',\n MM: '%d månader',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? ':e'\n : b === 1\n ? ':a'\n : b === 2\n ? ':a'\n : b === 3\n ? ':e'\n : ':e';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ugCn = moment.defineLocale('ug-cn', {\n months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n '_'\n ),\n weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n '_'\n ),\n weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n },\n meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n meridiem === 'يېرىم كېچە' ||\n meridiem === 'سەھەر' ||\n meridiem === 'چۈشتىن بۇرۇن'\n ) {\n return hour;\n } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n return hour + 12;\n } else {\n return hour >= 11 ? hour : hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return 'يېرىم كېچە';\n } else if (hm < 900) {\n return 'سەھەر';\n } else if (hm < 1130) {\n return 'چۈشتىن بۇرۇن';\n } else if (hm < 1230) {\n return 'چۈش';\n } else if (hm < 1800) {\n return 'چۈشتىن كېيىن';\n } else {\n return 'كەچ';\n }\n },\n calendar: {\n sameDay: '[بۈگۈن سائەت] LT',\n nextDay: '[ئەتە سائەت] LT',\n nextWeek: '[كېلەركى] dddd [سائەت] LT',\n lastDay: '[تۆنۈگۈن] LT',\n lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s كېيىن',\n past: '%s بۇرۇن',\n s: 'نەچچە سېكونت',\n ss: '%d سېكونت',\n m: 'بىر مىنۇت',\n mm: '%d مىنۇت',\n h: 'بىر سائەت',\n hh: '%d سائەت',\n d: 'بىر كۈن',\n dd: '%d كۈن',\n M: 'بىر ئاي',\n MM: '%d ئاي',\n y: 'بىر يىل',\n yy: '%d يىل',\n },\n\n dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '-كۈنى';\n case 'w':\n case 'W':\n return number + '-ھەپتە';\n default:\n return number;\n }\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return ugCn;\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');","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var msMy = moment.defineLocale('ms-my', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return msMy;\n\n})));\n","// 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');","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var eo = moment.defineLocale('eo', {\n months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: '[la] D[-an de] MMMM, YYYY',\n LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n },\n meridiemParse: /[ap]\\.t\\.m/i,\n isPM: function (input) {\n return input.charAt(0).toLowerCase() === 'p';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'p.t.m.' : 'P.T.M.';\n } else {\n return isLower ? 'a.t.m.' : 'A.T.M.';\n }\n },\n calendar: {\n sameDay: '[Hodiaŭ je] LT',\n nextDay: '[Morgaŭ je] LT',\n nextWeek: 'dddd[n je] LT',\n lastDay: '[Hieraŭ je] LT',\n lastWeek: '[pasintan] dddd[n je] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'post %s',\n past: 'antaŭ %s',\n s: 'kelkaj sekundoj',\n ss: '%d sekundoj',\n m: 'unu minuto',\n mm: '%d minutoj',\n h: 'unu horo',\n hh: '%d horoj',\n d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n dd: '%d tagoj',\n M: 'unu monato',\n MM: '%d monatoj',\n y: 'unu jaro',\n yy: '%d jaroj',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}a/,\n ordinal: '%da',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return eo;\n\n})));\n","import mod from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PulseLoader.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PulseLoader.vue?vue&type=style&index=0&lang=css&\"","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'جنوري',\n 'فيبروري',\n 'مارچ',\n 'اپريل',\n 'مئي',\n 'جون',\n 'جولاءِ',\n 'آگسٽ',\n 'سيپٽمبر',\n 'آڪٽوبر',\n 'نومبر',\n 'ڊسمبر',\n ],\n days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n var sd = moment.defineLocale('sd', {\n months: months,\n monthsShort: months,\n weekdays: days,\n weekdaysShort: days,\n weekdaysMin: days,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd، D MMMM YYYY HH:mm',\n },\n meridiemParse: /صبح|شام/,\n isPM: function (input) {\n return 'شام' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'صبح';\n }\n return 'شام';\n },\n calendar: {\n sameDay: '[اڄ] LT',\n nextDay: '[سڀاڻي] LT',\n nextWeek: 'dddd [اڳين هفتي تي] LT',\n lastDay: '[ڪالهه] LT',\n lastWeek: '[گزريل هفتي] dddd [تي] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s پوء',\n past: '%s اڳ',\n s: 'چند سيڪنڊ',\n ss: '%d سيڪنڊ',\n m: 'هڪ منٽ',\n mm: '%d منٽ',\n h: 'هڪ ڪلاڪ',\n hh: '%d ڪلاڪ',\n d: 'هڪ ڏينهن',\n dd: '%d ڏينهن',\n M: 'هڪ مهينو',\n MM: '%d مهينا',\n y: 'هڪ سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string.replace(/،/g, ',');\n },\n postformat: function (string) {\n return string.replace(/,/g, '،');\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithMutation(number, withoutSuffix, key) {\n var format = {\n mm: 'munutenn',\n MM: 'miz',\n dd: 'devezh',\n };\n return number + ' ' + mutation(format[key], number);\n }\n function specialMutationForYears(number) {\n switch (lastNumber(number)) {\n case 1:\n case 3:\n case 4:\n case 5:\n case 9:\n return number + ' bloaz';\n default:\n return number + ' vloaz';\n }\n }\n function lastNumber(number) {\n if (number > 9) {\n return lastNumber(number % 10);\n }\n return number;\n }\n function mutation(text, number) {\n if (number === 2) {\n return softMutation(text);\n }\n return text;\n }\n function softMutation(text) {\n var mutationTable = {\n m: 'v',\n b: 'v',\n d: 'z',\n };\n if (mutationTable[text.charAt(0)] === undefined) {\n return text;\n }\n return mutationTable[text.charAt(0)] + text.substring(1);\n }\n\n var monthsParse = [\n /^gen/i,\n /^c[ʼ\\']hwe/i,\n /^meu/i,\n /^ebr/i,\n /^mae/i,\n /^(mez|eve)/i,\n /^gou/i,\n /^eos/i,\n /^gwe/i,\n /^her/i,\n /^du/i,\n /^ker/i,\n ],\n monthsRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n monthsStrictRegex = /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n monthsShortStrictRegex = /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n fullWeekdaysParse = [\n /^sul/i,\n /^lun/i,\n /^meurzh/i,\n /^merc[ʼ\\']her/i,\n /^yaou/i,\n /^gwener/i,\n /^sadorn/i,\n ],\n shortWeekdaysParse = [\n /^Sul/i,\n /^Lun/i,\n /^Meu/i,\n /^Mer/i,\n /^Yao/i,\n /^Gwe/i,\n /^Sad/i,\n ],\n minWeekdaysParse = [\n /^Su/i,\n /^Lu/i,\n /^Me([^r]|$)/i,\n /^Mer/i,\n /^Ya/i,\n /^Gw/i,\n /^Sa/i,\n ];\n\n var br = moment.defineLocale('br', {\n months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n '_'\n ),\n monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n weekdaysParse: minWeekdaysParse,\n fullWeekdaysParse: fullWeekdaysParse,\n shortWeekdaysParse: shortWeekdaysParse,\n minWeekdaysParse: minWeekdaysParse,\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: monthsStrictRegex,\n monthsShortStrictRegex: monthsShortStrictRegex,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [a viz] MMMM YYYY',\n LLL: 'D [a viz] MMMM YYYY HH:mm',\n LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hiziv da] LT',\n nextDay: '[Warcʼhoazh da] LT',\n nextWeek: 'dddd [da] LT',\n lastDay: '[Decʼh da] LT',\n lastWeek: 'dddd [paset da] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'a-benn %s',\n past: '%s ʼzo',\n s: 'un nebeud segondennoù',\n ss: '%d eilenn',\n m: 'ur vunutenn',\n mm: relativeTimeWithMutation,\n h: 'un eur',\n hh: '%d eur',\n d: 'un devezh',\n dd: relativeTimeWithMutation,\n M: 'ur miz',\n MM: relativeTimeWithMutation,\n y: 'ur bloaz',\n yy: specialMutationForYears,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n ordinal: function (number) {\n var output = number === 1 ? 'añ' : 'vet';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n isPM: function (token) {\n return token === 'g.m.';\n },\n meridiem: function (hour, minute, isLower) {\n return hour < 12 ? 'a.m.' : 'g.m.';\n },\n });\n\n return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan : https://github.com/johnideal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mi = moment.defineLocale('mi', {\n months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n '_'\n ),\n monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n '_'\n ),\n monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [i] HH:mm',\n LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n },\n calendar: {\n sameDay: '[i teie mahana, i] LT',\n nextDay: '[apopo i] LT',\n nextWeek: 'dddd [i] LT',\n lastDay: '[inanahi i] LT',\n lastWeek: 'dddd [whakamutunga i] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'i roto i %s',\n past: '%s i mua',\n s: 'te hēkona ruarua',\n ss: '%d hēkona',\n m: 'he meneti',\n mm: '%d meneti',\n h: 'te haora',\n hh: '%d haora',\n d: 'he ra',\n dd: '%d ra',\n M: 'he marama',\n MM: '%d marama',\n y: 'he tau',\n yy: '%d tau',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var mk = moment.defineLocale('mk', {\n months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Денес во] LT',\n nextDay: '[Утре во] LT',\n nextWeek: '[Во] dddd [во] LT',\n lastDay: '[Вчера во] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Изминатата] dddd [во] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Изминатиот] dddd [во] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'за %s',\n past: 'пред %s',\n s: 'неколку секунди',\n ss: '%d секунди',\n m: 'една минута',\n mm: '%d минути',\n h: 'еден час',\n hh: '%d часа',\n d: 'еден ден',\n dd: '%d дена',\n M: 'еден месец',\n MM: '%d месеци',\n y: 'една година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return mk;\n\n})));\n","// 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","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//! Sigurd Gartmann : https://github.com/sigurdga\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nb = moment.defineLocale('nb', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] HH:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[i dag kl.] LT',\n nextDay: '[i morgen kl.] LT',\n nextWeek: 'dddd [kl.] LT',\n lastDay: '[i går kl.] LT',\n lastWeek: '[forrige] dddd [kl.] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s siden',\n s: 'noen sekunder',\n ss: '%d sekunder',\n m: 'ett minutt',\n mm: '%d minutter',\n h: 'en time',\n hh: '%d timer',\n d: 'en dag',\n dd: '%d dager',\n w: 'en uke',\n ww: '%d uker',\n M: 'en måned',\n MM: '%d måneder',\n y: 'ett år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-ші',\n 1: '-ші',\n 2: '-ші',\n 3: '-ші',\n 4: '-ші',\n 5: '-ші',\n 6: '-шы',\n 7: '-ші',\n 8: '-ші',\n 9: '-шы',\n 10: '-шы',\n 20: '-шы',\n 30: '-шы',\n 40: '-шы',\n 50: '-ші',\n 60: '-шы',\n 70: '-ші',\n 80: '-ші',\n 90: '-шы',\n 100: '-ші',\n };\n\n var kk = moment.defineLocale('kk', {\n months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n '_'\n ),\n monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n '_'\n ),\n weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Бүгін сағат] LT',\n nextDay: '[Ертең сағат] LT',\n nextWeek: 'dddd [сағат] LT',\n lastDay: '[Кеше сағат] LT',\n lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ішінде',\n past: '%s бұрын',\n s: 'бірнеше секунд',\n ss: '%d секунд',\n m: 'бір минут',\n mm: '%d минут',\n h: 'бір сағат',\n hh: '%d сағат',\n d: 'бір күн',\n dd: '%d күн',\n M: 'бір ай',\n MM: '%d ай',\n y: 'бір жыл',\n yy: '%d жыл',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var arTn = moment.defineLocale('ar-tn', {\n months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return arTn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var it = moment.defineLocale('it', {\n months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n '_'\n ),\n monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n '_'\n ),\n weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: function () {\n return (\n '[Oggi a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n nextDay: function () {\n return (\n '[Domani a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n nextWeek: function () {\n return (\n 'dddd [a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n lastDay: function () {\n return (\n '[Ieri a' +\n (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n ']LT'\n );\n },\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return (\n '[La scorsa] dddd [a' +\n (this.hours() > 1\n ? 'lle '\n : this.hours() === 0\n ? ' '\n : \"ll'\") +\n ']LT'\n );\n default:\n return (\n '[Lo scorso] dddd [a' +\n (this.hours() > 1\n ? 'lle '\n : this.hours() === 0\n ? ' '\n : \"ll'\") +\n ']LT'\n );\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'tra %s',\n past: '%s fa',\n s: 'alcuni secondi',\n ss: '%d secondi',\n m: 'un minuto',\n mm: '%d minuti',\n h: \"un'ora\",\n hh: '%d ore',\n d: 'un giorno',\n dd: '%d giorni',\n w: 'una settimana',\n ww: '%d settimane',\n M: 'un mese',\n MM: '%d mesi',\n y: 'un anno',\n yy: '%d anni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var itCh = moment.defineLocale('it-ch', {\n months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n '_'\n ),\n monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n '_'\n ),\n weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Oggi alle] LT',\n nextDay: '[Domani alle] LT',\n nextWeek: 'dddd [alle] LT',\n lastDay: '[Ieri alle] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[la scorsa] dddd [alle] LT';\n default:\n return '[lo scorso] dddd [alle] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: function (s) {\n return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n },\n past: '%s fa',\n s: 'alcuni secondi',\n ss: '%d secondi',\n m: 'un minuto',\n mm: '%d minuti',\n h: \"un'ora\",\n hh: '%d ore',\n d: 'un giorno',\n dd: '%d giorni',\n M: 'un mese',\n MM: '%d mesi',\n y: 'un anno',\n yy: '%d anni',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enNz = moment.defineLocale('en-nz', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enNz;\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","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(\n '_'\n ),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(\n '_'\n );\n\n var fy = moment.defineLocale('fy', {\n months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n monthsParseExact: true,\n weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n '_'\n ),\n weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[hjoed om] LT',\n nextDay: '[moarn om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[juster om] LT',\n lastWeek: '[ôfrûne] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'oer %s',\n past: '%s lyn',\n s: 'in pear sekonden',\n ss: '%d sekonden',\n m: 'ien minút',\n mm: '%d minuten',\n h: 'ien oere',\n hh: '%d oeren',\n d: 'ien dei',\n dd: '%d dagen',\n M: 'ien moanne',\n MM: '%d moannen',\n y: 'ien jier',\n yy: '%d jierren',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fy;\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');","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIl = moment.defineLocale('en-il', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n return enIl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sw = moment.defineLocale('sw', {\n months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n '_'\n ),\n weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'hh:mm A',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[leo saa] LT',\n nextDay: '[kesho saa] LT',\n nextWeek: '[wiki ijayo] dddd [saat] LT',\n lastDay: '[jana] LT',\n lastWeek: '[wiki iliyopita] dddd [saat] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s baadaye',\n past: 'tokea %s',\n s: 'hivi punde',\n ss: 'sekunde %d',\n m: 'dakika moja',\n mm: 'dakika %d',\n h: 'saa limoja',\n hh: 'masaa %d',\n d: 'siku moja',\n dd: 'siku %d',\n M: 'mwezi mmoja',\n MM: 'miezi %d',\n y: 'mwaka mmoja',\n yy: 'miaka %d',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sw;\n\n})));\n","(function () {\nvar save = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var enableWhenDirty = function (editor) {\n return editor.getParam('save_enablewhendirty', true);\n };\n var hasOnSaveCallback = function (editor) {\n return !!editor.getParam('save_onsavecallback');\n };\n var hasOnCancelCallback = function (editor) {\n return !!editor.getParam('save_oncancelcallback');\n };\n var Settings = {\n enableWhenDirty: enableWhenDirty,\n hasOnSaveCallback: hasOnSaveCallback,\n hasOnCancelCallback: hasOnCancelCallback\n };\n\n var displayErrorMessage = function (editor, message) {\n editor.notificationManager.open({\n text: editor.translate(message),\n type: 'error'\n });\n };\n var save = function (editor) {\n var formObj;\n formObj = global$1.DOM.getParent(editor.id, 'form');\n if (Settings.enableWhenDirty(editor) && !editor.isDirty()) {\n return;\n }\n editor.save();\n if (Settings.hasOnSaveCallback(editor)) {\n editor.execCallback('save_onsavecallback', editor);\n editor.nodeChanged();\n return;\n }\n if (formObj) {\n editor.setDirty(false);\n if (!formObj.onsubmit || formObj.onsubmit()) {\n if (typeof formObj.submit === 'function') {\n formObj.submit();\n } else {\n displayErrorMessage(editor, 'Error: Form submit field collision.');\n }\n }\n editor.nodeChanged();\n } else {\n displayErrorMessage(editor, 'Error: No form element found.');\n }\n };\n var cancel = function (editor) {\n var h = global$2.trim(editor.startContent);\n if (Settings.hasOnCancelCallback(editor)) {\n editor.execCallback('save_oncancelcallback', editor);\n return;\n }\n editor.setContent(h);\n editor.undoManager.clear();\n editor.nodeChanged();\n };\n var Actions = {\n save: save,\n cancel: cancel\n };\n\n var register = function (editor) {\n editor.addCommand('mceSave', function () {\n Actions.save(editor);\n });\n editor.addCommand('mceCancel', function () {\n Actions.cancel(editor);\n });\n };\n var Commands = { register: register };\n\n var stateToggle = function (editor) {\n return function (e) {\n var ctrl = e.control;\n editor.on('nodeChange dirty', function () {\n ctrl.disabled(Settings.enableWhenDirty(editor) && !editor.isDirty());\n });\n };\n };\n var register$1 = function (editor) {\n editor.addButton('save', {\n icon: 'save',\n text: 'Save',\n cmd: 'mceSave',\n disabled: true,\n onPostRender: stateToggle(editor)\n });\n editor.addButton('cancel', {\n text: 'Cancel',\n icon: false,\n cmd: 'mceCancel',\n disabled: true,\n onPostRender: stateToggle(editor)\n });\n editor.addShortcut('Meta+S', '', 'mceSave');\n };\n var Buttons = { register: register$1 };\n\n global.add('save', function (editor) {\n Buttons.register(editor);\n Commands.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// Exports the \"textpattern\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/textpattern')\n// ES2015:\n// import 'tinymce/plugins/textpattern'\nrequire('./plugin.js');","(function () {\nvar modern = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var isBrandingEnabled = function (editor) {\n return editor.getParam('branding', true, 'boolean');\n };\n var hasMenubar = function (editor) {\n return getMenubar(editor) !== false;\n };\n var getMenubar = function (editor) {\n return editor.getParam('menubar');\n };\n var hasStatusbar = function (editor) {\n return editor.getParam('statusbar', true, 'boolean');\n };\n var getToolbarSize = function (editor) {\n return editor.getParam('toolbar_items_size');\n };\n var isReadOnly = function (editor) {\n return editor.getParam('readonly', false, 'boolean');\n };\n var getFixedToolbarContainer = function (editor) {\n return editor.getParam('fixed_toolbar_container');\n };\n var getInlineToolbarPositionHandler = function (editor) {\n return editor.getParam('inline_toolbar_position_handler');\n };\n var getMenu = function (editor) {\n return editor.getParam('menu');\n };\n var getRemovedMenuItems = function (editor) {\n return editor.getParam('removed_menuitems', '');\n };\n var getMinWidth = function (editor) {\n return editor.getParam('min_width', 100, 'number');\n };\n var getMinHeight = function (editor) {\n return editor.getParam('min_height', 100, 'number');\n };\n var getMaxWidth = function (editor) {\n return editor.getParam('max_width', 65535, 'number');\n };\n var getMaxHeight = function (editor) {\n return editor.getParam('max_height', 65535, 'number');\n };\n var isSkinDisabled = function (editor) {\n return editor.settings.skin === false;\n };\n var isInline = function (editor) {\n return editor.getParam('inline', false, 'boolean');\n };\n var getResize = function (editor) {\n var resize = editor.getParam('resize', 'vertical');\n if (resize === false) {\n return 'none';\n } else if (resize === 'both') {\n return 'both';\n } else {\n return 'vertical';\n }\n };\n var getSkinUrl = function (editor) {\n var settings = editor.settings;\n var skin = settings.skin;\n var skinUrl = settings.skin_url;\n if (skin !== false) {\n var skinName = skin ? skin : 'lightgray';\n if (skinUrl) {\n skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);\n } else {\n skinUrl = global$1.baseURL + '/skins/' + skinName;\n }\n }\n return skinUrl;\n };\n var getIndexedToolbars = function (settings, defaultToolbar) {\n var toolbars = [];\n for (var i = 1; i < 10; i++) {\n var toolbar = settings['toolbar' + i];\n if (!toolbar) {\n break;\n }\n toolbars.push(toolbar);\n }\n var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];\n return toolbars.length > 0 ? toolbars : mainToolbar;\n };\n var getToolbars = function (editor) {\n var toolbar = editor.getParam('toolbar');\n var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';\n if (toolbar === false) {\n return [];\n } else if (global$2.isArray(toolbar)) {\n return global$2.grep(toolbar, function (toolbar) {\n return toolbar.length > 0;\n });\n } else {\n return getIndexedToolbars(editor.settings, defaultToolbar);\n }\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');\n\n var fireSkinLoaded = function (editor) {\n return editor.fire('SkinLoaded');\n };\n var fireResizeEditor = function (editor) {\n return editor.fire('ResizeEditor');\n };\n var fireBeforeRenderUI = function (editor) {\n return editor.fire('BeforeRenderUI');\n };\n var Events = {\n fireSkinLoaded: fireSkinLoaded,\n fireResizeEditor: fireResizeEditor,\n fireBeforeRenderUI: fireBeforeRenderUI\n };\n\n var focus = function (panel, type) {\n return function () {\n var item = panel.find(type)[0];\n if (item) {\n item.focus(true);\n }\n };\n };\n var addKeys = function (editor, panel) {\n editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));\n editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));\n editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));\n panel.on('cancel', function () {\n editor.focus();\n });\n };\n var A11y = { addKeys: addKeys };\n\n var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');\n\n var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');\n\n var noop = function () {\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var getUiContainerDelta = function (ctrl) {\n var uiContainer = getUiContainer(ctrl);\n if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {\n var containerPos = global$3.DOM.getPos(uiContainer);\n var dx = uiContainer.scrollLeft - containerPos.x;\n var dy = uiContainer.scrollTop - containerPos.y;\n return Option.some({\n x: dx,\n y: dy\n });\n } else {\n return Option.none();\n }\n };\n var setUiContainer = function (editor, ctrl) {\n var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];\n ctrl.getRoot().uiContainer = uiContainer;\n };\n var getUiContainer = function (ctrl) {\n return ctrl ? ctrl.getRoot().uiContainer : null;\n };\n var inheritUiContainer = function (fromCtrl, toCtrl) {\n return toCtrl.uiContainer = getUiContainer(fromCtrl);\n };\n var UiContainer = {\n getUiContainerDelta: getUiContainerDelta,\n setUiContainer: setUiContainer,\n getUiContainer: getUiContainer,\n inheritUiContainer: inheritUiContainer\n };\n\n var createToolbar = function (editor, items, size) {\n var toolbarItems = [];\n var buttonGroup;\n if (!items) {\n return;\n }\n global$2.each(items.split(/[ ,]/), function (item) {\n var itemName;\n var bindSelectorChanged = function () {\n var selection = editor.selection;\n if (item.settings.stateSelector) {\n selection.selectorChanged(item.settings.stateSelector, function (state) {\n item.active(state);\n }, true);\n }\n if (item.settings.disabledStateSelector) {\n selection.selectorChanged(item.settings.disabledStateSelector, function (state) {\n item.disabled(state);\n });\n }\n };\n if (item === '|') {\n buttonGroup = null;\n } else {\n if (!buttonGroup) {\n buttonGroup = {\n type: 'buttongroup',\n items: []\n };\n toolbarItems.push(buttonGroup);\n }\n if (editor.buttons[item]) {\n itemName = item;\n item = editor.buttons[itemName];\n if (typeof item === 'function') {\n item = item();\n }\n item.type = item.type || 'button';\n item.size = size;\n item = global$4.create(item);\n buttonGroup.items.push(item);\n if (editor.initialized) {\n bindSelectorChanged();\n } else {\n editor.on('init', bindSelectorChanged);\n }\n }\n }\n });\n return {\n type: 'toolbar',\n layout: 'flow',\n items: toolbarItems\n };\n };\n var createToolbars = function (editor, size) {\n var toolbars = [];\n var addToolbar = function (items) {\n if (items) {\n toolbars.push(createToolbar(editor, items, size));\n }\n };\n global$2.each(getToolbars(editor), function (toolbar) {\n addToolbar(toolbar);\n });\n if (toolbars.length) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'toolbar-grp',\n ariaRoot: true,\n ariaRemember: true,\n items: toolbars\n };\n }\n };\n var Toolbar = {\n createToolbar: createToolbar,\n createToolbars: createToolbars\n };\n\n var DOM = global$3.DOM;\n var toClientRect = function (geomRect) {\n return {\n left: geomRect.x,\n top: geomRect.y,\n width: geomRect.w,\n height: geomRect.h,\n right: geomRect.x + geomRect.w,\n bottom: geomRect.y + geomRect.h\n };\n };\n var hideAllFloatingPanels = function (editor) {\n global$2.each(editor.contextToolbars, function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var movePanelTo = function (panel, pos) {\n panel.moveTo(pos.left, pos.top);\n };\n var togglePositionClass = function (panel, relPos, predicate) {\n relPos = relPos ? relPos.substr(0, 2) : '';\n global$2.each({\n t: 'down',\n b: 'up'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));\n });\n global$2.each({\n l: 'left',\n r: 'right'\n }, function (cls, pos) {\n panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));\n });\n };\n var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {\n panelRect = toClientRect({\n x: x,\n y: y,\n w: panelRect.w,\n h: panelRect.h\n });\n if (handler) {\n panelRect = handler({\n elementRect: toClientRect(elementRect),\n contentAreaRect: toClientRect(contentAreaRect),\n panelRect: panelRect\n });\n }\n return panelRect;\n };\n var addContextualToolbars = function (editor) {\n var scrollContainer;\n var getContextToolbars = function () {\n return editor.contextToolbars || [];\n };\n var getElementRect = function (elm) {\n var pos, targetRect, root;\n pos = DOM.getPos(editor.getContentAreaContainer());\n targetRect = editor.dom.getRect(elm);\n root = editor.dom.getRoot();\n if (root.nodeName === 'BODY') {\n targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;\n targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;\n }\n targetRect.x += pos.x;\n targetRect.y += pos.y;\n return targetRect;\n };\n var reposition = function (match, shouldShow) {\n var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;\n var handler = getInlineToolbarPositionHandler(editor);\n if (editor.removed) {\n return;\n }\n if (!match || !match.toolbar.panel) {\n hideAllFloatingPanels(editor);\n return;\n }\n testPositions = [\n 'bc-tc',\n 'tc-bc',\n 'tl-bl',\n 'bl-tl',\n 'tr-br',\n 'br-tr'\n ];\n panel = match.toolbar.panel;\n if (shouldShow) {\n panel.show();\n }\n elementRect = getElementRect(match.element);\n panelRect = DOM.getRect(panel.getEl());\n contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());\n var delta = UiContainer.getUiContainerDelta(panel).getOr({\n x: 0,\n y: 0\n });\n elementRect.x += delta.x;\n elementRect.y += delta.y;\n panelRect.x += delta.x;\n panelRect.y += delta.y;\n contentAreaRect.x += delta.x;\n contentAreaRect.y += delta.y;\n smallElementWidthThreshold = 25;\n if (DOM.getStyle(match.element, 'display', true) !== 'inline') {\n var clientRect = match.element.getBoundingClientRect();\n elementRect.w = clientRect.width;\n elementRect.h = clientRect.height;\n }\n if (!editor.inline) {\n contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;\n }\n if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {\n elementRect = global$6.inflate(elementRect, 0, 8);\n }\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);\n elementRect = global$6.clamp(elementRect, contentAreaRect);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n contentAreaRect.h += panelRect.h;\n elementRect = global$6.intersect(contentAreaRect, elementRect);\n if (elementRect) {\n relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [\n 'bc-tc',\n 'bl-tl',\n 'br-tr'\n ]);\n if (relPos) {\n relRect = global$6.relativePosition(panelRect, elementRect, relPos);\n movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));\n } else {\n movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));\n }\n } else {\n panel.hide();\n }\n }\n togglePositionClass(panel, relPos, function (pos1, pos2) {\n return pos1 === pos2;\n });\n };\n var repositionHandler = function (show) {\n return function () {\n var execute = function () {\n if (editor.selection) {\n reposition(findFrontMostMatch(editor.selection.getNode()), show);\n }\n };\n global$7.requestAnimationFrame(execute);\n };\n };\n var bindScrollEvent = function (panel) {\n if (!scrollContainer) {\n var reposition_1 = repositionHandler(true);\n var uiContainer_1 = UiContainer.getUiContainer(panel);\n scrollContainer = editor.selection.getScrollContainer() || editor.getWin();\n DOM.bind(scrollContainer, 'scroll', reposition_1);\n DOM.bind(uiContainer_1, 'scroll', reposition_1);\n editor.on('remove', function () {\n DOM.unbind(scrollContainer, 'scroll', reposition_1);\n DOM.unbind(uiContainer_1, 'scroll', reposition_1);\n });\n }\n };\n var showContextToolbar = function (match) {\n var panel;\n if (match.toolbar.panel) {\n match.toolbar.panel.show();\n reposition(match);\n return;\n }\n panel = global$4.create({\n type: 'floatpanel',\n role: 'dialog',\n classes: 'tinymce tinymce-inline arrow',\n ariaLabel: 'Inline toolbar',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: true,\n border: 1,\n items: Toolbar.createToolbar(editor, match.toolbar.items),\n oncancel: function () {\n editor.focus();\n }\n });\n UiContainer.setUiContainer(editor, panel);\n bindScrollEvent(panel);\n match.toolbar.panel = panel;\n panel.renderTo().reflow();\n reposition(match);\n };\n var hideAllContextToolbars = function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.hide();\n }\n });\n };\n var findFrontMostMatch = function (targetElm) {\n var i, y, parentsAndSelf;\n var toolbars = getContextToolbars();\n parentsAndSelf = editor.$(targetElm).parents().add(targetElm);\n for (i = parentsAndSelf.length - 1; i >= 0; i--) {\n for (y = toolbars.length - 1; y >= 0; y--) {\n if (toolbars[y].predicate(parentsAndSelf[i])) {\n return {\n toolbar: toolbars[y],\n element: parentsAndSelf[i]\n };\n }\n }\n }\n return null;\n };\n editor.on('click keyup setContent ObjectResized', function (e) {\n if (e.type === 'setcontent' && !e.selection) {\n return;\n }\n global$7.setEditorTimeout(editor, function () {\n var match;\n match = findFrontMostMatch(editor.selection.getNode());\n if (match) {\n hideAllContextToolbars();\n showContextToolbar(match);\n } else {\n hideAllContextToolbars();\n }\n });\n });\n editor.on('blur hide contextmenu', hideAllContextToolbars);\n editor.on('ObjectResizeStart', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.hide();\n }\n });\n editor.on('ResizeEditor ResizeWindow', repositionHandler(true));\n editor.on('nodeChange', repositionHandler(false));\n editor.on('remove', function () {\n global$2.each(getContextToolbars(), function (toolbar) {\n if (toolbar.panel) {\n toolbar.panel.remove();\n }\n });\n editor.contextToolbars = {};\n });\n editor.shortcuts.add('ctrl+F9', '', function () {\n var match = findFrontMostMatch(editor.selection.getNode());\n if (match && match.toolbar.panel) {\n match.toolbar.panel.items()[0].focus();\n }\n });\n };\n var ContextToolbars = { addContextualToolbars: addContextualToolbars };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isArray = isType('array');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var indexOf = function (xs, x) {\n var r = rawIndexOf(xs, x);\n return r === -1 ? Option.none() : Option.some(r);\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var defaultMenus = {\n file: {\n title: 'File',\n items: 'newdocument restoredraft | preview | print'\n },\n edit: {\n title: 'Edit',\n items: 'undo redo | cut copy paste pastetext | selectall'\n },\n view: {\n title: 'View',\n items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'\n },\n insert: {\n title: 'Insert',\n items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'\n },\n format: {\n title: 'Format',\n items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'\n },\n tools: {\n title: 'Tools',\n items: 'spellchecker spellcheckerlanguage | a11ycheck code'\n },\n table: { title: 'Table' },\n help: { title: 'Help' }\n };\n var delimiterMenuNamePair = function () {\n return {\n name: '|',\n item: { text: '|' }\n };\n };\n var createMenuNameItemPair = function (name, item) {\n var menuItem = item ? {\n name: name,\n item: item\n } : null;\n return name === '|' ? delimiterMenuNamePair() : menuItem;\n };\n var hasItemName = function (namedMenuItems, name) {\n return findIndex(namedMenuItems, function (namedMenuItem) {\n return namedMenuItem.name === name;\n }).isSome();\n };\n var isSeparator = function (namedMenuItem) {\n return namedMenuItem && namedMenuItem.item.text === '|';\n };\n var cleanupMenu = function (namedMenuItems, removedMenuItems) {\n var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {\n return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;\n });\n var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || !isSeparator(menuItemsPass1[i - 1]);\n });\n return filter(menuItemsPass2, function (namedMenuItem, i) {\n return !isSeparator(namedMenuItem) || i > 0 && i < menuItemsPass2.length - 1;\n });\n };\n var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {\n var menuButton, menu, namedMenuItems, isUserDefined;\n if (menus) {\n menu = menus[context];\n isUserDefined = true;\n } else {\n menu = defaultMenus[context];\n }\n if (menu) {\n menuButton = { text: menu.title };\n namedMenuItems = [];\n global$2.each((menu.items || '').split(/[ ,]/), function (name) {\n var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);\n if (namedMenuItem) {\n namedMenuItems.push(namedMenuItem);\n }\n });\n if (!isUserDefined) {\n global$2.each(editorMenuItems, function (item, name) {\n if (item.context === context && !hasItemName(namedMenuItems, name)) {\n if (item.separator === 'before') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n if (item.prependToContext) {\n namedMenuItems.unshift(createMenuNameItemPair(name, item));\n } else {\n namedMenuItems.push(createMenuNameItemPair(name, item));\n }\n if (item.separator === 'after') {\n namedMenuItems.push(delimiterMenuNamePair());\n }\n }\n });\n }\n menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {\n return menuItem.item;\n });\n if (!menuButton.menu.length) {\n return null;\n }\n }\n return menuButton;\n };\n var getDefaultMenubar = function (editor) {\n var name;\n var defaultMenuBar = [];\n var menu = getMenu(editor);\n if (menu) {\n for (name in menu) {\n defaultMenuBar.push(name);\n }\n } else {\n for (name in defaultMenus) {\n defaultMenuBar.push(name);\n }\n }\n return defaultMenuBar;\n };\n var createMenuButtons = function (editor) {\n var menuButtons = [];\n var defaultMenuBar = getDefaultMenubar(editor);\n var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));\n var menubar = getMenubar(editor);\n var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;\n for (var i = 0; i < enabledMenuNames.length; i++) {\n var menuItems = enabledMenuNames[i];\n var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);\n if (menu) {\n menuButtons.push(menu);\n }\n }\n return menuButtons;\n };\n var Menubar = { createMenuButtons: createMenuButtons };\n\n var DOM$1 = global$3.DOM;\n var getSize = function (elm) {\n return {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n };\n var resizeTo = function (editor, width, height) {\n var containerElm, iframeElm, containerSize, iframeSize;\n containerElm = editor.getContainer();\n iframeElm = editor.getContentAreaContainer().firstChild;\n containerSize = getSize(containerElm);\n iframeSize = getSize(iframeElm);\n if (width !== null) {\n width = Math.max(getMinWidth(editor), width);\n width = Math.min(getMaxWidth(editor), width);\n DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));\n DOM$1.setStyle(iframeElm, 'width', width);\n }\n height = Math.max(getMinHeight(editor), height);\n height = Math.min(getMaxHeight(editor), height);\n DOM$1.setStyle(iframeElm, 'height', height);\n Events.fireResizeEditor(editor);\n };\n var resizeBy = function (editor, dw, dh) {\n var elm = editor.getContentAreaContainer();\n resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);\n };\n var Resize = {\n resizeTo: resizeTo,\n resizeBy: resizeBy\n };\n\n var global$8 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var api = function (elm) {\n return {\n element: function () {\n return elm;\n }\n };\n };\n var trigger = function (sidebar, panel, callbackName) {\n var callback = sidebar.settings[callbackName];\n if (callback) {\n callback(api(panel.getEl('body')));\n }\n };\n var hidePanels = function (name, container, sidebars) {\n global$2.each(sidebars, function (sidebar) {\n var panel = container.items().filter('#' + sidebar.name)[0];\n if (panel && panel.visible() && sidebar.name !== name) {\n trigger(sidebar, panel, 'onhide');\n panel.visible(false);\n }\n });\n };\n var deactivateButtons = function (toolbar) {\n toolbar.items().each(function (ctrl) {\n ctrl.active(false);\n });\n };\n var findSidebar = function (sidebars, name) {\n return global$2.grep(sidebars, function (sidebar) {\n return sidebar.name === name;\n })[0];\n };\n var showPanel = function (editor, name, sidebars) {\n return function (e) {\n var btnCtrl = e.control;\n var container = btnCtrl.parents().filter('panel')[0];\n var panel = container.find('#' + name)[0];\n var sidebar = findSidebar(sidebars, name);\n hidePanels(name, container, sidebars);\n deactivateButtons(btnCtrl.parent());\n if (panel && panel.visible()) {\n trigger(sidebar, panel, 'onhide');\n panel.hide();\n btnCtrl.active(false);\n } else {\n if (panel) {\n panel.show();\n trigger(sidebar, panel, 'onshow');\n } else {\n panel = global$4.create({\n type: 'container',\n name: name,\n layout: 'stack',\n classes: 'sidebar-panel',\n html: ''\n });\n container.prepend(panel);\n trigger(sidebar, panel, 'onrender');\n trigger(sidebar, panel, 'onshow');\n }\n btnCtrl.active(true);\n }\n Events.fireResizeEditor(editor);\n };\n };\n var isModernBrowser = function () {\n return !global$8.ie || global$8.ie >= 11;\n };\n var hasSidebar = function (editor) {\n return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;\n };\n var createSidebar = function (editor) {\n var buttons = global$2.map(editor.sidebars, function (sidebar) {\n var settings = sidebar.settings;\n return {\n type: 'button',\n icon: settings.icon,\n image: settings.image,\n tooltip: settings.tooltip,\n onclick: showPanel(editor, sidebar.name, editor.sidebars)\n };\n });\n return {\n type: 'panel',\n name: 'sidebar',\n layout: 'stack',\n classes: 'sidebar',\n items: [{\n type: 'toolbar',\n layout: 'stack',\n classes: 'sidebar-toolbar',\n items: buttons\n }]\n };\n };\n var Sidebar = {\n hasSidebar: hasSidebar,\n createSidebar: createSidebar\n };\n\n var fireSkinLoaded$1 = function (editor) {\n var done = function () {\n editor._skinLoaded = true;\n Events.fireSkinLoaded(editor);\n };\n return function () {\n if (editor.initialized) {\n done();\n } else {\n editor.on('init', done);\n }\n };\n };\n var SkinLoaded = { fireSkinLoaded: fireSkinLoaded$1 };\n\n var DOM$2 = global$3.DOM;\n var switchMode = function (panel) {\n return function (e) {\n panel.find('*').disabled(e.mode === 'readonly');\n };\n };\n var editArea = function (border) {\n return {\n type: 'panel',\n name: 'iframe',\n layout: 'stack',\n classes: 'edit-area',\n border: border,\n html: ''\n };\n };\n var editAreaContainer = function (editor) {\n return {\n type: 'panel',\n layout: 'stack',\n classes: 'edit-aria-container',\n border: '1 0 0 0',\n items: [\n editArea('0'),\n Sidebar.createSidebar(editor)\n ]\n };\n };\n var render = function (editor, theme, args) {\n var panel, resizeHandleCtrl, startSize;\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM$2.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n panel = theme.panel = global$4.create({\n type: 'panel',\n role: 'application',\n classes: 'tinymce',\n style: 'visibility: hidden',\n layout: 'stack',\n border: 1,\n items: [\n {\n type: 'container',\n classes: 'top-part',\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n },\n Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n if (getResize(editor) !== 'none') {\n resizeHandleCtrl = {\n type: 'resizehandle',\n direction: getResize(editor),\n onResizeStart: function () {\n var elm = editor.getContentAreaContainer().firstChild;\n startSize = {\n width: elm.clientWidth,\n height: elm.clientHeight\n };\n },\n onResize: function (e) {\n if (getResize(editor) === 'both') {\n Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);\n } else {\n Resize.resizeTo(editor, null, startSize.height + e.deltaY);\n }\n }\n };\n }\n if (hasStatusbar(editor)) {\n var linkHtml = 'Tiny';\n var html = global$5.translate([\n 'Powered by {0}',\n linkHtml\n ]);\n var brandingLabel = isBrandingEnabled(editor) ? {\n type: 'label',\n classes: 'branding',\n html: ' ' + html\n } : null;\n panel.add({\n type: 'panel',\n name: 'statusbar',\n classes: 'statusbar',\n layout: 'flow',\n border: '1 0 0 0',\n ariaRoot: true,\n items: [\n {\n type: 'elementpath',\n editor: editor\n },\n resizeHandleCtrl,\n brandingLabel\n ]\n });\n }\n Events.fireBeforeRenderUI(editor);\n editor.on('SwitchMode', switchMode(panel));\n panel.renderBefore(args.targetNode).reflow();\n if (isReadOnly(editor)) {\n editor.setMode('readonly');\n }\n if (args.width) {\n DOM$2.setStyle(panel.getEl(), 'width', args.width);\n }\n editor.on('remove', function () {\n panel.remove();\n panel = null;\n });\n A11y.addKeys(editor, panel);\n ContextToolbars.addContextualToolbars(editor);\n return {\n iframeContainer: panel.find('#iframe')[0].getEl(),\n editorContainer: panel.getEl()\n };\n };\n var Iframe = { render: render };\n\n var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');\n\n var count = 0;\n var funcs = {\n id: function () {\n return 'mceu_' + count++;\n },\n create: function (name, attrs, children) {\n var elm = domGlobals.document.createElement(name);\n global$3.DOM.setAttribs(elm, attrs);\n if (typeof children === 'string') {\n elm.innerHTML = children;\n } else {\n global$2.each(children, function (child) {\n if (child.nodeType) {\n elm.appendChild(child);\n }\n });\n }\n return elm;\n },\n createFragment: function (html) {\n return global$3.DOM.createFragment(html);\n },\n getWindowSize: function () {\n return global$3.DOM.getViewPort();\n },\n getSize: function (elm) {\n var width, height;\n if (elm.getBoundingClientRect) {\n var rect = elm.getBoundingClientRect();\n width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);\n height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);\n } else {\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n }\n return {\n width: width,\n height: height\n };\n },\n getPos: function (elm, root) {\n return global$3.DOM.getPos(elm, root || funcs.getContainer());\n },\n getContainer: function () {\n return global$8.container ? global$8.container : domGlobals.document.body;\n },\n getViewPort: function (win) {\n return global$3.DOM.getViewPort(win);\n },\n get: function (id) {\n return domGlobals.document.getElementById(id);\n },\n addClass: function (elm, cls) {\n return global$3.DOM.addClass(elm, cls);\n },\n removeClass: function (elm, cls) {\n return global$3.DOM.removeClass(elm, cls);\n },\n hasClass: function (elm, cls) {\n return global$3.DOM.hasClass(elm, cls);\n },\n toggleClass: function (elm, cls, state) {\n return global$3.DOM.toggleClass(elm, cls, state);\n },\n css: function (elm, name, value) {\n return global$3.DOM.setStyle(elm, name, value);\n },\n getRuntimeStyle: function (elm, name) {\n return global$3.DOM.getStyle(elm, name, true);\n },\n on: function (target, name, callback, scope) {\n return global$3.DOM.bind(target, name, callback, scope);\n },\n off: function (target, name, callback) {\n return global$3.DOM.unbind(target, name, callback);\n },\n fire: function (target, name, args) {\n return global$3.DOM.fire(target, name, args);\n },\n innerHtml: function (elm, html) {\n global$3.DOM.setHTML(elm, html);\n }\n };\n\n var isStatic = function (elm) {\n return funcs.getRuntimeStyle(elm, 'position') === 'static';\n };\n var isFixed = function (ctrl) {\n return ctrl.state.get('fixed');\n };\n function calculateRelativePosition(ctrl, targetElm, rel) {\n var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;\n viewport = getWindowViewPort();\n pos = funcs.getPos(targetElm, UiContainer.getUiContainer(ctrl));\n x = pos.x;\n y = pos.y;\n if (isFixed(ctrl) && isStatic(domGlobals.document.body)) {\n x -= viewport.x;\n y -= viewport.y;\n }\n ctrlElm = ctrl.getEl();\n size = funcs.getSize(ctrlElm);\n selfW = size.width;\n selfH = size.height;\n size = funcs.getSize(targetElm);\n targetW = size.width;\n targetH = size.height;\n rel = (rel || '').split('');\n if (rel[0] === 'b') {\n y += targetH;\n }\n if (rel[1] === 'r') {\n x += targetW;\n }\n if (rel[0] === 'c') {\n y += Math.round(targetH / 2);\n }\n if (rel[1] === 'c') {\n x += Math.round(targetW / 2);\n }\n if (rel[3] === 'b') {\n y -= selfH;\n }\n if (rel[4] === 'r') {\n x -= selfW;\n }\n if (rel[3] === 'c') {\n y -= Math.round(selfH / 2);\n }\n if (rel[4] === 'c') {\n x -= Math.round(selfW / 2);\n }\n return {\n x: x,\n y: y,\n w: selfW,\n h: selfH\n };\n }\n var getUiContainerViewPort = function (customUiContainer) {\n return {\n x: 0,\n y: 0,\n w: customUiContainer.scrollWidth - 1,\n h: customUiContainer.scrollHeight - 1\n };\n };\n var getWindowViewPort = function () {\n var win = domGlobals.window;\n var x = Math.max(win.pageXOffset, domGlobals.document.body.scrollLeft, domGlobals.document.documentElement.scrollLeft);\n var y = Math.max(win.pageYOffset, domGlobals.document.body.scrollTop, domGlobals.document.documentElement.scrollTop);\n var w = win.innerWidth || domGlobals.document.documentElement.clientWidth;\n var h = win.innerHeight || domGlobals.document.documentElement.clientHeight;\n return {\n x: x,\n y: y,\n w: w,\n h: h\n };\n };\n var getViewPortRect = function (ctrl) {\n var customUiContainer = UiContainer.getUiContainer(ctrl);\n return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();\n };\n var Movable = {\n testMoveRel: function (elm, rels) {\n var viewPortRect = getViewPortRect(this);\n for (var i = 0; i < rels.length; i++) {\n var pos = calculateRelativePosition(this, elm, rels[i]);\n if (isFixed(this)) {\n if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {\n return rels[i];\n }\n } else {\n if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w + viewPortRect.x && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h + viewPortRect.y) {\n return rels[i];\n }\n }\n }\n return rels[0];\n },\n moveRel: function (elm, rel) {\n if (typeof rel !== 'string') {\n rel = this.testMoveRel(elm, rel);\n }\n var pos = calculateRelativePosition(this, elm, rel);\n return this.moveTo(pos.x, pos.y);\n },\n moveBy: function (dx, dy) {\n var self = this, rect = self.layoutRect();\n self.moveTo(rect.x + dx, rect.y + dy);\n return self;\n },\n moveTo: function (x, y) {\n var self = this;\n function constrain(value, max, size) {\n if (value < 0) {\n return 0;\n }\n if (value + size > max) {\n value = max - size;\n return value < 0 ? 0 : value;\n }\n return value;\n }\n if (self.settings.constrainToViewport) {\n var viewPortRect = getViewPortRect(this);\n var layoutRect = self.layoutRect();\n x = constrain(x, viewPortRect.w + viewPortRect.x, layoutRect.w);\n y = constrain(y, viewPortRect.h + viewPortRect.y, layoutRect.h);\n }\n var uiContainer = UiContainer.getUiContainer(self);\n if (uiContainer && isStatic(uiContainer) && !isFixed(self)) {\n x -= uiContainer.scrollLeft;\n y -= uiContainer.scrollTop;\n }\n if (uiContainer) {\n x += 1;\n y += 1;\n }\n if (self.state.get('rendered')) {\n self.layoutRect({\n x: x,\n y: y\n }).repaint();\n } else {\n self.settings.x = x;\n self.settings.y = y;\n }\n self.fire('move', {\n x: x,\n y: y\n });\n return self;\n }\n };\n\n var global$a = tinymce.util.Tools.resolve('tinymce.util.Class');\n\n var global$b = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');\n\n var BoxUtils = {\n parseBox: function (value) {\n var len;\n var radix = 10;\n if (!value) {\n return;\n }\n if (typeof value === 'number') {\n value = value || 0;\n return {\n top: value,\n left: value,\n bottom: value,\n right: value\n };\n }\n value = value.split(' ');\n len = value.length;\n if (len === 1) {\n value[1] = value[2] = value[3] = value[0];\n } else if (len === 2) {\n value[2] = value[0];\n value[3] = value[1];\n } else if (len === 3) {\n value[3] = value[1];\n }\n return {\n top: parseInt(value[0], radix) || 0,\n right: parseInt(value[1], radix) || 0,\n bottom: parseInt(value[2], radix) || 0,\n left: parseInt(value[3], radix) || 0\n };\n },\n measureBox: function (elm, prefix) {\n function getStyle(name) {\n var defaultView = elm.ownerDocument.defaultView;\n if (defaultView) {\n var computedStyle = defaultView.getComputedStyle(elm, null);\n if (computedStyle) {\n name = name.replace(/[A-Z]/g, function (a) {\n return '-' + a;\n });\n return computedStyle.getPropertyValue(name);\n } else {\n return null;\n }\n }\n return elm.currentStyle[name];\n }\n function getSide(name) {\n var val = parseFloat(getStyle(name));\n return isNaN(val) ? 0 : val;\n }\n return {\n top: getSide(prefix + 'TopWidth'),\n right: getSide(prefix + 'RightWidth'),\n bottom: getSide(prefix + 'BottomWidth'),\n left: getSide(prefix + 'LeftWidth')\n };\n }\n };\n\n function noop$1() {\n }\n function ClassList(onchange) {\n this.cls = [];\n this.cls._map = {};\n this.onchange = onchange || noop$1;\n this.prefix = '';\n }\n global$2.extend(ClassList.prototype, {\n add: function (cls) {\n if (cls && !this.contains(cls)) {\n this.cls._map[cls] = true;\n this.cls.push(cls);\n this._change();\n }\n return this;\n },\n remove: function (cls) {\n if (this.contains(cls)) {\n var i = void 0;\n for (i = 0; i < this.cls.length; i++) {\n if (this.cls[i] === cls) {\n break;\n }\n }\n this.cls.splice(i, 1);\n delete this.cls._map[cls];\n this._change();\n }\n return this;\n },\n toggle: function (cls, state) {\n var curState = this.contains(cls);\n if (curState !== state) {\n if (curState) {\n this.remove(cls);\n } else {\n this.add(cls);\n }\n this._change();\n }\n return this;\n },\n contains: function (cls) {\n return !!this.cls._map[cls];\n },\n _change: function () {\n delete this.clsValue;\n this.onchange.call(this);\n }\n });\n ClassList.prototype.toString = function () {\n var value;\n if (this.clsValue) {\n return this.clsValue;\n }\n value = '';\n for (var i = 0; i < this.cls.length; i++) {\n if (i > 0) {\n value += ' ';\n }\n value += this.prefix + this.cls[i];\n }\n return value;\n };\n\n function unique(array) {\n var uniqueItems = [];\n var i = array.length, item;\n while (i--) {\n item = array[i];\n if (!item.__checked) {\n uniqueItems.push(item);\n item.__checked = 1;\n }\n }\n i = uniqueItems.length;\n while (i--) {\n delete uniqueItems[i].__checked;\n }\n return uniqueItems;\n }\n var expression = /^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i;\n var chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n var whiteSpace = /^\\s*|\\s*$/g;\n var Collection;\n var Selector = global$a.extend({\n init: function (selector) {\n var match = this.match;\n function compileNameFilter(name) {\n if (name) {\n name = name.toLowerCase();\n return function (item) {\n return name === '*' || item.type === name;\n };\n }\n }\n function compileIdFilter(id) {\n if (id) {\n return function (item) {\n return item._name === id;\n };\n }\n }\n function compileClassesFilter(classes) {\n if (classes) {\n classes = classes.split('.');\n return function (item) {\n var i = classes.length;\n while (i--) {\n if (!item.classes.contains(classes[i])) {\n return false;\n }\n }\n return true;\n };\n }\n }\n function compileAttrFilter(name, cmp, check) {\n if (name) {\n return function (item) {\n var value = item[name] ? item[name]() : '';\n return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;\n };\n }\n }\n function compilePsuedoFilter(name) {\n var notSelectors;\n if (name) {\n name = /(?:not\\((.+)\\))|(.+)/i.exec(name);\n if (!name[1]) {\n name = name[2];\n return function (item, index, length) {\n return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;\n };\n }\n notSelectors = parseChunks(name[1], []);\n return function (item) {\n return !match(item, notSelectors);\n };\n }\n }\n function compile(selector, filters, direct) {\n var parts;\n function add(filter) {\n if (filter) {\n filters.push(filter);\n }\n }\n parts = expression.exec(selector.replace(whiteSpace, ''));\n add(compileNameFilter(parts[1]));\n add(compileIdFilter(parts[2]));\n add(compileClassesFilter(parts[3]));\n add(compileAttrFilter(parts[4], parts[5], parts[6]));\n add(compilePsuedoFilter(parts[7]));\n filters.pseudo = !!parts[7];\n filters.direct = direct;\n return filters;\n }\n function parseChunks(selector, selectors) {\n var parts = [];\n var extra, matches, i;\n do {\n chunker.exec('');\n matches = chunker.exec(selector);\n if (matches) {\n selector = matches[3];\n parts.push(matches[1]);\n if (matches[2]) {\n extra = matches[3];\n break;\n }\n }\n } while (matches);\n if (extra) {\n parseChunks(extra, selectors);\n }\n selector = [];\n for (i = 0; i < parts.length; i++) {\n if (parts[i] !== '>') {\n selector.push(compile(parts[i], [], parts[i - 1] === '>'));\n }\n }\n selectors.push(selector);\n return selectors;\n }\n this._selectors = parseChunks(selector, []);\n },\n match: function (control, selectors) {\n var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;\n selectors = selectors || this._selectors;\n for (i = 0, l = selectors.length; i < l; i++) {\n selector = selectors[i];\n sl = selector.length;\n item = control;\n count = 0;\n for (si = sl - 1; si >= 0; si--) {\n filters = selector[si];\n while (item) {\n if (filters.pseudo) {\n siblings = item.parent().items();\n index = length = siblings.length;\n while (index--) {\n if (siblings[index] === item) {\n break;\n }\n }\n }\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, index, length)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n count++;\n break;\n } else {\n if (si === sl - 1) {\n break;\n }\n }\n item = item.parent();\n }\n }\n if (count === sl) {\n return true;\n }\n }\n return false;\n },\n find: function (container) {\n var matches = [], i, l;\n var selectors = this._selectors;\n function collect(items, selector, index) {\n var i, l, fi, fl, item;\n var filters = selector[index];\n for (i = 0, l = items.length; i < l; i++) {\n item = items[i];\n for (fi = 0, fl = filters.length; fi < fl; fi++) {\n if (!filters[fi](item, i, l)) {\n fi = fl + 1;\n break;\n }\n }\n if (fi === fl) {\n if (index === selector.length - 1) {\n matches.push(item);\n } else {\n if (item.items) {\n collect(item.items(), selector, index + 1);\n }\n }\n } else if (filters.direct) {\n return;\n }\n if (item.items) {\n collect(item.items(), selector, index);\n }\n }\n }\n if (container.items) {\n for (i = 0, l = selectors.length; i < l; i++) {\n collect(container.items(), selectors[i], 0);\n }\n if (l > 1) {\n matches = unique(matches);\n }\n }\n if (!Collection) {\n Collection = Selector.Collection;\n }\n return new Collection(matches);\n }\n });\n\n var Collection$1, proto;\n var push = Array.prototype.push, slice = Array.prototype.slice;\n proto = {\n length: 0,\n init: function (items) {\n if (items) {\n this.add(items);\n }\n },\n add: function (items) {\n var self = this;\n if (!global$2.isArray(items)) {\n if (items instanceof Collection$1) {\n self.add(items.toArray());\n } else {\n push.call(self, items);\n }\n } else {\n push.apply(self, items);\n }\n return self;\n },\n set: function (items) {\n var self = this;\n var len = self.length;\n var i;\n self.length = 0;\n self.add(items);\n for (i = self.length; i < len; i++) {\n delete self[i];\n }\n return self;\n },\n filter: function (selector) {\n var self = this;\n var i, l;\n var matches = [];\n var item, match;\n if (typeof selector === 'string') {\n selector = new Selector(selector);\n match = function (item) {\n return selector.match(item);\n };\n } else {\n match = selector;\n }\n for (i = 0, l = self.length; i < l; i++) {\n item = self[i];\n if (match(item)) {\n matches.push(item);\n }\n }\n return new Collection$1(matches);\n },\n slice: function () {\n return new Collection$1(slice.apply(this, arguments));\n },\n eq: function (index) {\n return index === -1 ? this.slice(index) : this.slice(index, +index + 1);\n },\n each: function (callback) {\n global$2.each(this, callback);\n return this;\n },\n toArray: function () {\n return global$2.toArray(this);\n },\n indexOf: function (ctrl) {\n var self = this;\n var i = self.length;\n while (i--) {\n if (self[i] === ctrl) {\n break;\n }\n }\n return i;\n },\n reverse: function () {\n return new Collection$1(global$2.toArray(this).reverse());\n },\n hasClass: function (cls) {\n return this[0] ? this[0].classes.contains(cls) : false;\n },\n prop: function (name, value) {\n var self = this;\n var item;\n if (value !== undefined) {\n self.each(function (item) {\n if (item[name]) {\n item[name](value);\n }\n });\n return self;\n }\n item = self[0];\n if (item && item[name]) {\n return item[name]();\n }\n },\n exec: function (name) {\n var self = this, args = global$2.toArray(arguments).slice(1);\n self.each(function (item) {\n if (item[name]) {\n item[name].apply(item, args);\n }\n });\n return self;\n },\n remove: function () {\n var i = this.length;\n while (i--) {\n this[i].remove();\n }\n return this;\n },\n addClass: function (cls) {\n return this.each(function (item) {\n item.classes.add(cls);\n });\n },\n removeClass: function (cls) {\n return this.each(function (item) {\n item.classes.remove(cls);\n });\n }\n };\n global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {\n proto[name] = function () {\n var args = global$2.toArray(arguments);\n this.each(function (ctrl) {\n if (name in ctrl) {\n ctrl[name].apply(ctrl, args);\n }\n });\n return this;\n };\n });\n global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {\n proto[name] = function (value) {\n return this.prop(name, value);\n };\n });\n Collection$1 = global$a.extend(proto);\n Selector.Collection = Collection$1;\n var Collection$2 = Collection$1;\n\n var Binding = function (settings) {\n this.create = settings.create;\n };\n Binding.create = function (model, name) {\n return new Binding({\n create: function (otherModel, otherName) {\n var bindings;\n var fromSelfToOther = function (e) {\n otherModel.set(otherName, e.value);\n };\n var fromOtherToSelf = function (e) {\n model.set(name, e.value);\n };\n otherModel.on('change:' + otherName, fromOtherToSelf);\n model.on('change:' + name, fromSelfToOther);\n bindings = otherModel._bindings;\n if (!bindings) {\n bindings = otherModel._bindings = [];\n otherModel.on('destroy', function () {\n var i = bindings.length;\n while (i--) {\n bindings[i]();\n }\n });\n }\n bindings.push(function () {\n model.off('change:' + name, fromSelfToOther);\n });\n return model.get(name);\n }\n });\n };\n\n var global$c = tinymce.util.Tools.resolve('tinymce.util.Observable');\n\n function isNode(node) {\n return node.nodeType > 0;\n }\n function isEqual(a, b) {\n var k, checked;\n if (a === b) {\n return true;\n }\n if (a === null || b === null) {\n return a === b;\n }\n if (typeof a !== 'object' || typeof b !== 'object') {\n return a === b;\n }\n if (global$2.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n k = a.length;\n while (k--) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n }\n }\n if (isNode(a) || isNode(b)) {\n return a === b;\n }\n checked = {};\n for (k in b) {\n if (!isEqual(a[k], b[k])) {\n return false;\n }\n checked[k] = true;\n }\n for (k in a) {\n if (!checked[k] && !isEqual(a[k], b[k])) {\n return false;\n }\n }\n return true;\n }\n var ObservableObject = global$a.extend({\n Mixins: [global$c],\n init: function (data) {\n var name, value;\n data = data || {};\n for (name in data) {\n value = data[name];\n if (value instanceof Binding) {\n data[name] = value.create(this, name);\n }\n }\n this.data = data;\n },\n set: function (name, value) {\n var key, args;\n var oldValue = this.data[name];\n if (value instanceof Binding) {\n value = value.create(this, name);\n }\n if (typeof name === 'object') {\n for (key in name) {\n this.set(key, name[key]);\n }\n return this;\n }\n if (!isEqual(oldValue, value)) {\n this.data[name] = value;\n args = {\n target: this,\n name: name,\n value: value,\n oldValue: oldValue\n };\n this.fire('change:' + name, args);\n this.fire('change', args);\n }\n return this;\n },\n get: function (name) {\n return this.data[name];\n },\n has: function (name) {\n return name in this.data;\n },\n bind: function (name) {\n return Binding.create(this, name);\n },\n destroy: function () {\n this.fire('destroy');\n }\n });\n\n var dirtyCtrls = {}, animationFrameRequested;\n var ReflowQueue = {\n add: function (ctrl) {\n var parent = ctrl.parent();\n if (parent) {\n if (!parent._layout || parent._layout.isNative()) {\n return;\n }\n if (!dirtyCtrls[parent._id]) {\n dirtyCtrls[parent._id] = parent;\n }\n if (!animationFrameRequested) {\n animationFrameRequested = true;\n global$7.requestAnimationFrame(function () {\n var id, ctrl;\n animationFrameRequested = false;\n for (id in dirtyCtrls) {\n ctrl = dirtyCtrls[id];\n if (ctrl.state.get('rendered')) {\n ctrl.reflow();\n }\n }\n dirtyCtrls = {};\n }, domGlobals.document.body);\n }\n }\n },\n remove: function (ctrl) {\n if (dirtyCtrls[ctrl._id]) {\n delete dirtyCtrls[ctrl._id];\n }\n }\n };\n\n var hasMouseWheelEventSupport = 'onmousewheel' in domGlobals.document;\n var hasWheelEventSupport = false;\n var classPrefix = 'mce-';\n var Control, idCounter = 0;\n var proto$1 = {\n Statics: { classPrefix: classPrefix },\n isRtl: function () {\n return Control.rtl;\n },\n classPrefix: classPrefix,\n init: function (settings) {\n var self = this;\n var classes, defaultClasses;\n function applyClasses(classes) {\n var i;\n classes = classes.split(' ');\n for (i = 0; i < classes.length; i++) {\n self.classes.add(classes[i]);\n }\n }\n self.settings = settings = global$2.extend({}, self.Defaults, settings);\n self._id = settings.id || 'mceu_' + idCounter++;\n self._aria = { role: settings.role };\n self._elmCache = {};\n self.$ = global$9;\n self.state = new ObservableObject({\n visible: true,\n active: false,\n disabled: false,\n value: ''\n });\n self.data = new ObservableObject(settings.data);\n self.classes = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl().className = this.toString();\n }\n });\n self.classes.prefix = self.classPrefix;\n classes = settings.classes;\n if (classes) {\n if (self.Defaults) {\n defaultClasses = self.Defaults.classes;\n if (defaultClasses && classes !== defaultClasses) {\n applyClasses(defaultClasses);\n }\n }\n applyClasses(classes);\n }\n global$2.each('title text name visible disabled active value'.split(' '), function (name) {\n if (name in settings) {\n self[name](settings[name]);\n }\n });\n self.on('click', function () {\n if (self.disabled()) {\n return false;\n }\n });\n self.settings = settings;\n self.borderBox = BoxUtils.parseBox(settings.border);\n self.paddingBox = BoxUtils.parseBox(settings.padding);\n self.marginBox = BoxUtils.parseBox(settings.margin);\n if (settings.hidden) {\n self.hide();\n }\n },\n Properties: 'parent,name',\n getContainerElm: function () {\n var uiContainer = UiContainer.getUiContainer(this);\n return uiContainer ? uiContainer : funcs.getContainer();\n },\n getParentCtrl: function (elm) {\n var ctrl;\n var lookup = this.getRoot().controlIdLookup;\n while (elm && lookup) {\n ctrl = lookup[elm.id];\n if (ctrl) {\n break;\n }\n elm = elm.parentNode;\n }\n return ctrl;\n },\n initLayoutRect: function () {\n var self = this;\n var settings = self.settings;\n var borderBox, layoutRect;\n var elm = self.getEl();\n var width, height, minWidth, minHeight, autoResize;\n var startMinWidth, startMinHeight, initialSize;\n borderBox = self.borderBox = self.borderBox || BoxUtils.measureBox(elm, 'border');\n self.paddingBox = self.paddingBox || BoxUtils.measureBox(elm, 'padding');\n self.marginBox = self.marginBox || BoxUtils.measureBox(elm, 'margin');\n initialSize = funcs.getSize(elm);\n startMinWidth = settings.minWidth;\n startMinHeight = settings.minHeight;\n minWidth = startMinWidth || initialSize.width;\n minHeight = startMinHeight || initialSize.height;\n width = settings.width;\n height = settings.height;\n autoResize = settings.autoResize;\n autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;\n width = width || minWidth;\n height = height || minHeight;\n var deltaW = borderBox.left + borderBox.right;\n var deltaH = borderBox.top + borderBox.bottom;\n var maxW = settings.maxWidth || 65535;\n var maxH = settings.maxHeight || 65535;\n self._layoutRect = layoutRect = {\n x: settings.x || 0,\n y: settings.y || 0,\n w: width,\n h: height,\n deltaW: deltaW,\n deltaH: deltaH,\n contentW: width - deltaW,\n contentH: height - deltaH,\n innerW: width - deltaW,\n innerH: height - deltaH,\n startMinWidth: startMinWidth || 0,\n startMinHeight: startMinHeight || 0,\n minW: Math.min(minWidth, maxW),\n minH: Math.min(minHeight, maxH),\n maxW: maxW,\n maxH: maxH,\n autoResize: autoResize,\n scrollW: 0\n };\n self._lastLayoutRect = {};\n return layoutRect;\n },\n layoutRect: function (newRect) {\n var self = this;\n var curRect = self._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;\n if (!curRect) {\n curRect = self.initLayoutRect();\n }\n if (newRect) {\n deltaWidth = curRect.deltaW;\n deltaHeight = curRect.deltaH;\n if (newRect.x !== undefined) {\n curRect.x = newRect.x;\n }\n if (newRect.y !== undefined) {\n curRect.y = newRect.y;\n }\n if (newRect.minW !== undefined) {\n curRect.minW = newRect.minW;\n }\n if (newRect.minH !== undefined) {\n curRect.minH = newRect.minH;\n }\n size = newRect.w;\n if (size !== undefined) {\n size = size < curRect.minW ? curRect.minW : size;\n size = size > curRect.maxW ? curRect.maxW : size;\n curRect.w = size;\n curRect.innerW = size - deltaWidth;\n }\n size = newRect.h;\n if (size !== undefined) {\n size = size < curRect.minH ? curRect.minH : size;\n size = size > curRect.maxH ? curRect.maxH : size;\n curRect.h = size;\n curRect.innerH = size - deltaHeight;\n }\n size = newRect.innerW;\n if (size !== undefined) {\n size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;\n size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;\n curRect.innerW = size;\n curRect.w = size + deltaWidth;\n }\n size = newRect.innerH;\n if (size !== undefined) {\n size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;\n size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;\n curRect.innerH = size;\n curRect.h = size + deltaHeight;\n }\n if (newRect.contentW !== undefined) {\n curRect.contentW = newRect.contentW;\n }\n if (newRect.contentH !== undefined) {\n curRect.contentH = newRect.contentH;\n }\n lastLayoutRect = self._lastLayoutRect;\n if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {\n repaintControls = Control.repaintControls;\n if (repaintControls) {\n if (repaintControls.map && !repaintControls.map[self._id]) {\n repaintControls.push(self);\n repaintControls.map[self._id] = true;\n }\n }\n lastLayoutRect.x = curRect.x;\n lastLayoutRect.y = curRect.y;\n lastLayoutRect.w = curRect.w;\n lastLayoutRect.h = curRect.h;\n }\n return self;\n }\n return curRect;\n },\n repaint: function () {\n var self = this;\n var style, bodyStyle, bodyElm, rect, borderBox;\n var borderW, borderH, lastRepaintRect, round, value;\n round = !domGlobals.document.createRange ? Math.round : function (value) {\n return value;\n };\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right;\n borderH = borderBox.top + borderBox.bottom;\n if (rect.x !== lastRepaintRect.x) {\n style.left = round(rect.x) + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = round(rect.y) + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n value = round(rect.w - borderW);\n style.width = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n value = round(rect.h - borderH);\n style.height = (value >= 0 ? value : 0) + 'px';\n lastRepaintRect.h = rect.h;\n }\n if (self._hasBody && rect.innerW !== lastRepaintRect.innerW) {\n value = round(rect.innerW);\n bodyElm = self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyElm.style;\n bodyStyle.width = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerW = rect.innerW;\n }\n if (self._hasBody && rect.innerH !== lastRepaintRect.innerH) {\n value = round(rect.innerH);\n bodyElm = bodyElm || self.getEl('body');\n if (bodyElm) {\n bodyStyle = bodyStyle || bodyElm.style;\n bodyStyle.height = (value >= 0 ? value : 0) + 'px';\n }\n lastRepaintRect.innerH = rect.innerH;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n },\n updateLayoutRect: function () {\n var self = this;\n self.parent()._lastRect = null;\n funcs.css(self.getEl(), {\n width: '',\n height: ''\n });\n self._layoutRect = self._lastRepaintRect = self._lastLayoutRect = null;\n self.initLayoutRect();\n },\n on: function (name, callback) {\n var self = this;\n function resolveCallbackName(name) {\n var callback, scope;\n if (typeof name !== 'string') {\n return name;\n }\n return function (e) {\n if (!callback) {\n self.parentsAndSelf().each(function (ctrl) {\n var callbacks = ctrl.settings.callbacks;\n if (callbacks && (callback = callbacks[name])) {\n scope = ctrl;\n return false;\n }\n });\n }\n if (!callback) {\n e.action = name;\n this.fire('execute', e);\n return;\n }\n return callback.call(scope, e);\n };\n }\n getEventDispatcher(self).on(name, resolveCallbackName(callback));\n return self;\n },\n off: function (name, callback) {\n getEventDispatcher(this).off(name, callback);\n return this;\n },\n fire: function (name, args, bubble) {\n var self = this;\n args = args || {};\n if (!args.control) {\n args.control = self;\n }\n args = getEventDispatcher(self).fire(name, args);\n if (bubble !== false && self.parent) {\n var parent = self.parent();\n while (parent && !args.isPropagationStopped()) {\n parent.fire(name, args, false);\n parent = parent.parent();\n }\n }\n return args;\n },\n hasEventListeners: function (name) {\n return getEventDispatcher(this).has(name);\n },\n parents: function (selector) {\n var self = this;\n var ctrl, parents = new Collection$2();\n for (ctrl = self.parent(); ctrl; ctrl = ctrl.parent()) {\n parents.add(ctrl);\n }\n if (selector) {\n parents = parents.filter(selector);\n }\n return parents;\n },\n parentsAndSelf: function (selector) {\n return new Collection$2(this).add(this.parents(selector));\n },\n next: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) + 1];\n },\n prev: function () {\n var parentControls = this.parent().items();\n return parentControls[parentControls.indexOf(this) - 1];\n },\n innerHtml: function (html) {\n this.$el.html(html);\n return this;\n },\n getEl: function (suffix) {\n var id = suffix ? this._id + '-' + suffix : this._id;\n if (!this._elmCache[id]) {\n this._elmCache[id] = global$9('#' + id)[0];\n }\n return this._elmCache[id];\n },\n show: function () {\n return this.visible(true);\n },\n hide: function () {\n return this.visible(false);\n },\n focus: function () {\n try {\n this.getEl().focus();\n } catch (ex) {\n }\n return this;\n },\n blur: function () {\n this.getEl().blur();\n return this;\n },\n aria: function (name, value) {\n var self = this, elm = self.getEl(self.ariaTarget);\n if (typeof value === 'undefined') {\n return self._aria[name];\n }\n self._aria[name] = value;\n if (self.state.get('rendered')) {\n elm.setAttribute(name === 'role' ? name : 'aria-' + name, value);\n }\n return self;\n },\n encode: function (text, translate) {\n if (translate !== false) {\n text = this.translate(text);\n }\n return (text || '').replace(/[&<>\"]/g, function (match) {\n return '&#' + match.charCodeAt(0) + ';';\n });\n },\n translate: function (text) {\n return Control.translate ? Control.translate(text) : text;\n },\n before: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self), true);\n }\n return self;\n },\n after: function (items) {\n var self = this, parent = self.parent();\n if (parent) {\n parent.insert(items, parent.items().indexOf(self));\n }\n return self;\n },\n remove: function () {\n var self = this;\n var elm = self.getEl();\n var parent = self.parent();\n var newItems, i;\n if (self.items) {\n var controls = self.items().toArray();\n i = controls.length;\n while (i--) {\n controls[i].remove();\n }\n }\n if (parent && parent.items) {\n newItems = [];\n parent.items().each(function (item) {\n if (item !== self) {\n newItems.push(item);\n }\n });\n parent.items().set(newItems);\n parent._lastRect = null;\n }\n if (self._eventsRoot && self._eventsRoot === self) {\n global$9(elm).off();\n }\n var lookup = self.getRoot().controlIdLookup;\n if (lookup) {\n delete lookup[self._id];\n }\n if (elm && elm.parentNode) {\n elm.parentNode.removeChild(elm);\n }\n self.state.set('rendered', false);\n self.state.destroy();\n self.fire('remove');\n return self;\n },\n renderBefore: function (elm) {\n global$9(elm).before(this.renderHtml());\n this.postRender();\n return this;\n },\n renderTo: function (elm) {\n global$9(elm || this.getContainerElm()).append(this.renderHtml());\n this.postRender();\n return this;\n },\n preRender: function () {\n },\n render: function () {\n },\n renderHtml: function () {\n return '
    ';\n },\n postRender: function () {\n var self = this;\n var settings = self.settings;\n var elm, box, parent, name, parentEventsRoot;\n self.$el = global$9(self.getEl());\n self.state.set('rendered', true);\n for (name in settings) {\n if (name.indexOf('on') === 0) {\n self.on(name.substr(2), settings[name]);\n }\n }\n if (self._eventsRoot) {\n for (parent = self.parent(); !parentEventsRoot && parent; parent = parent.parent()) {\n parentEventsRoot = parent._eventsRoot;\n }\n if (parentEventsRoot) {\n for (name in parentEventsRoot._nativeEvents) {\n self._nativeEvents[name] = true;\n }\n }\n }\n bindPendingEvents(self);\n if (settings.style) {\n elm = self.getEl();\n if (elm) {\n elm.setAttribute('style', settings.style);\n elm.style.cssText = settings.style;\n }\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n var root = self.getRoot();\n if (!root.controlIdLookup) {\n root.controlIdLookup = {};\n }\n root.controlIdLookup[self._id] = self;\n for (var key in self._aria) {\n self.aria(key, self._aria[key]);\n }\n if (self.state.get('visible') === false) {\n self.getEl().style.display = 'none';\n }\n self.bindStates();\n self.state.on('change:visible', function (e) {\n var state = e.value;\n var parentCtrl;\n if (self.state.get('rendered')) {\n self.getEl().style.display = state === false ? 'none' : '';\n self.getEl().getBoundingClientRect();\n }\n parentCtrl = self.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n }\n self.fire(state ? 'show' : 'hide');\n ReflowQueue.add(self);\n });\n self.fire('postrender', {}, false);\n },\n bindStates: function () {\n },\n scrollIntoView: function (align) {\n function getOffset(elm, rootElm) {\n var x, y, parent = elm;\n x = y = 0;\n while (parent && parent !== rootElm && parent.nodeType) {\n x += parent.offsetLeft || 0;\n y += parent.offsetTop || 0;\n parent = parent.offsetParent;\n }\n return {\n x: x,\n y: y\n };\n }\n var elm = this.getEl(), parentElm = elm.parentNode;\n var x, y, width, height, parentWidth, parentHeight;\n var pos = getOffset(elm, parentElm);\n x = pos.x;\n y = pos.y;\n width = elm.offsetWidth;\n height = elm.offsetHeight;\n parentWidth = parentElm.clientWidth;\n parentHeight = parentElm.clientHeight;\n if (align === 'end') {\n x -= parentWidth - width;\n y -= parentHeight - height;\n } else if (align === 'center') {\n x -= parentWidth / 2 - width / 2;\n y -= parentHeight / 2 - height / 2;\n }\n parentElm.scrollLeft = x;\n parentElm.scrollTop = y;\n return this;\n },\n getRoot: function () {\n var ctrl = this, rootControl;\n var parents = [];\n while (ctrl) {\n if (ctrl.rootControl) {\n rootControl = ctrl.rootControl;\n break;\n }\n parents.push(ctrl);\n rootControl = ctrl;\n ctrl = ctrl.parent();\n }\n if (!rootControl) {\n rootControl = this;\n }\n var i = parents.length;\n while (i--) {\n parents[i].rootControl = rootControl;\n }\n return rootControl;\n },\n reflow: function () {\n ReflowQueue.remove(this);\n var parent = this.parent();\n if (parent && parent._layout && !parent._layout.isNative()) {\n parent.reflow();\n }\n return this;\n }\n };\n global$2.each('text title visible disabled active value'.split(' '), function (name) {\n proto$1[name] = function (value) {\n if (arguments.length === 0) {\n return this.state.get(name);\n }\n if (typeof value !== 'undefined') {\n this.state.set(name, value);\n }\n return this;\n };\n });\n Control = global$a.extend(proto$1);\n function getEventDispatcher(obj) {\n if (!obj._eventDispatcher) {\n obj._eventDispatcher = new global$b({\n scope: obj,\n toggleEvent: function (name, state) {\n if (state && global$b.isNative(name)) {\n if (!obj._nativeEvents) {\n obj._nativeEvents = {};\n }\n obj._nativeEvents[name] = true;\n if (obj.state.get('rendered')) {\n bindPendingEvents(obj);\n }\n }\n }\n });\n }\n return obj._eventDispatcher;\n }\n function bindPendingEvents(eventCtrl) {\n var i, l, parents, eventRootCtrl, nativeEvents, name;\n function delegate(e) {\n var control = eventCtrl.getParentCtrl(e.target);\n if (control) {\n control.fire(e.type, e);\n }\n }\n function mouseLeaveHandler() {\n var ctrl = eventRootCtrl._lastHoverCtrl;\n if (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n ctrl.parents().each(function (ctrl) {\n ctrl.fire('mouseleave', { target: ctrl.getEl() });\n });\n eventRootCtrl._lastHoverCtrl = null;\n }\n }\n function mouseEnterHandler(e) {\n var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;\n if (ctrl !== lastCtrl) {\n eventRootCtrl._lastHoverCtrl = ctrl;\n parents = ctrl.parents().toArray().reverse();\n parents.push(ctrl);\n if (lastCtrl) {\n lastParents = lastCtrl.parents().toArray().reverse();\n lastParents.push(lastCtrl);\n for (idx = 0; idx < lastParents.length; idx++) {\n if (parents[idx] !== lastParents[idx]) {\n break;\n }\n }\n for (i = lastParents.length - 1; i >= idx; i--) {\n lastCtrl = lastParents[i];\n lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });\n }\n }\n for (i = idx; i < parents.length; i++) {\n ctrl = parents[i];\n ctrl.fire('mouseenter', { target: ctrl.getEl() });\n }\n }\n }\n function fixWheelEvent(e) {\n e.preventDefault();\n if (e.type === 'mousewheel') {\n e.deltaY = -1 / 40 * e.wheelDelta;\n if (e.wheelDeltaX) {\n e.deltaX = -1 / 40 * e.wheelDeltaX;\n }\n } else {\n e.deltaX = 0;\n e.deltaY = e.detail;\n }\n e = eventCtrl.fire('wheel', e);\n }\n nativeEvents = eventCtrl._nativeEvents;\n if (nativeEvents) {\n parents = eventCtrl.parents().toArray();\n parents.unshift(eventCtrl);\n for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {\n eventRootCtrl = parents[i]._eventsRoot;\n }\n if (!eventRootCtrl) {\n eventRootCtrl = parents[parents.length - 1] || eventCtrl;\n }\n eventCtrl._eventsRoot = eventRootCtrl;\n for (l = i, i = 0; i < l; i++) {\n parents[i]._eventsRoot = eventRootCtrl;\n }\n var eventRootDelegates = eventRootCtrl._delegates;\n if (!eventRootDelegates) {\n eventRootDelegates = eventRootCtrl._delegates = {};\n }\n for (name in nativeEvents) {\n if (!nativeEvents) {\n return false;\n }\n if (name === 'wheel' && !hasWheelEventSupport) {\n if (hasMouseWheelEventSupport) {\n global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);\n } else {\n global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);\n }\n continue;\n }\n if (name === 'mouseenter' || name === 'mouseleave') {\n if (!eventRootCtrl._hasMouseEnter) {\n global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);\n eventRootCtrl._hasMouseEnter = 1;\n }\n } else if (!eventRootDelegates[name]) {\n global$9(eventRootCtrl.getEl()).on(name, delegate);\n eventRootDelegates[name] = true;\n }\n nativeEvents[name] = false;\n }\n }\n }\n var Control$1 = Control;\n\n var hasTabstopData = function (elm) {\n return elm.getAttribute('data-mce-tabstop') ? true : false;\n };\n function KeyboardNavigation (settings) {\n var root = settings.root;\n var focusedElement, focusedControl;\n function isElement(node) {\n return node && node.nodeType === 1;\n }\n try {\n focusedElement = domGlobals.document.activeElement;\n } catch (ex) {\n focusedElement = domGlobals.document.body;\n }\n focusedControl = root.getParentCtrl(focusedElement);\n function getRole(elm) {\n elm = elm || focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('role');\n }\n return null;\n }\n function getParentRole(elm) {\n var role, parent = elm || focusedElement;\n while (parent = parent.parentNode) {\n if (role = getRole(parent)) {\n return role;\n }\n }\n }\n function getAriaProp(name) {\n var elm = focusedElement;\n if (isElement(elm)) {\n return elm.getAttribute('aria-' + name);\n }\n }\n function isTextInputElement(elm) {\n var tagName = elm.tagName.toUpperCase();\n return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';\n }\n function canFocus(elm) {\n if (isTextInputElement(elm) && !elm.hidden) {\n return true;\n }\n if (hasTabstopData(elm)) {\n return true;\n }\n if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {\n return true;\n }\n return false;\n }\n function getFocusElements(elm) {\n var elements = [];\n function collect(elm) {\n if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {\n return;\n }\n if (canFocus(elm)) {\n elements.push(elm);\n }\n for (var i = 0; i < elm.childNodes.length; i++) {\n collect(elm.childNodes[i]);\n }\n }\n collect(elm || root.getEl());\n return elements;\n }\n function getNavigationRoot(targetControl) {\n var navigationRoot, controls;\n targetControl = targetControl || focusedControl;\n controls = targetControl.parents().toArray();\n controls.unshift(targetControl);\n for (var i = 0; i < controls.length; i++) {\n navigationRoot = controls[i];\n if (navigationRoot.settings.ariaRoot) {\n break;\n }\n }\n return navigationRoot;\n }\n function focusFirst(targetControl) {\n var navigationRoot = getNavigationRoot(targetControl);\n var focusElements = getFocusElements(navigationRoot.getEl());\n if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {\n moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);\n } else {\n moveFocusToIndex(0, focusElements);\n }\n }\n function moveFocusToIndex(idx, elements) {\n if (idx < 0) {\n idx = elements.length - 1;\n } else if (idx >= elements.length) {\n idx = 0;\n }\n if (elements[idx]) {\n elements[idx].focus();\n }\n return idx;\n }\n function moveFocus(dir, elements) {\n var idx = -1;\n var navigationRoot = getNavigationRoot();\n elements = elements || getFocusElements(navigationRoot.getEl());\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] === focusedElement) {\n idx = i;\n }\n }\n idx += dir;\n navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);\n }\n function left() {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(-1, getFocusElements(focusedElement.parentNode));\n } else if (focusedControl.parent().submenu) {\n cancel();\n } else {\n moveFocus(-1);\n }\n }\n function right() {\n var role = getRole(), parentRole = getParentRole();\n if (parentRole === 'tablist') {\n moveFocus(1, getFocusElements(focusedElement.parentNode));\n } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {\n enter();\n } else {\n moveFocus(1);\n }\n }\n function up() {\n moveFocus(-1);\n }\n function down() {\n var role = getRole(), parentRole = getParentRole();\n if (role === 'menuitem' && parentRole === 'menubar') {\n enter();\n } else if (role === 'button' && getAriaProp('haspopup')) {\n enter({ key: 'down' });\n } else {\n moveFocus(1);\n }\n }\n function tab(e) {\n var parentRole = getParentRole();\n if (parentRole === 'tablist') {\n var elm = getFocusElements(focusedControl.getEl('body'))[0];\n if (elm) {\n elm.focus();\n }\n } else {\n moveFocus(e.shiftKey ? -1 : 1);\n }\n }\n function cancel() {\n focusedControl.fire('cancel');\n }\n function enter(aria) {\n aria = aria || {};\n focusedControl.fire('click', {\n target: focusedElement,\n aria: aria\n });\n }\n root.on('keydown', function (e) {\n function handleNonTabOrEscEvent(e, handler) {\n if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {\n return;\n }\n if (getRole(focusedElement) === 'slider') {\n return;\n }\n if (handler(e) !== false) {\n e.preventDefault();\n }\n }\n if (e.isDefaultPrevented()) {\n return;\n }\n switch (e.keyCode) {\n case 37:\n handleNonTabOrEscEvent(e, left);\n break;\n case 39:\n handleNonTabOrEscEvent(e, right);\n break;\n case 38:\n handleNonTabOrEscEvent(e, up);\n break;\n case 40:\n handleNonTabOrEscEvent(e, down);\n break;\n case 27:\n cancel();\n break;\n case 14:\n case 13:\n case 32:\n handleNonTabOrEscEvent(e, enter);\n break;\n case 9:\n tab(e);\n e.preventDefault();\n break;\n }\n });\n root.on('focusin', function (e) {\n focusedElement = e.target;\n focusedControl = e.control;\n });\n return { focusFirst: focusFirst };\n }\n\n var selectorCache = {};\n var Container = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n if (settings.fixed) {\n self.state.set('fixed', true);\n }\n self._items = new Collection$2();\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.bodyClasses = new ClassList(function () {\n if (self.state.get('rendered')) {\n self.getEl('body').className = this.toString();\n }\n });\n self.bodyClasses.prefix = self.classPrefix;\n self.classes.add('container');\n self.bodyClasses.add('container-body');\n if (settings.containerCls) {\n self.classes.add(settings.containerCls);\n }\n self._layout = global$4.create((settings.layout || '') + 'layout');\n if (self.settings.items) {\n self.add(self.settings.items);\n } else {\n self.add(self.render());\n }\n self._hasBody = true;\n },\n items: function () {\n return this._items;\n },\n find: function (selector) {\n selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);\n return selector.find(this);\n },\n add: function (items) {\n var self = this;\n self.items().add(self.create(items)).parent(self);\n return self;\n },\n focus: function (keyboard) {\n var self = this;\n var focusCtrl, keyboardNav, items;\n if (keyboard) {\n keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;\n if (keyboardNav) {\n keyboardNav.focusFirst(self);\n return;\n }\n }\n items = self.find('*');\n if (self.statusbar) {\n items.add(self.statusbar.items());\n }\n items.each(function (ctrl) {\n if (ctrl.settings.autofocus) {\n focusCtrl = null;\n return false;\n }\n if (ctrl.canFocus) {\n focusCtrl = focusCtrl || ctrl;\n }\n });\n if (focusCtrl) {\n focusCtrl.focus();\n }\n return self;\n },\n replace: function (oldItem, newItem) {\n var ctrlElm;\n var items = this.items();\n var i = items.length;\n while (i--) {\n if (items[i] === oldItem) {\n items[i] = newItem;\n break;\n }\n }\n if (i >= 0) {\n ctrlElm = newItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n ctrlElm = oldItem.getEl();\n if (ctrlElm) {\n ctrlElm.parentNode.removeChild(ctrlElm);\n }\n }\n newItem.parent(this);\n },\n create: function (items) {\n var self = this;\n var settings;\n var ctrlItems = [];\n if (!global$2.isArray(items)) {\n items = [items];\n }\n global$2.each(items, function (item) {\n if (item) {\n if (!(item instanceof Control$1)) {\n if (typeof item === 'string') {\n item = { type: item };\n }\n settings = global$2.extend({}, self.settings.defaults, item);\n item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);\n item = global$4.create(settings);\n }\n ctrlItems.push(item);\n }\n });\n return ctrlItems;\n },\n renderNew: function () {\n var self = this;\n self.items().each(function (ctrl, index) {\n var containerElm;\n ctrl.parent(self);\n if (!ctrl.state.get('rendered')) {\n containerElm = self.getEl('body');\n if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {\n global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());\n } else {\n global$9(containerElm).append(ctrl.renderHtml());\n }\n ctrl.postRender();\n ReflowQueue.add(ctrl);\n }\n });\n self._layout.applyClasses(self.items().filter(':visible'));\n self._lastRect = null;\n return self;\n },\n append: function (items) {\n return this.add(items).renderNew();\n },\n prepend: function (items) {\n var self = this;\n self.items().set(self.create(items).concat(self.items().toArray()));\n return self.renderNew();\n },\n insert: function (items, index, before) {\n var self = this;\n var curItems, beforeItems, afterItems;\n items = self.create(items);\n curItems = self.items();\n if (!before && index < curItems.length - 1) {\n index += 1;\n }\n if (index >= 0 && index < curItems.length) {\n beforeItems = curItems.slice(0, index).toArray();\n afterItems = curItems.slice(index).toArray();\n curItems.set(beforeItems.concat(items, afterItems));\n }\n return self.renderNew();\n },\n fromJSON: function (data) {\n var self = this;\n for (var name in data) {\n self.find('#' + name).value(data[name]);\n }\n return self;\n },\n toJSON: function () {\n var self = this, data = {};\n self.find('*').each(function (ctrl) {\n var name = ctrl.name(), value = ctrl.value();\n if (name && typeof value !== 'undefined') {\n data[name] = value;\n }\n });\n return data;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, role = this.settings.role;\n self.preRender();\n layout.preRender(self);\n return '
    ' + '
    ' + (self.settings.html || '') + layout.renderHtml(self) + '
    ' + '
    ';\n },\n postRender: function () {\n var self = this;\n var box;\n self.items().exec('postRender');\n self._super();\n self._layout.postRender(self);\n self.state.set('rendered', true);\n if (self.settings.style) {\n self.$el.css(self.settings.style);\n }\n if (self.settings.border) {\n box = self.borderBox;\n self.$el.css({\n 'border-top-width': box.top,\n 'border-right-width': box.right,\n 'border-bottom-width': box.bottom,\n 'border-left-width': box.left\n });\n }\n if (!self.parent()) {\n self.keyboardNav = KeyboardNavigation({ root: self });\n }\n return self;\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n self._layout.recalc(self);\n return layoutRect;\n },\n recalc: function () {\n var self = this;\n var rect = self._layoutRect;\n var lastRect = self._lastRect;\n if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {\n self._layout.recalc(self);\n rect = self.layoutRect();\n self._lastRect = {\n x: rect.x,\n y: rect.y,\n w: rect.w,\n h: rect.h\n };\n return true;\n }\n },\n reflow: function () {\n var i;\n ReflowQueue.remove(this);\n if (this.visible()) {\n Control$1.repaintControls = [];\n Control$1.repaintControls.map = {};\n this.recalc();\n i = Control$1.repaintControls.length;\n while (i--) {\n Control$1.repaintControls[i].repaint();\n }\n if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {\n this.repaint();\n }\n Control$1.repaintControls = [];\n }\n return this;\n }\n });\n\n function getDocumentSize(doc) {\n var documentElement, body, scrollWidth, clientWidth;\n var offsetWidth, scrollHeight, clientHeight, offsetHeight;\n var max = Math.max;\n documentElement = doc.documentElement;\n body = doc.body;\n scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);\n clientWidth = max(documentElement.clientWidth, body.clientWidth);\n offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);\n scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);\n clientHeight = max(documentElement.clientHeight, body.clientHeight);\n offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);\n return {\n width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,\n height: scrollHeight < offsetHeight ? clientHeight : scrollHeight\n };\n }\n function updateWithTouchData(e) {\n var keys, i;\n if (e.changedTouches) {\n keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');\n for (i = 0; i < keys.length; i++) {\n e[keys[i]] = e.changedTouches[0][keys[i]];\n }\n }\n }\n function DragHelper (id, settings) {\n var $eventOverlay;\n var doc = settings.document || domGlobals.document;\n var downButton;\n var start, stop, drag, startX, startY;\n settings = settings || {};\n var handleElement = doc.getElementById(settings.handle || id);\n start = function (e) {\n var docSize = getDocumentSize(doc);\n var handleElm, cursor;\n updateWithTouchData(e);\n e.preventDefault();\n downButton = e.button;\n handleElm = handleElement;\n startX = e.screenX;\n startY = e.screenY;\n if (domGlobals.window.getComputedStyle) {\n cursor = domGlobals.window.getComputedStyle(handleElm, null).getPropertyValue('cursor');\n } else {\n cursor = handleElm.runtimeStyle.cursor;\n }\n $eventOverlay = global$9('
    ').css({\n position: 'absolute',\n top: 0,\n left: 0,\n width: docSize.width,\n height: docSize.height,\n zIndex: 2147483647,\n opacity: 0.0001,\n cursor: cursor\n }).appendTo(doc.body);\n global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop);\n settings.start(e);\n };\n drag = function (e) {\n updateWithTouchData(e);\n if (e.button !== downButton) {\n return stop(e);\n }\n e.deltaX = e.screenX - startX;\n e.deltaY = e.screenY - startY;\n e.preventDefault();\n settings.drag(e);\n };\n stop = function (e) {\n updateWithTouchData(e);\n global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop);\n $eventOverlay.remove();\n if (settings.stop) {\n settings.stop(e);\n }\n };\n this.destroy = function () {\n global$9(handleElement).off();\n };\n global$9(handleElement).on('mousedown touchstart', start);\n }\n\n var Scrollable = {\n init: function () {\n var self = this;\n self.on('repaint', self.renderScroll);\n },\n renderScroll: function () {\n var self = this, margin = 2;\n function repaintScroll() {\n var hasScrollH, hasScrollV, bodyElm;\n function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {\n var containerElm, scrollBarElm, scrollThumbElm;\n var containerSize, scrollSize, ratio, rect;\n var posNameLower, sizeNameLower;\n scrollBarElm = self.getEl('scroll' + axisName);\n if (scrollBarElm) {\n posNameLower = posName.toLowerCase();\n sizeNameLower = sizeName.toLowerCase();\n global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);\n if (!hasScroll) {\n global$9(scrollBarElm).css('display', 'none');\n return;\n }\n global$9(scrollBarElm).css('display', 'block');\n containerElm = self.getEl('body');\n scrollThumbElm = self.getEl('scroll' + axisName + 't');\n containerSize = containerElm['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;\n scrollSize = containerElm['scroll' + sizeName];\n ratio = containerSize / scrollSize;\n rect = {};\n rect[posNameLower] = containerElm['offset' + posName] + margin;\n rect[sizeNameLower] = containerSize;\n global$9(scrollBarElm).css(rect);\n rect = {};\n rect[posNameLower] = containerElm['scroll' + posName] * ratio;\n rect[sizeNameLower] = containerSize * ratio;\n global$9(scrollThumbElm).css(rect);\n }\n }\n bodyElm = self.getEl('body');\n hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;\n hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;\n repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');\n repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');\n }\n function addScroll() {\n function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {\n var scrollStart;\n var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;\n global$9(self.getEl()).append('
    ' + '
    ' + '
    ');\n self.draghelper = new DragHelper(axisId + 't', {\n start: function () {\n scrollStart = self.getEl('body')['scroll' + posName];\n global$9('#' + axisId).addClass(prefix + 'active');\n },\n drag: function (e) {\n var ratio, hasScrollH, hasScrollV, containerSize;\n var layoutRect = self.layoutRect();\n hasScrollH = layoutRect.contentW > layoutRect.innerW;\n hasScrollV = layoutRect.contentH > layoutRect.innerH;\n containerSize = self.getEl('body')['client' + sizeName] - margin * 2;\n containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;\n ratio = containerSize / self.getEl('body')['scroll' + sizeName];\n self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;\n },\n stop: function () {\n global$9('#' + axisId).removeClass(prefix + 'active');\n }\n });\n }\n self.classes.add('scroll');\n addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');\n addScrollAxis('h', 'Left', 'Width', 'X', 'Height');\n }\n if (self.settings.autoScroll) {\n if (!self._hasScroll) {\n self._hasScroll = true;\n addScroll();\n self.on('wheel', function (e) {\n var bodyEl = self.getEl('body');\n bodyEl.scrollLeft += (e.deltaX || 0) * 10;\n bodyEl.scrollTop += e.deltaY * 10;\n repaintScroll();\n });\n global$9(self.getEl('body')).on('scroll', repaintScroll);\n }\n repaintScroll();\n }\n }\n };\n\n var Panel = Container.extend({\n Defaults: {\n layout: 'fit',\n containerCls: 'panel'\n },\n Mixins: [Scrollable],\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var innerHtml = self.settings.html;\n self.preRender();\n layout.preRender(self);\n if (typeof innerHtml === 'undefined') {\n innerHtml = '
    ' + layout.renderHtml(self) + '
    ';\n } else {\n if (typeof innerHtml === 'function') {\n innerHtml = innerHtml.call(self);\n }\n self._hasBody = false;\n }\n return '
    ' + (self._preBodyHtml || '') + innerHtml + '
    ';\n }\n });\n\n var Resizable = {\n resizeToContent: function () {\n this._layoutRect.autoResize = true;\n this._lastRect = null;\n this.reflow();\n },\n resizeTo: function (w, h) {\n if (w <= 1 || h <= 1) {\n var rect = funcs.getWindowSize();\n w = w <= 1 ? w * rect.w : w;\n h = h <= 1 ? h * rect.h : h;\n }\n this._layoutRect.autoResize = false;\n return this.layoutRect({\n minW: w,\n minH: h,\n w: w,\n h: h\n }).reflow();\n },\n resizeBy: function (dw, dh) {\n var self = this, rect = self.layoutRect();\n return self.resizeTo(rect.w + dw, rect.h + dh);\n }\n };\n\n var documentClickHandler, documentScrollHandler, windowResizeHandler;\n var visiblePanels = [];\n var zOrder = [];\n var hasModal;\n function isChildOf(ctrl, parent) {\n while (ctrl) {\n if (ctrl === parent) {\n return true;\n }\n ctrl = ctrl.parent();\n }\n }\n function skipOrHidePanels(e) {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);\n if (panel.settings.autohide) {\n if (clickCtrl) {\n if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {\n continue;\n }\n }\n e = panel.fire('autohide', { target: e.target });\n if (!e.isDefaultPrevented()) {\n panel.hide();\n }\n }\n }\n }\n function bindDocumentClickHandler() {\n if (!documentClickHandler) {\n documentClickHandler = function (e) {\n if (e.button === 2) {\n return;\n }\n skipOrHidePanels(e);\n };\n global$9(domGlobals.document).on('click touchstart', documentClickHandler);\n }\n }\n function bindDocumentScrollHandler() {\n if (!documentScrollHandler) {\n documentScrollHandler = function () {\n var i;\n i = visiblePanels.length;\n while (i--) {\n repositionPanel(visiblePanels[i]);\n }\n };\n global$9(domGlobals.window).on('scroll', documentScrollHandler);\n }\n }\n function bindWindowResizeHandler() {\n if (!windowResizeHandler) {\n var docElm_1 = domGlobals.document.documentElement;\n var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;\n windowResizeHandler = function () {\n if (!domGlobals.document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {\n clientWidth_1 = docElm_1.clientWidth;\n clientHeight_1 = docElm_1.clientHeight;\n FloatPanel.hideAll();\n }\n };\n global$9(domGlobals.window).on('resize', windowResizeHandler);\n }\n }\n function repositionPanel(panel) {\n var scrollY = funcs.getViewPort().y;\n function toggleFixedChildPanels(fixed, deltaY) {\n var parent;\n for (var i = 0; i < visiblePanels.length; i++) {\n if (visiblePanels[i] !== panel) {\n parent = visiblePanels[i].parent();\n while (parent && (parent = parent.parent())) {\n if (parent === panel) {\n visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();\n }\n }\n }\n }\n }\n if (panel.settings.autofix) {\n if (!panel.state.get('fixed')) {\n panel._autoFixY = panel.layoutRect().y;\n if (panel._autoFixY < scrollY) {\n panel.fixed(true).layoutRect({ y: 0 }).repaint();\n toggleFixedChildPanels(true, scrollY - panel._autoFixY);\n }\n } else {\n if (panel._autoFixY > scrollY) {\n panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();\n toggleFixedChildPanels(false, panel._autoFixY - scrollY);\n }\n }\n }\n }\n function addRemove(add, ctrl) {\n var i, zIndex = FloatPanel.zIndex || 65535, topModal;\n if (add) {\n zOrder.push(ctrl);\n } else {\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === ctrl) {\n zOrder.splice(i, 1);\n }\n }\n }\n if (zOrder.length) {\n for (i = 0; i < zOrder.length; i++) {\n if (zOrder[i].modal) {\n zIndex++;\n topModal = zOrder[i];\n }\n zOrder[i].getEl().style.zIndex = zIndex;\n zOrder[i].zIndex = zIndex;\n zIndex++;\n }\n }\n var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];\n if (topModal) {\n global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);\n } else if (modalBlockEl) {\n modalBlockEl.parentNode.removeChild(modalBlockEl);\n hasModal = false;\n }\n FloatPanel.currentZIndex = zIndex;\n }\n var FloatPanel = Panel.extend({\n Mixins: [\n Movable,\n Resizable\n ],\n init: function (settings) {\n var self = this;\n self._super(settings);\n self._eventsRoot = self;\n self.classes.add('floatpanel');\n if (settings.autohide) {\n bindDocumentClickHandler();\n bindWindowResizeHandler();\n visiblePanels.push(self);\n }\n if (settings.autofix) {\n bindDocumentScrollHandler();\n self.on('move', function () {\n repositionPanel(this);\n });\n }\n self.on('postrender show', function (e) {\n if (e.control === self) {\n var $modalBlockEl_1;\n var prefix_1 = self.classPrefix;\n if (self.modal && !hasModal) {\n $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self.getContainerElm());\n if (!$modalBlockEl_1[0]) {\n $modalBlockEl_1 = global$9('
    ').appendTo(self.getContainerElm());\n }\n global$7.setTimeout(function () {\n $modalBlockEl_1.addClass(prefix_1 + 'in');\n global$9(self.getEl()).addClass(prefix_1 + 'in');\n });\n hasModal = true;\n }\n addRemove(true, self);\n }\n });\n self.on('show', function () {\n self.parents().each(function (ctrl) {\n if (ctrl.state.get('fixed')) {\n self.fixed(true);\n return false;\n }\n });\n });\n if (settings.popover) {\n self._preBodyHtml = '
    ';\n self.classes.add('popover').add('bottom').add(self.isRtl() ? 'end' : 'start');\n }\n self.aria('label', settings.ariaLabel);\n self.aria('labelledby', self._id);\n self.aria('describedby', self.describedBy || self._id + '-none');\n },\n fixed: function (state) {\n var self = this;\n if (self.state.get('fixed') !== state) {\n if (self.state.get('rendered')) {\n var viewport = funcs.getViewPort();\n if (state) {\n self.layoutRect().y -= viewport.y;\n } else {\n self.layoutRect().y += viewport.y;\n }\n }\n self.classes.toggle('fixed', state);\n self.state.set('fixed', state);\n }\n return self;\n },\n show: function () {\n var self = this;\n var i;\n var state = self._super();\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === self) {\n break;\n }\n }\n if (i === -1) {\n visiblePanels.push(self);\n }\n return state;\n },\n hide: function () {\n removeVisiblePanel(this);\n addRemove(false, this);\n return this._super();\n },\n hideAll: function () {\n FloatPanel.hideAll();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n addRemove(false, self);\n }\n return self;\n },\n remove: function () {\n removeVisiblePanel(this);\n this._super();\n },\n postRender: function () {\n var self = this;\n if (self.settings.bodyRole) {\n this.getEl('body').setAttribute('role', self.settings.bodyRole);\n }\n return self._super();\n }\n });\n FloatPanel.hideAll = function () {\n var i = visiblePanels.length;\n while (i--) {\n var panel = visiblePanels[i];\n if (panel && panel.settings.autohide) {\n panel.hide();\n visiblePanels.splice(i, 1);\n }\n }\n };\n function removeVisiblePanel(panel) {\n var i;\n i = visiblePanels.length;\n while (i--) {\n if (visiblePanels[i] === panel) {\n visiblePanels.splice(i, 1);\n }\n }\n i = zOrder.length;\n while (i--) {\n if (zOrder[i] === panel) {\n zOrder.splice(i, 1);\n }\n }\n }\n\n var isFixed$1 = function (inlineToolbarContainer, editor) {\n return !!(inlineToolbarContainer && !editor.settings.ui_container);\n };\n var render$1 = function (editor, theme, args) {\n var panel, inlineToolbarContainer;\n var DOM = global$3.DOM;\n var fixedToolbarContainer = getFixedToolbarContainer(editor);\n if (fixedToolbarContainer) {\n inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];\n }\n var reposition = function () {\n if (panel && panel.moveRel && panel.visible() && !panel._fixed) {\n var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();\n var deltaX = 0, deltaY = 0;\n if (scrollContainer) {\n var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);\n deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);\n deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);\n }\n panel.fixed(false).moveRel(body, editor.rtl ? [\n 'tr-br',\n 'br-tr'\n ] : [\n 'tl-bl',\n 'bl-tl',\n 'tr-br'\n ]).moveBy(deltaX, deltaY);\n }\n };\n var show = function () {\n if (panel) {\n panel.show();\n reposition();\n DOM.addClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var hide = function () {\n if (panel) {\n panel.hide();\n FloatPanel.hideAll();\n DOM.removeClass(editor.getBody(), 'mce-edit-focus');\n }\n };\n var render = function () {\n if (panel) {\n if (!panel.visible()) {\n show();\n }\n return;\n }\n panel = theme.panel = global$4.create({\n type: inlineToolbarContainer ? 'panel' : 'floatpanel',\n role: 'application',\n classes: 'tinymce tinymce-inline',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n autohide: false,\n autofix: true,\n fixed: isFixed$1(inlineToolbarContainer, editor),\n border: 1,\n items: [\n hasMenubar(editor) === false ? null : {\n type: 'menubar',\n border: '0 0 1 0',\n items: Menubar.createMenuButtons(editor)\n },\n Toolbar.createToolbars(editor, getToolbarSize(editor))\n ]\n });\n UiContainer.setUiContainer(editor, panel);\n Events.fireBeforeRenderUI(editor);\n if (inlineToolbarContainer) {\n panel.renderTo(inlineToolbarContainer).reflow();\n } else {\n panel.renderTo().reflow();\n }\n A11y.addKeys(editor, panel);\n show();\n ContextToolbars.addContextualToolbars(editor);\n editor.on('nodeChange', reposition);\n editor.on('ResizeWindow', reposition);\n editor.on('activate', show);\n editor.on('deactivate', hide);\n editor.nodeChanged();\n };\n editor.settings.content_editable = true;\n editor.on('focus', function () {\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, render, render);\n } else {\n render();\n }\n });\n editor.on('blur hide', hide);\n editor.on('remove', function () {\n if (panel) {\n panel.remove();\n panel = null;\n }\n });\n if (isSkinDisabled(editor) === false && args.skinUiCss) {\n DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));\n } else {\n SkinLoaded.fireSkinLoaded(editor)();\n }\n return {};\n };\n var Inline = { render: render$1 };\n\n function Throbber (elm, inline) {\n var self = this;\n var state;\n var classPrefix = Control$1.classPrefix;\n var timer;\n self.show = function (time, callback) {\n function render() {\n if (state) {\n global$9(elm).append('
    ');\n if (callback) {\n callback();\n }\n }\n }\n self.hide();\n state = true;\n if (time) {\n timer = global$7.setTimeout(render, time);\n } else {\n render();\n }\n return self;\n };\n self.hide = function () {\n var child = elm.lastChild;\n global$7.clearTimeout(timer);\n if (child && child.className.indexOf('throbber') !== -1) {\n child.parentNode.removeChild(child);\n }\n state = false;\n return self;\n };\n }\n\n var setup = function (editor, theme) {\n var throbber;\n editor.on('ProgressState', function (e) {\n throbber = throbber || new Throbber(theme.panel.getEl('body'));\n if (e.state) {\n throbber.show(e.time);\n } else {\n throbber.hide();\n }\n });\n };\n var ProgressState = { setup: setup };\n\n var renderUI = function (editor, theme, args) {\n var skinUrl = getSkinUrl(editor);\n if (skinUrl) {\n args.skinUiCss = skinUrl + '/skin.min.css';\n editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');\n }\n ProgressState.setup(editor, theme);\n return isInline(editor) ? Inline.render(editor, theme, args) : Iframe.render(editor, theme, args);\n };\n var Render = { renderUI: renderUI };\n\n var Tooltip = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget tooltip tooltip-n' },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
    ' + '
    ' + '
    ' + self.encode(self.state.get('text')) + '
    ' + '
    ';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().lastChild.innerHTML = self.encode(e.value);\n });\n return self._super();\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 + 65535;\n }\n });\n\n var Widget = Control$1.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.canFocus = true;\n if (settings.tooltip && Widget.tooltips !== false) {\n self.on('mouseenter', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (e.control === self) {\n var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(self.getEl(), rel);\n } else {\n tooltip.hide();\n }\n });\n self.on('mouseleave mousedown click', function () {\n self.tooltip().remove();\n self._tooltip = null;\n });\n }\n self.aria('label', settings.ariaLabel || settings.tooltip);\n },\n tooltip: function () {\n if (!this._tooltip) {\n this._tooltip = new Tooltip({ type: 'tooltip' });\n UiContainer.inheritUiContainer(this, this._tooltip);\n this._tooltip.renderTo();\n }\n return this._tooltip;\n },\n postRender: function () {\n var self = this, settings = self.settings;\n self._super();\n if (!self.parent() && (settings.width || settings.height)) {\n self.initLayoutRect();\n self.repaint();\n }\n if (settings.autofocus) {\n self.focus();\n }\n },\n bindStates: function () {\n var self = this;\n function disable(state) {\n self.aria('disabled', state);\n self.classes.toggle('disabled', state);\n }\n function active(state) {\n self.aria('pressed', state);\n self.classes.toggle('active', state);\n }\n self.state.on('change:disabled', function (e) {\n disable(e.value);\n });\n self.state.on('change:active', function (e) {\n active(e.value);\n });\n if (self.state.get('disabled')) {\n disable(true);\n }\n if (self.state.get('active')) {\n active(true);\n }\n return self._super();\n },\n remove: function () {\n this._super();\n if (this._tooltip) {\n this._tooltip.remove();\n this._tooltip = null;\n }\n }\n });\n\n var Progress = Widget.extend({\n Defaults: { value: 0 },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('progress');\n if (!self.settings.filter) {\n self.settings.filter = function (value) {\n return Math.round(value);\n };\n }\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = this.classPrefix;\n return '
    ' + '
    ' + '
    ' + '
    ' + '
    0%
    ' + '
    ';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.value(self.settings.value);\n return self;\n },\n bindStates: function () {\n var self = this;\n function setValue(value) {\n value = self.settings.filter(value);\n self.getEl().lastChild.innerHTML = value + '%';\n self.getEl().firstChild.firstChild.style.width = value + '%';\n }\n self.state.on('change:value', function (e) {\n setValue(e.value);\n });\n setValue(self.state.get('value'));\n return self._super();\n }\n });\n\n var updateLiveRegion = function (ctx, text) {\n ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');\n };\n var Notification = Control$1.extend({\n Mixins: [Movable],\n Defaults: { classes: 'widget notification' },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.maxWidth = settings.maxWidth;\n if (settings.text) {\n self.text(settings.text);\n }\n if (settings.icon) {\n self.icon = settings.icon;\n }\n if (settings.color) {\n self.color = settings.color;\n }\n if (settings.type) {\n self.classes.add('notification-' + settings.type);\n }\n if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {\n self.closeButton = false;\n } else {\n self.classes.add('has-close');\n self.closeButton = true;\n }\n if (settings.progressBar) {\n self.progressBar = new Progress();\n }\n self.on('click', function (e) {\n if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {\n self.close();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var prefix = self.classPrefix;\n var icon = '', closeButton = '', progressBar = '', notificationStyle = '';\n if (self.icon) {\n icon = '';\n }\n notificationStyle = ' style=\"max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';\"' : '\"');\n if (self.closeButton) {\n closeButton = '';\n }\n if (self.progressBar) {\n progressBar = self.progressBar.renderHtml();\n }\n return '
    ' + icon + '
    ' + self.state.get('text') + '
    ' + progressBar + closeButton + '
    ' + '
    ';\n },\n postRender: function () {\n var self = this;\n global$7.setTimeout(function () {\n self.$el.addClass(self.classPrefix + 'in');\n updateLiveRegion(self, self.state.get('text'));\n }, 100);\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl().firstChild.innerHTML = e.value;\n updateLiveRegion(self, e.value);\n });\n if (self.progressBar) {\n self.progressBar.bindStates();\n self.progressBar.state.on('change:value', function (e) {\n updateLiveRegion(self, self.state.get('text'));\n });\n }\n return self._super();\n },\n close: function () {\n var self = this;\n if (!self.fire('close').isDefaultPrevented()) {\n self.remove();\n }\n return self;\n },\n repaint: function () {\n var self = this;\n var style, rect;\n style = self.getEl().style;\n rect = self._layoutRect;\n style.left = rect.x + 'px';\n style.top = rect.y + 'px';\n style.zIndex = 65535 - 1;\n }\n });\n\n function NotificationManagerImpl (editor) {\n var getEditorContainer = function (editor) {\n return editor.inline ? editor.getElement() : editor.getContentAreaContainer();\n };\n var getContainerWidth = function () {\n var container = getEditorContainer(editor);\n return funcs.getSize(container).width;\n };\n var prePositionNotifications = function (notifications) {\n each(notifications, function (notification) {\n notification.moveTo(0, 0);\n });\n };\n var positionNotifications = function (notifications) {\n if (notifications.length > 0) {\n var firstItem = notifications.slice(0, 1)[0];\n var container = getEditorContainer(editor);\n firstItem.moveRel(container, 'tc-tc');\n each(notifications, function (notification, index) {\n if (index > 0) {\n notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');\n }\n });\n }\n };\n var reposition = function (notifications) {\n prePositionNotifications(notifications);\n positionNotifications(notifications);\n };\n var open = function (args, closeCallback) {\n var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });\n var notif = new Notification(extendedArgs);\n notif.args = extendedArgs;\n if (extendedArgs.timeout > 0) {\n notif.timer = setTimeout(function () {\n notif.close();\n closeCallback();\n }, extendedArgs.timeout);\n }\n notif.on('close', function () {\n closeCallback();\n });\n notif.renderTo();\n return notif;\n };\n var close = function (notification) {\n notification.close();\n };\n var getArgs = function (notification) {\n return notification.args;\n };\n return {\n open: open,\n close: close,\n reposition: reposition,\n getArgs: getArgs\n };\n }\n\n var windows = [];\n var oldMetaValue = '';\n function toggleFullScreenState(state) {\n var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';\n var viewport = global$9('meta[name=viewport]')[0], contentValue;\n if (global$8.overrideViewPort === false) {\n return;\n }\n if (!viewport) {\n viewport = domGlobals.document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n domGlobals.document.getElementsByTagName('head')[0].appendChild(viewport);\n }\n contentValue = viewport.getAttribute('content');\n if (contentValue && typeof oldMetaValue !== 'undefined') {\n oldMetaValue = contentValue;\n }\n viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);\n }\n function toggleBodyFullScreenClasses(classPrefix, state) {\n if (checkFullscreenWindows() && state === false) {\n global$9([\n domGlobals.document.documentElement,\n domGlobals.document.body\n ]).removeClass(classPrefix + 'fullscreen');\n }\n }\n function checkFullscreenWindows() {\n for (var i = 0; i < windows.length; i++) {\n if (windows[i]._fullscreen) {\n return true;\n }\n }\n return false;\n }\n function handleWindowResize() {\n if (!global$8.desktop) {\n var lastSize_1 = {\n w: domGlobals.window.innerWidth,\n h: domGlobals.window.innerHeight\n };\n global$7.setInterval(function () {\n var w = domGlobals.window.innerWidth, h = domGlobals.window.innerHeight;\n if (lastSize_1.w !== w || lastSize_1.h !== h) {\n lastSize_1 = {\n w: w,\n h: h\n };\n global$9(domGlobals.window).trigger('resize');\n }\n }, 100);\n }\n function reposition() {\n var i;\n var rect = funcs.getWindowSize();\n var layoutRect;\n for (i = 0; i < windows.length; i++) {\n layoutRect = windows[i].layoutRect();\n windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));\n }\n }\n global$9(domGlobals.window).on('resize', reposition);\n }\n var Window = FloatPanel.extend({\n modal: true,\n Defaults: {\n border: 1,\n layout: 'flex',\n containerCls: 'panel',\n role: 'dialog',\n callbacks: {\n submit: function () {\n this.fire('submit', { data: this.toJSON() });\n },\n close: function () {\n this.close();\n }\n }\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.isRtl()) {\n self.classes.add('rtl');\n }\n self.classes.add('window');\n self.bodyClasses.add('window-body');\n self.state.set('fixed', true);\n if (settings.buttons) {\n self.statusbar = new Panel({\n layout: 'flex',\n border: '1 0 0 0',\n spacing: 3,\n padding: 10,\n align: 'center',\n pack: self.isRtl() ? 'start' : 'end',\n defaults: { type: 'button' },\n items: settings.buttons\n });\n self.statusbar.classes.add('foot');\n self.statusbar.parent(self);\n }\n self.on('click', function (e) {\n var closeClass = self.classPrefix + 'close';\n if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {\n self.close();\n }\n });\n self.on('cancel', function () {\n self.close();\n });\n self.on('move', function (e) {\n if (e.control === self) {\n FloatPanel.hideAll();\n }\n });\n self.aria('describedby', self.describedBy || self._id + '-none');\n self.aria('label', settings.title);\n self._fullscreen = false;\n },\n recalc: function () {\n var self = this;\n var statusbar = self.statusbar;\n var layoutRect, width, x, needsRecalc;\n if (self._fullscreen) {\n self.layoutRect(funcs.getWindowSize());\n self.layoutRect().contentH = self.layoutRect().innerH;\n }\n self._super();\n layoutRect = self.layoutRect();\n if (self.settings.title && !self._fullscreen) {\n width = layoutRect.headerW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width / 2);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (statusbar) {\n statusbar.layoutRect({ w: self.layoutRect().innerW }).recalc();\n width = statusbar.layoutRect().minW + layoutRect.deltaW;\n if (width > layoutRect.w) {\n x = layoutRect.x - Math.max(0, width - layoutRect.w);\n self.layoutRect({\n w: width,\n x: x\n });\n needsRecalc = true;\n }\n }\n if (needsRecalc) {\n self.recalc();\n }\n },\n initLayoutRect: function () {\n var self = this;\n var layoutRect = self._super();\n var deltaH = 0, headEl;\n if (self.settings.title && !self._fullscreen) {\n headEl = self.getEl('head');\n var size = funcs.getSize(headEl);\n layoutRect.headerW = size.width;\n layoutRect.headerH = size.height;\n deltaH += layoutRect.headerH;\n }\n if (self.statusbar) {\n deltaH += self.statusbar.layoutRect().h;\n }\n layoutRect.deltaH += deltaH;\n layoutRect.minH += deltaH;\n layoutRect.h += deltaH;\n var rect = funcs.getWindowSize();\n layoutRect.x = self.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);\n layoutRect.y = self.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);\n return layoutRect;\n },\n renderHtml: function () {\n var self = this, layout = self._layout, id = self._id, prefix = self.classPrefix;\n var settings = self.settings;\n var headerHtml = '', footerHtml = '', html = settings.html;\n self.preRender();\n layout.preRender(self);\n if (settings.title) {\n headerHtml = '
    ' + '
    ' + self.encode(settings.title) + '
    ' + '
    ' + '' + '
    ';\n }\n if (settings.url) {\n html = '';\n }\n if (typeof html === 'undefined') {\n html = layout.renderHtml(self);\n }\n if (self.statusbar) {\n footerHtml = self.statusbar.renderHtml();\n }\n return '
    ' + '
    ' + headerHtml + '
    ' + html + '
    ' + footerHtml + '
    ' + '
    ';\n },\n fullscreen: function (state) {\n var self = this;\n var documentElement = domGlobals.document.documentElement;\n var slowRendering;\n var prefix = self.classPrefix;\n var layoutRect;\n if (state !== self._fullscreen) {\n global$9(domGlobals.window).on('resize', function () {\n var time;\n if (self._fullscreen) {\n if (!slowRendering) {\n time = new Date().getTime();\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n if (new Date().getTime() - time > 50) {\n slowRendering = true;\n }\n } else {\n if (!self._timer) {\n self._timer = global$7.setTimeout(function () {\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n self._timer = 0;\n }, 50);\n }\n }\n }\n });\n layoutRect = self.layoutRect();\n self._fullscreen = state;\n if (!state) {\n self.borderBox = BoxUtils.parseBox(self.settings.border);\n self.getEl('head').style.display = '';\n layoutRect.deltaH += layoutRect.headerH;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).removeClass(prefix + 'fullscreen');\n self.classes.remove('fullscreen');\n self.moveTo(self._initial.x, self._initial.y).resizeTo(self._initial.w, self._initial.h);\n } else {\n self._initial = {\n x: layoutRect.x,\n y: layoutRect.y,\n w: layoutRect.w,\n h: layoutRect.h\n };\n self.borderBox = BoxUtils.parseBox('0');\n self.getEl('head').style.display = 'none';\n layoutRect.deltaH -= layoutRect.headerH + 2;\n global$9([\n documentElement,\n domGlobals.document.body\n ]).addClass(prefix + 'fullscreen');\n self.classes.add('fullscreen');\n var rect = funcs.getWindowSize();\n self.moveTo(0, 0).resizeTo(rect.w, rect.h);\n }\n }\n return self.reflow();\n },\n postRender: function () {\n var self = this;\n var startPos;\n setTimeout(function () {\n self.classes.add('in');\n self.fire('open');\n }, 0);\n self._super();\n if (self.statusbar) {\n self.statusbar.postRender();\n }\n self.focus();\n this.dragHelper = new DragHelper(self._id + '-dragh', {\n start: function () {\n startPos = {\n x: self.layoutRect().x,\n y: self.layoutRect().y\n };\n },\n drag: function (e) {\n self.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);\n }\n });\n self.on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n self.close();\n }\n });\n windows.push(self);\n toggleFullScreenState(true);\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n remove: function () {\n var self = this;\n var i;\n self.dragHelper.destroy();\n self._super();\n if (self.statusbar) {\n this.statusbar.remove();\n }\n toggleBodyFullScreenClasses(self.classPrefix, false);\n i = windows.length;\n while (i--) {\n if (windows[i] === self) {\n windows.splice(i, 1);\n }\n }\n toggleFullScreenState(windows.length > 0);\n },\n getContentWindow: function () {\n var ifr = this.getEl().getElementsByTagName('iframe')[0];\n return ifr ? ifr.contentWindow : null;\n }\n });\n handleWindowResize();\n\n var MessageBox = Window.extend({\n init: function (settings) {\n settings = {\n border: 1,\n padding: 20,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n containerCls: 'panel',\n autoScroll: true,\n buttons: {\n type: 'button',\n text: 'Ok',\n action: 'ok'\n },\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200\n }\n };\n this._super(settings);\n },\n Statics: {\n OK: 1,\n OK_CANCEL: 2,\n YES_NO: 3,\n YES_NO_CANCEL: 4,\n msgBox: function (settings) {\n var buttons;\n var callback = settings.callback || function () {\n };\n function createButton(text, status, primary) {\n return {\n type: 'button',\n text: text,\n subtype: primary ? 'primary' : '',\n onClick: function (e) {\n e.control.parents()[1].close();\n callback(status);\n }\n };\n }\n switch (settings.buttons) {\n case MessageBox.OK_CANCEL:\n buttons = [\n createButton('Ok', true, true),\n createButton('Cancel', false)\n ];\n break;\n case MessageBox.YES_NO:\n case MessageBox.YES_NO_CANCEL:\n buttons = [\n createButton('Yes', 1, true),\n createButton('No', 0)\n ];\n if (settings.buttons === MessageBox.YES_NO_CANCEL) {\n buttons.push(createButton('Cancel', -1));\n }\n break;\n default:\n buttons = [createButton('Ok', true, true)];\n break;\n }\n return new Window({\n padding: 20,\n x: settings.x,\n y: settings.y,\n minWidth: 300,\n minHeight: 100,\n layout: 'flex',\n pack: 'center',\n align: 'center',\n buttons: buttons,\n title: settings.title,\n role: 'alertdialog',\n items: {\n type: 'label',\n multiline: true,\n maxWidth: 500,\n maxHeight: 200,\n text: settings.text\n },\n onPostRender: function () {\n this.aria('describedby', this.items()[0]._id);\n },\n onClose: settings.onClose,\n onCancel: function () {\n callback(false);\n }\n }).renderTo(domGlobals.document.body).reflow();\n },\n alert: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n return MessageBox.msgBox(settings);\n },\n confirm: function (settings, callback) {\n if (typeof settings === 'string') {\n settings = { text: settings };\n }\n settings.callback = callback;\n settings.buttons = MessageBox.OK_CANCEL;\n return MessageBox.msgBox(settings);\n }\n }\n });\n\n function WindowManagerImpl (editor) {\n var open = function (args, params, closeCallback) {\n var win;\n args.title = args.title || ' ';\n args.url = args.url || args.file;\n if (args.url) {\n args.width = parseInt(args.width || 320, 10);\n args.height = parseInt(args.height || 240, 10);\n }\n if (args.body) {\n args.items = {\n defaults: args.defaults,\n type: args.bodyType || 'form',\n items: args.body,\n data: args.data,\n callbacks: args.commands\n };\n }\n if (!args.url && !args.buttons) {\n args.buttons = [\n {\n text: 'Ok',\n subtype: 'primary',\n onclick: function () {\n win.find('form')[0].submit();\n }\n },\n {\n text: 'Cancel',\n onclick: function () {\n win.close();\n }\n }\n ];\n }\n win = new Window(args);\n win.on('close', function () {\n closeCallback(win);\n });\n if (args.data) {\n win.on('postRender', function () {\n this.find('*').each(function (ctrl) {\n var name = ctrl.name();\n if (name in args.data) {\n ctrl.value(args.data[name]);\n }\n });\n });\n }\n win.features = args || {};\n win.params = params || {};\n win = win.renderTo(domGlobals.document.body).reflow();\n return win;\n };\n var alert = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.alert(message, function () {\n choiceCallback();\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var confirm = function (message, choiceCallback, closeCallback) {\n var win;\n win = MessageBox.confirm(message, function (state) {\n choiceCallback(state);\n });\n win.on('close', function () {\n closeCallback(win);\n });\n return win;\n };\n var close = function (window) {\n window.close();\n };\n var getParams = function (window) {\n return window.params;\n };\n var setParams = function (window, params) {\n window.params = params;\n };\n return {\n open: open,\n alert: alert,\n confirm: confirm,\n close: close,\n getParams: getParams,\n setParams: setParams\n };\n }\n\n var get = function (editor) {\n var renderUI = function (args) {\n return Render.renderUI(editor, this, args);\n };\n var resizeTo = function (w, h) {\n return Resize.resizeTo(editor, w, h);\n };\n var resizeBy = function (dw, dh) {\n return Resize.resizeBy(editor, dw, dh);\n };\n var getNotificationManagerImpl = function () {\n return NotificationManagerImpl(editor);\n };\n var getWindowManagerImpl = function () {\n return WindowManagerImpl();\n };\n return {\n renderUI: renderUI,\n resizeTo: resizeTo,\n resizeBy: resizeBy,\n getNotificationManagerImpl: getNotificationManagerImpl,\n getWindowManagerImpl: getWindowManagerImpl\n };\n };\n var ThemeApi = { get: get };\n\n var Layout = global$a.extend({\n Defaults: {\n firstControlClass: 'first',\n lastControlClass: 'last'\n },\n init: function (settings) {\n this.settings = global$2.extend({}, this.Defaults, settings);\n },\n preRender: function (container) {\n container.bodyClasses.add(this.settings.containerClass);\n },\n applyClasses: function (items) {\n var self = this;\n var settings = self.settings;\n var firstClass, lastClass, firstItem, lastItem;\n firstClass = settings.firstControlClass;\n lastClass = settings.lastControlClass;\n items.each(function (item) {\n item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);\n if (item.visible()) {\n if (!firstItem) {\n firstItem = item;\n }\n lastItem = item;\n }\n });\n if (firstItem) {\n firstItem.classes.add(firstClass);\n }\n if (lastItem) {\n lastItem.classes.add(lastClass);\n }\n },\n renderHtml: function (container) {\n var self = this;\n var html = '';\n self.applyClasses(container.items());\n container.items().each(function (item) {\n html += item.renderHtml();\n });\n return html;\n },\n recalc: function () {\n },\n postRender: function () {\n },\n isNative: function () {\n return false;\n }\n });\n\n var AbsoluteLayout = Layout.extend({\n Defaults: {\n containerClass: 'abs-layout',\n controlClass: 'abs-layout-item'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n var settings = ctrl.settings;\n ctrl.layoutRect({\n x: settings.x,\n y: settings.y,\n w: settings.w,\n h: settings.h\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n renderHtml: function (container) {\n return '
    ' + this._super(container);\n }\n });\n\n var Button = Widget.extend({\n Defaults: {\n classes: 'widget btn',\n role: 'button'\n },\n init: function (settings) {\n var self = this;\n var size;\n self._super(settings);\n settings = self.settings;\n size = self.settings.size;\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('touchstart', function (e) {\n self.fire('click', e);\n e.preventDefault();\n });\n if (settings.subtype) {\n self.classes.add(settings.subtype);\n }\n if (size) {\n self.classes.add('btn-' + size);\n }\n if (settings.icon) {\n self.icon(settings.icon);\n }\n },\n icon: function (icon) {\n if (!arguments.length) {\n return this.state.get('icon');\n }\n this.state.set('icon', icon);\n return this;\n },\n repaint: function () {\n var btnElm = this.getEl().firstChild;\n var btnStyle;\n if (btnElm) {\n btnStyle = btnElm.style;\n btnStyle.width = btnStyle.height = '100%';\n }\n this._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.state.get('icon'), image;\n var text = self.state.get('text');\n var textHtml = '';\n var ariaPressed;\n var settings = self.settings;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
    ' + '' + '
    ';\n },\n bindStates: function () {\n var self = this, $ = self.$, textCls = self.classPrefix + 'txt';\n function setButtonText(text) {\n var $span = $('span.' + textCls, self.getEl());\n if (text) {\n if (!$span[0]) {\n $('button:first', self.getEl()).append('');\n $span = $('span.' + textCls, self.getEl());\n }\n $span.html(self.encode(text));\n } else {\n $span.remove();\n }\n self.classes.toggle('btn-has-text', !!text);\n }\n self.state.on('change:text', function (e) {\n setButtonText(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n setButtonText(self.state.get('text'));\n });\n return self._super();\n }\n });\n\n var BrowseButton = Button.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n text: 'Browse...',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('browsebutton');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n postRender: function () {\n var self = this;\n var input = funcs.create('input', {\n type: 'file',\n id: self._id + '-browse',\n accept: self.settings.accept\n });\n self._super();\n global$9(input).on('change', function (e) {\n var files = e.target.files;\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n e.preventDefault();\n if (files.length) {\n self.fire('change', e);\n }\n });\n global$9(input).on('click', function (e) {\n e.stopPropagation();\n });\n global$9(self.getEl('button')).on('click touchstart', function (e) {\n e.stopPropagation();\n input.click();\n e.preventDefault();\n });\n self.getEl().appendChild(input);\n },\n remove: function () {\n global$9(this.getEl('button')).off();\n global$9(this.getEl('input')).off();\n this._super();\n }\n });\n\n var ButtonGroup = Container.extend({\n Defaults: {\n defaultType: 'button',\n role: 'group'\n },\n renderHtml: function () {\n var self = this, layout = self._layout;\n self.classes.add('btn-group');\n self.preRender();\n layout.preRender(self);\n return '
    ' + '
    ' + (self.settings.html || '') + layout.renderHtml(self) + '
    ' + '
    ';\n }\n });\n\n var Checkbox = Widget.extend({\n Defaults: {\n classes: 'checkbox',\n role: 'checkbox',\n checked: false\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.on('click mousedown', function (e) {\n e.preventDefault();\n });\n self.on('click', function (e) {\n e.preventDefault();\n if (!self.disabled()) {\n self.checked(!self.checked());\n }\n });\n self.checked(self.settings.checked);\n },\n checked: function (state) {\n if (!arguments.length) {\n return this.state.get('checked');\n }\n this.state.set('checked', state);\n return this;\n },\n value: function (state) {\n if (!arguments.length) {\n return this.checked();\n }\n return this.checked(state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
    ' + '' + '' + self.encode(self.state.get('text')) + '' + '
    ';\n },\n bindStates: function () {\n var self = this;\n function checked(state) {\n self.classes.toggle('checked', state);\n self.aria('checked', state);\n }\n self.state.on('change:text', function (e) {\n self.getEl('al').firstChild.data = self.translate(e.value);\n });\n self.state.on('change:checked change:value', function (e) {\n self.fire('change');\n checked(e.value);\n });\n self.state.on('change:icon', function (e) {\n var icon = e.value;\n var prefix = self.classPrefix;\n if (typeof icon === 'undefined') {\n return self.settings.icon;\n }\n self.settings.icon = icon;\n icon = icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var btnElm = self.getEl().firstChild;\n var iconElm = btnElm.getElementsByTagName('i')[0];\n if (icon) {\n if (!iconElm || iconElm !== btnElm.firstChild) {\n iconElm = domGlobals.document.createElement('i');\n btnElm.insertBefore(iconElm, btnElm.firstChild);\n }\n iconElm.className = icon;\n } else if (iconElm) {\n btnElm.removeChild(iconElm);\n }\n });\n if (self.state.get('checked')) {\n checked(true);\n }\n return self._super();\n }\n });\n\n var global$d = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var ComboBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n settings = self.settings;\n self.classes.add('combobox');\n self.subinput = true;\n self.ariaTarget = 'inp';\n settings.menu = settings.menu || settings.values;\n if (settings.menu) {\n settings.icon = 'caret';\n }\n self.on('click', function (e) {\n var elm = e.target;\n var root = self.getEl();\n if (!global$9.contains(root, elm) && elm !== root) {\n return;\n }\n while (elm && elm !== root) {\n if (elm.id && elm.id.indexOf('-open') !== -1) {\n self.fire('action');\n if (settings.menu) {\n self.showMenu();\n if (e.aria) {\n self.menu.items()[0].focus();\n }\n }\n }\n elm = elm.parentNode;\n }\n });\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n if (e.target.nodeName === 'INPUT') {\n var oldValue = self.state.get('value');\n var newValue = e.target.value;\n if (newValue !== oldValue) {\n self.state.set('value', newValue);\n self.fire('autocomplete', e);\n }\n }\n });\n self.on('mouseover', function (e) {\n var tooltip = self.tooltip().moveTo(-65535);\n if (self.statusLevel() && e.target.className.indexOf(self.classPrefix + 'status') !== -1) {\n var statusMessage = self.statusMessage() || 'Ok';\n var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ]);\n tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');\n tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');\n tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');\n tooltip.moveRel(e.target, rel);\n }\n });\n },\n statusLevel: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusLevel', value);\n }\n return this.state.get('statusLevel');\n },\n statusMessage: function (value) {\n if (arguments.length > 0) {\n this.state.set('statusMessage', value);\n }\n return this.state.get('statusMessage');\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n if (!self.menu) {\n menu = settings.menu || [];\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n self.menu = global$4.create(menu).parent(self).renderTo(self.getContainerElm());\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control === self.menu) {\n self.focus();\n }\n });\n self.menu.on('show hide', function (e) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.value() === self.value());\n });\n }).fire('show');\n self.menu.on('select', function (e) {\n self.value(e.control.value());\n });\n self.on('focusin', function (e) {\n if (e.target.tagName.toUpperCase() === 'INPUT') {\n self.menu.hide();\n }\n });\n self.aria('expanded', true);\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n focus: function () {\n this.getEl('inp').focus();\n },\n repaint: function () {\n var self = this, elm = self.getEl(), openElm = self.getEl('open'), rect = self.layoutRect();\n var width, lineHeight, innerPadding = 0;\n var inputElm = elm.firstChild;\n if (self.statusLevel() && self.statusLevel() !== 'none') {\n innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);\n }\n if (openElm) {\n width = rect.w - funcs.getSize(openElm).width - 10;\n } else {\n width = rect.w - 10;\n }\n var doc = domGlobals.document;\n if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n lineHeight = self.layoutRect().h - 2 + 'px';\n }\n global$9(inputElm).css({\n width: width - innerPadding,\n lineHeight: lineHeight\n });\n self._super();\n return self;\n },\n postRender: function () {\n var self = this;\n global$9(this.getEl('inp')).on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n return self._super();\n },\n renderHtml: function () {\n var self = this, id = self._id, settings = self.settings, prefix = self.classPrefix;\n var value = self.state.get('value') || '';\n var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';\n if ('spellcheck' in settings) {\n extraAttrs += ' spellcheck=\"' + settings.spellcheck + '\"';\n }\n if (settings.maxLength) {\n extraAttrs += ' maxlength=\"' + settings.maxLength + '\"';\n }\n if (settings.size) {\n extraAttrs += ' size=\"' + settings.size + '\"';\n }\n if (settings.subtype) {\n extraAttrs += ' type=\"' + settings.subtype + '\"';\n }\n statusHtml = '';\n if (self.disabled()) {\n extraAttrs += ' disabled=\"disabled\"';\n }\n icon = settings.icon;\n if (icon && icon !== 'caret') {\n icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;\n }\n text = self.state.get('text');\n if (icon || text) {\n openBtnHtml = '
    ' + '' + '
    ';\n self.classes.add('has-open');\n }\n return '
    ' + '' + statusHtml + openBtnHtml + '
    ';\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl('inp').value);\n }\n return this.state.get('value');\n },\n showAutoComplete: function (items, term) {\n var self = this;\n if (items.length === 0) {\n self.hideMenu();\n return;\n }\n var insert = function (value, title) {\n return function () {\n self.fire('selectitem', {\n title: title,\n value: value\n });\n };\n };\n if (self.menu) {\n self.menu.items().remove();\n } else {\n self.menu = global$4.create({\n type: 'menu',\n classes: 'combobox-menu',\n layout: 'flow'\n }).parent(self).renderTo();\n }\n global$2.each(items, function (item) {\n self.menu.add({\n text: item.title,\n url: item.previewUrl,\n match: term,\n classes: 'menu-item-ellipsis',\n onclick: insert(item.value, item.title)\n });\n });\n self.menu.renderNew();\n self.hideMenu();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n var maxW = self.layoutRect().w;\n self.menu.layoutRect({\n w: maxW,\n minW: 0,\n maxW: maxW\n });\n self.menu.repaint();\n self.menu.reflow();\n self.menu.show();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n },\n hideMenu: function () {\n if (this.menu) {\n this.menu.hide();\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl('inp').value !== e.value) {\n self.getEl('inp').value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl('inp').disabled = e.value;\n });\n self.state.on('change:statusLevel', function (e) {\n var statusIconElm = self.getEl('status');\n var prefix = self.classPrefix, value = e.value;\n funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');\n funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');\n funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');\n funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');\n self.classes.toggle('has-status', value !== 'none');\n self.repaint();\n });\n funcs.on(self.getEl('status'), 'mouseleave', function () {\n self.tooltip().hide();\n });\n self.on('cancel', function (e) {\n if (self.menu && self.menu.visible()) {\n e.stopPropagation();\n self.hideMenu();\n }\n });\n var focusIdx = function (idx, menu) {\n if (menu && menu.items().length > 0) {\n menu.items().eq(idx)[0].focus();\n }\n };\n self.on('keydown', function (e) {\n var keyCode = e.keyCode;\n if (e.target.nodeName === 'INPUT') {\n if (keyCode === global$d.DOWN) {\n e.preventDefault();\n self.fire('autocomplete');\n focusIdx(0, self.menu);\n } else if (keyCode === global$d.UP) {\n e.preventDefault();\n focusIdx(-1, self.menu);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n global$9(this.getEl('inp')).off();\n if (this.menu) {\n this.menu.remove();\n }\n this._super();\n }\n });\n\n var ColorBox = ComboBox.extend({\n init: function (settings) {\n var self = this;\n settings.spellcheck = false;\n if (settings.onaction) {\n settings.icon = 'none';\n }\n self._super(settings);\n self.classes.add('colorbox');\n self.on('change keyup postrender', function () {\n self.repaintColor(self.value());\n });\n },\n repaintColor: function (value) {\n var openElm = this.getEl('open');\n var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;\n if (elm) {\n try {\n elm.style.background = value;\n } catch (ex) {\n }\n }\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.state.get('rendered')) {\n self.repaintColor(e.value);\n }\n });\n return self._super();\n }\n });\n\n var PanelButton = Button.extend({\n showPanel: function () {\n var self = this, settings = self.settings;\n self.classes.add('opened');\n if (!self.panel) {\n var panelSettings = settings.panel;\n if (panelSettings.type) {\n panelSettings = {\n layout: 'grid',\n items: panelSettings\n };\n }\n panelSettings.role = panelSettings.role || 'dialog';\n panelSettings.popover = true;\n panelSettings.autohide = true;\n panelSettings.ariaRoot = true;\n self.panel = new FloatPanel(panelSettings).on('hide', function () {\n self.classes.remove('opened');\n }).on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n self.hidePanel();\n }).parent(self).renderTo(self.getContainerElm());\n self.panel.fire('show');\n self.panel.reflow();\n } else {\n self.panel.show();\n }\n var rtlRels = [\n 'bc-tc',\n 'bc-tl',\n 'bc-tr'\n ];\n var ltrRels = [\n 'bc-tc',\n 'bc-tr',\n 'bc-tl',\n 'tc-bc',\n 'tc-br',\n 'tc-bl'\n ];\n var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));\n self.panel.classes.toggle('start', rel.substr(-1) === 'l');\n self.panel.classes.toggle('end', rel.substr(-1) === 'r');\n var isTop = rel.substr(0, 1) === 't';\n self.panel.classes.toggle('bottom', !isTop);\n self.panel.classes.toggle('top', isTop);\n self.panel.moveRel(self.getEl(), rel);\n },\n hidePanel: function () {\n var self = this;\n if (self.panel) {\n self.panel.hide();\n }\n },\n postRender: function () {\n var self = this;\n self.aria('haspopup', true);\n self.on('click', function (e) {\n if (e.control === self) {\n if (self.panel && self.panel.visible()) {\n self.hidePanel();\n } else {\n self.showPanel();\n self.panel.focus(!!e.aria);\n }\n }\n });\n return self._super();\n },\n remove: function () {\n if (this.panel) {\n this.panel.remove();\n this.panel = null;\n }\n return this._super();\n }\n });\n\n var DOM$3 = global$3.DOM;\n var ColorButton = PanelButton.extend({\n init: function (settings) {\n this._super(settings);\n this.classes.add('splitbtn');\n this.classes.add('colorbutton');\n },\n color: function (color) {\n if (color) {\n this._color = color;\n this.getEl('preview').style.backgroundColor = color;\n return this;\n }\n return this._color;\n },\n resetColor: function () {\n this._color = null;\n this.getEl('preview').style.backgroundColor = null;\n return this;\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');\n var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';\n var image = self.settings.image ? ' style=\"background-image: url(\\'' + self.settings.image + '\\')\"' : '';\n var textHtml = '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n return '
    ' + '' + '' + '
    ';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n if (e.aria && e.aria.key === 'down') {\n return;\n }\n if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {\n e.stopImmediatePropagation();\n onClickHandler.call(self, e);\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var global$e = tinymce.util.Tools.resolve('tinymce.util.Color');\n\n var ColorPicker = Widget.extend({\n Defaults: { classes: 'widget colorpicker' },\n init: function (settings) {\n this._super(settings);\n },\n postRender: function () {\n var self = this;\n var color = self.color();\n var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;\n hueRootElm = self.getEl('h');\n huePointElm = self.getEl('hp');\n svRootElm = self.getEl('sv');\n svPointElm = self.getEl('svp');\n function getPos(elm, event) {\n var pos = funcs.getPos(elm);\n var x, y;\n x = event.pageX - pos.x;\n y = event.pageY - pos.y;\n x = Math.max(0, Math.min(x / elm.clientWidth, 1));\n y = Math.max(0, Math.min(y / elm.clientHeight, 1));\n return {\n x: x,\n y: y\n };\n }\n function updateColor(hsv, hueUpdate) {\n var hue = (360 - hsv.h) / 360;\n funcs.css(huePointElm, { top: hue * 100 + '%' });\n if (!hueUpdate) {\n funcs.css(svPointElm, {\n left: hsv.s + '%',\n top: 100 - hsv.v + '%'\n });\n }\n svRootElm.style.background = global$e({\n s: 100,\n v: 100,\n h: hsv.h\n }).toHex();\n self.color().parse({\n s: hsv.s,\n v: hsv.v,\n h: hsv.h\n });\n }\n function updateSaturationAndValue(e) {\n var pos;\n pos = getPos(svRootElm, e);\n hsv.s = pos.x * 100;\n hsv.v = (1 - pos.y) * 100;\n updateColor(hsv);\n self.fire('change');\n }\n function updateHue(e) {\n var pos;\n pos = getPos(hueRootElm, e);\n hsv = color.toHsv();\n hsv.h = (1 - pos.y) * 360;\n updateColor(hsv, true);\n self.fire('change');\n }\n self._repaint = function () {\n hsv = color.toHsv();\n updateColor(hsv);\n };\n self._super();\n self._svdraghelper = new DragHelper(self._id + '-sv', {\n start: updateSaturationAndValue,\n drag: updateSaturationAndValue\n });\n self._hdraghelper = new DragHelper(self._id + '-h', {\n start: updateHue,\n drag: updateHue\n });\n self._repaint();\n },\n rgb: function () {\n return this.color().toRgb();\n },\n value: function (value) {\n var self = this;\n if (arguments.length) {\n self.color().parse(value);\n if (self._rendered) {\n self._repaint();\n }\n } else {\n return self.color().toHex();\n }\n },\n color: function () {\n if (!this._color) {\n this._color = global$e();\n }\n return this._color;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var hueHtml;\n var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';\n function getOldIeFallbackHtml() {\n var i, l, html = '', gradientPrefix, stopsList;\n gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';\n stopsList = stops.split(',');\n for (i = 0, l = stopsList.length - 1; i < l; i++) {\n html += '
    ';\n }\n return html;\n }\n var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';\n hueHtml = '
    ' + getOldIeFallbackHtml() + '
    ' + '
    ';\n return '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + hueHtml + '
    ';\n }\n });\n\n var DropZone = Widget.extend({\n init: function (settings) {\n var self = this;\n settings = global$2.extend({\n height: 100,\n text: 'Drop an image here',\n multiple: false,\n accept: null\n }, settings);\n self._super(settings);\n self.classes.add('dropzone');\n if (settings.multiple) {\n self.classes.add('multiple');\n }\n },\n renderHtml: function () {\n var self = this;\n var attrs, elm;\n var cfg = self.settings;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n elm = funcs.create('div', attrs, '' + this.translate(cfg.text) + '');\n if (cfg.height) {\n funcs.css(elm, 'height', cfg.height + 'px');\n }\n if (cfg.width) {\n funcs.css(elm, 'width', cfg.width + 'px');\n }\n elm.className = self.classes;\n return elm.outerHTML;\n },\n postRender: function () {\n var self = this;\n var toggleDragClass = function (e) {\n e.preventDefault();\n self.classes.toggle('dragenter');\n self.getEl().className = self.classes;\n };\n var filter = function (files) {\n var accept = self.settings.accept;\n if (typeof accept !== 'string') {\n return files;\n }\n var re = new RegExp('(' + accept.split(/\\s*,\\s*/).join('|') + ')$', 'i');\n return global$2.grep(files, function (file) {\n return re.test(file.name);\n });\n };\n self._super();\n self.$el.on('dragover', function (e) {\n e.preventDefault();\n });\n self.$el.on('dragenter', toggleDragClass);\n self.$el.on('dragleave', toggleDragClass);\n self.$el.on('drop', function (e) {\n e.preventDefault();\n if (self.state.get('disabled')) {\n return;\n }\n var files = filter(e.dataTransfer.files);\n self.value = function () {\n if (!files.length) {\n return null;\n } else if (self.settings.multiple) {\n return files;\n } else {\n return files[0];\n }\n };\n if (files.length) {\n self.fire('change', e);\n }\n });\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var Path = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.delimiter) {\n settings.delimiter = '\\xBB';\n }\n self._super(settings);\n self.classes.add('path');\n self.canFocus = true;\n self.on('click', function (e) {\n var index;\n var target = e.target;\n if (index = target.getAttribute('data-index')) {\n self.fire('select', {\n value: self.row()[index],\n index: index\n });\n }\n });\n self.row(self.settings.row);\n },\n focus: function () {\n var self = this;\n self.getEl().firstChild.focus();\n return self;\n },\n row: function (row) {\n if (!arguments.length) {\n return this.state.get('row');\n }\n this.state.set('row', row);\n return this;\n },\n renderHtml: function () {\n var self = this;\n return '
    ' + self._getDataPathHtml(self.state.get('row')) + '
    ';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:row', function (e) {\n self.innerHtml(self._getDataPathHtml(e.value));\n });\n return self._super();\n },\n _getDataPathHtml: function (data) {\n var self = this;\n var parts = data || [];\n var i, l, html = '';\n var prefix = self.classPrefix;\n for (i = 0, l = parts.length; i < l; i++) {\n html += (i > 0 ? '
    ' + self.settings.delimiter + '
    ' : '') + '
    ' + parts[i].name + '
    ';\n }\n if (!html) {\n html = '
    \\xA0
    ';\n }\n return html;\n }\n });\n\n var ElementPath = Path.extend({\n postRender: function () {\n var self = this, editor = self.settings.editor;\n function isHidden(elm) {\n if (elm.nodeType === 1) {\n if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {\n return true;\n }\n if (elm.getAttribute('data-mce-type') === 'bookmark') {\n return true;\n }\n }\n return false;\n }\n if (editor.settings.elementpath !== false) {\n self.on('select', function (e) {\n editor.focus();\n editor.selection.select(this.row()[e.index].element);\n editor.nodeChanged();\n });\n editor.on('nodeChange', function (e) {\n var outParents = [];\n var parents = e.parents;\n var i = parents.length;\n while (i--) {\n if (parents[i].nodeType === 1 && !isHidden(parents[i])) {\n var args = editor.fire('ResolveName', {\n name: parents[i].nodeName.toLowerCase(),\n target: parents[i]\n });\n if (!args.isDefaultPrevented()) {\n outParents.push({\n name: args.name,\n element: parents[i]\n });\n }\n if (args.isPropagationStopped()) {\n break;\n }\n }\n }\n self.row(outParents);\n });\n }\n return self._super();\n }\n });\n\n var FormItem = Container.extend({\n Defaults: {\n layout: 'flex',\n align: 'center',\n defaults: { flex: 1 }\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.classes.add('formitem');\n layout.preRender(self);\n return '
    ' + (self.settings.title ? '
    ' + self.settings.title + '
    ' : '') + '
    ' + (self.settings.html || '') + layout.renderHtml(self) + '
    ' + '
    ';\n }\n });\n\n var Form = Container.extend({\n Defaults: {\n containerCls: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: 15,\n labelGap: 30,\n spacing: 10,\n callbacks: {\n submit: function () {\n this.submit();\n }\n }\n },\n preRender: function () {\n var self = this, items = self.items();\n if (!self.settings.formItemDefaults) {\n self.settings.formItemDefaults = {\n layout: 'flex',\n autoResize: 'overflow',\n defaults: { flex: 1 }\n };\n }\n items.each(function (ctrl) {\n var formItem;\n var label = ctrl.settings.label;\n if (label) {\n formItem = new FormItem(global$2.extend({\n items: {\n type: 'label',\n id: ctrl._id + '-l',\n text: label,\n flex: 0,\n forId: ctrl._id,\n disabled: ctrl.disabled()\n }\n }, self.settings.formItemDefaults));\n formItem.type = 'formitem';\n ctrl.aria('labelledby', ctrl._id + '-l');\n if (typeof ctrl.settings.flex === 'undefined') {\n ctrl.settings.flex = 1;\n }\n self.replace(ctrl, formItem);\n formItem.add(ctrl);\n }\n });\n },\n submit: function () {\n return this.fire('submit', { data: this.toJSON() });\n },\n postRender: function () {\n var self = this;\n self._super();\n self.fromJSON(self.settings.data);\n },\n bindStates: function () {\n var self = this;\n self._super();\n function recalcLabels() {\n var maxLabelWidth = 0;\n var labels = [];\n var i, labelGap, items;\n if (self.settings.labelGapCalc === false) {\n return;\n }\n if (self.settings.labelGapCalc === 'children') {\n items = self.find('formitem');\n } else {\n items = self.items();\n }\n items.filter('formitem').each(function (item) {\n var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;\n maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;\n labels.push(labelCtrl);\n });\n labelGap = self.settings.labelGap || 0;\n i = labels.length;\n while (i--) {\n labels[i].settings.minWidth = maxLabelWidth + labelGap;\n }\n }\n self.on('show', recalcLabels);\n recalcLabels();\n }\n });\n\n var FieldSet = Form.extend({\n Defaults: {\n containerCls: 'fieldset',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n flex: 1,\n padding: '25 15 5 15',\n labelGap: 30,\n spacing: 10,\n border: 1\n },\n renderHtml: function () {\n var self = this, layout = self._layout, prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n return '
    ' + (self.settings.title ? '' + self.settings.title + '' : '') + '
    ' + (self.settings.html || '') + layout.renderHtml(self) + '
    ' + '
    ';\n }\n });\n\n var unique$1 = 0;\n var generate = function (prefix) {\n var date = new Date();\n var time = date.getTime();\n var random = Math.floor(Math.random() * 1000000000);\n unique$1++;\n return prefix + '_' + random + unique$1 + String(time);\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows$1 = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows$1, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows$1),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var contains = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains(uastring, 'edge/') && contains(uastring, 'chrome') && contains(uastring, 'safari') && contains(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains(uastring, 'chrome') && !contains(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains(uastring, 'msie') || contains(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains(uastring, 'safari') || contains(uastring, 'mobile/')) && contains(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains(uastring, 'iphone') || contains(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$1 = browser.isIE() ? ieContains : regularContains;\n\n var spot = Immutable('element', 'offset');\n\n var descendants = function (scope, selector) {\n return all(selector, scope);\n };\n\n var trim = global$2.trim;\n var hasContentEditableState = function (value) {\n return function (node) {\n if (node && node.nodeType === 1) {\n if (node.contentEditable === value) {\n return true;\n }\n if (node.getAttribute('data-mce-contenteditable') === value) {\n return true;\n }\n }\n return false;\n };\n };\n var isContentEditableTrue = hasContentEditableState('true');\n var isContentEditableFalse = hasContentEditableState('false');\n var create = function (type, title, url, level, attach) {\n return {\n type: type,\n title: title,\n url: url,\n level: level,\n attach: attach\n };\n };\n var isChildOfContentEditableTrue = function (node) {\n while (node = node.parentNode) {\n var value = node.contentEditable;\n if (value && value !== 'inherit') {\n return isContentEditableTrue(node);\n }\n }\n return false;\n };\n var select = function (selector, root) {\n return map(descendants(Element.fromDom(root), selector), function (element) {\n return element.dom();\n });\n };\n var getElementText = function (elm) {\n return elm.innerText || elm.textContent;\n };\n var getOrGenerateId = function (elm) {\n return elm.id ? elm.id : generate('h');\n };\n var isAnchor = function (elm) {\n return elm && elm.nodeName === 'A' && (elm.id || elm.name);\n };\n var isValidAnchor = function (elm) {\n return isAnchor(elm) && isEditable(elm);\n };\n var isHeader = function (elm) {\n return elm && /^(H[1-6])$/.test(elm.nodeName);\n };\n var isEditable = function (elm) {\n return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);\n };\n var isValidHeader = function (elm) {\n return isHeader(elm) && isEditable(elm);\n };\n var getLevel = function (elm) {\n return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;\n };\n var headerTarget = function (elm) {\n var headerId = getOrGenerateId(elm);\n var attach = function () {\n elm.id = headerId;\n };\n return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);\n };\n var anchorTarget = function (elm) {\n var anchorId = elm.id || elm.name;\n var anchorText = getElementText(elm);\n return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);\n };\n var getHeaderTargets = function (elms) {\n return map(filter(elms, isValidHeader), headerTarget);\n };\n var getAnchorTargets = function (elms) {\n return map(filter(elms, isValidAnchor), anchorTarget);\n };\n var getTargetElements = function (elm) {\n var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);\n return elms;\n };\n var hasTitle = function (target) {\n return trim(target.title).length > 0;\n };\n var find$2 = function (elm) {\n var elms = getTargetElements(elm);\n return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);\n };\n var LinkTargets = { find: find$2 };\n\n var getActiveEditor = function () {\n return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;\n };\n var history = {};\n var HISTORY_LENGTH = 5;\n var clearHistory = function () {\n history = {};\n };\n var toMenuItem = function (target) {\n return {\n title: target.title,\n value: {\n title: { raw: target.title },\n url: target.url,\n attach: target.attach\n }\n };\n };\n var toMenuItems = function (targets) {\n return global$2.map(targets, toMenuItem);\n };\n var staticMenuItem = function (title, url) {\n return {\n title: title,\n value: {\n title: title,\n url: url,\n attach: noop\n }\n };\n };\n var isUniqueUrl = function (url, targets) {\n var foundTarget = exists(targets, function (target) {\n return target.url === url;\n });\n return !foundTarget;\n };\n var getSetting = function (editorSettings, name, defaultValue) {\n var value = name in editorSettings ? editorSettings[name] : defaultValue;\n return value === false ? null : value;\n };\n var createMenuItems = function (term, targets, fileType, editorSettings) {\n var separator = { title: '-' };\n var fromHistoryMenuItems = function (history) {\n var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];\n var uniqueHistory = filter(historyItems, function (url) {\n return isUniqueUrl(url, targets);\n });\n return global$2.map(uniqueHistory, function (url) {\n return {\n title: url,\n value: {\n title: url,\n url: url,\n attach: noop\n }\n };\n });\n };\n var fromMenuItems = function (type) {\n var filteredTargets = filter(targets, function (target) {\n return target.type === type;\n });\n return toMenuItems(filteredTargets);\n };\n var anchorMenuItems = function () {\n var anchorMenuItems = fromMenuItems('anchor');\n var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');\n var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');\n if (topAnchor !== null) {\n anchorMenuItems.unshift(staticMenuItem('', topAnchor));\n }\n if (bottomAchor !== null) {\n anchorMenuItems.push(staticMenuItem('', bottomAchor));\n }\n return anchorMenuItems;\n };\n var join = function (items) {\n return foldl(items, function (a, b) {\n var bothEmpty = a.length === 0 || b.length === 0;\n return bothEmpty ? a.concat(b) : a.concat(separator, b);\n }, []);\n };\n if (editorSettings.typeahead_urls === false) {\n return [];\n }\n return fileType === 'file' ? join([\n filterByQuery(term, fromHistoryMenuItems(history)),\n filterByQuery(term, fromMenuItems('header')),\n filterByQuery(term, anchorMenuItems())\n ]) : filterByQuery(term, fromHistoryMenuItems(history));\n };\n var addToHistory = function (url, fileType) {\n var items = history[fileType];\n if (!/^https?/.test(url)) {\n return;\n }\n if (items) {\n if (indexOf(items, url).isNone()) {\n history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);\n }\n } else {\n history[fileType] = [url];\n }\n };\n var filterByQuery = function (term, menuItems) {\n var lowerCaseTerm = term.toLowerCase();\n var result = global$2.grep(menuItems, function (item) {\n return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;\n });\n return result.length === 1 && result[0].title === term ? [] : result;\n };\n var getTitle = function (linkDetails) {\n var title = linkDetails.title;\n return title.raw ? title.raw : title;\n };\n var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {\n var autocomplete = function (term) {\n var linkTargets = LinkTargets.find(bodyElm);\n var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);\n ctrl.showAutoComplete(menuItems, term);\n };\n ctrl.on('autocomplete', function () {\n autocomplete(ctrl.value());\n });\n ctrl.on('selectitem', function (e) {\n var linkDetails = e.value;\n ctrl.value(linkDetails.url);\n var title = getTitle(linkDetails);\n if (fileType === 'image') {\n ctrl.fire('change', {\n meta: {\n alt: title,\n attach: linkDetails.attach\n }\n });\n } else {\n ctrl.fire('change', {\n meta: {\n text: title,\n attach: linkDetails.attach\n }\n });\n }\n ctrl.focus();\n });\n ctrl.on('click', function (e) {\n if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {\n autocomplete('');\n }\n });\n ctrl.on('PostRender', function () {\n ctrl.getRoot().on('submit', function (e) {\n if (!e.isDefaultPrevented()) {\n addToHistory(ctrl.value(), fileType);\n }\n });\n });\n };\n var statusToUiState = function (result) {\n var status = result.status, message = result.message;\n if (status === 'valid') {\n return {\n status: 'ok',\n message: message\n };\n } else if (status === 'unknown') {\n return {\n status: 'warn',\n message: message\n };\n } else if (status === 'invalid') {\n return {\n status: 'warn',\n message: message\n };\n } else {\n return {\n status: 'none',\n message: ''\n };\n }\n };\n var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {\n var validatorHandler = editorSettings.filepicker_validator_handler;\n if (validatorHandler) {\n var validateUrl_1 = function (url) {\n if (url.length === 0) {\n ctrl.statusLevel('none');\n return;\n }\n validatorHandler({\n url: url,\n type: fileType\n }, function (result) {\n var uiState = statusToUiState(result);\n ctrl.statusMessage(uiState.message);\n ctrl.statusLevel(uiState.status);\n });\n };\n ctrl.state.on('change:value', function (e) {\n validateUrl_1(e.value);\n });\n }\n };\n var FilePicker = ComboBox.extend({\n Statics: { clearHistory: clearHistory },\n init: function (settings) {\n var self = this, editor = getActiveEditor(), editorSettings = editor.settings;\n var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;\n var fileType = settings.filetype;\n settings.spellcheck = false;\n fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;\n if (fileBrowserCallbackTypes) {\n fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);\n }\n if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {\n fileBrowserCallback = editorSettings.file_picker_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n var meta = self.fire('beforecall').meta;\n meta = global$2.extend({ filetype: fileType }, meta);\n fileBrowserCallback.call(editor, function (value, meta) {\n self.value(value).fire('change', { meta: meta });\n }, self.value(), meta);\n };\n } else {\n fileBrowserCallback = editorSettings.file_browser_callback;\n if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {\n actionCallback = function () {\n fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);\n };\n }\n }\n }\n if (actionCallback) {\n settings.icon = 'browse';\n settings.onaction = actionCallback;\n }\n self._super(settings);\n self.classes.add('filepicker');\n setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);\n setupLinkValidatorHandler(self, editorSettings, fileType);\n }\n });\n\n var FitLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;\n container.items().filter(':visible').each(function (ctrl) {\n ctrl.layoutRect({\n x: paddingBox.left,\n y: paddingBox.top,\n w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,\n h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom\n });\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n }\n });\n\n var FlexLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;\n var ctrl, ctrlLayoutRect, ctrlSettings, flex;\n var maxSizeItems = [];\n var size, maxSize, ratio, rect, pos, maxAlignEndPos;\n var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;\n var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;\n var alignDeltaSizeName, alignContentSizeName;\n var max = Math.max, min = Math.min;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n contPaddingBox = container.paddingBox;\n contSettings = container.settings;\n direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;\n align = contSettings.align;\n pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;\n spacing = contSettings.spacing || 0;\n if (direction === 'row-reversed' || direction === 'column-reverse') {\n items = items.set(items.toArray().reverse());\n direction = direction.split('-')[0];\n }\n if (direction === 'column') {\n posName = 'y';\n sizeName = 'h';\n minSizeName = 'minH';\n maxSizeName = 'maxH';\n innerSizeName = 'innerH';\n beforeName = 'top';\n deltaSizeName = 'deltaH';\n contentSizeName = 'contentH';\n alignBeforeName = 'left';\n alignSizeName = 'w';\n alignAxisName = 'x';\n alignInnerSizeName = 'innerW';\n alignMinSizeName = 'minW';\n alignAfterName = 'right';\n alignDeltaSizeName = 'deltaW';\n alignContentSizeName = 'contentW';\n } else {\n posName = 'x';\n sizeName = 'w';\n minSizeName = 'minW';\n maxSizeName = 'maxW';\n innerSizeName = 'innerW';\n beforeName = 'left';\n deltaSizeName = 'deltaW';\n contentSizeName = 'contentW';\n alignBeforeName = 'top';\n alignSizeName = 'h';\n alignAxisName = 'y';\n alignInnerSizeName = 'innerH';\n alignMinSizeName = 'minH';\n alignAfterName = 'bottom';\n alignDeltaSizeName = 'deltaH';\n alignContentSizeName = 'contentH';\n }\n availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];\n maxAlignEndPos = totalFlex = 0;\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlSettings = ctrl.settings;\n flex = ctrlSettings.flex;\n availableSpace -= i < l - 1 ? spacing : 0;\n if (flex > 0) {\n totalFlex += flex;\n if (ctrlLayoutRect[maxSizeName]) {\n maxSizeItems.push(ctrl);\n }\n ctrlLayoutRect.flex = flex;\n }\n availableSpace -= ctrlLayoutRect[minSizeName];\n size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];\n if (size > maxAlignEndPos) {\n maxAlignEndPos = size;\n }\n }\n rect = {};\n if (availableSpace < 0) {\n rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n } else {\n rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];\n }\n rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];\n rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;\n rect[alignContentSizeName] = maxAlignEndPos;\n rect.minW = min(rect.minW, contLayoutRect.maxW);\n rect.minH = min(rect.minH, contLayoutRect.maxH);\n rect.minW = max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n ratio = availableSpace / totalFlex;\n for (i = 0, l = maxSizeItems.length; i < l; i++) {\n ctrl = maxSizeItems[i];\n ctrlLayoutRect = ctrl.layoutRect();\n maxSize = ctrlLayoutRect[maxSizeName];\n size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;\n if (size > maxSize) {\n availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];\n totalFlex -= ctrlLayoutRect.flex;\n ctrlLayoutRect.flex = 0;\n ctrlLayoutRect.maxFlexSize = maxSize;\n } else {\n ctrlLayoutRect.maxFlexSize = 0;\n }\n }\n ratio = availableSpace / totalFlex;\n pos = contPaddingBox[beforeName];\n rect = {};\n if (totalFlex === 0) {\n if (pack === 'end') {\n pos = availableSpace + contPaddingBox[beforeName];\n } else if (pack === 'center') {\n pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];\n if (pos < 0) {\n pos = contPaddingBox[beforeName];\n }\n } else if (pack === 'justify') {\n pos = contPaddingBox[beforeName];\n spacing = Math.floor(availableSpace / (items.length - 1));\n }\n }\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n for (i = 0, l = items.length; i < l; i++) {\n ctrl = items[i];\n ctrlLayoutRect = ctrl.layoutRect();\n size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];\n if (align === 'center') {\n rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);\n } else if (align === 'stretch') {\n rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);\n rect[alignAxisName] = contPaddingBox[alignBeforeName];\n } else if (align === 'end') {\n rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;\n }\n if (ctrlLayoutRect.flex > 0) {\n size += ctrlLayoutRect.flex * ratio;\n }\n rect[sizeName] = size;\n rect[posName] = pos;\n ctrl.layoutRect(rect);\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n pos += size + spacing;\n }\n }\n });\n\n var FlowLayout = Layout.extend({\n Defaults: {\n containerClass: 'flow-layout',\n controlClass: 'flow-layout-item',\n endClass: 'break'\n },\n recalc: function (container) {\n container.items().filter(':visible').each(function (ctrl) {\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n });\n },\n isNative: function () {\n return true;\n }\n });\n\n var descendant = function (scope, selector) {\n return one(selector, scope);\n };\n\n var toggleFormat = function (editor, fmt) {\n return function () {\n editor.execCommand('mceToggleFormat', false, fmt);\n };\n };\n var addFormatChangedListener = function (editor, name, changed) {\n var handler = function (state) {\n changed(state, name);\n };\n if (editor.formatter) {\n editor.formatter.formatChanged(name, handler);\n } else {\n editor.on('init', function () {\n editor.formatter.formatChanged(name, handler);\n });\n }\n };\n var postRenderFormatToggle = function (editor, name) {\n return function (e) {\n addFormatChangedListener(editor, name, function (state) {\n e.control.active(state);\n });\n };\n };\n\n var register = function (editor) {\n var alignFormats = [\n 'alignleft',\n 'aligncenter',\n 'alignright',\n 'alignjustify'\n ];\n var defaultAlign = 'alignleft';\n var alignMenuItems = [\n {\n text: 'Left',\n icon: 'alignleft',\n onclick: toggleFormat(editor, 'alignleft')\n },\n {\n text: 'Center',\n icon: 'aligncenter',\n onclick: toggleFormat(editor, 'aligncenter')\n },\n {\n text: 'Right',\n icon: 'alignright',\n onclick: toggleFormat(editor, 'alignright')\n },\n {\n text: 'Justify',\n icon: 'alignjustify',\n onclick: toggleFormat(editor, 'alignjustify')\n }\n ];\n editor.addMenuItem('align', {\n text: 'Align',\n menu: alignMenuItems\n });\n editor.addButton('align', {\n type: 'menubutton',\n icon: defaultAlign,\n menu: alignMenuItems,\n onShowMenu: function (e) {\n var menu = e.control.menu;\n global$2.each(alignFormats, function (formatName, idx) {\n menu.items().eq(idx).each(function (item) {\n return item.active(editor.formatter.match(formatName));\n });\n });\n },\n onPostRender: function (e) {\n var ctrl = e.control;\n global$2.each(alignFormats, function (formatName, idx) {\n addFormatChangedListener(editor, formatName, function (state) {\n ctrl.icon(defaultAlign);\n if (state) {\n ctrl.icon(formatName);\n }\n });\n });\n }\n });\n global$2.each({\n alignleft: [\n 'Align left',\n 'JustifyLeft'\n ],\n aligncenter: [\n 'Align center',\n 'JustifyCenter'\n ],\n alignright: [\n 'Align right',\n 'JustifyRight'\n ],\n alignjustify: [\n 'Justify',\n 'JustifyFull'\n ],\n alignnone: [\n 'No alignment',\n 'JustifyNone'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var Align = { register: register };\n\n var getFirstFont = function (fontFamily) {\n return fontFamily ? fontFamily.split(',')[0] : '';\n };\n var findMatchingValue = function (items, fontFamily) {\n var font = fontFamily ? fontFamily.toLowerCase() : '';\n var value;\n global$2.each(items, function (item) {\n if (item.value.toLowerCase() === font) {\n value = item.value;\n }\n });\n global$2.each(items, function (item) {\n if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {\n value = item.value;\n }\n });\n return value;\n };\n var createFontNameListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n self.state.set('value', null);\n editor.on('init nodeChange', function (e) {\n var fontFamily = editor.queryCommandValue('FontName');\n var match = findMatchingValue(items, fontFamily);\n self.value(match ? match : null);\n if (!match && fontFamily) {\n self.text(getFirstFont(fontFamily));\n }\n });\n };\n };\n var createFormats = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var getFontItems = function (editor) {\n var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';\n var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);\n return global$2.map(fonts, function (font) {\n return {\n text: { raw: font[0] },\n value: font[1],\n textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''\n };\n });\n };\n var registerButtons = function (editor) {\n editor.addButton('fontselect', function () {\n var items = getFontItems(editor);\n return {\n type: 'listbox',\n text: 'Font Family',\n tooltip: 'Font Family',\n values: items,\n fixedWidth: true,\n onPostRender: createFontNameListBoxChangeHandler(editor, items),\n onselect: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontName', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$1 = function (editor) {\n registerButtons(editor);\n };\n var FontSelect = { register: register$1 };\n\n var round = function (number, precision) {\n var factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n };\n var toPt = function (fontSize, precision) {\n if (/[0-9.]+px$/.test(fontSize)) {\n return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';\n }\n return fontSize;\n };\n var findMatchingValue$1 = function (items, pt, px) {\n var value;\n global$2.each(items, function (item) {\n if (item.value === px) {\n value = px;\n } else if (item.value === pt) {\n value = pt;\n }\n });\n return value;\n };\n var createFontSizeListBoxChangeHandler = function (editor, items) {\n return function () {\n var self = this;\n editor.on('init nodeChange', function (e) {\n var px, pt, precision, match;\n px = editor.queryCommandValue('FontSize');\n if (px) {\n for (precision = 3; !match && precision >= 0; precision--) {\n pt = toPt(px, precision);\n match = findMatchingValue$1(items, pt, px);\n }\n }\n self.value(match ? match : null);\n if (!match) {\n self.text(pt);\n }\n });\n };\n };\n var getFontSizeItems = function (editor) {\n var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';\n var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;\n return global$2.map(fontsizeFormats.split(' '), function (item) {\n var text = item, value = item;\n var values = item.split('=');\n if (values.length > 1) {\n text = values[0];\n value = values[1];\n }\n return {\n text: text,\n value: value\n };\n });\n };\n var registerButtons$1 = function (editor) {\n editor.addButton('fontsizeselect', function () {\n var items = getFontSizeItems(editor);\n return {\n type: 'listbox',\n text: 'Font Sizes',\n tooltip: 'Font Sizes',\n values: items,\n fixedWidth: true,\n onPostRender: createFontSizeListBoxChangeHandler(editor, items),\n onclick: function (e) {\n if (e.control.settings.value) {\n editor.execCommand('FontSize', false, e.control.settings.value);\n }\n }\n };\n });\n };\n var register$2 = function (editor) {\n registerButtons$1(editor);\n };\n var FontSizeSelect = { register: register$2 };\n\n var hideMenuObjects = function (editor, menu) {\n var count = menu.length;\n global$2.each(menu, function (item) {\n if (item.menu) {\n item.hidden = hideMenuObjects(editor, item.menu) === 0;\n }\n var formatName = item.format;\n if (formatName) {\n item.hidden = !editor.formatter.canApply(formatName);\n }\n if (item.hidden) {\n count--;\n }\n });\n return count;\n };\n var hideFormatMenuItems = function (editor, menu) {\n var count = menu.items().length;\n menu.items().each(function (item) {\n if (item.menu) {\n item.visible(hideFormatMenuItems(editor, item.menu) > 0);\n }\n if (!item.menu && item.settings.menu) {\n item.visible(hideMenuObjects(editor, item.settings.menu) > 0);\n }\n var formatName = item.settings.format;\n if (formatName) {\n item.visible(editor.formatter.canApply(formatName));\n }\n if (!item.visible()) {\n count--;\n }\n });\n return count;\n };\n var createFormatMenu = function (editor) {\n var count = 0;\n var newFormats = [];\n var defaultStyleFormats = [\n {\n title: 'Headings',\n items: [\n {\n title: 'Heading 1',\n format: 'h1'\n },\n {\n title: 'Heading 2',\n format: 'h2'\n },\n {\n title: 'Heading 3',\n format: 'h3'\n },\n {\n title: 'Heading 4',\n format: 'h4'\n },\n {\n title: 'Heading 5',\n format: 'h5'\n },\n {\n title: 'Heading 6',\n format: 'h6'\n }\n ]\n },\n {\n title: 'Inline',\n items: [\n {\n title: 'Bold',\n icon: 'bold',\n format: 'bold'\n },\n {\n title: 'Italic',\n icon: 'italic',\n format: 'italic'\n },\n {\n title: 'Underline',\n icon: 'underline',\n format: 'underline'\n },\n {\n title: 'Strikethrough',\n icon: 'strikethrough',\n format: 'strikethrough'\n },\n {\n title: 'Superscript',\n icon: 'superscript',\n format: 'superscript'\n },\n {\n title: 'Subscript',\n icon: 'subscript',\n format: 'subscript'\n },\n {\n title: 'Code',\n icon: 'code',\n format: 'code'\n }\n ]\n },\n {\n title: 'Blocks',\n items: [\n {\n title: 'Paragraph',\n format: 'p'\n },\n {\n title: 'Blockquote',\n format: 'blockquote'\n },\n {\n title: 'Div',\n format: 'div'\n },\n {\n title: 'Pre',\n format: 'pre'\n }\n ]\n },\n {\n title: 'Alignment',\n items: [\n {\n title: 'Left',\n icon: 'alignleft',\n format: 'alignleft'\n },\n {\n title: 'Center',\n icon: 'aligncenter',\n format: 'aligncenter'\n },\n {\n title: 'Right',\n icon: 'alignright',\n format: 'alignright'\n },\n {\n title: 'Justify',\n icon: 'alignjustify',\n format: 'alignjustify'\n }\n ]\n }\n ];\n var createMenu = function (formats) {\n var menu = [];\n if (!formats) {\n return;\n }\n global$2.each(formats, function (format) {\n var menuItem = {\n text: format.title,\n icon: format.icon\n };\n if (format.items) {\n menuItem.menu = createMenu(format.items);\n } else {\n var formatName = format.format || 'custom' + count++;\n if (!format.format) {\n format.name = formatName;\n newFormats.push(format);\n }\n menuItem.format = formatName;\n menuItem.cmd = format.cmd;\n }\n menu.push(menuItem);\n });\n return menu;\n };\n var createStylesMenu = function () {\n var menu;\n if (editor.settings.style_formats_merge) {\n if (editor.settings.style_formats) {\n menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));\n } else {\n menu = createMenu(defaultStyleFormats);\n }\n } else {\n menu = createMenu(editor.settings.style_formats || defaultStyleFormats);\n }\n return menu;\n };\n editor.on('init', function () {\n global$2.each(newFormats, function (format) {\n editor.formatter.register(format.name, format);\n });\n });\n return {\n type: 'menu',\n items: createStylesMenu(),\n onPostRender: function (e) {\n editor.fire('renderFormatsMenu', { control: e.control });\n },\n itemDefaults: {\n preview: true,\n textStyle: function () {\n if (this.settings.format) {\n return editor.formatter.getCssText(this.settings.format);\n }\n },\n onPostRender: function () {\n var self = this;\n self.parent().on('show', function () {\n var formatName, command;\n formatName = self.settings.format;\n if (formatName) {\n self.disabled(!editor.formatter.canApply(formatName));\n self.active(editor.formatter.match(formatName));\n }\n command = self.settings.cmd;\n if (command) {\n self.active(editor.queryCommandState(command));\n }\n });\n },\n onclick: function () {\n if (this.settings.format) {\n toggleFormat(editor, this.settings.format)();\n }\n if (this.settings.cmd) {\n editor.execCommand(this.settings.cmd);\n }\n }\n }\n };\n };\n var registerMenuItems = function (editor, formatMenu) {\n editor.addMenuItem('formats', {\n text: 'Formats',\n menu: formatMenu\n });\n };\n var registerButtons$2 = function (editor, formatMenu) {\n editor.addButton('styleselect', {\n type: 'menubutton',\n text: 'Formats',\n menu: formatMenu,\n onShowMenu: function () {\n if (editor.settings.style_formats_autohide) {\n hideFormatMenuItems(editor, this.menu);\n }\n }\n });\n };\n var register$3 = function (editor) {\n var formatMenu = createFormatMenu(editor);\n registerMenuItems(editor, formatMenu);\n registerButtons$2(editor, formatMenu);\n };\n var Formats = { register: register$3 };\n\n var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';\n var createFormats$1 = function (formats) {\n formats = formats.replace(/;$/, '').split(';');\n var i = formats.length;\n while (i--) {\n formats[i] = formats[i].split('=');\n }\n return formats;\n };\n var createListBoxChangeHandler = function (editor, items, formatName) {\n return function () {\n var self = this;\n editor.on('nodeChange', function (e) {\n var formatter = editor.formatter;\n var value = null;\n global$2.each(e.parents, function (node) {\n global$2.each(items, function (item) {\n if (formatName) {\n if (formatter.matchNode(node, formatName, { value: item.value })) {\n value = item.value;\n }\n } else {\n if (formatter.matchNode(node, item.value)) {\n value = item.value;\n }\n }\n if (value) {\n return false;\n }\n });\n if (value) {\n return false;\n }\n });\n self.value(value);\n });\n };\n };\n var lazyFormatSelectBoxItems = function (editor, blocks) {\n return function () {\n var items = [];\n global$2.each(blocks, function (block) {\n items.push({\n text: block[0],\n value: block[1],\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n });\n });\n return {\n type: 'listbox',\n text: blocks[0][0],\n values: items,\n fixedWidth: true,\n onselect: function (e) {\n if (e.control) {\n var fmt = e.control.value();\n toggleFormat(editor, fmt)();\n }\n },\n onPostRender: createListBoxChangeHandler(editor, items)\n };\n };\n };\n var buildMenuItems = function (editor, blocks) {\n return global$2.map(blocks, function (block) {\n return {\n text: block[0],\n onclick: toggleFormat(editor, block[1]),\n textStyle: function () {\n return editor.formatter.getCssText(block[1]);\n }\n };\n });\n };\n var register$4 = function (editor) {\n var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);\n editor.addMenuItem('blockformats', {\n text: 'Blocks',\n menu: buildMenuItems(editor, blocks)\n });\n editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));\n };\n var FormatSelect = { register: register$4 };\n\n var createCustomMenuItems = function (editor, names) {\n var items, nameList;\n if (typeof names === 'string') {\n nameList = names.split(' ');\n } else if (global$2.isArray(names)) {\n return flatten(global$2.map(names, function (names) {\n return createCustomMenuItems(editor, names);\n }));\n }\n items = global$2.grep(nameList, function (name) {\n return name === '|' || name in editor.menuItems;\n });\n return global$2.map(items, function (name) {\n return name === '|' ? { text: '-' } : editor.menuItems[name];\n });\n };\n var isSeparator$1 = function (menuItem) {\n return menuItem && menuItem.text === '-';\n };\n var trimMenuItems = function (menuItems) {\n var menuItems2 = filter(menuItems, function (menuItem, i) {\n return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);\n });\n return filter(menuItems2, function (menuItem, i) {\n return !isSeparator$1(menuItem) || i > 0 && i < menuItems2.length - 1;\n });\n };\n var createContextMenuItems = function (editor, context) {\n var outputMenuItems = [{ text: '-' }];\n var menuItems = global$2.grep(editor.menuItems, function (menuItem) {\n return menuItem.context === context;\n });\n global$2.each(menuItems, function (menuItem) {\n if (menuItem.separator === 'before') {\n outputMenuItems.push({ text: '|' });\n }\n if (menuItem.prependToContext) {\n outputMenuItems.unshift(menuItem);\n } else {\n outputMenuItems.push(menuItem);\n }\n if (menuItem.separator === 'after') {\n outputMenuItems.push({ text: '|' });\n }\n });\n return outputMenuItems;\n };\n var createInsertMenu = function (editor) {\n var insertButtonItems = editor.settings.insert_button_items;\n if (insertButtonItems) {\n return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));\n } else {\n return trimMenuItems(createContextMenuItems(editor, 'insert'));\n }\n };\n var registerButtons$3 = function (editor) {\n editor.addButton('insert', {\n type: 'menubutton',\n icon: 'insert',\n menu: [],\n oncreatemenu: function () {\n this.menu.add(createInsertMenu(editor));\n this.menu.renderNew();\n }\n });\n };\n var register$5 = function (editor) {\n registerButtons$3(editor);\n };\n var InsertButton = { register: register$5 };\n\n var registerFormatButtons = function (editor) {\n global$2.each({\n bold: 'Bold',\n italic: 'Italic',\n underline: 'Underline',\n strikethrough: 'Strikethrough',\n subscript: 'Subscript',\n superscript: 'Superscript'\n }, function (text, name) {\n editor.addButton(name, {\n active: false,\n tooltip: text,\n onPostRender: postRenderFormatToggle(editor, name),\n onclick: toggleFormat(editor, name)\n });\n });\n };\n var registerCommandButtons = function (editor) {\n global$2.each({\n outdent: [\n 'Decrease indent',\n 'Outdent'\n ],\n indent: [\n 'Increase indent',\n 'Indent'\n ],\n cut: [\n 'Cut',\n 'Cut'\n ],\n copy: [\n 'Copy',\n 'Copy'\n ],\n paste: [\n 'Paste',\n 'Paste'\n ],\n help: [\n 'Help',\n 'mceHelp'\n ],\n selectall: [\n 'Select all',\n 'SelectAll'\n ],\n visualaid: [\n 'Visual aids',\n 'mceToggleVisualAid'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n remove: [\n 'Remove',\n 'Delete'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n tooltip: item[0],\n cmd: item[1]\n });\n });\n };\n var registerCommandToggleButtons = function (editor) {\n global$2.each({\n blockquote: [\n 'Blockquote',\n 'mceBlockQuote'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ]\n }, function (item, name) {\n editor.addButton(name, {\n active: false,\n tooltip: item[0],\n cmd: item[1],\n onPostRender: postRenderFormatToggle(editor, name)\n });\n });\n };\n var registerButtons$4 = function (editor) {\n registerFormatButtons(editor);\n registerCommandButtons(editor);\n registerCommandToggleButtons(editor);\n };\n var registerMenuItems$1 = function (editor) {\n global$2.each({\n bold: [\n 'Bold',\n 'Bold',\n 'Meta+B'\n ],\n italic: [\n 'Italic',\n 'Italic',\n 'Meta+I'\n ],\n underline: [\n 'Underline',\n 'Underline',\n 'Meta+U'\n ],\n strikethrough: [\n 'Strikethrough',\n 'Strikethrough'\n ],\n subscript: [\n 'Subscript',\n 'Subscript'\n ],\n superscript: [\n 'Superscript',\n 'Superscript'\n ],\n removeformat: [\n 'Clear formatting',\n 'RemoveFormat'\n ],\n newdocument: [\n 'New document',\n 'mceNewDocument'\n ],\n cut: [\n 'Cut',\n 'Cut',\n 'Meta+X'\n ],\n copy: [\n 'Copy',\n 'Copy',\n 'Meta+C'\n ],\n paste: [\n 'Paste',\n 'Paste',\n 'Meta+V'\n ],\n selectall: [\n 'Select all',\n 'SelectAll',\n 'Meta+A'\n ]\n }, function (item, name) {\n editor.addMenuItem(name, {\n text: item[0],\n icon: name,\n shortcut: item[2],\n cmd: item[1]\n });\n });\n editor.addMenuItem('codeformat', {\n text: 'Code',\n icon: 'code',\n onclick: toggleFormat(editor, 'code')\n });\n };\n var register$6 = function (editor) {\n registerButtons$4(editor);\n registerMenuItems$1(editor);\n };\n var SimpleControls = { register: register$6 };\n\n var toggleUndoRedoState = function (editor, type) {\n return function () {\n var self = this;\n var checkState = function () {\n var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';\n return editor.undoManager ? editor.undoManager[typeFn]() : false;\n };\n self.disabled(!checkState());\n editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {\n self.disabled(editor.readonly || !checkState());\n });\n };\n };\n var registerMenuItems$2 = function (editor) {\n editor.addMenuItem('undo', {\n text: 'Undo',\n icon: 'undo',\n shortcut: 'Meta+Z',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addMenuItem('redo', {\n text: 'Redo',\n icon: 'redo',\n shortcut: 'Meta+Y',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var registerButtons$5 = function (editor) {\n editor.addButton('undo', {\n tooltip: 'Undo',\n onPostRender: toggleUndoRedoState(editor, 'undo'),\n cmd: 'undo'\n });\n editor.addButton('redo', {\n tooltip: 'Redo',\n onPostRender: toggleUndoRedoState(editor, 'redo'),\n cmd: 'redo'\n });\n };\n var register$7 = function (editor) {\n registerMenuItems$2(editor);\n registerButtons$5(editor);\n };\n var UndoRedo = { register: register$7 };\n\n var toggleVisualAidState = function (editor) {\n return function () {\n var self = this;\n editor.on('VisualAid', function (e) {\n self.active(e.hasVisual);\n });\n self.active(editor.hasVisual);\n };\n };\n var registerMenuItems$3 = function (editor) {\n editor.addMenuItem('visualaid', {\n text: 'Visual aids',\n selectable: true,\n onPostRender: toggleVisualAidState(editor),\n cmd: 'mceToggleVisualAid'\n });\n };\n var register$8 = function (editor) {\n registerMenuItems$3(editor);\n };\n var VisualAid = { register: register$8 };\n\n var setupEnvironment = function () {\n Widget.tooltips = !global$8.iOS;\n Control$1.translate = function (text) {\n return global$1.translate(text);\n };\n };\n var setupUiContainer = function (editor) {\n if (editor.settings.ui_container) {\n global$8.container = descendant(Element.fromDom(domGlobals.document.body), editor.settings.ui_container).fold(constant(null), function (elm) {\n return elm.dom();\n });\n }\n };\n var setupRtlMode = function (editor) {\n if (editor.rtl) {\n Control$1.rtl = true;\n }\n };\n var setupHideFloatPanels = function (editor) {\n editor.on('mousedown progressstate', function () {\n FloatPanel.hideAll();\n });\n };\n var setup$1 = function (editor) {\n setupRtlMode(editor);\n setupHideFloatPanels(editor);\n setupUiContainer(editor);\n setupEnvironment();\n FormatSelect.register(editor);\n Align.register(editor);\n SimpleControls.register(editor);\n UndoRedo.register(editor);\n FontSizeSelect.register(editor);\n FontSelect.register(editor);\n Formats.register(editor);\n VisualAid.register(editor);\n InsertButton.register(editor);\n };\n var FormatControls = { setup: setup$1 };\n\n var GridLayout = AbsoluteLayout.extend({\n recalc: function (container) {\n var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;\n var colWidths = [];\n var rowHeights = [];\n var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;\n settings = container.settings;\n items = container.items().filter(':visible');\n contLayoutRect = container.layoutRect();\n cols = settings.columns || Math.ceil(Math.sqrt(items.length));\n rows = Math.ceil(items.length / cols);\n spacingH = settings.spacingH || settings.spacing || 0;\n spacingV = settings.spacingV || settings.spacing || 0;\n alignH = settings.alignH || settings.align;\n alignV = settings.alignV || settings.align;\n contPaddingBox = container.paddingBox;\n reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();\n if (alignH && typeof alignH === 'string') {\n alignH = [alignH];\n }\n if (alignV && typeof alignV === 'string') {\n alignV = [alignV];\n }\n for (x = 0; x < cols; x++) {\n colWidths.push(0);\n }\n for (y = 0; y < rows; y++) {\n rowHeights.push(0);\n }\n for (y = 0; y < rows; y++) {\n for (x = 0; x < cols; x++) {\n ctrl = items[y * cols + x];\n if (!ctrl) {\n break;\n }\n ctrlLayoutRect = ctrl.layoutRect();\n ctrlMinWidth = ctrlLayoutRect.minW;\n ctrlMinHeight = ctrlLayoutRect.minH;\n colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];\n rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];\n }\n }\n availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;\n for (maxX = 0, x = 0; x < cols; x++) {\n maxX += colWidths[x] + (x > 0 ? spacingH : 0);\n availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];\n }\n availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;\n for (maxY = 0, y = 0; y < rows; y++) {\n maxY += rowHeights[y] + (y > 0 ? spacingV : 0);\n availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];\n }\n maxX += contPaddingBox.left + contPaddingBox.right;\n maxY += contPaddingBox.top + contPaddingBox.bottom;\n rect = {};\n rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);\n rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n rect.minW = Math.min(rect.minW, contLayoutRect.maxW);\n rect.minH = Math.min(rect.minH, contLayoutRect.maxH);\n rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);\n rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);\n if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {\n rect.w = rect.minW;\n rect.h = rect.minH;\n container.layoutRect(rect);\n this.recalc(container);\n if (container._lastRect === null) {\n var parentCtrl = container.parent();\n if (parentCtrl) {\n parentCtrl._lastRect = null;\n parentCtrl.recalc();\n }\n }\n return;\n }\n if (contLayoutRect.autoResize) {\n rect = container.layoutRect(rect);\n rect.contentW = rect.minW - contLayoutRect.deltaW;\n rect.contentH = rect.minH - contLayoutRect.deltaH;\n }\n var flexV;\n if (settings.packV === 'start') {\n flexV = 0;\n } else {\n flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;\n }\n var totalFlex = 0;\n var flexWidths = settings.flexWidths;\n if (flexWidths) {\n for (x = 0; x < flexWidths.length; x++) {\n totalFlex += flexWidths[x];\n }\n } else {\n totalFlex = cols;\n }\n var ratio = availableWidth / totalFlex;\n for (x = 0; x < cols; x++) {\n colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;\n }\n posY = contPaddingBox.top;\n for (y = 0; y < rows; y++) {\n posX = contPaddingBox.left;\n height = rowHeights[y] + flexV;\n for (x = 0; x < cols; x++) {\n if (reverseRows) {\n idx = y * cols + cols - 1 - x;\n } else {\n idx = y * cols + x;\n }\n ctrl = items[idx];\n if (!ctrl) {\n break;\n }\n ctrlSettings = ctrl.settings;\n ctrlLayoutRect = ctrl.layoutRect();\n width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);\n ctrlLayoutRect.x = posX;\n ctrlLayoutRect.y = posY;\n align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;\n } else if (align === 'right') {\n ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;\n } else if (align === 'stretch') {\n ctrlLayoutRect.w = width;\n }\n align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);\n if (align === 'center') {\n ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;\n } else if (align === 'bottom') {\n ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;\n } else if (align === 'stretch') {\n ctrlLayoutRect.h = height;\n }\n ctrl.layoutRect(ctrlLayoutRect);\n posX += width + spacingH;\n if (ctrl.recalc) {\n ctrl.recalc();\n }\n }\n posY += height + spacingV;\n }\n }\n });\n\n var Iframe$1 = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('iframe');\n self.canFocus = false;\n return '';\n },\n src: function (src) {\n this.getEl().src = src;\n },\n html: function (html, callback) {\n var self = this, body = this.getEl().contentWindow.document.body;\n if (!body) {\n global$7.setTimeout(function () {\n self.html(html);\n });\n } else {\n body.innerHTML = html;\n if (callback) {\n callback();\n }\n }\n return this;\n }\n });\n\n var InfoBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('infobox');\n self.canFocus = false;\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n help: function (state) {\n this.state.set('help', state);\n },\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n return '
    ' + '
    ' + self.encode(self.state.get('text')) + '' + '
    ' + '
    ';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.getEl('body').firstChild.data = self.encode(e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n self.state.on('change:help', function (e) {\n self.classes.toggle('has-help', e.value);\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Label = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('widget').add('label');\n self.canFocus = false;\n if (settings.multiline) {\n self.classes.add('autoscroll');\n }\n if (settings.strong) {\n self.classes.add('strong');\n }\n },\n initLayoutRect: function () {\n var self = this, layoutRect = self._super();\n if (self.settings.multiline) {\n var size = funcs.getSize(self.getEl());\n if (size.width > layoutRect.maxW) {\n layoutRect.minW = layoutRect.maxW;\n self.classes.add('multiline');\n }\n self.getEl().style.width = layoutRect.minW + 'px';\n layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);\n }\n return layoutRect;\n },\n repaint: function () {\n var self = this;\n if (!self.settings.multiline) {\n self.getEl().style.lineHeight = self.layoutRect().h + 'px';\n }\n return self._super();\n },\n severity: function (level) {\n this.classes.remove('error');\n this.classes.remove('warning');\n this.classes.remove('success');\n this.classes.add(level);\n },\n renderHtml: function () {\n var self = this;\n var targetCtrl, forName, forId = self.settings.forId;\n var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));\n if (!forId && (forName = self.settings.forName)) {\n targetCtrl = self.getRoot().find('#' + forName)[0];\n if (targetCtrl) {\n forId = targetCtrl._id;\n }\n }\n if (forId) {\n return '';\n }\n return '' + text + '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:text', function (e) {\n self.innerHtml(self.encode(e.value));\n if (self.state.get('rendered')) {\n self.updateLayoutRect();\n }\n });\n return self._super();\n }\n });\n\n var Toolbar$1 = Container.extend({\n Defaults: {\n role: 'toolbar',\n layout: 'flow'\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('toolbar');\n },\n postRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n ctrl.classes.add('toolbar-item');\n });\n return self._super();\n }\n });\n\n var MenuBar = Toolbar$1.extend({\n Defaults: {\n role: 'menubar',\n containerCls: 'menubar',\n ariaRoot: true,\n defaults: { type: 'menubutton' }\n }\n });\n\n function isChildOf$1(node, parent) {\n while (node) {\n if (parent === node) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n }\n var MenuButton = Button.extend({\n init: function (settings) {\n var self = this;\n self._renderOpen = true;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menubtn');\n if (settings.fixedWidth) {\n self.classes.add('fixed-width');\n }\n self.aria('haspopup', true);\n self.state.set('menu', settings.menu || self.render());\n },\n showMenu: function (toggle) {\n var self = this;\n var menu;\n if (self.menu && self.menu.visible() && toggle !== false) {\n return self.hideMenu();\n }\n if (!self.menu) {\n menu = self.state.get('menu') || [];\n self.classes.add('opened');\n if (menu.length) {\n menu = {\n type: 'menu',\n animate: true,\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n menu.animate = true;\n }\n if (!menu.renderTo) {\n self.menu = global$4.create(menu).parent(self).renderTo();\n } else {\n self.menu = menu.parent(self).show().renderTo();\n }\n self.fire('createmenu');\n self.menu.reflow();\n self.menu.on('cancel', function (e) {\n if (e.control.parent() === self.menu) {\n e.stopPropagation();\n self.focus();\n self.hideMenu();\n }\n });\n self.menu.on('select', function () {\n self.focus();\n });\n self.menu.on('show hide', function (e) {\n if (e.type === 'hide' && e.control.parent() === self) {\n self.classes.remove('opened-under');\n }\n if (e.control === self.menu) {\n self.activeMenu(e.type === 'show');\n self.classes.toggle('opened', e.type === 'show');\n }\n self.aria('expanded', e.type === 'show');\n }).fire('show');\n }\n self.menu.show();\n self.menu.layoutRect({ w: self.layoutRect().w });\n self.menu.repaint();\n self.menu.moveRel(self.getEl(), self.isRtl() ? [\n 'br-tr',\n 'tr-br'\n ] : [\n 'bl-tl',\n 'tl-bl'\n ]);\n var menuLayoutRect = self.menu.layoutRect();\n var selfBottom = self.$el.offset().top + self.layoutRect().h;\n if (selfBottom > menuLayoutRect.y && selfBottom < menuLayoutRect.y + menuLayoutRect.h) {\n self.classes.add('opened-under');\n }\n self.fire('showmenu');\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n }\n },\n activeMenu: function (state) {\n this.classes.toggle('active', state);\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n var icon = self.settings.icon, image;\n var text = self.state.get('text');\n var textHtml = '';\n image = self.settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n self.aria('role', self.parent() instanceof MenuBar ? 'menuitem' : 'button');\n return '
    ' + '' + '
    ';\n },\n postRender: function () {\n var self = this;\n self.on('click', function (e) {\n if (e.control === self && isChildOf$1(e.target, self.getEl())) {\n self.focus();\n self.showMenu(!e.aria);\n if (e.aria) {\n self.menu.items().filter(':visible')[0].focus();\n }\n }\n });\n self.on('mouseenter', function (e) {\n var overCtrl = e.control;\n var parent = self.parent();\n var hasVisibleSiblingMenu;\n if (overCtrl && parent && overCtrl instanceof MenuButton && overCtrl.parent() === parent) {\n parent.items().filter('MenuButton').each(function (ctrl) {\n if (ctrl.hideMenu && ctrl !== overCtrl) {\n if (ctrl.menu && ctrl.menu.visible()) {\n hasVisibleSiblingMenu = true;\n }\n ctrl.hideMenu();\n }\n });\n if (hasVisibleSiblingMenu) {\n overCtrl.focus();\n overCtrl.showMenu();\n }\n }\n });\n return self._super();\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:menu', function () {\n if (self.menu) {\n self.menu.remove();\n }\n self.menu = null;\n });\n return self._super();\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Menu = FloatPanel.extend({\n Defaults: {\n defaultType: 'menuitem',\n border: 1,\n layout: 'stack',\n role: 'application',\n bodyRole: 'menu',\n ariaRoot: true\n },\n init: function (settings) {\n var self = this;\n settings.autohide = true;\n settings.constrainToViewport = true;\n if (typeof settings.items === 'function') {\n settings.itemsFactory = settings.items;\n settings.items = [];\n }\n if (settings.itemDefaults) {\n var items = settings.items;\n var i = items.length;\n while (i--) {\n items[i] = global$2.extend({}, settings.itemDefaults, items[i]);\n }\n }\n self._super(settings);\n self.classes.add('menu');\n if (settings.animate && global$8.ie !== 11) {\n self.classes.add('animate');\n }\n },\n repaint: function () {\n this.classes.toggle('menu-align', true);\n this._super();\n this.getEl().style.height = '';\n this.getEl('body').style.height = '';\n return this;\n },\n cancel: function () {\n var self = this;\n self.hideAll();\n self.fire('select');\n },\n load: function () {\n var self = this;\n var time, factory;\n function hideThrobber() {\n if (self.throbber) {\n self.throbber.hide();\n self.throbber = null;\n }\n }\n factory = self.settings.itemsFactory;\n if (!factory) {\n return;\n }\n if (!self.throbber) {\n self.throbber = new Throbber(self.getEl('body'), true);\n if (self.items().length === 0) {\n self.throbber.show();\n self.fire('loading');\n } else {\n self.throbber.show(100, function () {\n self.items().remove();\n self.fire('loading');\n });\n }\n self.on('hide close', hideThrobber);\n }\n self.requestTime = time = new Date().getTime();\n self.settings.itemsFactory(function (items) {\n if (items.length === 0) {\n self.hide();\n return;\n }\n if (self.requestTime !== time) {\n return;\n }\n self.getEl().style.width = '';\n self.getEl('body').style.width = '';\n hideThrobber();\n self.items().remove();\n self.getEl('body').innerHTML = '';\n self.add(items);\n self.renderNew();\n self.fire('loaded');\n });\n },\n hideAll: function () {\n var self = this;\n this.find('menuitem').exec('hideMenu');\n return self._super();\n },\n preRender: function () {\n var self = this;\n self.items().each(function (ctrl) {\n var settings = ctrl.settings;\n if (settings.icon || settings.image || settings.selectable) {\n self._hasIcons = true;\n return false;\n }\n });\n if (self.settings.itemsFactory) {\n self.on('postrender', function () {\n if (self.settings.itemsFactory) {\n self.load();\n }\n });\n }\n self.on('show hide', function (e) {\n if (e.control === self) {\n if (e.type === 'show') {\n global$7.setTimeout(function () {\n self.classes.add('in');\n }, 0);\n } else {\n self.classes.remove('in');\n }\n }\n });\n return self._super();\n }\n });\n\n var ListBox = MenuButton.extend({\n init: function (settings) {\n var self = this;\n var values, selected, selectedText, lastItemCtrl;\n function setSelected(menuValues) {\n for (var i = 0; i < menuValues.length; i++) {\n selected = menuValues[i].selected || settings.value === menuValues[i].value;\n if (selected) {\n selectedText = selectedText || menuValues[i].text;\n self.state.set('value', menuValues[i].value);\n return true;\n }\n if (menuValues[i].menu) {\n if (setSelected(menuValues[i].menu)) {\n return true;\n }\n }\n }\n }\n self._super(settings);\n settings = self.settings;\n self._values = values = settings.values;\n if (values) {\n if (typeof settings.value !== 'undefined') {\n setSelected(values);\n }\n if (!selected && values.length > 0) {\n selectedText = values[0].text;\n self.state.set('value', values[0].value);\n }\n self.state.set('menu', values);\n }\n self.state.set('text', settings.text || selectedText);\n self.classes.add('listbox');\n self.on('select', function (e) {\n var ctrl = e.control;\n if (lastItemCtrl) {\n e.lastControl = lastItemCtrl;\n }\n if (settings.multiple) {\n ctrl.active(!ctrl.active());\n } else {\n self.value(e.control.value());\n }\n lastItemCtrl = ctrl;\n });\n },\n value: function (value) {\n if (arguments.length === 0) {\n return this.state.get('value');\n }\n if (typeof value === 'undefined') {\n return this;\n }\n function valueExists(values) {\n return exists(values, function (a) {\n return a.menu ? valueExists(a.menu) : a.value === value;\n });\n }\n if (this.settings.values) {\n if (valueExists(this.settings.values)) {\n this.state.set('value', value);\n } else if (value === null) {\n this.state.set('value', null);\n }\n } else {\n this.state.set('value', value);\n }\n return this;\n },\n bindStates: function () {\n var self = this;\n function activateMenuItemsByValue(menu, value) {\n if (menu instanceof Menu) {\n menu.items().each(function (ctrl) {\n if (!ctrl.hasMenus()) {\n ctrl.active(ctrl.value() === value);\n }\n });\n }\n }\n function getSelectedItem(menuValues, value) {\n var selectedItem;\n if (!menuValues) {\n return;\n }\n for (var i = 0; i < menuValues.length; i++) {\n if (menuValues[i].value === value) {\n return menuValues[i];\n }\n if (menuValues[i].menu) {\n selectedItem = getSelectedItem(menuValues[i].menu, value);\n if (selectedItem) {\n return selectedItem;\n }\n }\n }\n }\n self.on('show', function (e) {\n activateMenuItemsByValue(e.control, self.value());\n });\n self.state.on('change:value', function (e) {\n var selectedItem = getSelectedItem(self.state.get('menu'), e.value);\n if (selectedItem) {\n self.text(selectedItem.text);\n } else {\n self.text(self.settings.text);\n }\n });\n return self._super();\n }\n });\n\n var toggleTextStyle = function (ctrl, state) {\n var textStyle = ctrl._textStyle;\n if (textStyle) {\n var textElm = ctrl.getEl('text');\n textElm.setAttribute('style', textStyle);\n if (state) {\n textElm.style.color = '';\n textElm.style.backgroundColor = '';\n }\n }\n };\n var MenuItem = Widget.extend({\n Defaults: {\n border: 0,\n role: 'menuitem'\n },\n init: function (settings) {\n var self = this;\n var text;\n self._super(settings);\n settings = self.settings;\n self.classes.add('menu-item');\n if (settings.menu) {\n self.classes.add('menu-item-expand');\n }\n if (settings.preview) {\n self.classes.add('menu-item-preview');\n }\n text = self.state.get('text');\n if (text === '-' || text === '|') {\n self.classes.add('menu-item-sep');\n self.aria('role', 'separator');\n self.state.set('text', '-');\n }\n if (settings.selectable) {\n self.aria('role', 'menuitemcheckbox');\n self.classes.add('menu-item-checkbox');\n settings.icon = 'selected';\n }\n if (!settings.preview && !settings.selectable) {\n self.classes.add('menu-item-normal');\n }\n self.on('mousedown', function (e) {\n e.preventDefault();\n });\n if (settings.menu && !settings.ariaHideMenu) {\n self.aria('haspopup', true);\n }\n },\n hasMenus: function () {\n return !!this.settings.menu;\n },\n showMenu: function () {\n var self = this;\n var settings = self.settings;\n var menu;\n var parent = self.parent();\n parent.items().each(function (ctrl) {\n if (ctrl !== self) {\n ctrl.hideMenu();\n }\n });\n if (settings.menu) {\n menu = self.menu;\n if (!menu) {\n menu = settings.menu;\n if (menu.length) {\n menu = {\n type: 'menu',\n items: menu\n };\n } else {\n menu.type = menu.type || 'menu';\n }\n if (parent.settings.itemDefaults) {\n menu.itemDefaults = parent.settings.itemDefaults;\n }\n menu = self.menu = global$4.create(menu).parent(self).renderTo();\n menu.reflow();\n menu.on('cancel', function (e) {\n e.stopPropagation();\n self.focus();\n menu.hide();\n });\n menu.on('show hide', function (e) {\n if (e.control.items) {\n e.control.items().each(function (ctrl) {\n ctrl.active(ctrl.settings.selected);\n });\n }\n }).fire('show');\n menu.on('hide', function (e) {\n if (e.control === menu) {\n self.classes.remove('selected');\n }\n });\n menu.submenu = true;\n } else {\n menu.show();\n }\n menu._parentMenu = parent;\n menu.classes.add('menu-sub');\n var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [\n 'tl-tr',\n 'bl-br',\n 'tr-tl',\n 'br-bl'\n ] : [\n 'tr-tl',\n 'br-bl',\n 'tl-tr',\n 'bl-br'\n ]);\n menu.moveRel(self.getEl(), rel);\n menu.rel = rel;\n rel = 'menu-sub-' + rel;\n menu.classes.remove(menu._lastRel).add(rel);\n menu._lastRel = rel;\n self.classes.add('selected');\n self.aria('expanded', true);\n }\n },\n hideMenu: function () {\n var self = this;\n if (self.menu) {\n self.menu.items().each(function (item) {\n if (item.hideMenu) {\n item.hideMenu();\n }\n });\n self.menu.hide();\n self.aria('expanded', false);\n }\n return self;\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var settings = self.settings;\n var prefix = self.classPrefix;\n var text = self.state.get('text');\n var icon = self.settings.icon, image = '', shortcut = settings.shortcut;\n var url = self.encode(settings.url), iconHtml = '';\n function convertShortcut(shortcut) {\n var i, value, replace = {};\n if (global$8.mac) {\n replace = {\n alt: '⌥',\n ctrl: '⌘',\n shift: '⇧',\n meta: '⌘'\n };\n } else {\n replace = { meta: 'Ctrl' };\n }\n shortcut = shortcut.split('+');\n for (i = 0; i < shortcut.length; i++) {\n value = replace[shortcut[i].toLowerCase()];\n if (value) {\n shortcut[i] = value;\n }\n }\n return shortcut.join('+');\n }\n function escapeRegExp(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n function markMatches(text) {\n var match = settings.match || '';\n return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {\n return '!mce~match[' + match + ']mce~match!';\n }) : text;\n }\n function boldMatches(text) {\n return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '');\n }\n if (icon) {\n self.parent().classes.add('menu-has-icons');\n }\n if (settings.image) {\n image = ' style=\"background-image: url(\\'' + settings.image + '\\')\"';\n }\n if (shortcut) {\n shortcut = convertShortcut(shortcut);\n }\n icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');\n iconHtml = text !== '-' ? '\\xA0' : '';\n text = boldMatches(self.encode(markMatches(text)));\n url = boldMatches(self.encode(markMatches(url)));\n return '
    ' + iconHtml + (text !== '-' ? '' + text + '' : '') + (shortcut ? '
    ' + shortcut + '
    ' : '') + (settings.menu ? '
    ' : '') + (url ? '
    ' + url + '
    ' : '') + '
    ';\n },\n postRender: function () {\n var self = this, settings = self.settings;\n var textStyle = settings.textStyle;\n if (typeof textStyle === 'function') {\n textStyle = textStyle.call(this);\n }\n if (textStyle) {\n var textElm = self.getEl('text');\n if (textElm) {\n textElm.setAttribute('style', textStyle);\n self._textStyle = textStyle;\n }\n }\n self.on('mouseenter click', function (e) {\n if (e.control === self) {\n if (!settings.menu && e.type === 'click') {\n self.fire('select');\n global$7.requestAnimationFrame(function () {\n self.parent().hideAll();\n });\n } else {\n self.showMenu();\n if (e.aria) {\n self.menu.focus(true);\n }\n }\n }\n });\n self._super();\n return self;\n },\n hover: function () {\n var self = this;\n self.parent().items().each(function (ctrl) {\n ctrl.classes.remove('selected');\n });\n self.classes.toggle('selected', true);\n return self;\n },\n active: function (state) {\n toggleTextStyle(this, state);\n if (typeof state !== 'undefined') {\n this.aria('checked', state);\n }\n return this._super(state);\n },\n remove: function () {\n this._super();\n if (this.menu) {\n this.menu.remove();\n }\n }\n });\n\n var Radio = Checkbox.extend({\n Defaults: {\n classes: 'radio',\n role: 'radio'\n }\n });\n\n var ResizeHandle = Widget.extend({\n renderHtml: function () {\n var self = this, prefix = self.classPrefix;\n self.classes.add('resizehandle');\n if (self.settings.direction === 'both') {\n self.classes.add('resizehandle-both');\n }\n self.canFocus = false;\n return '
    ' + '' + '
    ';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.resizeDragHelper = new DragHelper(this._id, {\n start: function () {\n self.fire('ResizeStart');\n },\n drag: function (e) {\n if (self.settings.direction !== 'both') {\n e.deltaX = 0;\n }\n self.fire('Resize', e);\n },\n stop: function () {\n self.fire('ResizeEnd');\n }\n });\n },\n remove: function () {\n if (this.resizeDragHelper) {\n this.resizeDragHelper.destroy();\n }\n return this._super();\n }\n });\n\n function createOptions(options) {\n var strOptions = '';\n if (options) {\n for (var i = 0; i < options.length; i++) {\n strOptions += '';\n }\n }\n return strOptions;\n }\n var SelectBox = Widget.extend({\n Defaults: {\n classes: 'selectbox',\n role: 'selectbox',\n options: []\n },\n init: function (settings) {\n var self = this;\n self._super(settings);\n if (self.settings.size) {\n self.size = self.settings.size;\n }\n if (self.settings.options) {\n self._options = self.settings.options;\n }\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n },\n options: function (state) {\n if (!arguments.length) {\n return this.state.get('options');\n }\n this.state.set('options', state);\n return this;\n },\n renderHtml: function () {\n var self = this;\n var options, size = '';\n options = createOptions(self._options);\n if (self.size) {\n size = ' size = \"' + self.size + '\"';\n }\n return '';\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:options', function (e) {\n self.getEl().innerHTML = createOptions(e.value);\n });\n return self._super();\n }\n });\n\n function constrain(value, minVal, maxVal) {\n if (value < minVal) {\n value = minVal;\n }\n if (value > maxVal) {\n value = maxVal;\n }\n return value;\n }\n function setAriaProp(el, name, value) {\n el.setAttribute('aria-' + name, value);\n }\n function updateSliderHandle(ctrl, value) {\n var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;\n if (ctrl.settings.orientation === 'v') {\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n handleEl = ctrl.getEl('handle');\n maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';\n handleEl.style[stylePosName] = styleValue;\n handleEl.style.height = ctrl.layoutRect().h + 'px';\n setAriaProp(handleEl, 'valuenow', value);\n setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));\n setAriaProp(handleEl, 'valuemin', ctrl._minValue);\n setAriaProp(handleEl, 'valuemax', ctrl._maxValue);\n }\n var Slider = Widget.extend({\n init: function (settings) {\n var self = this;\n if (!settings.previewFilter) {\n settings.previewFilter = function (value) {\n return Math.round(value * 100) / 100;\n };\n }\n self._super(settings);\n self.classes.add('slider');\n if (settings.orientation === 'v') {\n self.classes.add('vertical');\n }\n self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;\n self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;\n self._initValue = self.state.get('value');\n },\n renderHtml: function () {\n var self = this, id = self._id, prefix = self.classPrefix;\n return '
    ' + '
    ' + '
    ';\n },\n reset: function () {\n this.value(this._initValue).repaint();\n },\n postRender: function () {\n var self = this;\n var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;\n function toFraction(min, max, val) {\n return (val + min) / (max - min);\n }\n function fromFraction(min, max, val) {\n return val * (max - min) - min;\n }\n function handleKeyboard(minValue, maxValue) {\n function alter(delta) {\n var value;\n value = self.value();\n value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);\n value = constrain(value, minValue, maxValue);\n self.value(value);\n self.fire('dragstart', { value: value });\n self.fire('drag', { value: value });\n self.fire('dragend', { value: value });\n }\n self.on('keydown', function (e) {\n switch (e.keyCode) {\n case 37:\n case 38:\n alter(-1);\n break;\n case 39:\n case 40:\n alter(1);\n break;\n }\n });\n }\n function handleDrag(minValue, maxValue, handleEl) {\n var startPos, startHandlePos, maxHandlePos, handlePos, value;\n self._dragHelper = new DragHelper(self._id, {\n handle: self._id + '-handle',\n start: function (e) {\n startPos = e[screenCordName];\n startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);\n maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];\n self.fire('dragstart', { value: value });\n },\n drag: function (e) {\n var delta = e[screenCordName] - startPos;\n handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);\n handleEl.style[stylePosName] = handlePos + 'px';\n value = minValue + handlePos / maxHandlePos * (maxValue - minValue);\n self.value(value);\n self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');\n self.fire('drag', { value: value });\n },\n stop: function () {\n self.tooltip().hide();\n self.fire('dragend', { value: value });\n }\n });\n }\n minValue = self._minValue;\n maxValue = self._maxValue;\n if (self.settings.orientation === 'v') {\n screenCordName = 'screenY';\n stylePosName = 'top';\n sizeName = 'height';\n shortSizeName = 'h';\n } else {\n screenCordName = 'screenX';\n stylePosName = 'left';\n sizeName = 'width';\n shortSizeName = 'w';\n }\n self._super();\n handleKeyboard(minValue, maxValue);\n handleDrag(minValue, maxValue, self.getEl('handle'));\n },\n repaint: function () {\n this._super();\n updateSliderHandle(this, this.value());\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n updateSliderHandle(self, e.value);\n });\n return self._super();\n }\n });\n\n var Spacer = Widget.extend({\n renderHtml: function () {\n var self = this;\n self.classes.add('spacer');\n self.canFocus = false;\n return '
    ';\n }\n });\n\n var SplitButton = MenuButton.extend({\n Defaults: {\n classes: 'widget btn splitbtn',\n role: 'button'\n },\n repaint: function () {\n var self = this;\n var elm = self.getEl();\n var rect = self.layoutRect();\n var mainButtonElm, menuButtonElm;\n self._super();\n mainButtonElm = elm.firstChild;\n menuButtonElm = elm.lastChild;\n global$9(mainButtonElm).css({\n width: rect.w - funcs.getSize(menuButtonElm).width,\n height: rect.h - 2\n });\n global$9(menuButtonElm).css({ height: rect.h - 2 });\n return self;\n },\n activeMenu: function (state) {\n var self = this;\n global$9(self.getEl().lastChild).toggleClass(self.classPrefix + 'active', state);\n },\n renderHtml: function () {\n var self = this;\n var id = self._id;\n var prefix = self.classPrefix;\n var image;\n var icon = self.state.get('icon');\n var text = self.state.get('text');\n var settings = self.settings;\n var textHtml = '', ariaPressed;\n image = settings.image;\n if (image) {\n icon = 'none';\n if (typeof image !== 'string') {\n image = domGlobals.window.getSelection ? image[0] : image[1];\n }\n image = ' style=\"background-image: url(\\'' + image + '\\')\"';\n } else {\n image = '';\n }\n icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';\n if (text) {\n self.classes.add('btn-has-text');\n textHtml = '' + self.encode(text) + '';\n }\n ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed=\"' + settings.active + '\"' : '';\n return '
    ' + '' + '' + '
    ';\n },\n postRender: function () {\n var self = this, onClickHandler = self.settings.onclick;\n self.on('click', function (e) {\n var node = e.target;\n if (e.control === this) {\n while (node) {\n if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {\n e.stopImmediatePropagation();\n if (onClickHandler) {\n onClickHandler.call(this, e);\n }\n return;\n }\n node = node.parentNode;\n }\n }\n });\n delete self.settings.onclick;\n return self._super();\n }\n });\n\n var StackLayout = FlowLayout.extend({\n Defaults: {\n containerClass: 'stack-layout',\n controlClass: 'stack-layout-item',\n endClass: 'break'\n },\n isNative: function () {\n return true;\n }\n });\n\n var TabPanel = Panel.extend({\n Defaults: {\n layout: 'absolute',\n defaults: { type: 'panel' }\n },\n activateTab: function (idx) {\n var activeTabElm;\n if (this.activeTabId) {\n activeTabElm = this.getEl(this.activeTabId);\n global$9(activeTabElm).removeClass(this.classPrefix + 'active');\n activeTabElm.setAttribute('aria-selected', 'false');\n }\n this.activeTabId = 't' + idx;\n activeTabElm = this.getEl('t' + idx);\n activeTabElm.setAttribute('aria-selected', 'true');\n global$9(activeTabElm).addClass(this.classPrefix + 'active');\n this.items()[idx].show().fire('showtab');\n this.reflow();\n this.items().each(function (item, i) {\n if (idx !== i) {\n item.hide();\n }\n });\n },\n renderHtml: function () {\n var self = this;\n var layout = self._layout;\n var tabsHtml = '';\n var prefix = self.classPrefix;\n self.preRender();\n layout.preRender(self);\n self.items().each(function (ctrl, i) {\n var id = self._id + '-t' + i;\n ctrl.aria('role', 'tabpanel');\n ctrl.aria('labelledby', id);\n tabsHtml += '
    ' + self.encode(ctrl.settings.title) + '
    ';\n });\n return '
    ' + '
    ' + tabsHtml + '
    ' + '
    ' + layout.renderHtml(self) + '
    ' + '
    ';\n },\n postRender: function () {\n var self = this;\n self._super();\n self.settings.activeTab = self.settings.activeTab || 0;\n self.activateTab(self.settings.activeTab);\n this.on('click', function (e) {\n var targetParent = e.target.parentNode;\n if (targetParent && targetParent.id === self._id + '-head') {\n var i = targetParent.childNodes.length;\n while (i--) {\n if (targetParent.childNodes[i] === e.target) {\n self.activateTab(i);\n }\n }\n }\n });\n },\n initLayoutRect: function () {\n var self = this;\n var rect, minW, minH;\n minW = funcs.getSize(self.getEl('head')).width;\n minW = minW < 0 ? 0 : minW;\n minH = 0;\n self.items().each(function (item) {\n minW = Math.max(minW, item.layoutRect().minW);\n minH = Math.max(minH, item.layoutRect().minH);\n });\n self.items().each(function (ctrl) {\n ctrl.settings.x = 0;\n ctrl.settings.y = 0;\n ctrl.settings.w = minW;\n ctrl.settings.h = minH;\n ctrl.layoutRect({\n x: 0,\n y: 0,\n w: minW,\n h: minH\n });\n });\n var headH = funcs.getSize(self.getEl('head')).height;\n self.settings.minWidth = minW;\n self.settings.minHeight = minH + headH;\n rect = self._super();\n rect.deltaH += headH;\n rect.innerH = rect.h - rect.deltaH;\n return rect;\n }\n });\n\n var TextBox = Widget.extend({\n init: function (settings) {\n var self = this;\n self._super(settings);\n self.classes.add('textbox');\n if (settings.multiline) {\n self.classes.add('multiline');\n } else {\n self.on('keydown', function (e) {\n var rootControl;\n if (e.keyCode === 13) {\n e.preventDefault();\n self.parents().reverse().each(function (ctrl) {\n if (ctrl.toJSON) {\n rootControl = ctrl;\n return false;\n }\n });\n self.fire('submit', { data: rootControl.toJSON() });\n }\n });\n self.on('keyup', function (e) {\n self.state.set('value', e.target.value);\n });\n }\n },\n repaint: function () {\n var self = this;\n var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;\n style = self.getEl().style;\n rect = self._layoutRect;\n lastRepaintRect = self._lastRepaintRect || {};\n var doc = domGlobals.document;\n if (!self.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {\n style.lineHeight = rect.h - borderH + 'px';\n }\n borderBox = self.borderBox;\n borderW = borderBox.left + borderBox.right + 8;\n borderH = borderBox.top + borderBox.bottom + (self.settings.multiline ? 8 : 0);\n if (rect.x !== lastRepaintRect.x) {\n style.left = rect.x + 'px';\n lastRepaintRect.x = rect.x;\n }\n if (rect.y !== lastRepaintRect.y) {\n style.top = rect.y + 'px';\n lastRepaintRect.y = rect.y;\n }\n if (rect.w !== lastRepaintRect.w) {\n style.width = rect.w - borderW + 'px';\n lastRepaintRect.w = rect.w;\n }\n if (rect.h !== lastRepaintRect.h) {\n style.height = rect.h - borderH + 'px';\n lastRepaintRect.h = rect.h;\n }\n self._lastRepaintRect = lastRepaintRect;\n self.fire('repaint', {}, false);\n return self;\n },\n renderHtml: function () {\n var self = this;\n var settings = self.settings;\n var attrs, elm;\n attrs = {\n id: self._id,\n hidefocus: '1'\n };\n global$2.each([\n 'rows',\n 'spellcheck',\n 'maxLength',\n 'size',\n 'readonly',\n 'min',\n 'max',\n 'step',\n 'list',\n 'pattern',\n 'placeholder',\n 'required',\n 'multiple'\n ], function (name) {\n attrs[name] = settings[name];\n });\n if (self.disabled()) {\n attrs.disabled = 'disabled';\n }\n if (settings.subtype) {\n attrs.type = settings.subtype;\n }\n elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);\n elm.value = self.state.get('value');\n elm.className = self.classes.toString();\n return elm.outerHTML;\n },\n value: function (value) {\n if (arguments.length) {\n this.state.set('value', value);\n return this;\n }\n if (this.state.get('rendered')) {\n this.state.set('value', this.getEl().value);\n }\n return this.state.get('value');\n },\n postRender: function () {\n var self = this;\n self.getEl().value = self.state.get('value');\n self._super();\n self.$el.on('change', function (e) {\n self.state.set('value', e.target.value);\n self.fire('change', e);\n });\n },\n bindStates: function () {\n var self = this;\n self.state.on('change:value', function (e) {\n if (self.getEl().value !== e.value) {\n self.getEl().value = e.value;\n }\n });\n self.state.on('change:disabled', function (e) {\n self.getEl().disabled = e.value;\n });\n return self._super();\n },\n remove: function () {\n this.$el.off();\n this._super();\n }\n });\n\n var getApi = function () {\n return {\n Selector: Selector,\n Collection: Collection$2,\n ReflowQueue: ReflowQueue,\n Control: Control$1,\n Factory: global$4,\n KeyboardNavigation: KeyboardNavigation,\n Container: Container,\n DragHelper: DragHelper,\n Scrollable: Scrollable,\n Panel: Panel,\n Movable: Movable,\n Resizable: Resizable,\n FloatPanel: FloatPanel,\n Window: Window,\n MessageBox: MessageBox,\n Tooltip: Tooltip,\n Widget: Widget,\n Progress: Progress,\n Notification: Notification,\n Layout: Layout,\n AbsoluteLayout: AbsoluteLayout,\n Button: Button,\n ButtonGroup: ButtonGroup,\n Checkbox: Checkbox,\n ComboBox: ComboBox,\n ColorBox: ColorBox,\n PanelButton: PanelButton,\n ColorButton: ColorButton,\n ColorPicker: ColorPicker,\n Path: Path,\n ElementPath: ElementPath,\n FormItem: FormItem,\n Form: Form,\n FieldSet: FieldSet,\n FilePicker: FilePicker,\n FitLayout: FitLayout,\n FlexLayout: FlexLayout,\n FlowLayout: FlowLayout,\n FormatControls: FormatControls,\n GridLayout: GridLayout,\n Iframe: Iframe$1,\n InfoBox: InfoBox,\n Label: Label,\n Toolbar: Toolbar$1,\n MenuBar: MenuBar,\n MenuButton: MenuButton,\n MenuItem: MenuItem,\n Throbber: Throbber,\n Menu: Menu,\n ListBox: ListBox,\n Radio: Radio,\n ResizeHandle: ResizeHandle,\n SelectBox: SelectBox,\n Slider: Slider,\n Spacer: Spacer,\n SplitButton: SplitButton,\n StackLayout: StackLayout,\n TabPanel: TabPanel,\n TextBox: TextBox,\n DropZone: DropZone,\n BrowseButton: BrowseButton\n };\n };\n var appendTo = function (target) {\n if (target.ui) {\n global$2.each(getApi(), function (ref, key) {\n target.ui[key] = ref;\n });\n } else {\n target.ui = getApi();\n }\n };\n var registerToFactory = function () {\n global$2.each(getApi(), function (ref, key) {\n global$4.add(key, ref);\n });\n };\n var Api = {\n appendTo: appendTo,\n registerToFactory: registerToFactory\n };\n\n Api.registerToFactory();\n Api.appendTo(window.tinymce ? window.tinymce : {});\n global.add('modern', function (editor) {\n FormatControls.setup(editor);\n return ThemeApi.get(editor);\n });\n function Theme () {\n }\n\n return Theme;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n '_'\n ),\n monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n function plural(n) {\n return n > 1 && n < 5;\n }\n function translate(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's': // a few seconds / in a few seconds / a few seconds ago\n return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'sekundy' : 'sekúnd');\n } else {\n return result + 'sekundami';\n }\n case 'm': // a minute / in a minute / a minute ago\n return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'minúty' : 'minút');\n } else {\n return result + 'minútami';\n }\n case 'h': // an hour / in an hour / an hour ago\n return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n case 'hh': // 9 hours / in 9 hours / 9 hours ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'hodiny' : 'hodín');\n } else {\n return result + 'hodinami';\n }\n case 'd': // a day / in a day / a day ago\n return withoutSuffix || isFuture ? 'deň' : 'dňom';\n case 'dd': // 9 days / in 9 days / 9 days ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'dni' : 'dní');\n } else {\n return result + 'dňami';\n }\n case 'M': // a month / in a month / a month ago\n return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n case 'MM': // 9 months / in 9 months / 9 months ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'mesiace' : 'mesiacov');\n } else {\n return result + 'mesiacmi';\n }\n case 'y': // a year / in a year / a year ago\n return withoutSuffix || isFuture ? 'rok' : 'rokom';\n case 'yy': // 9 years / in 9 years / 9 years ago\n if (withoutSuffix || isFuture) {\n return result + (plural(number) ? 'roky' : 'rokov');\n } else {\n return result + 'rokmi';\n }\n }\n }\n\n var sk = moment.defineLocale('sk', {\n months: months,\n monthsShort: monthsShort,\n weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[dnes o] LT',\n nextDay: '[zajtra o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v nedeľu o] LT';\n case 1:\n case 2:\n return '[v] dddd [o] LT';\n case 3:\n return '[v stredu o] LT';\n case 4:\n return '[vo štvrtok o] LT';\n case 5:\n return '[v piatok o] LT';\n case 6:\n return '[v sobotu o] LT';\n }\n },\n lastDay: '[včera o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[minulú nedeľu o] LT';\n case 1:\n case 2:\n return '[minulý] dddd [o] LT';\n case 3:\n return '[minulú stredu o] LT';\n case 4:\n case 5:\n return '[minulý] dddd [o] LT';\n case 6:\n return '[minulú sobotu o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pred %s',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sk;\n\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","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var yo = moment.defineLocale('yo', {\n months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n '_'\n ),\n monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Ònì ni] LT',\n nextDay: '[Ọ̀la ni] LT',\n nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n lastDay: '[Àna ni] LT',\n lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ní %s',\n past: '%s kọjá',\n s: 'ìsẹjú aayá die',\n ss: 'aayá %d',\n m: 'ìsẹjú kan',\n mm: 'ìsẹjú %d',\n h: 'wákati kan',\n hh: 'wákati %d',\n d: 'ọjọ́ kan',\n dd: 'ọjọ́ %d',\n M: 'osù kan',\n MM: 'osù %d',\n y: 'ọdún kan',\n yy: 'ọdún %d',\n },\n dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n ordinal: 'ọjọ́ %d',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return yo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var result = number + ' ';\n switch (key) {\n case 's':\n return withoutSuffix || isFuture\n ? 'nekaj sekund'\n : 'nekaj sekundami';\n case 'ss':\n if (number === 1) {\n result += withoutSuffix ? 'sekundo' : 'sekundi';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n } else {\n result += 'sekund';\n }\n return result;\n case 'm':\n return withoutSuffix ? 'ena minuta' : 'eno minuto';\n case 'mm':\n if (number === 1) {\n result += withoutSuffix ? 'minuta' : 'minuto';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n } else {\n result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n }\n return result;\n case 'h':\n return withoutSuffix ? 'ena ura' : 'eno uro';\n case 'hh':\n if (number === 1) {\n result += withoutSuffix ? 'ura' : 'uro';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'uri' : 'urama';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'ure' : 'urami';\n } else {\n result += withoutSuffix || isFuture ? 'ur' : 'urami';\n }\n return result;\n case 'd':\n return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n case 'dd':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n } else {\n result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n }\n return result;\n case 'M':\n return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n case 'MM':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n } else {\n result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n }\n return result;\n case 'y':\n return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n case 'yy':\n if (number === 1) {\n result += withoutSuffix || isFuture ? 'leto' : 'letom';\n } else if (number === 2) {\n result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n } else if (number < 5) {\n result += withoutSuffix || isFuture ? 'leta' : 'leti';\n } else {\n result += withoutSuffix || isFuture ? 'let' : 'leti';\n }\n return result;\n }\n }\n\n var sl = moment.defineLocale('sl', {\n months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD. MM. YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[danes ob] LT',\n nextDay: '[jutri ob] LT',\n\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[v] [nedeljo] [ob] LT';\n case 3:\n return '[v] [sredo] [ob] LT';\n case 6:\n return '[v] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[v] dddd [ob] LT';\n }\n },\n lastDay: '[včeraj ob] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[prejšnjo] [nedeljo] [ob] LT';\n case 3:\n return '[prejšnjo] [sredo] [ob] LT';\n case 6:\n return '[prejšnjo] [soboto] [ob] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[prejšnji] dddd [ob] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'čez %s',\n past: 'pred %s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n ' '\n ),\n numbersFuture = [\n 'nolla',\n 'yhden',\n 'kahden',\n 'kolmen',\n 'neljän',\n 'viiden',\n 'kuuden',\n numbersPast[7],\n numbersPast[8],\n numbersPast[9],\n ];\n function translate(number, withoutSuffix, key, isFuture) {\n var result = '';\n switch (key) {\n case 's':\n return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n case 'ss':\n result = isFuture ? 'sekunnin' : 'sekuntia';\n break;\n case 'm':\n return isFuture ? 'minuutin' : 'minuutti';\n case 'mm':\n result = isFuture ? 'minuutin' : 'minuuttia';\n break;\n case 'h':\n return isFuture ? 'tunnin' : 'tunti';\n case 'hh':\n result = isFuture ? 'tunnin' : 'tuntia';\n break;\n case 'd':\n return isFuture ? 'päivän' : 'päivä';\n case 'dd':\n result = isFuture ? 'päivän' : 'päivää';\n break;\n case 'M':\n return isFuture ? 'kuukauden' : 'kuukausi';\n case 'MM':\n result = isFuture ? 'kuukauden' : 'kuukautta';\n break;\n case 'y':\n return isFuture ? 'vuoden' : 'vuosi';\n case 'yy':\n result = isFuture ? 'vuoden' : 'vuotta';\n break;\n }\n result = verbalNumber(number, isFuture) + ' ' + result;\n return result;\n }\n function verbalNumber(number, isFuture) {\n return number < 10\n ? isFuture\n ? numbersFuture[number]\n : numbersPast[number]\n : number;\n }\n\n var fi = moment.defineLocale('fi', {\n months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n '_'\n ),\n monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n '_'\n ),\n weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n '_'\n ),\n weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'Do MMMM[ta] YYYY',\n LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n l: 'D.M.YYYY',\n ll: 'Do MMM YYYY',\n lll: 'Do MMM YYYY, [klo] HH.mm',\n llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n },\n calendar: {\n sameDay: '[tänään] [klo] LT',\n nextDay: '[huomenna] [klo] LT',\n nextWeek: 'dddd [klo] LT',\n lastDay: '[eilen] [klo] LT',\n lastWeek: '[viime] dddd[na] [klo] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s päästä',\n past: '%s sitten',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n };\n\n var arSa = moment.defineLocale('ar-sa', {\n months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n '_'\n ),\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم على الساعة] LT',\n nextDay: '[غدا على الساعة] LT',\n nextWeek: 'dddd [على الساعة] LT',\n lastDay: '[أمس على الساعة] LT',\n lastWeek: 'dddd [على الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'في %s',\n past: 'منذ %s',\n s: 'ثوان',\n ss: '%d ثانية',\n m: 'دقيقة',\n mm: '%d دقائق',\n h: 'ساعة',\n hh: '%d ساعات',\n d: 'يوم',\n dd: '%d أيام',\n M: 'شهر',\n MM: '%d أشهر',\n y: 'سنة',\n yy: '%d سنوات',\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return arSa;\n\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');","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var bg = moment.defineLocale('bg', {\n months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n '_'\n ),\n monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n '_'\n ),\n weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Днес в] LT',\n nextDay: '[Утре в] LT',\n nextWeek: 'dddd [в] LT',\n lastDay: '[Вчера в] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n case 3:\n case 6:\n return '[Миналата] dddd [в] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[Миналия] dddd [в] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'след %s',\n past: 'преди %s',\n s: 'няколко секунди',\n ss: '%d секунди',\n m: 'минута',\n mm: '%d минути',\n h: 'час',\n hh: '%d часа',\n d: 'ден',\n dd: '%d дена',\n w: 'седмица',\n ww: '%d седмици',\n M: 'месец',\n MM: '%d месеца',\n y: 'година',\n yy: '%d години',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n ordinal: function (number) {\n var lastDigit = number % 10,\n last2Digits = number % 100;\n if (number === 0) {\n return number + '-ев';\n } else if (last2Digits === 0) {\n return number + '-ен';\n } else if (last2Digits > 10 && last2Digits < 20) {\n return number + '-ти';\n } else if (lastDigit === 1) {\n return number + '-ви';\n } else if (lastDigit === 2) {\n return number + '-ри';\n } else if (lastDigit === 7 || lastDigit === 8) {\n return number + '-ми';\n } else {\n return number + '-ти';\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return bg;\n\n})));\n","// Exports the \"lists\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/lists')\n// ES2015:\n// import 'tinymce/plugins/lists'\nrequire('./plugin.js');","// Exports the \"directionality\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/directionality')\n// ES2015:\n// import 'tinymce/plugins/directionality'\nrequire('./plugin.js');","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '၁',\n 2: '၂',\n 3: '၃',\n 4: '၄',\n 5: '၅',\n 6: '၆',\n 7: '၇',\n 8: '၈',\n 9: '၉',\n 0: '၀',\n },\n numberMap = {\n '၁': '1',\n '၂': '2',\n '၃': '3',\n '၄': '4',\n '၅': '5',\n '၆': '6',\n '၇': '7',\n '၈': '8',\n '၉': '9',\n '၀': '0',\n };\n\n var my = moment.defineLocale('my', {\n months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n '_'\n ),\n monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n '_'\n ),\n weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ယနေ.] LT [မှာ]',\n nextDay: '[မနက်ဖြန်] LT [မှာ]',\n nextWeek: 'dddd LT [မှာ]',\n lastDay: '[မနေ.က] LT [မှာ]',\n lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'လာမည့် %s မှာ',\n past: 'လွန်ခဲ့သော %s က',\n s: 'စက္ကန်.အနည်းငယ်',\n ss: '%d စက္ကန့်',\n m: 'တစ်မိနစ်',\n mm: '%d မိနစ်',\n h: 'တစ်နာရီ',\n hh: '%d နာရီ',\n d: 'တစ်ရက်',\n dd: '%d ရက်',\n M: 'တစ်လ',\n MM: '%d လ',\n y: 'တစ်နှစ်',\n yy: '%d နှစ်',\n },\n preparse: function (string) {\n return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return my;\n\n})));\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var gl = moment.defineLocale('gl', {\n months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n '_'\n ),\n monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n },\n nextDay: function () {\n return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n },\n lastDay: function () {\n return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n },\n lastWeek: function () {\n return (\n '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: function (str) {\n if (str.indexOf('un') === 0) {\n return 'n' + str;\n }\n return 'en ' + str;\n },\n past: 'hai %s',\n s: 'uns segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'unha hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n M: 'un mes',\n MM: '%d meses',\n y: 'un ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gl;\n\n})));\n","// 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","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n '_'\n ),\n monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n monthsParse = [\n /^ene/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n var es = moment.defineLocale('es', {\n months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortDot;\n } else if (/-MMM-/.test(format)) {\n return monthsShort[m.month()];\n } else {\n return monthsShortDot[m.month()];\n }\n },\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY H:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextDay: function () {\n return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastDay: function () {\n return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [pasado a la' +\n (this.hours() !== 1 ? 's' : '') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'en %s',\n past: 'hace %s',\n s: 'unos segundos',\n ss: '%d segundos',\n m: 'un minuto',\n mm: '%d minutos',\n h: 'una hora',\n hh: '%d horas',\n d: 'un día',\n dd: '%d días',\n w: 'una semana',\n ww: '%d semanas',\n M: 'un mes',\n MM: '%d meses',\n y: 'un año',\n yy: '%d años',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n invalidDate: 'Fecha inválida',\n });\n\n return es;\n\n})));\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"v-spinner\"},[_c('div',{staticClass:\"v-pulse v-pulse1\",style:([_vm.spinnerStyle,_vm.spinnerDelay1])}),_c('div',{staticClass:\"v-pulse v-pulse2\",style:([_vm.spinnerStyle,_vm.spinnerDelay2])}),_c('div',{staticClass:\"v-pulse v-pulse3\",style:([_vm.spinnerStyle,_vm.spinnerDelay3])})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PulseLoader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PulseLoader.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PulseLoader.vue?vue&type=template&id=7dc0198c&\"\nimport script from \"./PulseLoader.vue?vue&type=script&lang=js&\"\nexport * from \"./PulseLoader.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PulseLoader.vue?vue&type=style&index=0&lang=css&\"\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 null,\n null\n \n)\n\nexport default component.exports","(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","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n var el = moment.defineLocale('el', {\n monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n '_'\n ),\n monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n '_'\n ),\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return this._monthsNominativeEl;\n } else if (\n typeof format === 'string' &&\n /D/.test(format.substring(0, format.indexOf('MMMM')))\n ) {\n // if there is a day number before 'MMMM'\n return this._monthsGenitiveEl[momentToFormat.month()];\n } else {\n return this._monthsNominativeEl[momentToFormat.month()];\n }\n },\n monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n '_'\n ),\n weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'μμ' : 'ΜΜ';\n } else {\n return isLower ? 'πμ' : 'ΠΜ';\n }\n },\n isPM: function (input) {\n return (input + '').toLowerCase()[0] === 'μ';\n },\n meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendarEl: {\n sameDay: '[Σήμερα {}] LT',\n nextDay: '[Αύριο {}] LT',\n nextWeek: 'dddd [{}] LT',\n lastDay: '[Χθες {}] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 6:\n return '[το προηγούμενο] dddd [{}] LT';\n default:\n return '[την προηγούμενη] dddd [{}] LT';\n }\n },\n sameElse: 'L',\n },\n calendar: function (key, mom) {\n var output = this._calendarEl[key],\n hours = mom && mom.hours();\n if (isFunction(output)) {\n output = output.apply(mom);\n }\n return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n },\n relativeTime: {\n future: 'σε %s',\n past: '%s πριν',\n s: 'λίγα δευτερόλεπτα',\n ss: '%d δευτερόλεπτα',\n m: 'ένα λεπτό',\n mm: '%d λεπτά',\n h: 'μία ώρα',\n hh: '%d ώρες',\n d: 'μία μέρα',\n dd: '%d μέρες',\n M: 'ένας μήνας',\n MM: '%d μήνες',\n y: 'ένας χρόνος',\n yy: '%d χρόνια',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}η/,\n ordinal: '%dη',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4st is the first week of the year.\n },\n });\n\n return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n '_'\n ),\n monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n '_'\n ),\n monthsParse = [\n /^sty/i,\n /^lut/i,\n /^mar/i,\n /^kwi/i,\n /^maj/i,\n /^cze/i,\n /^lip/i,\n /^sie/i,\n /^wrz/i,\n /^paź/i,\n /^lis/i,\n /^gru/i,\n ];\n function plural(n) {\n return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n }\n function translate(number, withoutSuffix, key) {\n var result = number + ' ';\n switch (key) {\n case 'ss':\n return result + (plural(number) ? 'sekundy' : 'sekund');\n case 'm':\n return withoutSuffix ? 'minuta' : 'minutę';\n case 'mm':\n return result + (plural(number) ? 'minuty' : 'minut');\n case 'h':\n return withoutSuffix ? 'godzina' : 'godzinę';\n case 'hh':\n return result + (plural(number) ? 'godziny' : 'godzin');\n case 'ww':\n return result + (plural(number) ? 'tygodnie' : 'tygodni');\n case 'MM':\n return result + (plural(number) ? 'miesiące' : 'miesięcy');\n case 'yy':\n return result + (plural(number) ? 'lata' : 'lat');\n }\n }\n\n var pl = moment.defineLocale('pl', {\n months: function (momentToFormat, format) {\n if (!momentToFormat) {\n return monthsNominative;\n } else if (/D MMMM/.test(format)) {\n return monthsSubjective[momentToFormat.month()];\n } else {\n return monthsNominative[momentToFormat.month()];\n }\n },\n monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(\n '_'\n ),\n weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Dziś o] LT',\n nextDay: '[Jutro o] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W niedzielę o] LT';\n\n case 2:\n return '[We wtorek o] LT';\n\n case 3:\n return '[W środę o] LT';\n\n case 6:\n return '[W sobotę o] LT';\n\n default:\n return '[W] dddd [o] LT';\n }\n },\n lastDay: '[Wczoraj o] LT',\n lastWeek: function () {\n switch (this.day()) {\n case 0:\n return '[W zeszłą niedzielę o] LT';\n case 3:\n return '[W zeszłą środę o] LT';\n case 6:\n return '[W zeszłą sobotę o] LT';\n default:\n return '[W zeszły] dddd [o] LT';\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: '%s temu',\n s: 'kilka sekund',\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: '1 dzień',\n dd: '%d dni',\n w: 'tydzień',\n ww: translate,\n M: 'miesiąc',\n MM: translate,\n y: 'rok',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '۱',\n 2: '۲',\n 3: '۳',\n 4: '۴',\n 5: '۵',\n 6: '۶',\n 7: '۷',\n 8: '۸',\n 9: '۹',\n 0: '۰',\n },\n numberMap = {\n '۱': '1',\n '۲': '2',\n '۳': '3',\n '۴': '4',\n '۵': '5',\n '۶': '6',\n '۷': '7',\n '۸': '8',\n '۹': '9',\n '۰': '0',\n };\n\n var fa = moment.defineLocale('fa', {\n months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n '_'\n ),\n weekdays: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysShort: 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n '_'\n ),\n weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /قبل از ظهر|بعد از ظهر/,\n isPM: function (input) {\n return /بعد از ظهر/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'قبل از ظهر';\n } else {\n return 'بعد از ظهر';\n }\n },\n calendar: {\n sameDay: '[امروز ساعت] LT',\n nextDay: '[فردا ساعت] LT',\n nextWeek: 'dddd [ساعت] LT',\n lastDay: '[دیروز ساعت] LT',\n lastWeek: 'dddd [پیش] [ساعت] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'در %s',\n past: '%s پیش',\n s: 'چند ثانیه',\n ss: '%d ثانیه',\n m: 'یک دقیقه',\n mm: '%d دقیقه',\n h: 'یک ساعت',\n hh: '%d ساعت',\n d: 'یک روز',\n dd: '%d روز',\n M: 'یک ماه',\n MM: '%d ماه',\n y: 'یک سال',\n yy: '%d سال',\n },\n preparse: function (string) {\n return string\n .replace(/[۰-۹]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n dayOfMonthOrdinalParse: /\\d{1,2}م/,\n ordinal: '%dم',\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '١',\n 2: '٢',\n 3: '٣',\n 4: '٤',\n 5: '٥',\n 6: '٦',\n 7: '٧',\n 8: '٨',\n 9: '٩',\n 0: '٠',\n },\n numberMap = {\n '١': '1',\n '٢': '2',\n '٣': '3',\n '٤': '4',\n '٥': '5',\n '٦': '6',\n '٧': '7',\n '٨': '8',\n '٩': '9',\n '٠': '0',\n },\n pluralForm = function (n) {\n return n === 0\n ? 0\n : n === 1\n ? 1\n : n === 2\n ? 2\n : n % 100 >= 3 && n % 100 <= 10\n ? 3\n : n % 100 >= 11\n ? 4\n : 5;\n },\n plurals = {\n s: [\n 'أقل من ثانية',\n 'ثانية واحدة',\n ['ثانيتان', 'ثانيتين'],\n '%d ثوان',\n '%d ثانية',\n '%d ثانية',\n ],\n m: [\n 'أقل من دقيقة',\n 'دقيقة واحدة',\n ['دقيقتان', 'دقيقتين'],\n '%d دقائق',\n '%d دقيقة',\n '%d دقيقة',\n ],\n h: [\n 'أقل من ساعة',\n 'ساعة واحدة',\n ['ساعتان', 'ساعتين'],\n '%d ساعات',\n '%d ساعة',\n '%d ساعة',\n ],\n d: [\n 'أقل من يوم',\n 'يوم واحد',\n ['يومان', 'يومين'],\n '%d أيام',\n '%d يومًا',\n '%d يوم',\n ],\n M: [\n 'أقل من شهر',\n 'شهر واحد',\n ['شهران', 'شهرين'],\n '%d أشهر',\n '%d شهرا',\n '%d شهر',\n ],\n y: [\n 'أقل من عام',\n 'عام واحد',\n ['عامان', 'عامين'],\n '%d أعوام',\n '%d عامًا',\n '%d عام',\n ],\n },\n pluralize = function (u) {\n return function (number, withoutSuffix, string, isFuture) {\n var f = pluralForm(number),\n str = plurals[u][pluralForm(number)];\n if (f === 2) {\n str = str[withoutSuffix ? 0 : 1];\n }\n return str.replace(/%d/i, number);\n };\n },\n months = [\n 'يناير',\n 'فبراير',\n 'مارس',\n 'أبريل',\n 'مايو',\n 'يونيو',\n 'يوليو',\n 'أغسطس',\n 'سبتمبر',\n 'أكتوبر',\n 'نوفمبر',\n 'ديسمبر',\n ];\n\n var ar = moment.defineLocale('ar', {\n months: months,\n monthsShort: months,\n weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'D/\\u200FM/\\u200FYYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n meridiemParse: /ص|م/,\n isPM: function (input) {\n return 'م' === input;\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ص';\n } else {\n return 'م';\n }\n },\n calendar: {\n sameDay: '[اليوم عند الساعة] LT',\n nextDay: '[غدًا عند الساعة] LT',\n nextWeek: 'dddd [عند الساعة] LT',\n lastDay: '[أمس عند الساعة] LT',\n lastWeek: 'dddd [عند الساعة] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'بعد %s',\n past: 'منذ %s',\n s: pluralize('s'),\n ss: pluralize('s'),\n m: pluralize('m'),\n mm: pluralize('m'),\n h: pluralize('h'),\n hh: pluralize('h'),\n d: pluralize('d'),\n dd: pluralize('d'),\n M: pluralize('M'),\n MM: pluralize('M'),\n y: pluralize('y'),\n yy: pluralize('y'),\n },\n preparse: function (string) {\n return string\n .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n return numberMap[match];\n })\n .replace(/،/g, ',');\n },\n postformat: function (string) {\n return string\n .replace(/\\d/g, function (match) {\n return symbolMap[match];\n })\n .replace(/,/g, '،');\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return ar;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bn = moment.defineLocale('bn', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'রাত' && hour >= 4) ||\n (meridiem === 'দুপুর' && hour < 5) ||\n meridiem === 'বিকাল'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 10) {\n return 'সকাল';\n } else if (hour < 17) {\n return 'দুপুর';\n } else if (hour < 20) {\n return 'বিকাল';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var zhTw = moment.defineLocale('zh-tw', {\n months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n '_'\n ),\n monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n '_'\n ),\n weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY年M月D日',\n LLL: 'YYYY年M月D日 HH:mm',\n LLLL: 'YYYY年M月D日dddd HH:mm',\n l: 'YYYY/M/D',\n ll: 'YYYY年M月D日',\n lll: 'YYYY年M月D日 HH:mm',\n llll: 'YYYY年M月D日dddd HH:mm',\n },\n meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n return hour;\n } else if (meridiem === '中午') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === '下午' || meridiem === '晚上') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n var hm = hour * 100 + minute;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1130) {\n return '上午';\n } else if (hm < 1230) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n } else {\n return '晚上';\n }\n },\n calendar: {\n sameDay: '[今天] LT',\n nextDay: '[明天] LT',\n nextWeek: '[下]dddd LT',\n lastDay: '[昨天] LT',\n lastWeek: '[上]dddd LT',\n sameElse: 'L',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + '日';\n case 'M':\n return number + '月';\n case 'w':\n case 'W':\n return number + '週';\n default:\n return number;\n }\n },\n relativeTime: {\n future: '%s後',\n past: '%s前',\n s: '幾秒',\n ss: '%d 秒',\n m: '1 分鐘',\n mm: '%d 分鐘',\n h: '1 小時',\n hh: '%d 小時',\n d: '1 天',\n dd: '%d 天',\n M: '1 個月',\n MM: '%d 個月',\n y: '1 年',\n yy: '%d 年',\n },\n });\n\n return zhTw;\n\n})));\n","// Exports the \"wordcount\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/wordcount')\n// ES2015:\n// import 'tinymce/plugins/wordcount'\nrequire('./plugin.js');","(function () {\nvar table = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var noop = function () {\n };\n var compose = function (fa, fb) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return fa(fb.apply(null, args));\n };\n };\n var constant = function (value) {\n return function () {\n return value;\n };\n };\n var identity = function (x) {\n return x;\n };\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n var not = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return !f.apply(null, args);\n };\n };\n var die = function (msg) {\n return function () {\n throw new Error(msg);\n };\n };\n var never = constant(false);\n var always = constant(true);\n\n var none = function () {\n return NONE;\n };\n var NONE = function () {\n var eq = function (o) {\n return o.isNone();\n };\n var call = function (thunk) {\n return thunk();\n };\n var id = function (n) {\n return n;\n };\n var me = {\n fold: function (n, s) {\n return n();\n },\n is: never,\n isSome: never,\n isNone: always,\n getOr: id,\n getOrThunk: call,\n getOrDie: function (msg) {\n throw new Error(msg || 'error: getOrDie called on none.');\n },\n getOrNull: constant(null),\n getOrUndefined: constant(undefined),\n or: id,\n orThunk: call,\n map: none,\n each: noop,\n bind: none,\n exists: never,\n forall: always,\n filter: none,\n equals: eq,\n equals_: eq,\n toArray: function () {\n return [];\n },\n toString: constant('none()')\n };\n if (Object.freeze) {\n Object.freeze(me);\n }\n return me;\n }();\n var some = function (a) {\n var constant_a = constant(a);\n var self = function () {\n return me;\n };\n var bind = function (f) {\n return f(a);\n };\n var me = {\n fold: function (n, s) {\n return s(a);\n },\n is: function (v) {\n return a === v;\n },\n isSome: always,\n isNone: never,\n getOr: constant_a,\n getOrThunk: constant_a,\n getOrDie: constant_a,\n getOrNull: constant_a,\n getOrUndefined: constant_a,\n or: self,\n orThunk: self,\n map: function (f) {\n return some(f(a));\n },\n each: function (f) {\n f(a);\n },\n bind: bind,\n exists: bind,\n forall: bind,\n filter: function (f) {\n return f(a) ? me : NONE;\n },\n toArray: function () {\n return [a];\n },\n toString: function () {\n return 'some(' + a + ')';\n },\n equals: function (o) {\n return o.is(a);\n },\n equals_: function (o, elementEq) {\n return o.fold(never, function (b) {\n return elementEq(a, b);\n });\n }\n };\n return me;\n };\n var from = function (value) {\n return value === null || value === undefined ? NONE : some(value);\n };\n var Option = {\n some: some,\n none: none,\n from: from\n };\n\n var typeOf = function (x) {\n if (x === null) {\n return 'null';\n }\n var t = typeof x;\n if (t === 'object' && (Array.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'Array')) {\n return 'array';\n }\n if (t === 'object' && (String.prototype.isPrototypeOf(x) || x.constructor && x.constructor.name === 'String')) {\n return 'string';\n }\n return t;\n };\n var isType = function (type) {\n return function (value) {\n return typeOf(value) === type;\n };\n };\n var isString = isType('string');\n var isArray = isType('array');\n var isBoolean = isType('boolean');\n var isFunction = isType('function');\n var isNumber = isType('number');\n\n var nativeSlice = Array.prototype.slice;\n var nativeIndexOf = Array.prototype.indexOf;\n var nativePush = Array.prototype.push;\n var rawIndexOf = function (ts, t) {\n return nativeIndexOf.call(ts, t);\n };\n var contains = function (xs, x) {\n return rawIndexOf(xs, x) > -1;\n };\n var exists = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return true;\n }\n }\n return false;\n };\n var map = function (xs, f) {\n var len = xs.length;\n var r = new Array(len);\n for (var i = 0; i < len; i++) {\n var x = xs[i];\n r[i] = f(x, i);\n }\n return r;\n };\n var each = function (xs, f) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n f(x, i);\n }\n };\n var eachr = function (xs, f) {\n for (var i = xs.length - 1; i >= 0; i--) {\n var x = xs[i];\n f(x, i);\n }\n };\n var filter = function (xs, pred) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n r.push(x);\n }\n }\n return r;\n };\n var foldr = function (xs, f, acc) {\n eachr(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var foldl = function (xs, f, acc) {\n each(xs, function (x) {\n acc = f(acc, x);\n });\n return acc;\n };\n var find = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(x);\n }\n }\n return Option.none();\n };\n var findIndex = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; i++) {\n var x = xs[i];\n if (pred(x, i)) {\n return Option.some(i);\n }\n }\n return Option.none();\n };\n var flatten = function (xs) {\n var r = [];\n for (var i = 0, len = xs.length; i < len; ++i) {\n if (!isArray(xs[i])) {\n throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);\n }\n nativePush.apply(r, xs[i]);\n }\n return r;\n };\n var bind = function (xs, f) {\n var output = map(xs, f);\n return flatten(output);\n };\n var forall = function (xs, pred) {\n for (var i = 0, len = xs.length; i < len; ++i) {\n var x = xs[i];\n if (pred(x, i) !== true) {\n return false;\n }\n }\n return true;\n };\n var reverse = function (xs) {\n var r = nativeSlice.call(xs, 0);\n r.reverse();\n return r;\n };\n var last = function (xs) {\n return xs.length === 0 ? Option.none() : Option.some(xs[xs.length - 1]);\n };\n var from$1 = isFunction(Array.from) ? Array.from : function (x) {\n return nativeSlice.call(x);\n };\n\n var keys = Object.keys;\n var each$1 = function (obj, f) {\n var props = keys(obj);\n for (var k = 0, len = props.length; k < len; k++) {\n var i = props[k];\n var x = obj[i];\n f(x, i);\n }\n };\n var map$1 = function (obj, f) {\n return tupleMap(obj, function (x, i) {\n return {\n k: i,\n v: f(x, i)\n };\n });\n };\n var tupleMap = function (obj, f) {\n var r = {};\n each$1(obj, function (x, i) {\n var tuple = f(x, i);\n r[tuple.k] = tuple.v;\n });\n return r;\n };\n\n var Immutable = function () {\n var fields = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n fields[_i] = arguments[_i];\n }\n return function () {\n var values = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n values[_i] = arguments[_i];\n }\n if (fields.length !== values.length) {\n throw new Error('Wrong number of arguments to struct. Expected \"[' + fields.length + ']\", got ' + values.length + ' arguments');\n }\n var struct = {};\n each(fields, function (name, i) {\n struct[name] = constant(values[i]);\n });\n return struct;\n };\n };\n\n var sort = function (arr) {\n return arr.slice(0).sort();\n };\n var reqMessage = function (required, keys) {\n throw new Error('All required keys (' + sort(required).join(', ') + ') were not specified. Specified keys were: ' + sort(keys).join(', ') + '.');\n };\n var unsuppMessage = function (unsupported) {\n throw new Error('Unsupported keys for object: ' + sort(unsupported).join(', '));\n };\n var validateStrArr = function (label, array) {\n if (!isArray(array)) {\n throw new Error('The ' + label + ' fields must be an array. Was: ' + array + '.');\n }\n each(array, function (a) {\n if (!isString(a)) {\n throw new Error('The value ' + a + ' in the ' + label + ' fields was not a string.');\n }\n });\n };\n var invalidTypeMessage = function (incorrect, type) {\n throw new Error('All values need to be of type: ' + type + '. Keys (' + sort(incorrect).join(', ') + ') were not.');\n };\n var checkDupes = function (everything) {\n var sorted = sort(everything);\n var dupe = find(sorted, function (s, i) {\n return i < sorted.length - 1 && s === sorted[i + 1];\n });\n dupe.each(function (d) {\n throw new Error('The field: ' + d + ' occurs more than once in the combined fields: [' + sorted.join(', ') + '].');\n });\n };\n\n var MixedBag = function (required, optional) {\n var everything = required.concat(optional);\n if (everything.length === 0) {\n throw new Error('You must specify at least one required or optional field.');\n }\n validateStrArr('required', required);\n validateStrArr('optional', optional);\n checkDupes(everything);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n var unsupported = filter(keys$1, function (key) {\n return !contains(everything, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n var r = {};\n each(required, function (req) {\n r[req] = constant(obj[req]);\n });\n each(optional, function (opt) {\n r[opt] = constant(Object.prototype.hasOwnProperty.call(obj, opt) ? Option.some(obj[opt]) : Option.none());\n });\n return r;\n };\n };\n\n var ATTRIBUTE = domGlobals.Node.ATTRIBUTE_NODE;\n var CDATA_SECTION = domGlobals.Node.CDATA_SECTION_NODE;\n var COMMENT = domGlobals.Node.COMMENT_NODE;\n var DOCUMENT = domGlobals.Node.DOCUMENT_NODE;\n var DOCUMENT_TYPE = domGlobals.Node.DOCUMENT_TYPE_NODE;\n var DOCUMENT_FRAGMENT = domGlobals.Node.DOCUMENT_FRAGMENT_NODE;\n var ELEMENT = domGlobals.Node.ELEMENT_NODE;\n var TEXT = domGlobals.Node.TEXT_NODE;\n var PROCESSING_INSTRUCTION = domGlobals.Node.PROCESSING_INSTRUCTION_NODE;\n var ENTITY_REFERENCE = domGlobals.Node.ENTITY_REFERENCE_NODE;\n var ENTITY = domGlobals.Node.ENTITY_NODE;\n var NOTATION = domGlobals.Node.NOTATION_NODE;\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n var name = function (element) {\n var r = element.dom().nodeName;\n return r.toLowerCase();\n };\n var type = function (element) {\n return element.dom().nodeType;\n };\n var isType$1 = function (t) {\n return function (element) {\n return type(element) === t;\n };\n };\n var isComment = function (element) {\n return type(element) === COMMENT || name(element) === '#comment';\n };\n var isElement = isType$1(ELEMENT);\n var isText = isType$1(TEXT);\n\n var rawSet = function (dom, key, value) {\n if (isString(value) || isBoolean(value) || isNumber(value)) {\n dom.setAttribute(key, value + '');\n } else {\n domGlobals.console.error('Invalid call to Attr.set. Key ', key, ':: Value ', value, ':: Element ', dom);\n throw new Error('Attribute value was not simple');\n }\n };\n var set = function (element, key, value) {\n rawSet(element.dom(), key, value);\n };\n var setAll = function (element, attrs) {\n var dom = element.dom();\n each$1(attrs, function (v, k) {\n rawSet(dom, k, v);\n });\n };\n var get = function (element, key) {\n var v = element.dom().getAttribute(key);\n return v === null ? undefined : v;\n };\n var has = function (element, key) {\n var dom = element.dom();\n return dom && dom.hasAttribute ? dom.hasAttribute(key) : false;\n };\n var remove = function (element, key) {\n element.dom().removeAttribute(key);\n };\n var clone = function (element) {\n return foldl(element.dom().attributes, function (acc, attr) {\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n };\n\n var checkRange = function (str, substr, start) {\n if (substr === '') {\n return true;\n }\n if (str.length < substr.length) {\n return false;\n }\n var x = str.substr(start, start + substr.length);\n return x === substr;\n };\n var contains$1 = function (str, substr) {\n return str.indexOf(substr) !== -1;\n };\n var endsWith = function (str, suffix) {\n return checkRange(str, suffix, str.length - suffix.length);\n };\n var trim = function (str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n };\n\n var isSupported = function (dom) {\n return dom.style !== undefined && isFunction(dom.style.getPropertyValue);\n };\n\n var cached = function (f) {\n var called = false;\n var r;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!called) {\n called = true;\n r = f.apply(null, args);\n }\n return r;\n };\n };\n\n var fromHtml = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n if (!div.hasChildNodes() || div.childNodes.length > 1) {\n domGlobals.console.error('HTML does not have a single root node', html);\n throw new Error('HTML must have a single root node');\n }\n return fromDom(div.childNodes[0]);\n };\n var fromTag = function (tag, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createElement(tag);\n return fromDom(node);\n };\n var fromText = function (text, scope) {\n var doc = scope || domGlobals.document;\n var node = doc.createTextNode(text);\n return fromDom(node);\n };\n var fromDom = function (node) {\n if (node === null || node === undefined) {\n throw new Error('Node cannot be null or undefined');\n }\n return { dom: constant(node) };\n };\n var fromPoint = function (docElm, x, y) {\n var doc = docElm.dom();\n return Option.from(doc.elementFromPoint(x, y)).map(fromDom);\n };\n var Element = {\n fromHtml: fromHtml,\n fromTag: fromTag,\n fromText: fromText,\n fromDom: fromDom,\n fromPoint: fromPoint\n };\n\n var inBody = function (element) {\n var dom = isText(element) ? element.dom().parentNode : element.dom();\n return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);\n };\n var body = cached(function () {\n return getBody(Element.fromDom(domGlobals.document));\n });\n var getBody = function (doc) {\n var b = doc.dom().body;\n if (b === null || b === undefined) {\n throw new Error('Body is not available yet');\n }\n return Element.fromDom(b);\n };\n\n var internalSet = function (dom, property, value) {\n if (!isString(value)) {\n domGlobals.console.error('Invalid call to CSS.set. Property ', property, ':: Value ', value, ':: Element ', dom);\n throw new Error('CSS value must be a string: ' + value);\n }\n if (isSupported(dom)) {\n dom.style.setProperty(property, value);\n }\n };\n var internalRemove = function (dom, property) {\n if (isSupported(dom)) {\n dom.style.removeProperty(property);\n }\n };\n var set$1 = function (element, property, value) {\n var dom = element.dom();\n internalSet(dom, property, value);\n };\n var setAll$1 = function (element, css) {\n var dom = element.dom();\n each$1(css, function (v, k) {\n internalSet(dom, k, v);\n });\n };\n var get$1 = function (element, property) {\n var dom = element.dom();\n var styles = domGlobals.window.getComputedStyle(dom);\n var r = styles.getPropertyValue(property);\n var v = r === '' && !inBody(element) ? getUnsafeProperty(dom, property) : r;\n return v === null ? undefined : v;\n };\n var getUnsafeProperty = function (dom, property) {\n return isSupported(dom) ? dom.style.getPropertyValue(property) : '';\n };\n var getRaw = function (element, property) {\n var dom = element.dom();\n var raw = getUnsafeProperty(dom, property);\n return Option.from(raw).filter(function (r) {\n return r.length > 0;\n });\n };\n var remove$1 = function (element, property) {\n var dom = element.dom();\n internalRemove(dom, property);\n if (has(element, 'style') && trim(get(element, 'style')) === '') {\n remove(element, 'style');\n }\n };\n var copy = function (source, target) {\n var sourceDom = source.dom();\n var targetDom = target.dom();\n if (isSupported(sourceDom) && isSupported(targetDom)) {\n targetDom.style.cssText = sourceDom.style.cssText;\n }\n };\n\n var node = function () {\n var f = Global$1.getOrDie('Node');\n return f;\n };\n var compareDocumentPosition = function (a, b, match) {\n return (a.compareDocumentPosition(b) & match) !== 0;\n };\n var documentPositionPreceding = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);\n };\n var documentPositionContainedBy = function (a, b) {\n return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);\n };\n var Node = {\n documentPositionPreceding: documentPositionPreceding,\n documentPositionContainedBy: documentPositionContainedBy\n };\n\n var firstMatch = function (regexes, s) {\n for (var i = 0; i < regexes.length; i++) {\n var x = regexes[i];\n if (x.test(s)) {\n return x;\n }\n }\n return undefined;\n };\n var find$1 = function (regexes, agent) {\n var r = firstMatch(regexes, agent);\n if (!r) {\n return {\n major: 0,\n minor: 0\n };\n }\n var group = function (i) {\n return Number(agent.replace(r, '$' + i));\n };\n return nu(group(1), group(2));\n };\n var detect = function (versionRegexes, agent) {\n var cleanedAgent = String(agent).toLowerCase();\n if (versionRegexes.length === 0) {\n return unknown();\n }\n return find$1(versionRegexes, cleanedAgent);\n };\n var unknown = function () {\n return nu(0, 0);\n };\n var nu = function (major, minor) {\n return {\n major: major,\n minor: minor\n };\n };\n var Version = {\n nu: nu,\n detect: detect,\n unknown: unknown\n };\n\n var edge = 'Edge';\n var chrome = 'Chrome';\n var ie = 'IE';\n var opera = 'Opera';\n var firefox = 'Firefox';\n var safari = 'Safari';\n var isBrowser = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$1 = function () {\n return nu$1({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$1 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isEdge: isBrowser(edge, current),\n isChrome: isBrowser(chrome, current),\n isIE: isBrowser(ie, current),\n isOpera: isBrowser(opera, current),\n isFirefox: isBrowser(firefox, current),\n isSafari: isBrowser(safari, current)\n };\n };\n var Browser = {\n unknown: unknown$1,\n nu: nu$1,\n edge: constant(edge),\n chrome: constant(chrome),\n ie: constant(ie),\n opera: constant(opera),\n firefox: constant(firefox),\n safari: constant(safari)\n };\n\n var windows = 'Windows';\n var ios = 'iOS';\n var android = 'Android';\n var linux = 'Linux';\n var osx = 'OSX';\n var solaris = 'Solaris';\n var freebsd = 'FreeBSD';\n var isOS = function (name, current) {\n return function () {\n return current === name;\n };\n };\n var unknown$2 = function () {\n return nu$2({\n current: undefined,\n version: Version.unknown()\n });\n };\n var nu$2 = function (info) {\n var current = info.current;\n var version = info.version;\n return {\n current: current,\n version: version,\n isWindows: isOS(windows, current),\n isiOS: isOS(ios, current),\n isAndroid: isOS(android, current),\n isOSX: isOS(osx, current),\n isLinux: isOS(linux, current),\n isSolaris: isOS(solaris, current),\n isFreeBSD: isOS(freebsd, current)\n };\n };\n var OperatingSystem = {\n unknown: unknown$2,\n nu: nu$2,\n windows: constant(windows),\n ios: constant(ios),\n android: constant(android),\n linux: constant(linux),\n osx: constant(osx),\n solaris: constant(solaris),\n freebsd: constant(freebsd)\n };\n\n var DeviceType = function (os, browser, userAgent) {\n var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;\n var isiPhone = os.isiOS() && !isiPad;\n var isAndroid3 = os.isAndroid() && os.version.major === 3;\n var isAndroid4 = os.isAndroid() && os.version.major === 4;\n var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;\n var isTouch = os.isiOS() || os.isAndroid();\n var isPhone = isTouch && !isTablet;\n var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;\n return {\n isiPad: constant(isiPad),\n isiPhone: constant(isiPhone),\n isTablet: constant(isTablet),\n isPhone: constant(isPhone),\n isTouch: constant(isTouch),\n isAndroid: os.isAndroid,\n isiOS: os.isiOS,\n isWebView: constant(iOSwebview)\n };\n };\n\n var detect$1 = function (candidates, userAgent) {\n var agent = String(userAgent).toLowerCase();\n return find(candidates, function (candidate) {\n return candidate.search(agent);\n });\n };\n var detectBrowser = function (browsers, userAgent) {\n return detect$1(browsers, userAgent).map(function (browser) {\n var version = Version.detect(browser.versionRegexes, userAgent);\n return {\n current: browser.name,\n version: version\n };\n });\n };\n var detectOs = function (oses, userAgent) {\n return detect$1(oses, userAgent).map(function (os) {\n var version = Version.detect(os.versionRegexes, userAgent);\n return {\n current: os.name,\n version: version\n };\n });\n };\n var UaString = {\n detectBrowser: detectBrowser,\n detectOs: detectOs\n };\n\n var normalVersionRegex = /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/;\n var checkContains = function (target) {\n return function (uastring) {\n return contains$1(uastring, target);\n };\n };\n var browsers = [\n {\n name: 'Edge',\n versionRegexes: [/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],\n search: function (uastring) {\n return contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');\n }\n },\n {\n name: 'Chrome',\n versionRegexes: [\n /.*?chrome\\/([0-9]+)\\.([0-9]+).*/,\n normalVersionRegex\n ],\n search: function (uastring) {\n return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');\n }\n },\n {\n name: 'IE',\n versionRegexes: [\n /.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*?rv:([0-9]+)\\.([0-9]+).*/\n ],\n search: function (uastring) {\n return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');\n }\n },\n {\n name: 'Opera',\n versionRegexes: [\n normalVersionRegex,\n /.*?opera\\/([0-9]+)\\.([0-9]+).*/\n ],\n search: checkContains('opera')\n },\n {\n name: 'Firefox',\n versionRegexes: [/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],\n search: checkContains('firefox')\n },\n {\n name: 'Safari',\n versionRegexes: [\n normalVersionRegex,\n /.*?cpu os ([0-9]+)_([0-9]+).*/\n ],\n search: function (uastring) {\n return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');\n }\n }\n ];\n var oses = [\n {\n name: 'Windows',\n search: checkContains('win'),\n versionRegexes: [/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'iOS',\n search: function (uastring) {\n return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');\n },\n versionRegexes: [\n /.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,\n /.*cpu os ([0-9]+)_([0-9]+).*/,\n /.*cpu iphone os ([0-9]+)_([0-9]+).*/\n ]\n },\n {\n name: 'Android',\n search: checkContains('android'),\n versionRegexes: [/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]\n },\n {\n name: 'OSX',\n search: checkContains('os x'),\n versionRegexes: [/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]\n },\n {\n name: 'Linux',\n search: checkContains('linux'),\n versionRegexes: []\n },\n {\n name: 'Solaris',\n search: checkContains('sunos'),\n versionRegexes: []\n },\n {\n name: 'FreeBSD',\n search: checkContains('freebsd'),\n versionRegexes: []\n }\n ];\n var PlatformInfo = {\n browsers: constant(browsers),\n oses: constant(oses)\n };\n\n var detect$2 = function (userAgent) {\n var browsers = PlatformInfo.browsers();\n var oses = PlatformInfo.oses();\n var browser = UaString.detectBrowser(browsers, userAgent).fold(Browser.unknown, Browser.nu);\n var os = UaString.detectOs(oses, userAgent).fold(OperatingSystem.unknown, OperatingSystem.nu);\n var deviceType = DeviceType(os, browser, userAgent);\n return {\n browser: browser,\n os: os,\n deviceType: deviceType\n };\n };\n var PlatformDetection = { detect: detect$2 };\n\n var detect$3 = cached(function () {\n var userAgent = domGlobals.navigator.userAgent;\n return PlatformDetection.detect(userAgent);\n });\n var PlatformDetection$1 = { detect: detect$3 };\n\n var ELEMENT$1 = ELEMENT;\n var DOCUMENT$1 = DOCUMENT;\n var is = function (element, selector) {\n var dom = element.dom();\n if (dom.nodeType !== ELEMENT$1) {\n return false;\n } else {\n var elem = dom;\n if (elem.matches !== undefined) {\n return elem.matches(selector);\n } else if (elem.msMatchesSelector !== undefined) {\n return elem.msMatchesSelector(selector);\n } else if (elem.webkitMatchesSelector !== undefined) {\n return elem.webkitMatchesSelector(selector);\n } else if (elem.mozMatchesSelector !== undefined) {\n return elem.mozMatchesSelector(selector);\n } else {\n throw new Error('Browser lacks native selectors');\n }\n }\n };\n var bypassSelector = function (dom) {\n return dom.nodeType !== ELEMENT$1 && dom.nodeType !== DOCUMENT$1 || dom.childElementCount === 0;\n };\n var all = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element.fromDom);\n };\n var one = function (selector, scope) {\n var base = scope === undefined ? domGlobals.document : scope.dom();\n return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element.fromDom);\n };\n\n var eq = function (e1, e2) {\n return e1.dom() === e2.dom();\n };\n var regularContains = function (e1, e2) {\n var d1 = e1.dom();\n var d2 = e2.dom();\n return d1 === d2 ? false : d1.contains(d2);\n };\n var ieContains = function (e1, e2) {\n return Node.documentPositionContainedBy(e1.dom(), e2.dom());\n };\n var browser = PlatformDetection$1.detect().browser;\n var contains$2 = browser.isIE() ? ieContains : regularContains;\n var is$1 = is;\n\n var owner = function (element) {\n return Element.fromDom(element.dom().ownerDocument);\n };\n var defaultView = function (element) {\n return Element.fromDom(element.dom().ownerDocument.defaultView);\n };\n var parent = function (element) {\n return Option.from(element.dom().parentNode).map(Element.fromDom);\n };\n var parents = function (element, isRoot) {\n var stop = isFunction(isRoot) ? isRoot : never;\n var dom = element.dom();\n var ret = [];\n while (dom.parentNode !== null && dom.parentNode !== undefined) {\n var rawParent = dom.parentNode;\n var p = Element.fromDom(rawParent);\n ret.push(p);\n if (stop(p) === true) {\n break;\n } else {\n dom = rawParent;\n }\n }\n return ret;\n };\n var prevSibling = function (element) {\n return Option.from(element.dom().previousSibling).map(Element.fromDom);\n };\n var nextSibling = function (element) {\n return Option.from(element.dom().nextSibling).map(Element.fromDom);\n };\n var children = function (element) {\n return map(element.dom().childNodes, Element.fromDom);\n };\n var child = function (element, index) {\n var cs = element.dom().childNodes;\n return Option.from(cs[index]).map(Element.fromDom);\n };\n var firstChild = function (element) {\n return child(element, 0);\n };\n var spot = Immutable('element', 'offset');\n\n var before = function (marker, element) {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n v.dom().insertBefore(element.dom(), marker.dom());\n });\n };\n var after = function (marker, element) {\n var sibling = nextSibling(marker);\n sibling.fold(function () {\n var parent$1 = parent(marker);\n parent$1.each(function (v) {\n append(v, element);\n });\n }, function (v) {\n before(v, element);\n });\n };\n var prepend = function (parent, element) {\n var firstChild$1 = firstChild(parent);\n firstChild$1.fold(function () {\n append(parent, element);\n }, function (v) {\n parent.dom().insertBefore(element.dom(), v.dom());\n });\n };\n var append = function (parent, element) {\n parent.dom().appendChild(element.dom());\n };\n var wrap = function (element, wrapper) {\n before(element, wrapper);\n append(wrapper, element);\n };\n\n var before$1 = function (marker, elements) {\n each(elements, function (x) {\n before(marker, x);\n });\n };\n var after$1 = function (marker, elements) {\n each(elements, function (x, i) {\n var e = i === 0 ? marker : elements[i - 1];\n after(e, x);\n });\n };\n var append$1 = function (parent, elements) {\n each(elements, function (x) {\n append(parent, x);\n });\n };\n\n var empty = function (element) {\n element.dom().textContent = '';\n each(children(element), function (rogue) {\n remove$2(rogue);\n });\n };\n var remove$2 = function (element) {\n var dom = element.dom();\n if (dom.parentNode !== null) {\n dom.parentNode.removeChild(dom);\n }\n };\n var unwrap = function (wrapper) {\n var children$1 = children(wrapper);\n if (children$1.length > 0) {\n before$1(wrapper, children$1);\n }\n remove$2(wrapper);\n };\n\n var dimension = Immutable('width', 'height');\n var dimensions = Immutable('width', 'height');\n var grid = Immutable('rows', 'columns');\n var address = Immutable('row', 'column');\n var coords = Immutable('x', 'y');\n var detail = Immutable('element', 'rowspan', 'colspan');\n var detailnew = Immutable('element', 'rowspan', 'colspan', 'isNew');\n var extended = Immutable('element', 'rowspan', 'colspan', 'row', 'column');\n var rowdata = Immutable('element', 'cells', 'section');\n var elementnew = Immutable('element', 'isNew');\n var rowdatanew = Immutable('element', 'cells', 'section', 'isNew');\n var rowcells = Immutable('cells', 'section');\n var rowdetails = Immutable('details', 'section');\n var bounds = Immutable('startRow', 'startCol', 'finishRow', 'finishCol');\n\n var ancestors = function (scope, predicate, isRoot) {\n return filter(parents(scope, isRoot), predicate);\n };\n var children$1 = function (scope, predicate) {\n return filter(children(scope), predicate);\n };\n var descendants = function (scope, predicate) {\n var result = [];\n each(children(scope), function (x) {\n if (predicate(x)) {\n result = result.concat([x]);\n }\n result = result.concat(descendants(x, predicate));\n });\n return result;\n };\n\n var ancestors$1 = function (scope, selector, isRoot) {\n return ancestors(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var children$2 = function (scope, selector) {\n return children$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendants$1 = function (scope, selector) {\n return all(selector, scope);\n };\n\n function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {\n return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);\n }\n\n var ancestor = function (scope, predicate, isRoot) {\n var element = scope.dom();\n var stop = isFunction(isRoot) ? isRoot : constant(false);\n while (element.parentNode) {\n element = element.parentNode;\n var el = Element.fromDom(element);\n if (predicate(el)) {\n return Option.some(el);\n } else if (stop(el)) {\n break;\n }\n }\n return Option.none();\n };\n var closest = function (scope, predicate, isRoot) {\n var is = function (s, test) {\n return test(s);\n };\n return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);\n };\n var child$1 = function (scope, predicate) {\n var pred = function (node) {\n return predicate(Element.fromDom(node));\n };\n var result = find(scope.dom().childNodes, pred);\n return result.map(Element.fromDom);\n };\n var descendant = function (scope, predicate) {\n var descend = function (node) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var child_1 = Element.fromDom(node.childNodes[i]);\n if (predicate(child_1)) {\n return Option.some(child_1);\n }\n var res = descend(node.childNodes[i]);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope.dom());\n };\n\n var ancestor$1 = function (scope, selector, isRoot) {\n return ancestor(scope, function (e) {\n return is(e, selector);\n }, isRoot);\n };\n var child$2 = function (scope, selector) {\n return child$1(scope, function (e) {\n return is(e, selector);\n });\n };\n var descendant$1 = function (scope, selector) {\n return one(selector, scope);\n };\n var closest$1 = function (scope, selector, isRoot) {\n return ClosestOrAncestor(is, ancestor$1, scope, selector, isRoot);\n };\n\n var firstLayer = function (scope, selector) {\n return filterFirstLayer(scope, selector, constant(true));\n };\n var filterFirstLayer = function (scope, selector, predicate) {\n return bind(children(scope), function (x) {\n return is(x, selector) ? predicate(x) ? [x] : [] : filterFirstLayer(x, selector, predicate);\n });\n };\n var LayerSelector = {\n firstLayer: firstLayer,\n filterFirstLayer: filterFirstLayer\n };\n\n var lookup = function (tags, element, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n if (isRoot(element)) {\n return Option.none();\n }\n if (contains(tags, name(element))) {\n return Option.some(element);\n }\n var isRootOrUpperTable = function (elm) {\n return is(elm, 'table') || isRoot(elm);\n };\n return ancestor$1(element, tags.join(','), isRootOrUpperTable);\n };\n var cell = function (element, isRoot) {\n return lookup([\n 'td',\n 'th'\n ], element, isRoot);\n };\n var cells = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'th,td');\n };\n var notCell = function (element, isRoot) {\n return lookup([\n 'caption',\n 'tr',\n 'tbody',\n 'tfoot',\n 'thead'\n ], element, isRoot);\n };\n var neighbours = function (selector, element) {\n return parent(element).map(function (parent) {\n return children$2(parent, selector);\n });\n };\n var neighbourCells = curry(neighbours, 'th,td');\n var neighbourRows = curry(neighbours, 'tr');\n var firstCell = function (ancestor) {\n return descendant$1(ancestor, 'th,td');\n };\n var table = function (element, isRoot) {\n return closest$1(element, 'table', isRoot);\n };\n var row = function (element, isRoot) {\n return lookup(['tr'], element, isRoot);\n };\n var rows = function (ancestor) {\n return LayerSelector.firstLayer(ancestor, 'tr');\n };\n var attr = function (element, property) {\n return parseInt(get(element, property), 10);\n };\n var grid$1 = function (element, rowProp, colProp) {\n var rowsCount = attr(element, rowProp);\n var cols = attr(element, colProp);\n return grid(rowsCount, cols);\n };\n var TableLookup = {\n cell: cell,\n firstCell: firstCell,\n cells: cells,\n neighbourCells: neighbourCells,\n table: table,\n row: row,\n rows: rows,\n notCell: notCell,\n neighbourRows: neighbourRows,\n attr: attr,\n grid: grid$1\n };\n\n var fromTable = function (table) {\n var rows = TableLookup.rows(table);\n return map(rows, function (row) {\n var element = row;\n var parent$1 = parent(element);\n var parentSection = parent$1.map(function (p) {\n var parentName = name(p);\n return parentName === 'tfoot' || parentName === 'thead' || parentName === 'tbody' ? parentName : 'tbody';\n }).getOr('tbody');\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(element, cells, parentSection);\n });\n };\n var fromPastedRows = function (rows, example) {\n return map(rows, function (row) {\n var cells = map(TableLookup.cells(row), function (cell) {\n var rowspan = has(cell, 'rowspan') ? parseInt(get(cell, 'rowspan'), 10) : 1;\n var colspan = has(cell, 'colspan') ? parseInt(get(cell, 'colspan'), 10) : 1;\n return detail(cell, rowspan, colspan);\n });\n return rowdata(row, cells, example.section());\n });\n };\n var DetailsList = {\n fromTable: fromTable,\n fromPastedRows: fromPastedRows\n };\n\n var key = function (row, column) {\n return row + ',' + column;\n };\n var getAt = function (warehouse, row, column) {\n var raw = warehouse.access()[key(row, column)];\n return raw !== undefined ? Option.some(raw) : Option.none();\n };\n var findItem = function (warehouse, item, comparator) {\n var filtered = filterItems(warehouse, function (detail) {\n return comparator(item, detail.element());\n });\n return filtered.length > 0 ? Option.some(filtered[0]) : Option.none();\n };\n var filterItems = function (warehouse, predicate) {\n var all = bind(warehouse.all(), function (r) {\n return r.cells();\n });\n return filter(all, predicate);\n };\n var generate = function (list) {\n var access = {};\n var cells = [];\n var maxRows = list.length;\n var maxColumns = 0;\n each(list, function (details, r) {\n var currentRow = [];\n each(details.cells(), function (detail) {\n var start = 0;\n while (access[key(r, start)] !== undefined) {\n start++;\n }\n var current = extended(detail.element(), detail.rowspan(), detail.colspan(), r, start);\n for (var i = 0; i < detail.colspan(); i++) {\n for (var j = 0; j < detail.rowspan(); j++) {\n var cr = r + j;\n var cc = start + i;\n var newpos = key(cr, cc);\n access[newpos] = current;\n maxColumns = Math.max(maxColumns, cc + 1);\n }\n }\n currentRow.push(current);\n });\n cells.push(rowdata(details.element(), currentRow, details.section()));\n });\n var grid$1 = grid(maxRows, maxColumns);\n return {\n grid: constant(grid$1),\n access: constant(access),\n all: constant(cells)\n };\n };\n var justCells = function (warehouse) {\n var rows = map(warehouse.all(), function (w) {\n return w.cells();\n });\n return flatten(rows);\n };\n var Warehouse = {\n generate: generate,\n getAt: getAt,\n findItem: findItem,\n filterItems: filterItems,\n justCells: justCells\n };\n\n var statsStruct = Immutable('minRow', 'minCol', 'maxRow', 'maxCol');\n var findSelectedStats = function (house, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n var minRow = totalRows;\n var minCol = totalColumns;\n var maxRow = 0;\n var maxCol = 0;\n each$1(house.access(), function (detail) {\n if (isSelected(detail)) {\n var startRow = detail.row();\n var endRow = startRow + detail.rowspan() - 1;\n var startCol = detail.column();\n var endCol = startCol + detail.colspan() - 1;\n if (startRow < minRow) {\n minRow = startRow;\n } else if (endRow > maxRow) {\n maxRow = endRow;\n }\n if (startCol < minCol) {\n minCol = startCol;\n } else if (endCol > maxCol) {\n maxCol = endCol;\n }\n }\n });\n return statsStruct(minRow, minCol, maxRow, maxCol);\n };\n var makeCell = function (list, seenSelected, rowIndex) {\n var row = list[rowIndex].element();\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n var f = seenSelected ? append : prepend;\n f(row, td);\n };\n var fillInGaps = function (list, house, stats, isSelected) {\n var totalColumns = house.grid().columns();\n var totalRows = house.grid().rows();\n for (var i = 0; i < totalRows; i++) {\n var seenSelected = false;\n for (var j = 0; j < totalColumns; j++) {\n if (!(i < stats.minRow() || i > stats.maxRow() || j < stats.minCol() || j > stats.maxCol())) {\n var needCell = Warehouse.getAt(house, i, j).filter(isSelected).isNone();\n if (needCell) {\n makeCell(list, seenSelected, i);\n } else {\n seenSelected = true;\n }\n }\n }\n }\n };\n var clean = function (table, stats) {\n var emptyRows = filter(LayerSelector.firstLayer(table, 'tr'), function (row) {\n return row.dom().childElementCount === 0;\n });\n each(emptyRows, remove$2);\n if (stats.minCol() === stats.maxCol() || stats.minRow() === stats.maxRow()) {\n each(LayerSelector.firstLayer(table, 'th,td'), function (cell) {\n remove(cell, 'rowspan');\n remove(cell, 'colspan');\n });\n }\n remove(table, 'width');\n remove(table, 'height');\n remove$1(table, 'width');\n remove$1(table, 'height');\n };\n var extract = function (table, selectedSelector) {\n var isSelected = function (detail) {\n return is(detail.element(), selectedSelector);\n };\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var stats = findSelectedStats(house, isSelected);\n var selector = 'th:not(' + selectedSelector + ')' + ',td:not(' + selectedSelector + ')';\n var unselectedCells = LayerSelector.filterFirstLayer(table, 'th,td', function (cell) {\n return is(cell, selector);\n });\n each(unselectedCells, remove$2);\n fillInGaps(list, house, stats, isSelected);\n clean(table, stats);\n return table;\n };\n var CopySelected = { extract: extract };\n\n function NodeValue (is, name) {\n var get = function (element) {\n if (!is(element)) {\n throw new Error('Can only get ' + name + ' value of a ' + name + ' node');\n }\n return getOption(element).getOr('');\n };\n var getOption = function (element) {\n return is(element) ? Option.from(element.dom().nodeValue) : Option.none();\n };\n var set = function (element, value) {\n if (!is(element)) {\n throw new Error('Can only set raw ' + name + ' value of a ' + name + ' node');\n }\n element.dom().nodeValue = value;\n };\n return {\n get: get,\n getOption: getOption,\n set: set\n };\n }\n\n var api = NodeValue(isText, 'text');\n var get$2 = function (element) {\n return api.get(element);\n };\n var getOption = function (element) {\n return api.getOption(element);\n };\n var set$2 = function (element, value) {\n api.set(element, value);\n };\n\n var getEnd = function (element) {\n return name(element) === 'img' ? 1 : getOption(element).fold(function () {\n return children(element).length;\n }, function (v) {\n return v.length;\n });\n };\n var NBSP = '\\xA0';\n var isTextNodeWithCursorPosition = function (el) {\n return getOption(el).filter(function (text) {\n return text.trim().length !== 0 || text.indexOf(NBSP) > -1;\n }).isSome();\n };\n var elementsWithCursorPosition = [\n 'img',\n 'br'\n ];\n var isCursorPosition = function (elem) {\n var hasCursorPosition = isTextNodeWithCursorPosition(elem);\n return hasCursorPosition || contains(elementsWithCursorPosition, name(elem));\n };\n\n var first = function (element) {\n return descendant(element, isCursorPosition);\n };\n var last$1 = function (element) {\n return descendantRtl(element, isCursorPosition);\n };\n var descendantRtl = function (scope, predicate) {\n var descend = function (element) {\n var children$1 = children(element);\n for (var i = children$1.length - 1; i >= 0; i--) {\n var child = children$1[i];\n if (predicate(child)) {\n return Option.some(child);\n }\n var res = descend(child);\n if (res.isSome()) {\n return res;\n }\n }\n return Option.none();\n };\n return descend(scope);\n };\n\n var clone$1 = function (original, isDeep) {\n return Element.fromDom(original.dom().cloneNode(isDeep));\n };\n var shallow = function (original) {\n return clone$1(original, false);\n };\n var deep = function (original) {\n return clone$1(original, true);\n };\n var shallowAs = function (original, tag) {\n var nu = Element.fromTag(tag);\n var attributes = clone(original);\n setAll(nu, attributes);\n return nu;\n };\n var copy$1 = function (original, tag) {\n var nu = shallowAs(original, tag);\n var cloneChildren = children(deep(original));\n append$1(nu, cloneChildren);\n return nu;\n };\n\n var createCell = function () {\n var td = Element.fromTag('td');\n append(td, Element.fromTag('br'));\n return td;\n };\n var replace = function (cell, tag, attrs) {\n var replica = copy$1(cell, tag);\n each$1(attrs, function (v, k) {\n if (v === null) {\n remove(replica, k);\n } else {\n set(replica, k, v);\n }\n });\n return replica;\n };\n var pasteReplace = function (cell) {\n return cell;\n };\n var newRow = function (doc) {\n return function () {\n return Element.fromTag('tr', doc.dom());\n };\n };\n var cloneFormats = function (oldCell, newCell, formats) {\n var first$1 = first(oldCell);\n return first$1.map(function (firstText) {\n var formatSelector = formats.join(',');\n var parents = ancestors$1(firstText, formatSelector, function (element) {\n return eq(element, oldCell);\n });\n return foldr(parents, function (last, parent) {\n var clonedFormat = shallow(parent);\n remove(clonedFormat, 'contenteditable');\n append(last, clonedFormat);\n return clonedFormat;\n }, newCell);\n }).getOr(newCell);\n };\n var cellOperations = function (mutate, doc, formatsToClone) {\n var newCell = function (prev) {\n var docu = owner(prev.element());\n var td = Element.fromTag(name(prev.element()), docu.dom());\n var formats = formatsToClone.getOr([\n 'strong',\n 'em',\n 'b',\n 'i',\n 'span',\n 'font',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'p',\n 'div'\n ]);\n var lastNode = formats.length > 0 ? cloneFormats(prev.element(), td, formats) : td;\n append(lastNode, Element.fromTag('br'));\n copy(prev.element(), td);\n remove$1(td, 'height');\n if (prev.colspan() !== 1) {\n remove$1(prev.element(), 'width');\n }\n mutate(prev.element(), td);\n return td;\n };\n return {\n row: newRow(doc),\n cell: newCell,\n replace: replace,\n gap: createCell\n };\n };\n var paste = function (doc) {\n return {\n row: newRow(doc),\n cell: createCell,\n replace: pasteReplace,\n gap: createCell\n };\n };\n var TableFill = {\n cellOperations: cellOperations,\n paste: paste\n };\n\n var fromHtml$1 = function (html, scope) {\n var doc = scope || domGlobals.document;\n var div = doc.createElement('div');\n div.innerHTML = html;\n return children(Element.fromDom(div));\n };\n\n var inSelection = function (bounds, detail) {\n var leftEdge = detail.column();\n var rightEdge = detail.column() + detail.colspan() - 1;\n var topEdge = detail.row();\n var bottomEdge = detail.row() + detail.rowspan() - 1;\n return leftEdge <= bounds.finishCol() && rightEdge >= bounds.startCol() && (topEdge <= bounds.finishRow() && bottomEdge >= bounds.startRow());\n };\n var isWithin = function (bounds, detail) {\n return detail.column() >= bounds.startCol() && detail.column() + detail.colspan() - 1 <= bounds.finishCol() && detail.row() >= bounds.startRow() && detail.row() + detail.rowspan() - 1 <= bounds.finishRow();\n };\n var isRectangular = function (warehouse, bounds) {\n var isRect = true;\n var detailIsWithin = curry(isWithin, bounds);\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n isRect = isRect && Warehouse.getAt(warehouse, i, j).exists(detailIsWithin);\n }\n }\n return isRect ? Option.some(bounds) : Option.none();\n };\n var CellBounds = {\n inSelection: inSelection,\n isWithin: isWithin,\n isRectangular: isRectangular\n };\n\n var getBounds = function (detailA, detailB) {\n return bounds(Math.min(detailA.row(), detailB.row()), Math.min(detailA.column(), detailB.column()), Math.max(detailA.row() + detailA.rowspan() - 1, detailB.row() + detailB.rowspan() - 1), Math.max(detailA.column() + detailA.colspan() - 1, detailB.column() + detailB.colspan() - 1));\n };\n var getAnyBox = function (warehouse, startCell, finishCell) {\n var startCoords = Warehouse.findItem(warehouse, startCell, eq);\n var finishCoords = Warehouse.findItem(warehouse, finishCell, eq);\n return startCoords.bind(function (sc) {\n return finishCoords.map(function (fc) {\n return getBounds(sc, fc);\n });\n });\n };\n var getBox = function (warehouse, startCell, finishCell) {\n return getAnyBox(warehouse, startCell, finishCell).bind(function (bounds) {\n return CellBounds.isRectangular(warehouse, bounds);\n });\n };\n var CellGroup = {\n getAnyBox: getAnyBox,\n getBox: getBox\n };\n\n var moveBy = function (warehouse, cell, row, column) {\n return Warehouse.findItem(warehouse, cell, eq).bind(function (detail) {\n var startRow = row > 0 ? detail.row() + detail.rowspan() - 1 : detail.row();\n var startCol = column > 0 ? detail.column() + detail.colspan() - 1 : detail.column();\n var dest = Warehouse.getAt(warehouse, startRow + row, startCol + column);\n return dest.map(function (d) {\n return d.element();\n });\n });\n };\n var intercepts = function (warehouse, start, finish) {\n return CellGroup.getAnyBox(warehouse, start, finish).map(function (bounds) {\n var inside = Warehouse.filterItems(warehouse, curry(CellBounds.inSelection, bounds));\n return map(inside, function (detail) {\n return detail.element();\n });\n });\n };\n var parentCell = function (warehouse, innerCell) {\n var isContainedBy = function (c1, c2) {\n return contains$2(c2, c1);\n };\n return Warehouse.findItem(warehouse, innerCell, isContainedBy).map(function (detail) {\n return detail.element();\n });\n };\n var CellFinder = {\n moveBy: moveBy,\n intercepts: intercepts,\n parentCell: parentCell\n };\n\n var moveBy$1 = function (cell, deltaRow, deltaColumn) {\n return TableLookup.table(cell).bind(function (table) {\n var warehouse = getWarehouse(table);\n return CellFinder.moveBy(warehouse, cell, deltaRow, deltaColumn);\n });\n };\n var intercepts$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellFinder.intercepts(warehouse, first, last);\n };\n var nestedIntercepts = function (table, first, firstTable, last, lastTable) {\n var warehouse = getWarehouse(table);\n var optStartCell = eq(table, firstTable) ? Option.some(first) : CellFinder.parentCell(warehouse, first);\n var optLastCell = eq(table, lastTable) ? Option.some(last) : CellFinder.parentCell(warehouse, last);\n return optStartCell.bind(function (startCell) {\n return optLastCell.bind(function (lastCell) {\n return CellFinder.intercepts(warehouse, startCell, lastCell);\n });\n });\n };\n var getBox$1 = function (table, first, last) {\n var warehouse = getWarehouse(table);\n return CellGroup.getBox(warehouse, first, last);\n };\n var getWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return Warehouse.generate(list);\n };\n var TablePositions = {\n moveBy: moveBy$1,\n intercepts: intercepts$1,\n nestedIntercepts: nestedIntercepts,\n getBox: getBox$1\n };\n\n var TagBoundaries = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'li',\n 'table',\n 'thead',\n 'tbody',\n 'tfoot',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n\n function DomUniverse () {\n var clone$1 = function (element) {\n return Element.fromDom(element.dom().cloneNode(false));\n };\n var document = function (element) {\n return element.dom().ownerDocument;\n };\n var isBoundary = function (element) {\n if (!isElement(element)) {\n return false;\n }\n if (name(element) === 'body') {\n return true;\n }\n return contains(TagBoundaries, name(element));\n };\n var isEmptyTag = function (element) {\n if (!isElement(element)) {\n return false;\n }\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], name(element));\n };\n var comparePosition = function (element, other) {\n return element.dom().compareDocumentPosition(other.dom());\n };\n var copyAttributesTo = function (source, destination) {\n var as = clone(source);\n setAll(destination, as);\n };\n return {\n up: constant({\n selector: ancestor$1,\n closest: closest$1,\n predicate: ancestor,\n all: parents\n }),\n down: constant({\n selector: descendants$1,\n predicate: descendants\n }),\n styles: constant({\n get: get$1,\n getRaw: getRaw,\n set: set$1,\n remove: remove$1\n }),\n attrs: constant({\n get: get,\n set: set,\n remove: remove,\n copyTo: copyAttributesTo\n }),\n insert: constant({\n before: before,\n after: after,\n afterAll: after$1,\n append: append,\n appendAll: append$1,\n prepend: prepend,\n wrap: wrap\n }),\n remove: constant({\n unwrap: unwrap,\n remove: remove$2\n }),\n create: constant({\n nu: Element.fromTag,\n clone: clone$1,\n text: Element.fromText\n }),\n query: constant({\n comparePosition: comparePosition,\n prevSibling: prevSibling,\n nextSibling: nextSibling\n }),\n property: constant({\n children: children,\n name: name,\n parent: parent,\n document: document,\n isText: isText,\n isComment: isComment,\n isElement: isElement,\n getText: get$2,\n setText: set$2,\n isBoundary: isBoundary,\n isEmptyTag: isEmptyTag\n }),\n eq: eq,\n is: is$1\n };\n }\n\n var leftRight = Immutable('left', 'right');\n var brokenPath = Immutable('first', 'second', 'splits');\n var bisect = function (universe, parent, child) {\n var children = universe.property().children(parent);\n var index = findIndex(children, curry(universe.eq, child));\n return index.map(function (ind) {\n return {\n before: constant(children.slice(0, ind)),\n after: constant(children.slice(ind + 1))\n };\n });\n };\n var breakToRight = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var second = universe.create().clone(parent);\n universe.insert().appendAll(second, parts.after());\n universe.insert().after(parent, second);\n return leftRight(parent, second);\n });\n };\n var breakToLeft = function (universe, parent, child) {\n return bisect(universe, parent, child).map(function (parts) {\n var prior = universe.create().clone(parent);\n universe.insert().appendAll(prior, parts.before().concat([child]));\n universe.insert().appendAll(parent, parts.after());\n universe.insert().before(parent, prior);\n return leftRight(prior, parent);\n });\n };\n var breakPath = function (universe, item, isTop, breaker) {\n var next = function (child, group, splits) {\n var fallback = brokenPath(child, Option.none(), splits);\n if (isTop(child)) {\n return brokenPath(child, group, splits);\n } else {\n return universe.property().parent(child).bind(function (parent) {\n return breaker(universe, parent, child).map(function (breakage) {\n var extra = [{\n first: breakage.left,\n second: breakage.right\n }];\n var nextChild = isTop(parent) ? parent : breakage.left();\n return next(nextChild, Option.some(breakage.right()), splits.concat(extra));\n });\n }).getOr(fallback);\n }\n };\n return next(item, Option.none(), []);\n };\n\n var all$1 = function (universe, look, elements, f) {\n var head = elements[0];\n var tail = elements.slice(1);\n return f(universe, look, head, tail);\n };\n var oneAll = function (universe, look, elements) {\n return elements.length > 0 ? all$1(universe, look, elements, unsafeOne) : Option.none();\n };\n var unsafeOne = function (universe, look, head, tail) {\n var start = look(universe, head);\n return foldr(tail, function (b, a) {\n var current = look(universe, a);\n return commonElement(universe, b, current);\n }, start);\n };\n var commonElement = function (universe, start, end) {\n return start.bind(function (s) {\n return end.filter(curry(universe.eq, s));\n });\n };\n\n var eq$1 = function (universe, item) {\n return curry(universe.eq, item);\n };\n var unsafeSubset = function (universe, common, ps1, ps2) {\n var children = universe.property().children(common);\n if (universe.eq(common, ps1[0])) {\n return Option.some([ps1[0]]);\n }\n if (universe.eq(common, ps2[0])) {\n return Option.some([ps2[0]]);\n }\n var finder = function (ps) {\n var topDown = reverse(ps);\n var index = findIndex(topDown, eq$1(universe, common)).getOr(-1);\n var item = index < topDown.length - 1 ? topDown[index + 1] : topDown[index];\n return findIndex(children, eq$1(universe, item));\n };\n var startIndex = finder(ps1);\n var endIndex = finder(ps2);\n return startIndex.bind(function (sIndex) {\n return endIndex.map(function (eIndex) {\n var first = Math.min(sIndex, eIndex);\n var last = Math.max(sIndex, eIndex);\n return children.slice(first, last + 1);\n });\n });\n };\n var ancestors$2 = function (universe, start, end, isRoot) {\n if (isRoot === void 0) {\n isRoot = never;\n }\n var ps1 = [start].concat(universe.up().all(start));\n var ps2 = [end].concat(universe.up().all(end));\n var prune = function (path) {\n var index = findIndex(path, isRoot);\n return index.fold(function () {\n return path;\n }, function (ind) {\n return path.slice(0, ind + 1);\n });\n };\n var pruned1 = prune(ps1);\n var pruned2 = prune(ps2);\n var shared = find(pruned1, function (x) {\n return exists(pruned2, eq$1(universe, x));\n });\n return {\n firstpath: constant(pruned1),\n secondpath: constant(pruned2),\n shared: constant(shared)\n };\n };\n var subset = function (universe, start, end) {\n var ancs = ancestors$2(universe, start, end);\n return ancs.shared().bind(function (shared) {\n return unsafeSubset(universe, shared, ancs.firstpath(), ancs.secondpath());\n });\n };\n var SubsetFn = {\n subset: subset,\n ancestors: ancestors$2\n };\n\n var sharedOne = oneAll;\n var subset$1 = SubsetFn.subset;\n var ancestors$3 = SubsetFn.ancestors;\n var breakToLeft$1 = breakToLeft;\n var breakToRight$1 = breakToRight;\n var breakPath$1 = breakPath;\n var Parent = {\n sharedOne: sharedOne,\n subset: subset$1,\n ancestors: ancestors$3,\n breakToLeft: breakToLeft$1,\n breakToRight: breakToRight$1,\n breakPath: breakPath$1\n };\n\n var universe = DomUniverse();\n var sharedOne$1 = function (look, elements) {\n return Parent.sharedOne(universe, function (_universe, element) {\n return look(element);\n }, elements);\n };\n var subset$2 = function (start, finish) {\n return Parent.subset(universe, start, finish);\n };\n var ancestors$4 = function (start, finish, isRoot) {\n return Parent.ancestors(universe, start, finish, isRoot);\n };\n var breakToLeft$2 = function (parent, child) {\n return Parent.breakToLeft(universe, parent, child);\n };\n var breakToRight$2 = function (parent, child) {\n return Parent.breakToRight(universe, parent, child);\n };\n var breakPath$2 = function (child, isTop, breaker) {\n return Parent.breakPath(universe, child, isTop, function (u, p, c) {\n return breaker(p, c);\n });\n };\n var DomParent = {\n sharedOne: sharedOne$1,\n subset: subset$2,\n ancestors: ancestors$4,\n breakToLeft: breakToLeft$2,\n breakToRight: breakToRight$2,\n breakPath: breakPath$2\n };\n\n var create = MixedBag([\n 'boxes',\n 'start',\n 'finish'\n ], []);\n var Identified = { create: create };\n\n var lookupTable = function (container) {\n return ancestor$1(container, 'table');\n };\n var identify = function (start, finish, isRoot) {\n var getIsRoot = function (rootTable) {\n return function (element) {\n return isRoot !== undefined && isRoot(element) || eq(element, rootTable);\n };\n };\n if (eq(start, finish)) {\n return Option.some(Identified.create({\n boxes: Option.some([start]),\n start: start,\n finish: finish\n }));\n } else {\n return lookupTable(start).bind(function (startTable) {\n return lookupTable(finish).bind(function (finishTable) {\n if (eq(startTable, finishTable)) {\n return Option.some(Identified.create({\n boxes: TablePositions.intercepts(startTable, start, finish),\n start: start,\n finish: finish\n }));\n } else if (contains$2(startTable, finishTable)) {\n var ancestorCells = ancestors$1(finish, 'td,th', getIsRoot(startTable));\n var finishCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : finish;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(startTable, start, startTable, finish, finishTable),\n start: start,\n finish: finishCell\n }));\n } else if (contains$2(finishTable, startTable)) {\n var ancestorCells = ancestors$1(start, 'td,th', getIsRoot(finishTable));\n var startCell = ancestorCells.length > 0 ? ancestorCells[ancestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(finishTable, start, startTable, finish, finishTable),\n start: start,\n finish: startCell\n }));\n } else {\n return DomParent.ancestors(start, finish).shared().bind(function (lca) {\n return closest$1(lca, 'table', isRoot).bind(function (lcaTable) {\n var finishAncestorCells = ancestors$1(finish, 'td,th', getIsRoot(lcaTable));\n var finishCell = finishAncestorCells.length > 0 ? finishAncestorCells[finishAncestorCells.length - 1] : finish;\n var startAncestorCells = ancestors$1(start, 'td,th', getIsRoot(lcaTable));\n var startCell = startAncestorCells.length > 0 ? startAncestorCells[startAncestorCells.length - 1] : start;\n return Option.some(Identified.create({\n boxes: TablePositions.nestedIntercepts(lcaTable, start, startTable, finish, finishTable),\n start: startCell,\n finish: finishCell\n }));\n });\n });\n }\n });\n });\n }\n };\n var retrieve = function (container, selector) {\n var sels = descendants$1(container, selector);\n return sels.length > 0 ? Option.some(sels) : Option.none();\n };\n var getLast = function (boxes, lastSelectedSelector) {\n return find(boxes, function (box) {\n return is(box, lastSelectedSelector);\n });\n };\n var getEdges = function (container, firstSelectedSelector, lastSelectedSelector) {\n return descendant$1(container, firstSelectedSelector).bind(function (first) {\n return descendant$1(container, lastSelectedSelector).bind(function (last) {\n return DomParent.sharedOne(lookupTable, [\n first,\n last\n ]).map(function (tbl) {\n return {\n first: constant(first),\n last: constant(last),\n table: constant(tbl)\n };\n });\n });\n });\n };\n var expandTo = function (finish, firstSelectedSelector) {\n return ancestor$1(finish, 'table').bind(function (table) {\n return descendant$1(table, firstSelectedSelector).bind(function (start) {\n return identify(start, finish).bind(function (identified) {\n return identified.boxes().map(function (boxes) {\n return {\n boxes: constant(boxes),\n start: constant(identified.start()),\n finish: constant(identified.finish())\n };\n });\n });\n });\n });\n };\n var shiftSelection = function (boxes, deltaRow, deltaColumn, firstSelectedSelector, lastSelectedSelector) {\n return getLast(boxes, lastSelectedSelector).bind(function (last) {\n return TablePositions.moveBy(last, deltaRow, deltaColumn).bind(function (finish) {\n return expandTo(finish, firstSelectedSelector);\n });\n });\n };\n var CellSelection = {\n identify: identify,\n retrieve: retrieve,\n shiftSelection: shiftSelection,\n getEdges: getEdges\n };\n\n var retrieve$1 = function (container, selector) {\n return CellSelection.retrieve(container, selector);\n };\n var retrieveBox = function (container, firstSelectedSelector, lastSelectedSelector) {\n return CellSelection.getEdges(container, firstSelectedSelector, lastSelectedSelector).bind(function (edges) {\n var isRoot = function (ancestor) {\n return eq(container, ancestor);\n };\n var firstAncestor = ancestor$1(edges.first(), 'thead,tfoot,tbody,table', isRoot);\n var lastAncestor = ancestor$1(edges.last(), 'thead,tfoot,tbody,table', isRoot);\n return firstAncestor.bind(function (fA) {\n return lastAncestor.bind(function (lA) {\n return eq(fA, lA) ? TablePositions.getBox(edges.table(), edges.first(), edges.last()) : Option.none();\n });\n });\n });\n };\n var TableSelection = {\n retrieve: retrieve$1,\n retrieveBox: retrieveBox\n };\n\n var selected = 'data-mce-selected';\n var selectedSelector = 'td[' + selected + '],th[' + selected + ']';\n var attributeSelector = '[' + selected + ']';\n var firstSelected = 'data-mce-first-selected';\n var firstSelectedSelector = 'td[' + firstSelected + '],th[' + firstSelected + ']';\n var lastSelected = 'data-mce-last-selected';\n var lastSelectedSelector = 'td[' + lastSelected + '],th[' + lastSelected + ']';\n var Ephemera = {\n selected: constant(selected),\n selectedSelector: constant(selectedSelector),\n attributeSelector: constant(attributeSelector),\n firstSelected: constant(firstSelected),\n firstSelectedSelector: constant(firstSelectedSelector),\n lastSelected: constant(lastSelected),\n lastSelectedSelector: constant(lastSelectedSelector)\n };\n\n var generate$1 = function (cases) {\n if (!isArray(cases)) {\n throw new Error('cases must be an array');\n }\n if (cases.length === 0) {\n throw new Error('there must be at least one case');\n }\n var constructors = [];\n var adt = {};\n each(cases, function (acase, count) {\n var keys$1 = keys(acase);\n if (keys$1.length !== 1) {\n throw new Error('one and only one name per case');\n }\n var key = keys$1[0];\n var value = acase[key];\n if (adt[key] !== undefined) {\n throw new Error('duplicate key detected:' + key);\n } else if (key === 'cata') {\n throw new Error('cannot have a case named cata (sorry)');\n } else if (!isArray(value)) {\n throw new Error('case arguments must be an array');\n }\n constructors.push(key);\n adt[key] = function () {\n var argLength = arguments.length;\n if (argLength !== value.length) {\n throw new Error('Wrong number of arguments to case ' + key + '. Expected ' + value.length + ' (' + value + '), got ' + argLength);\n }\n var args = new Array(argLength);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n var match = function (branches) {\n var branchKeys = keys(branches);\n if (constructors.length !== branchKeys.length) {\n throw new Error('Wrong number of arguments to match. Expected: ' + constructors.join(',') + '\\nActual: ' + branchKeys.join(','));\n }\n var allReqd = forall(constructors, function (reqKey) {\n return contains(branchKeys, reqKey);\n });\n if (!allReqd) {\n throw new Error('Not all branches were specified when using match. Specified: ' + branchKeys.join(', ') + '\\nRequired: ' + constructors.join(', '));\n }\n return branches[key].apply(null, args);\n };\n return {\n fold: function () {\n if (arguments.length !== cases.length) {\n throw new Error('Wrong number of arguments to fold. Expected ' + cases.length + ', got ' + arguments.length);\n }\n var target = arguments[count];\n return target.apply(null, args);\n },\n match: match,\n log: function (label) {\n domGlobals.console.log(label, {\n constructors: constructors,\n constructor: key,\n params: args\n });\n }\n };\n };\n });\n return adt;\n };\n var Adt = { generate: generate$1 };\n\n var type$1 = Adt.generate([\n { none: [] },\n { multiple: ['elements'] },\n { single: ['selection'] }\n ]);\n var cata = function (subject, onNone, onMultiple, onSingle) {\n return subject.fold(onNone, onMultiple, onSingle);\n };\n var SelectionTypes = {\n cata: cata,\n none: type$1.none,\n multiple: type$1.multiple,\n single: type$1.single\n };\n\n var selection = function (cell, selections) {\n return SelectionTypes.cata(selections.get(), constant([]), identity, constant([cell]));\n };\n var unmergable = function (cell, selections) {\n var hasSpan = function (elem) {\n return has(elem, 'rowspan') && parseInt(get(elem, 'rowspan'), 10) > 1 || has(elem, 'colspan') && parseInt(get(elem, 'colspan'), 10) > 1;\n };\n var candidates = selection(cell, selections);\n return candidates.length > 0 && forall(candidates, hasSpan) ? Option.some(candidates) : Option.none();\n };\n var mergable = function (table, selections) {\n return SelectionTypes.cata(selections.get(), Option.none, function (cells, _env) {\n if (cells.length === 0) {\n return Option.none();\n }\n return TableSelection.retrieveBox(table, Ephemera.firstSelectedSelector(), Ephemera.lastSelectedSelector()).bind(function (bounds) {\n return cells.length > 1 ? Option.some({\n bounds: constant(bounds),\n cells: constant(cells)\n }) : Option.none();\n });\n }, Option.none);\n };\n var CellOperations = {\n mergable: mergable,\n unmergable: unmergable,\n selection: selection\n };\n\n var noMenu = function (cell) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant([cell])\n };\n };\n var forMenu = function (selections, table, cell) {\n return {\n element: constant(cell),\n mergable: constant(CellOperations.mergable(table, selections)),\n unmergable: constant(CellOperations.unmergable(cell, selections)),\n selection: constant(CellOperations.selection(cell, selections))\n };\n };\n var notCell$1 = function (element) {\n return noMenu(element);\n };\n var paste$1 = Immutable('element', 'clipboard', 'generators');\n var pasteRows = function (selections, table, cell, clipboard, generators) {\n return {\n element: constant(cell),\n mergable: Option.none,\n unmergable: Option.none,\n selection: constant(CellOperations.selection(cell, selections)),\n clipboard: constant(clipboard),\n generators: constant(generators)\n };\n };\n var TableTargets = {\n noMenu: noMenu,\n forMenu: forMenu,\n notCell: notCell$1,\n paste: paste$1,\n pasteRows: pasteRows\n };\n\n var extractSelected = function (cells) {\n return TableLookup.table(cells[0]).map(deep).map(function (replica) {\n return [CopySelected.extract(replica, Ephemera.attributeSelector())];\n });\n };\n var serializeElements = function (editor, elements) {\n return map(elements, function (elm) {\n return editor.selection.serializer.serialize(elm.dom(), {});\n }).join('');\n };\n var getTextContent = function (elements) {\n return map(elements, function (element) {\n return element.dom().innerText;\n }).join('');\n };\n var registerEvents = function (editor, selections, actions, cellSelection) {\n editor.on('BeforeGetContent', function (e) {\n var multiCellContext = function (cells) {\n e.preventDefault();\n extractSelected(cells).each(function (elements) {\n e.content = e.format === 'text' ? getTextContent(elements) : serializeElements(editor, elements);\n });\n };\n if (e.selection === true) {\n SelectionTypes.cata(selections.get(), noop, multiCellContext, noop);\n }\n });\n editor.on('BeforeSetContent', function (e) {\n if (e.selection === true && e.paste === true) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n cellOpt.each(function (domCell) {\n var cell = Element.fromDom(domCell);\n TableLookup.table(cell).each(function (table) {\n var elements = filter(fromHtml$1(e.content), function (content) {\n return name(content) !== 'meta';\n });\n if (elements.length === 1 && name(elements[0]) === 'table') {\n e.preventDefault();\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.paste(cell, elements[0], generators);\n actions.pasteCells(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n }\n });\n });\n }\n });\n };\n var Clipboard = { registerEvents: registerEvents };\n\n function Dimension (name, getOffset) {\n var set = function (element, h) {\n if (!isNumber(h) && !h.match(/^[0-9]+$/)) {\n throw new Error(name + '.set accepts only positive integer values. Value was ' + h);\n }\n var dom = element.dom();\n if (isSupported(dom)) {\n dom.style[name] = h + 'px';\n }\n };\n var get = function (element) {\n var r = getOffset(element);\n if (r <= 0 || r === null) {\n var css = get$1(element, name);\n return parseFloat(css) || 0;\n }\n return r;\n };\n var getOuter = get;\n var aggregate = function (element, properties) {\n return foldl(properties, function (acc, property) {\n var val = get$1(element, property);\n var value = val === undefined ? 0 : parseInt(val, 10);\n return isNaN(value) ? acc : acc + value;\n }, 0);\n };\n var max = function (element, value, properties) {\n var cumulativeInclusions = aggregate(element, properties);\n var absoluteMax = value > cumulativeInclusions ? value - cumulativeInclusions : 0;\n return absoluteMax;\n };\n return {\n set: set,\n get: get,\n getOuter: getOuter,\n aggregate: aggregate,\n max: max\n };\n }\n\n var api$1 = Dimension('height', function (element) {\n var dom = element.dom();\n return inBody(element) ? dom.getBoundingClientRect().height : dom.offsetHeight;\n });\n var get$3 = function (element) {\n return api$1.get(element);\n };\n var getOuter = function (element) {\n return api$1.getOuter(element);\n };\n\n var api$2 = Dimension('width', function (element) {\n return element.dom().offsetWidth;\n });\n var get$4 = function (element) {\n return api$2.get(element);\n };\n var getOuter$1 = function (element) {\n return api$2.getOuter(element);\n };\n\n var platform = PlatformDetection$1.detect();\n var needManualCalc = function () {\n return platform.browser.isIE() || platform.browser.isEdge();\n };\n var toNumber = function (px, fallback) {\n var num = parseFloat(px);\n return isNaN(num) ? fallback : num;\n };\n var getProp = function (elm, name, fallback) {\n return toNumber(get$1(elm, name), fallback);\n };\n var getCalculatedHeight = function (cell) {\n var paddingTop = getProp(cell, 'padding-top', 0);\n var paddingBottom = getProp(cell, 'padding-bottom', 0);\n var borderTop = getProp(cell, 'border-top-width', 0);\n var borderBottom = getProp(cell, 'border-bottom-width', 0);\n var height = cell.dom().getBoundingClientRect().height;\n var boxSizing = get$1(cell, 'box-sizing');\n var borders = borderTop + borderBottom;\n return boxSizing === 'border-box' ? height : height - paddingTop - paddingBottom - borders;\n };\n var getWidth = function (cell) {\n return getProp(cell, 'width', get$4(cell));\n };\n var getHeight = function (cell) {\n return needManualCalc() ? getCalculatedHeight(cell) : getProp(cell, 'height', get$3(cell));\n };\n var RuntimeSize = {\n getWidth: getWidth,\n getHeight: getHeight\n };\n\n var genericSizeRegex = /(\\d+(\\.\\d+)?)(\\w|%)*/;\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var pixelBasedSizeRegex = /(\\d+(\\.\\d+)?)px|em/;\n var setPixelWidth = function (cell, amount) {\n set$1(cell, 'width', amount + 'px');\n };\n var setPercentageWidth = function (cell, amount) {\n set$1(cell, 'width', amount + '%');\n };\n var setHeight = function (cell, amount) {\n set$1(cell, 'height', amount + 'px');\n };\n var getHeightValue = function (cell) {\n return getRaw(cell, 'height').getOrThunk(function () {\n return RuntimeSize.getHeight(cell) + 'px';\n });\n };\n var convert = function (cell, number, getter, setter) {\n var newSize = TableLookup.table(cell).map(function (table) {\n var total = getter(table);\n return Math.floor(number / 100 * total);\n }).getOr(number);\n setter(cell, newSize);\n return newSize;\n };\n var normalizePixelSize = function (value, cell, getter, setter) {\n var number = parseInt(value, 10);\n return endsWith(value, '%') && name(cell) !== 'table' ? convert(cell, number, getter, setter) : number;\n };\n var getTotalHeight = function (cell) {\n var value = getHeightValue(cell);\n if (!value) {\n return get$3(cell);\n }\n return normalizePixelSize(value, cell, get$3, setHeight);\n };\n var get$5 = function (cell, type, f) {\n var v = f(cell);\n var span = getSpan(cell, type);\n return v / span;\n };\n var getSpan = function (cell, type) {\n return has(cell, type) ? parseInt(get(cell, type), 10) : 1;\n };\n var getRawWidth = function (element) {\n var cssWidth = getRaw(element, 'width');\n return cssWidth.fold(function () {\n return Option.from(get(element, 'width'));\n }, function (width) {\n return Option.some(width);\n });\n };\n var normalizePercentageWidth = function (cellWidth, tableSize) {\n return cellWidth / tableSize.pixelWidth() * 100;\n };\n var choosePercentageSize = function (element, width, tableSize) {\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n return parseFloat(percentMatch[1]);\n } else {\n var intWidth = get$4(element);\n return normalizePercentageWidth(intWidth, tableSize);\n }\n };\n var getPercentageWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n var intWidth = get$4(cell);\n return normalizePercentageWidth(intWidth, tableSize);\n }, function (w) {\n return choosePercentageSize(cell, w, tableSize);\n });\n };\n var normalizePixelWidth = function (cellWidth, tableSize) {\n return cellWidth / 100 * tableSize.pixelWidth();\n };\n var choosePixelSize = function (element, width, tableSize) {\n var pixelMatch = pixelBasedSizeRegex.exec(width);\n if (pixelMatch !== null) {\n return parseInt(pixelMatch[1], 10);\n }\n var percentMatch = percentageBasedSizeRegex.exec(width);\n if (percentMatch !== null) {\n var floatWidth = parseFloat(percentMatch[1]);\n return normalizePixelWidth(floatWidth, tableSize);\n }\n return get$4(element);\n };\n var getPixelWidth = function (cell, tableSize) {\n var width = getRawWidth(cell);\n return width.fold(function () {\n return get$4(cell);\n }, function (w) {\n return choosePixelSize(cell, w, tableSize);\n });\n };\n var getHeight$1 = function (cell) {\n return get$5(cell, 'rowspan', getTotalHeight);\n };\n var getGenericWidth = function (cell) {\n var width = getRawWidth(cell);\n return width.bind(function (w) {\n var match = genericSizeRegex.exec(w);\n if (match !== null) {\n return Option.some({\n width: constant(parseFloat(match[1])),\n unit: constant(match[3])\n });\n } else {\n return Option.none();\n }\n });\n };\n var setGenericWidth = function (cell, amount, unit) {\n set$1(cell, 'width', amount + unit);\n };\n var Sizes = {\n percentageBasedSizeRegex: constant(percentageBasedSizeRegex),\n pixelBasedSizeRegex: constant(pixelBasedSizeRegex),\n setPixelWidth: setPixelWidth,\n setPercentageWidth: setPercentageWidth,\n setHeight: setHeight,\n getPixelWidth: getPixelWidth,\n getPercentageWidth: getPercentageWidth,\n getGenericWidth: getGenericWidth,\n setGenericWidth: setGenericWidth,\n getHeight: getHeight$1,\n getRawWidth: getRawWidth\n };\n\n var halve = function (main, other) {\n var width = Sizes.getGenericWidth(main);\n width.each(function (w) {\n var newWidth = w.width() / 2;\n Sizes.setGenericWidth(main, newWidth, w.unit());\n Sizes.setGenericWidth(other, newWidth, w.unit());\n });\n };\n var CellMutations = { halve: halve };\n\n var r = function (left, top) {\n var translate = function (x, y) {\n return r(left + x, top + y);\n };\n return {\n left: constant(left),\n top: constant(top),\n translate: translate\n };\n };\n var Position = r;\n\n var boxPosition = function (dom) {\n var box = dom.getBoundingClientRect();\n return Position(box.left, box.top);\n };\n var firstDefinedOrZero = function (a, b) {\n return a !== undefined ? a : b !== undefined ? b : 0;\n };\n var absolute = function (element) {\n var doc = element.dom().ownerDocument;\n var body = doc.body;\n var win = doc.defaultView;\n var html = doc.documentElement;\n var scrollTop = firstDefinedOrZero(win.pageYOffset, html.scrollTop);\n var scrollLeft = firstDefinedOrZero(win.pageXOffset, html.scrollLeft);\n var clientTop = firstDefinedOrZero(html.clientTop, body.clientTop);\n var clientLeft = firstDefinedOrZero(html.clientLeft, body.clientLeft);\n return viewport(element).translate(scrollLeft - clientLeft, scrollTop - clientTop);\n };\n var viewport = function (element) {\n var dom = element.dom();\n var doc = dom.ownerDocument;\n var body = doc.body;\n if (body === dom) {\n return Position(body.offsetLeft, body.offsetTop);\n }\n if (!inBody(element)) {\n return Position(0, 0);\n }\n return boxPosition(dom);\n };\n\n var rowInfo = Immutable('row', 'y');\n var colInfo = Immutable('col', 'x');\n var rtlEdge = function (cell) {\n var pos = absolute(cell);\n return pos.left() + getOuter$1(cell);\n };\n var ltrEdge = function (cell) {\n return absolute(cell).left();\n };\n var getLeftEdge = function (index, cell) {\n return colInfo(index, ltrEdge(cell));\n };\n var getRightEdge = function (index, cell) {\n return colInfo(index, rtlEdge(cell));\n };\n var getTop = function (cell) {\n return absolute(cell).top();\n };\n var getTopEdge = function (index, cell) {\n return rowInfo(index, getTop(cell));\n };\n var getBottomEdge = function (index, cell) {\n return rowInfo(index, getTop(cell) + getOuter(cell));\n };\n var findPositions = function (getInnerEdge, getOuterEdge, array) {\n if (array.length === 0) {\n return [];\n }\n var lines = map(array.slice(1), function (cellOption, index) {\n return cellOption.map(function (cell) {\n return getInnerEdge(index, cell);\n });\n });\n var lastLine = array[array.length - 1].map(function (cell) {\n return getOuterEdge(array.length - 1, cell);\n });\n return lines.concat([lastLine]);\n };\n var negate = function (step) {\n return -step;\n };\n var height = {\n delta: identity,\n positions: function (optElements) {\n return findPositions(getTopEdge, getBottomEdge, optElements);\n },\n edge: getTop\n };\n var ltr = {\n delta: identity,\n edge: ltrEdge,\n positions: function (optElements) {\n return findPositions(getLeftEdge, getRightEdge, optElements);\n }\n };\n var rtl = {\n delta: negate,\n edge: rtlEdge,\n positions: function (optElements) {\n return findPositions(getRightEdge, getLeftEdge, optElements);\n }\n };\n var BarPositions = {\n height: height,\n rtl: rtl,\n ltr: ltr\n };\n\n var ResizeDirection = {\n ltr: BarPositions.ltr,\n rtl: BarPositions.rtl\n };\n\n function TableDirection (directionAt) {\n var auto = function (table) {\n return directionAt(table).isRtl() ? ResizeDirection.rtl : ResizeDirection.ltr;\n };\n var delta = function (amount, table) {\n return auto(table).delta(amount, table);\n };\n var positions = function (cols, table) {\n return auto(table).positions(cols, table);\n };\n var edge = function (cell) {\n return auto(cell).edge(cell);\n };\n return {\n delta: delta,\n edge: edge,\n positions: positions\n };\n }\n\n var getGridSize = function (table) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n return warehouse.grid();\n };\n var TableGridSize = { getGridSize: getGridSize };\n\n var __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s)\n if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n };\n\n var cat = function (arr) {\n var r = [];\n var push = function (x) {\n r.push(x);\n };\n for (var i = 0; i < arr.length; i++) {\n arr[i].each(push);\n }\n return r;\n };\n var findMap = function (arr, f) {\n for (var i = 0; i < arr.length; i++) {\n var r = f(arr[i], i);\n if (r.isSome()) {\n return r;\n }\n }\n return Option.none();\n };\n\n var setIfNot = function (element, property, value, ignore) {\n if (value === ignore) {\n remove(element, property);\n } else {\n set(element, property, value);\n }\n };\n var render = function (table, grid) {\n var newRows = [];\n var newCells = [];\n var renderSection = function (gridSection, sectionName) {\n var section = child$2(table, sectionName).getOrThunk(function () {\n var tb = Element.fromTag(sectionName, owner(table).dom());\n append(table, tb);\n return tb;\n });\n empty(section);\n var rows = map(gridSection, function (row) {\n if (row.isNew()) {\n newRows.push(row.element());\n }\n var tr = row.element();\n empty(tr);\n each(row.cells(), function (cell) {\n if (cell.isNew()) {\n newCells.push(cell.element());\n }\n setIfNot(cell.element(), 'colspan', cell.colspan(), 1);\n setIfNot(cell.element(), 'rowspan', cell.rowspan(), 1);\n append(tr, cell.element());\n });\n return tr;\n });\n append$1(section, rows);\n };\n var removeSection = function (sectionName) {\n child$2(table, sectionName).each(remove$2);\n };\n var renderOrRemoveSection = function (gridSection, sectionName) {\n if (gridSection.length > 0) {\n renderSection(gridSection, sectionName);\n } else {\n removeSection(sectionName);\n }\n };\n var headSection = [];\n var bodySection = [];\n var footSection = [];\n each(grid, function (row) {\n switch (row.section()) {\n case 'thead':\n headSection.push(row);\n break;\n case 'tbody':\n bodySection.push(row);\n break;\n case 'tfoot':\n footSection.push(row);\n break;\n }\n });\n renderOrRemoveSection(headSection, 'thead');\n renderOrRemoveSection(bodySection, 'tbody');\n renderOrRemoveSection(footSection, 'tfoot');\n return {\n newRows: constant(newRows),\n newCells: constant(newCells)\n };\n };\n var copy$2 = function (grid) {\n var rows = map(grid, function (row) {\n var tr = shallow(row.element());\n each(row.cells(), function (cell) {\n var clonedCell = deep(cell.element());\n setIfNot(clonedCell, 'colspan', cell.colspan(), 1);\n setIfNot(clonedCell, 'rowspan', cell.rowspan(), 1);\n append(tr, clonedCell);\n });\n return tr;\n });\n return rows;\n };\n var Redraw = {\n render: render,\n copy: copy$2\n };\n\n var read = function (element, attr) {\n var value = get(element, attr);\n return value === undefined || value === '' ? [] : value.split(' ');\n };\n var add = function (element, attr, id) {\n var old = read(element, attr);\n var nu = old.concat([id]);\n set(element, attr, nu.join(' '));\n return true;\n };\n var remove$3 = function (element, attr, id) {\n var nu = filter(read(element, attr), function (v) {\n return v !== id;\n });\n if (nu.length > 0) {\n set(element, attr, nu.join(' '));\n } else {\n remove(element, attr);\n }\n return false;\n };\n\n var supports = function (element) {\n return element.dom().classList !== undefined;\n };\n var get$6 = function (element) {\n return read(element, 'class');\n };\n var add$1 = function (element, clazz) {\n return add(element, 'class', clazz);\n };\n var remove$4 = function (element, clazz) {\n return remove$3(element, 'class', clazz);\n };\n\n var add$2 = function (element, clazz) {\n if (supports(element)) {\n element.dom().classList.add(clazz);\n } else {\n add$1(element, clazz);\n }\n };\n var cleanClass = function (element) {\n var classList = supports(element) ? element.dom().classList : get$6(element);\n if (classList.length === 0) {\n remove(element, 'class');\n }\n };\n var remove$5 = function (element, clazz) {\n if (supports(element)) {\n var classList = element.dom().classList;\n classList.remove(clazz);\n } else {\n remove$4(element, clazz);\n }\n cleanClass(element);\n };\n var has$1 = function (element, clazz) {\n return supports(element) && element.dom().classList.contains(clazz);\n };\n\n var repeat = function (repititions, f) {\n var r = [];\n for (var i = 0; i < repititions; i++) {\n r.push(f(i));\n }\n return r;\n };\n var range = function (start, end) {\n var r = [];\n for (var i = start; i < end; i++) {\n r.push(i);\n }\n return r;\n };\n var deduce = function (xs, index) {\n if (index < 0 || index >= xs.length - 1) {\n return Option.none();\n }\n var current = xs[index].fold(function () {\n var rest = reverse(xs.slice(0, index));\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (c) {\n return Option.some({\n value: c,\n delta: 0\n });\n });\n var next = xs[index + 1].fold(function () {\n var rest = xs.slice(index + 1);\n return findMap(rest, function (a, i) {\n return a.map(function (aa) {\n return {\n value: aa,\n delta: i + 1\n };\n });\n });\n }, function (n) {\n return Option.some({\n value: n,\n delta: 1\n });\n });\n return current.bind(function (c) {\n return next.map(function (n) {\n var extras = n.delta + c.delta;\n return Math.abs(n.value - c.value) / extras;\n });\n });\n };\n\n var columns = function (warehouse) {\n var grid = warehouse.grid();\n var cols = range(0, grid.columns());\n var rowsArr = range(0, grid.rows());\n return map(cols, function (col) {\n var getBlock = function () {\n return bind(rowsArr, function (r) {\n return Warehouse.getAt(warehouse, r, col).filter(function (detail) {\n return detail.column() === col;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.colspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, 0, col);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var decide = function (getBlock, isSingle, getFallback) {\n var inBlock = getBlock();\n var singleInBlock = find(inBlock, isSingle);\n var detailOption = singleInBlock.orThunk(function () {\n return Option.from(inBlock[0]).orThunk(getFallback);\n });\n return detailOption.map(function (detail) {\n return detail.element();\n });\n };\n var rows$1 = function (warehouse) {\n var grid = warehouse.grid();\n var rowsArr = range(0, grid.rows());\n var cols = range(0, grid.columns());\n return map(rowsArr, function (row) {\n var getBlock = function () {\n return bind(cols, function (c) {\n return Warehouse.getAt(warehouse, row, c).filter(function (detail) {\n return detail.row() === row;\n }).fold(constant([]), function (detail) {\n return [detail];\n });\n });\n };\n var isSingle = function (detail) {\n return detail.rowspan() === 1;\n };\n var getFallback = function () {\n return Warehouse.getAt(warehouse, row, 0);\n };\n return decide(getBlock, isSingle, getFallback);\n });\n };\n var Blocks = {\n columns: columns,\n rows: rows$1\n };\n\n var css = function (namespace) {\n var dashNamespace = namespace.replace(/\\./g, '-');\n var resolve = function (str) {\n return dashNamespace + '-' + str;\n };\n return { resolve: resolve };\n };\n\n var styles = css('ephox-snooker');\n var Styles = { resolve: styles.resolve };\n\n var col = function (column, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x - w / 2 + 'px',\n top: y + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-column': column,\n 'role': 'presentation'\n });\n return blocker;\n };\n var row$1 = function (r, x, y, w, h) {\n var blocker = Element.fromTag('div');\n setAll$1(blocker, {\n position: 'absolute',\n left: x + 'px',\n top: y - h / 2 + 'px',\n height: h + 'px',\n width: w + 'px'\n });\n setAll(blocker, {\n 'data-row': r,\n 'role': 'presentation'\n });\n return blocker;\n };\n var Bar = {\n col: col,\n row: row$1\n };\n\n var resizeBar = Styles.resolve('resizer-bar');\n var resizeRowBar = Styles.resolve('resizer-rows');\n var resizeColBar = Styles.resolve('resizer-cols');\n var BAR_THICKNESS = 7;\n var destroy = function (wire) {\n var previous = descendants$1(wire.parent(), '.' + resizeBar);\n each(previous, remove$2);\n };\n var drawBar = function (wire, positions, create) {\n var origin = wire.origin();\n each(positions, function (cpOption, i) {\n cpOption.each(function (cp) {\n var bar = create(origin, cp);\n add$2(bar, resizeBar);\n append(wire.parent(), bar);\n });\n });\n };\n var refreshCol = function (wire, colPositions, position, tableHeight) {\n drawBar(wire, colPositions, function (origin, cp) {\n var colBar = Bar.col(cp.col(), cp.x() - origin.left(), position.top() - origin.top(), BAR_THICKNESS, tableHeight);\n add$2(colBar, resizeColBar);\n return colBar;\n });\n };\n var refreshRow = function (wire, rowPositions, position, tableWidth) {\n drawBar(wire, rowPositions, function (origin, cp) {\n var rowBar = Bar.row(cp.row(), position.left() - origin.left(), cp.y() - origin.top(), tableWidth, BAR_THICKNESS);\n add$2(rowBar, resizeRowBar);\n return rowBar;\n });\n };\n var refreshGrid = function (wire, table, rows, cols, hdirection, vdirection) {\n var position = absolute(table);\n var rowPositions = rows.length > 0 ? hdirection.positions(rows, table) : [];\n refreshRow(wire, rowPositions, position, getOuter$1(table));\n var colPositions = cols.length > 0 ? vdirection.positions(cols, table) : [];\n refreshCol(wire, colPositions, position, getOuter(table));\n };\n var refresh = function (wire, table, hdirection, vdirection) {\n destroy(wire);\n var list = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(list);\n var rows = Blocks.rows(warehouse);\n var cols = Blocks.columns(warehouse);\n refreshGrid(wire, table, rows, cols, hdirection, vdirection);\n };\n var each$2 = function (wire, f) {\n var bars = descendants$1(wire.parent(), '.' + resizeBar);\n each(bars, f);\n };\n var hide = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'none');\n });\n };\n var show = function (wire) {\n each$2(wire, function (bar) {\n set$1(bar, 'display', 'block');\n });\n };\n var isRowBar = function (element) {\n return has$1(element, resizeRowBar);\n };\n var isColBar = function (element) {\n return has$1(element, resizeColBar);\n };\n var Bars = {\n refresh: refresh,\n hide: hide,\n show: show,\n destroy: destroy,\n isRowBar: isRowBar,\n isColBar: isColBar\n };\n\n var addCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n var before = cells.slice(0, index);\n var after = cells.slice(index);\n var newCells = before.concat([cell]).concat(after);\n return setCells(gridRow, newCells);\n };\n var mutateCell = function (gridRow, index, cell) {\n var cells = gridRow.cells();\n cells[index] = cell;\n };\n var setCells = function (gridRow, cells) {\n return rowcells(cells, gridRow.section());\n };\n var mapCells = function (gridRow, f) {\n var cells = gridRow.cells();\n var r = map(cells, f);\n return rowcells(r, gridRow.section());\n };\n var getCell = function (gridRow, index) {\n return gridRow.cells()[index];\n };\n var getCellElement = function (gridRow, index) {\n return getCell(gridRow, index).element();\n };\n var cellLength = function (gridRow) {\n return gridRow.cells().length;\n };\n var GridRow = {\n addCell: addCell,\n setCells: setCells,\n mutateCell: mutateCell,\n getCell: getCell,\n getCellElement: getCellElement,\n mapCells: mapCells,\n cellLength: cellLength\n };\n\n var getColumn = function (grid, index) {\n return map(grid, function (row) {\n return GridRow.getCell(row, index);\n });\n };\n var getRow = function (grid, index) {\n return grid[index];\n };\n var findDiff = function (xs, comp) {\n if (xs.length === 0) {\n return 0;\n }\n var first = xs[0];\n var index = findIndex(xs, function (x) {\n return !comp(first.element(), x.element());\n });\n return index.fold(function () {\n return xs.length;\n }, function (ind) {\n return ind;\n });\n };\n var subgrid = function (grid, row, column, comparator) {\n var restOfRow = getRow(grid, row).cells().slice(column);\n var endColIndex = findDiff(restOfRow, comparator);\n var restOfColumn = getColumn(grid, column).slice(row);\n var endRowIndex = findDiff(restOfColumn, comparator);\n return {\n colspan: constant(endColIndex),\n rowspan: constant(endRowIndex)\n };\n };\n var TableGrid = { subgrid: subgrid };\n\n var toDetails = function (grid, comparator) {\n var seen = map(grid, function (row, ri) {\n return map(row.cells(), function (col, ci) {\n return false;\n });\n });\n var updateSeen = function (ri, ci, rowspan, colspan) {\n for (var r = ri; r < ri + rowspan; r++) {\n for (var c = ci; c < ci + colspan; c++) {\n seen[r][c] = true;\n }\n }\n };\n return map(grid, function (row, ri) {\n var details = bind(row.cells(), function (cell, ci) {\n if (seen[ri][ci] === false) {\n var result = TableGrid.subgrid(grid, ri, ci, comparator);\n updateSeen(ri, ci, result.rowspan(), result.colspan());\n return [detailnew(cell.element(), result.rowspan(), result.colspan(), cell.isNew())];\n } else {\n return [];\n }\n });\n return rowdetails(details, row.section());\n });\n };\n var toGrid = function (warehouse, generators, isNew) {\n var grid = [];\n for (var i = 0; i < warehouse.grid().rows(); i++) {\n var rowCells = [];\n for (var j = 0; j < warehouse.grid().columns(); j++) {\n var element = Warehouse.getAt(warehouse, i, j).map(function (item) {\n return elementnew(item.element(), isNew);\n }).getOrThunk(function () {\n return elementnew(generators.gap(), true);\n });\n rowCells.push(element);\n }\n var row = rowcells(rowCells, warehouse.all()[i].section());\n grid.push(row);\n }\n return grid;\n };\n var Transitions = {\n toDetails: toDetails,\n toGrid: toGrid\n };\n\n var fromWarehouse = function (warehouse, generators) {\n return Transitions.toGrid(warehouse, generators, false);\n };\n var deriveRows = function (rendered, generators) {\n var findRow = function (details) {\n var rowOfCells = findMap(details, function (detail) {\n return parent(detail.element()).map(function (row) {\n var isNew = parent(row).isNone();\n return elementnew(row, isNew);\n });\n });\n return rowOfCells.getOrThunk(function () {\n return elementnew(generators.row(), true);\n });\n };\n return map(rendered, function (details) {\n var row = findRow(details.details());\n return rowdatanew(row.element(), details.details(), details.section(), row.isNew());\n });\n };\n var toDetailList = function (grid, generators) {\n var rendered = Transitions.toDetails(grid, eq);\n return deriveRows(rendered, generators);\n };\n var findInWarehouse = function (warehouse, element) {\n var all = flatten(map(warehouse.all(), function (r) {\n return r.cells();\n }));\n return find(all, function (e) {\n return eq(element, e.element());\n });\n };\n var run = function (operation, extract, adjustment, postAction, genWrappers) {\n return function (wire, table, target, generators, direction) {\n var input = DetailsList.fromTable(table);\n var warehouse = Warehouse.generate(input);\n var output = extract(warehouse, target).map(function (info) {\n var model = fromWarehouse(warehouse, generators);\n var result = operation(model, info, eq, genWrappers(generators));\n var grid = toDetailList(result.grid(), generators);\n return {\n grid: constant(grid),\n cursor: result.cursor\n };\n });\n return output.fold(function () {\n return Option.none();\n }, function (out) {\n var newElements = Redraw.render(table, out.grid());\n adjustment(table, out.grid(), direction);\n postAction(table);\n Bars.refresh(wire, table, BarPositions.height, direction);\n return Option.some({\n cursor: out.cursor,\n newRows: newElements.newRows,\n newCells: newElements.newCells\n });\n });\n };\n };\n var onCell = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell);\n });\n };\n var onPaste = function (warehouse, target) {\n return TableLookup.cell(target.element()).bind(function (cell) {\n return findInWarehouse(warehouse, cell).map(function (details) {\n var value = __assign(__assign({}, details), {\n generators: target.generators,\n clipboard: target.clipboard\n });\n return value;\n });\n });\n };\n var onPasteRows = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some({\n cells: cells,\n generators: target.generators,\n clipboard: target.clipboard\n }) : Option.none();\n };\n var onMergable = function (_warehouse, target) {\n return target.mergable();\n };\n var onUnmergable = function (_warehouse, target) {\n return target.unmergable();\n };\n var onCells = function (warehouse, target) {\n var details = map(target.selection(), function (cell) {\n return TableLookup.cell(cell).bind(function (lc) {\n return findInWarehouse(warehouse, lc);\n });\n });\n var cells = cat(details);\n return cells.length > 0 ? Option.some(cells) : Option.none();\n };\n\n var value = function (o) {\n var is = function (v) {\n return o === v;\n };\n var or = function (opt) {\n return value(o);\n };\n var orThunk = function (f) {\n return value(o);\n };\n var map = function (f) {\n return value(f(o));\n };\n var mapError = function (f) {\n return value(o);\n };\n var each = function (f) {\n f(o);\n };\n var bind = function (f) {\n return f(o);\n };\n var fold = function (_, onValue) {\n return onValue(o);\n };\n var exists = function (f) {\n return f(o);\n };\n var forall = function (f) {\n return f(o);\n };\n var toOption = function () {\n return Option.some(o);\n };\n return {\n is: is,\n isValue: always,\n isError: never,\n getOr: constant(o),\n getOrThunk: constant(o),\n getOrDie: constant(o),\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: each,\n bind: bind,\n exists: exists,\n forall: forall,\n toOption: toOption\n };\n };\n var error = function (message) {\n var getOrThunk = function (f) {\n return f();\n };\n var getOrDie = function () {\n return die(String(message))();\n };\n var or = function (opt) {\n return opt;\n };\n var orThunk = function (f) {\n return f();\n };\n var map = function (f) {\n return error(message);\n };\n var mapError = function (f) {\n return error(f(message));\n };\n var bind = function (f) {\n return error(message);\n };\n var fold = function (onError, _) {\n return onError(message);\n };\n return {\n is: never,\n isValue: never,\n isError: always,\n getOr: identity,\n getOrThunk: getOrThunk,\n getOrDie: getOrDie,\n or: or,\n orThunk: orThunk,\n fold: fold,\n map: map,\n mapError: mapError,\n each: noop,\n bind: bind,\n exists: never,\n forall: always,\n toOption: Option.none\n };\n };\n var fromOption = function (opt, err) {\n return opt.fold(function () {\n return error(err);\n }, value);\n };\n var Result = {\n value: value,\n error: error,\n fromOption: fromOption\n };\n\n var measure = function (startAddress, gridA, gridB) {\n if (startAddress.row() >= gridA.length || startAddress.column() > GridRow.cellLength(gridA[0])) {\n return Result.error('invalid start address out of table bounds, row: ' + startAddress.row() + ', column: ' + startAddress.column());\n }\n var rowRemainder = gridA.slice(startAddress.row());\n var colRemainder = rowRemainder[0].cells().slice(startAddress.column());\n var colRequired = GridRow.cellLength(gridB[0]);\n var rowRequired = gridB.length;\n return Result.value({\n rowDelta: constant(rowRemainder.length - rowRequired),\n colDelta: constant(colRemainder.length - colRequired)\n });\n };\n var measureWidth = function (gridA, gridB) {\n var colLengthA = GridRow.cellLength(gridA[0]);\n var colLengthB = GridRow.cellLength(gridB[0]);\n return {\n rowDelta: constant(0),\n colDelta: constant(colLengthA - colLengthB)\n };\n };\n var fill = function (cells, generator) {\n return map(cells, function () {\n return elementnew(generator.cell(), true);\n });\n };\n var rowFill = function (grid, amount, generator) {\n return grid.concat(repeat(amount, function (_row) {\n return GridRow.setCells(grid[grid.length - 1], fill(grid[grid.length - 1].cells(), generator));\n }));\n };\n var colFill = function (grid, amount, generator) {\n return map(grid, function (row) {\n return GridRow.setCells(row, row.cells().concat(fill(range(0, amount), generator)));\n });\n };\n var tailor = function (gridA, delta, generator) {\n var fillCols = delta.colDelta() < 0 ? colFill : identity;\n var fillRows = delta.rowDelta() < 0 ? rowFill : identity;\n var modifiedCols = fillCols(gridA, Math.abs(delta.colDelta()), generator);\n var tailoredGrid = fillRows(modifiedCols, Math.abs(delta.rowDelta()), generator);\n return tailoredGrid;\n };\n var Fitment = {\n measure: measure,\n measureWidth: measureWidth,\n tailor: tailor\n };\n\n var merge = function (grid, bounds, comparator, substitution) {\n if (grid.length === 0) {\n return grid;\n }\n for (var i = bounds.startRow(); i <= bounds.finishRow(); i++) {\n for (var j = bounds.startCol(); j <= bounds.finishCol(); j++) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), false));\n }\n }\n return grid;\n };\n var unmerge = function (grid, target, comparator, substitution) {\n var first = true;\n for (var i = 0; i < grid.length; i++) {\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n var current = GridRow.getCellElement(grid[i], j);\n var isToReplace = comparator(current, target);\n if (isToReplace === true && first === false) {\n GridRow.mutateCell(grid[i], j, elementnew(substitution(), true));\n } else if (isToReplace === true) {\n first = false;\n }\n }\n }\n return grid;\n };\n var uniqueCells = function (row, comparator) {\n return foldl(row, function (rest, cell) {\n return exists(rest, function (currentCell) {\n return comparator(currentCell.element(), cell.element());\n }) ? rest : rest.concat([cell]);\n }, []);\n };\n var splitRows = function (grid, index, comparator, substitution) {\n if (index > 0 && index < grid.length) {\n var rowPrevCells = grid[index - 1].cells();\n var cells = uniqueCells(rowPrevCells, comparator);\n each(cells, function (cell) {\n var replacement = Option.none();\n var _loop_1 = function (i) {\n var _loop_2 = function (j) {\n var current = grid[i].cells()[j];\n var isToReplace = comparator(current.element(), cell.element());\n if (isToReplace) {\n if (replacement.isNone()) {\n replacement = Option.some(substitution());\n }\n replacement.each(function (sub) {\n GridRow.mutateCell(grid[i], j, elementnew(sub, true));\n });\n }\n };\n for (var j = 0; j < GridRow.cellLength(grid[0]); j++) {\n _loop_2(j);\n }\n };\n for (var i = index; i < grid.length; i++) {\n _loop_1(i);\n }\n });\n }\n return grid;\n };\n var MergingOperations = {\n merge: merge,\n unmerge: unmerge,\n splitRows: splitRows\n };\n\n var isSpanning = function (grid, row, col, comparator) {\n var candidate = GridRow.getCell(grid[row], col);\n var matching = curry(comparator, candidate.element());\n var currentRow = grid[row];\n return grid.length > 1 && GridRow.cellLength(currentRow) > 1 && (col > 0 && matching(GridRow.getCellElement(currentRow, col - 1)) || col < currentRow.cells().length - 1 && matching(GridRow.getCellElement(currentRow, col + 1)) || row > 0 && matching(GridRow.getCellElement(grid[row - 1], col)) || row < grid.length - 1 && matching(GridRow.getCellElement(grid[row + 1], col)));\n };\n var mergeTables = function (startAddress, gridA, gridB, generator, comparator) {\n var startRow = startAddress.row();\n var startCol = startAddress.column();\n var mergeHeight = gridB.length;\n var mergeWidth = GridRow.cellLength(gridB[0]);\n var endRow = startRow + mergeHeight;\n var endCol = startCol + mergeWidth;\n for (var r = startRow; r < endRow; r++) {\n for (var c = startCol; c < endCol; c++) {\n if (isSpanning(gridA, r, c, comparator)) {\n MergingOperations.unmerge(gridA, GridRow.getCellElement(gridA[r], c), comparator, generator.cell);\n }\n var newCell = GridRow.getCellElement(gridB[r - startRow], c - startCol);\n var replacement = generator.replace(newCell);\n GridRow.mutateCell(gridA[r], c, elementnew(replacement, true));\n }\n }\n return gridA;\n };\n var merge$1 = function (startAddress, gridA, gridB, generator, comparator) {\n var result = Fitment.measure(startAddress, gridA, gridB);\n return result.map(function (delta) {\n var fittedGrid = Fitment.tailor(gridA, delta, generator);\n return mergeTables(startAddress, fittedGrid, gridB, generator, comparator);\n });\n };\n var insert = function (index, gridA, gridB, generator, comparator) {\n MergingOperations.splitRows(gridA, index, comparator, generator.cell);\n var delta = Fitment.measureWidth(gridB, gridA);\n var fittedNewGrid = Fitment.tailor(gridB, delta, generator);\n var secondDelta = Fitment.measureWidth(gridA, fittedNewGrid);\n var fittedOldGrid = Fitment.tailor(gridA, secondDelta, generator);\n return fittedOldGrid.slice(0, index).concat(fittedNewGrid).concat(fittedOldGrid.slice(index, fittedOldGrid.length));\n };\n var TableMerge = {\n merge: merge$1,\n insert: insert\n };\n\n var insertRowAt = function (grid, index, example, comparator, substitution) {\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[example], function (ex, c) {\n var withinSpan = index > 0 && index < grid.length && comparator(GridRow.getCellElement(grid[index - 1], c), GridRow.getCellElement(grid[index], c));\n var ret = withinSpan ? GridRow.getCell(grid[index], c) : elementnew(substitution(ex.element(), comparator), true);\n return ret;\n });\n return before.concat([between]).concat(after);\n };\n var insertColumnAt = function (grid, index, example, comparator, substitution) {\n return map(grid, function (row) {\n var withinSpan = index > 0 && index < GridRow.cellLength(row) && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n var sub = withinSpan ? GridRow.getCell(row, index) : elementnew(substitution(GridRow.getCellElement(row, example), comparator), true);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoColumns = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleCol + 1;\n return map(grid, function (row, i) {\n var isTargetCell = i === exampleRow;\n var sub = isTargetCell ? elementnew(substitution(GridRow.getCellElement(row, exampleCol), comparator), true) : GridRow.getCell(row, exampleCol);\n return GridRow.addCell(row, index, sub);\n });\n };\n var splitCellIntoRows = function (grid, exampleRow, exampleCol, comparator, substitution) {\n var index = exampleRow + 1;\n var before = grid.slice(0, index);\n var after = grid.slice(index);\n var between = GridRow.mapCells(grid[exampleRow], function (ex, i) {\n var isTargetCell = i === exampleCol;\n return isTargetCell ? elementnew(substitution(ex.element(), comparator), true) : ex;\n });\n return before.concat([between]).concat(after);\n };\n var deleteColumnsAt = function (grid, start, finish) {\n var rows = map(grid, function (row) {\n var cells = row.cells().slice(0, start).concat(row.cells().slice(finish + 1));\n return rowcells(cells, row.section());\n });\n return filter(rows, function (row) {\n return row.cells().length > 0;\n });\n };\n var deleteRowsAt = function (grid, start, finish) {\n return grid.slice(0, start).concat(grid.slice(finish + 1));\n };\n var ModificationOperations = {\n insertRowAt: insertRowAt,\n insertColumnAt: insertColumnAt,\n splitCellIntoColumns: splitCellIntoColumns,\n splitCellIntoRows: splitCellIntoRows,\n deleteRowsAt: deleteRowsAt,\n deleteColumnsAt: deleteColumnsAt\n };\n\n var replaceIn = function (grid, targets, comparator, substitution) {\n var isTarget = function (cell) {\n return exists(targets, function (target) {\n return comparator(cell.element(), target.element());\n });\n };\n return map(grid, function (row) {\n return GridRow.mapCells(row, function (cell) {\n return isTarget(cell) ? elementnew(substitution(cell.element(), comparator), true) : cell;\n });\n });\n };\n var notStartRow = function (grid, rowIndex, colIndex, comparator) {\n return GridRow.getCellElement(grid[rowIndex], colIndex) !== undefined && (rowIndex > 0 && comparator(GridRow.getCellElement(grid[rowIndex - 1], colIndex), GridRow.getCellElement(grid[rowIndex], colIndex)));\n };\n var notStartColumn = function (row, index, comparator) {\n return index > 0 && comparator(GridRow.getCellElement(row, index - 1), GridRow.getCellElement(row, index));\n };\n var replaceColumn = function (grid, index, comparator, substitution) {\n var targets = bind(grid, function (row, i) {\n var alreadyAdded = notStartRow(grid, i, index, comparator) || notStartColumn(row, index, comparator);\n return alreadyAdded ? [] : [GridRow.getCell(row, index)];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var replaceRow = function (grid, index, comparator, substitution) {\n var targetRow = grid[index];\n var targets = bind(targetRow.cells(), function (item, i) {\n var alreadyAdded = notStartRow(grid, index, i, comparator) || notStartColumn(targetRow, i, comparator);\n return alreadyAdded ? [] : [item];\n });\n return replaceIn(grid, targets, comparator, substitution);\n };\n var TransformOperations = {\n replaceColumn: replaceColumn,\n replaceRow: replaceRow\n };\n\n var adt = Adt.generate([\n { none: [] },\n { only: ['index'] },\n {\n left: [\n 'index',\n 'next'\n ]\n },\n {\n middle: [\n 'prev',\n 'index',\n 'next'\n ]\n },\n {\n right: [\n 'prev',\n 'index'\n ]\n }\n ]);\n var ColumnContext = __assign({}, adt);\n\n var neighbours$1 = function (input, index) {\n if (input.length === 0) {\n return ColumnContext.none();\n }\n if (input.length === 1) {\n return ColumnContext.only(0);\n }\n if (index === 0) {\n return ColumnContext.left(0, 1);\n }\n if (index === input.length - 1) {\n return ColumnContext.right(index - 1, index);\n }\n if (index > 0 && index < input.length - 1) {\n return ColumnContext.middle(index - 1, index, index + 1);\n }\n return ColumnContext.none();\n };\n var determine = function (input, column, step, tableSize) {\n var result = input.slice(0);\n var context = neighbours$1(input, column);\n var zero = function (array) {\n return map(array, constant(0));\n };\n var onNone = constant(zero(result));\n var onOnly = function (index) {\n return tableSize.singleColumnWidth(result[index], step);\n };\n var onChange = function (index, next) {\n if (step >= 0) {\n var newNext = Math.max(tableSize.minCellWidth(), result[next] - step);\n return zero(result.slice(0, index)).concat([\n step,\n newNext - result[next]\n ]).concat(zero(result.slice(next + 1)));\n } else {\n var newThis = Math.max(tableSize.minCellWidth(), result[index] + step);\n var diffx = result[index] - newThis;\n return zero(result.slice(0, index)).concat([\n newThis - result[index],\n diffx\n ]).concat(zero(result.slice(next + 1)));\n }\n };\n var onLeft = onChange;\n var onMiddle = function (_prev, index, next) {\n return onChange(index, next);\n };\n var onRight = function (_prev, index) {\n if (step >= 0) {\n return zero(result.slice(0, index)).concat([step]);\n } else {\n var size = Math.max(tableSize.minCellWidth(), result[index] + step);\n return zero(result.slice(0, index)).concat([size - result[index]]);\n }\n };\n return context.fold(onNone, onOnly, onLeft, onMiddle, onRight);\n };\n var Deltas = { determine: determine };\n\n var getSpan$1 = function (cell, type) {\n return has(cell, type) && parseInt(get(cell, type), 10) > 1;\n };\n var hasColspan = function (cell) {\n return getSpan$1(cell, 'colspan');\n };\n var hasRowspan = function (cell) {\n return getSpan$1(cell, 'rowspan');\n };\n var getInt = function (element, property) {\n return parseInt(get$1(element, property), 10);\n };\n var CellUtils = {\n hasColspan: hasColspan,\n hasRowspan: hasRowspan,\n minWidth: constant(10),\n minHeight: constant(10),\n getInt: getInt\n };\n\n var getRaw$1 = function (cell, property, getter) {\n return getRaw(cell, property).fold(function () {\n return getter(cell) + 'px';\n }, function (raw) {\n return raw;\n });\n };\n var getRawW = function (cell, tableSize) {\n return getRaw$1(cell, 'width', function (e) {\n return Sizes.getPixelWidth(e, tableSize);\n });\n };\n var getRawH = function (cell) {\n return getRaw$1(cell, 'height', Sizes.getHeight);\n };\n var getWidthFrom = function (warehouse, direction, getWidth, fallback, tableSize) {\n var columns = Blocks.columns(warehouse);\n var backups = map(columns, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(columns, function (cellOption, c) {\n var columnCell = cellOption.filter(not(CellUtils.hasColspan));\n return columnCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getWidth(cell, tableSize);\n });\n });\n };\n var getDeduced = function (deduced) {\n return deduced.map(function (d) {\n return d + 'px';\n }).getOr('');\n };\n var getRawWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, getRawW, getDeduced, tableSize);\n };\n var getPercentageWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPercentageWidth, function (deduced) {\n return deduced.fold(function () {\n return tableSize.minCellWidth();\n }, function (cellWidth) {\n return cellWidth / tableSize.pixelWidth() * 100;\n });\n }, tableSize);\n };\n var getPixelWidths = function (warehouse, direction, tableSize) {\n return getWidthFrom(warehouse, direction, Sizes.getPixelWidth, function (deduced) {\n return deduced.getOrThunk(tableSize.minCellWidth);\n }, tableSize);\n };\n var getHeightFrom = function (warehouse, direction, getHeight, fallback) {\n var rows = Blocks.rows(warehouse);\n var backups = map(rows, function (cellOption) {\n return cellOption.map(direction.edge);\n });\n return map(rows, function (cellOption, c) {\n var rowCell = cellOption.filter(not(CellUtils.hasRowspan));\n return rowCell.fold(function () {\n var deduced = deduce(backups, c);\n return fallback(deduced);\n }, function (cell) {\n return getHeight(cell);\n });\n });\n };\n var getPixelHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, Sizes.getHeight, function (deduced) {\n return deduced.getOrThunk(CellUtils.minHeight);\n });\n };\n var getRawHeights = function (warehouse, direction) {\n return getHeightFrom(warehouse, direction, getRawH, getDeduced);\n };\n var ColumnSizes = {\n getRawWidths: getRawWidths,\n getPixelWidths: getPixelWidths,\n getPercentageWidths: getPercentageWidths,\n getPixelHeights: getPixelHeights,\n getRawHeights: getRawHeights\n };\n\n var total = function (start, end, measures) {\n var r = 0;\n for (var i = start; i < end; i++) {\n r += measures[i] !== undefined ? measures[i] : 0;\n }\n return r;\n };\n var recalculateWidth = function (warehouse, widths) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var width = total(cell.column(), cell.column() + cell.colspan(), widths);\n return {\n element: cell.element,\n width: constant(width),\n colspan: cell.colspan\n };\n });\n };\n var recalculateHeight = function (warehouse, heights) {\n var all = Warehouse.justCells(warehouse);\n return map(all, function (cell) {\n var height = total(cell.row(), cell.row() + cell.rowspan(), heights);\n return {\n element: cell.element,\n height: constant(height),\n rowspan: cell.rowspan\n };\n });\n };\n var matchRowHeight = function (warehouse, heights) {\n return map(warehouse.all(), function (row, i) {\n return {\n element: row.element,\n height: constant(heights[i])\n };\n });\n };\n var Recalculations = {\n recalculateWidth: recalculateWidth,\n recalculateHeight: recalculateHeight,\n matchRowHeight: matchRowHeight\n };\n\n var percentageSize = function (width, element) {\n var floatWidth = parseFloat(width);\n var pixelWidth = get$4(element);\n var getCellDelta = function (delta) {\n return delta / pixelWidth * 100;\n };\n var singleColumnWidth = function (w, _delta) {\n return [100 - w];\n };\n var minCellWidth = function () {\n return CellUtils.minWidth() / pixelWidth * 100;\n };\n var setTableWidth = function (table, _newWidths, delta) {\n var ratio = delta / 100;\n var change = ratio * floatWidth;\n Sizes.setPercentageWidth(table, floatWidth + change);\n };\n return {\n width: constant(floatWidth),\n pixelWidth: constant(pixelWidth),\n getWidths: ColumnSizes.getPercentageWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: minCellWidth,\n setElementWidth: Sizes.setPercentageWidth,\n setTableWidth: setTableWidth\n };\n };\n var pixelSize = function (width) {\n var getCellDelta = identity;\n var singleColumnWidth = function (w, delta) {\n var newNext = Math.max(CellUtils.minWidth(), w + delta);\n return [newNext - w];\n };\n var setTableWidth = function (table, newWidths, _delta) {\n var total = foldr(newWidths, function (b, a) {\n return b + a;\n }, 0);\n Sizes.setPixelWidth(table, total);\n };\n return {\n width: constant(width),\n pixelWidth: constant(width),\n getWidths: ColumnSizes.getPixelWidths,\n getCellDelta: getCellDelta,\n singleColumnWidth: singleColumnWidth,\n minCellWidth: CellUtils.minWidth,\n setElementWidth: Sizes.setPixelWidth,\n setTableWidth: setTableWidth\n };\n };\n var chooseSize = function (element, width) {\n var percentMatch = Sizes.percentageBasedSizeRegex().exec(width);\n if (percentMatch !== null) {\n return percentageSize(percentMatch[1], element);\n }\n var pixelMatch = Sizes.pixelBasedSizeRegex().exec(width);\n if (pixelMatch !== null) {\n var intWidth = parseInt(pixelMatch[1], 10);\n return pixelSize(intWidth);\n }\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n };\n var getTableSize = function (element) {\n var width = Sizes.getRawWidth(element);\n return width.fold(function () {\n var fallbackWidth = get$4(element);\n return pixelSize(fallbackWidth);\n }, function (w) {\n return chooseSize(element, w);\n });\n };\n var TableSize = { getTableSize: getTableSize };\n\n var getWarehouse$1 = function (list) {\n return Warehouse.generate(list);\n };\n var sumUp = function (newSize) {\n return foldr(newSize, function (b, a) {\n return b + a;\n }, 0);\n };\n var getTableWarehouse = function (table) {\n var list = DetailsList.fromTable(table);\n return getWarehouse$1(list);\n };\n var adjustWidth = function (table, delta, index, direction) {\n var tableSize = TableSize.getTableSize(table);\n var step = tableSize.getCellDelta(delta);\n var warehouse = getTableWarehouse(table);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var deltas = Deltas.determine(widths, index, step, tableSize);\n var newWidths = map(deltas, function (dx, i) {\n return dx + widths[i];\n });\n var newSizes = Recalculations.recalculateWidth(warehouse, newWidths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (index === warehouse.grid().columns() - 1) {\n tableSize.setTableWidth(table, newWidths, step);\n }\n };\n var adjustHeight = function (table, delta, index, direction) {\n var warehouse = getTableWarehouse(table);\n var heights = ColumnSizes.getPixelHeights(warehouse, direction);\n var newHeights = map(heights, function (dy, i) {\n return index === i ? Math.max(delta + dy, CellUtils.minHeight()) : dy;\n });\n var newCellSizes = Recalculations.recalculateHeight(warehouse, newHeights);\n var newRowSizes = Recalculations.matchRowHeight(warehouse, newHeights);\n each(newRowSizes, function (row) {\n Sizes.setHeight(row.element(), row.height());\n });\n each(newCellSizes, function (cell) {\n Sizes.setHeight(cell.element(), cell.height());\n });\n var total = sumUp(newHeights);\n Sizes.setHeight(table, total);\n };\n var adjustWidthTo = function (table, list, direction) {\n var tableSize = TableSize.getTableSize(table);\n var warehouse = getWarehouse$1(list);\n var widths = tableSize.getWidths(warehouse, direction, tableSize);\n var newSizes = Recalculations.recalculateWidth(warehouse, widths);\n each(newSizes, function (cell) {\n tableSize.setElementWidth(cell.element(), cell.width());\n });\n if (newSizes.length > 0) {\n tableSize.setTableWidth(table, widths, tableSize.getCellDelta(0));\n }\n };\n var Adjustments = {\n adjustWidth: adjustWidth,\n adjustHeight: adjustHeight,\n adjustWidthTo: adjustWidthTo\n };\n\n var Cell = function (initial) {\n var value = initial;\n var get = function () {\n return value;\n };\n var set = function (v) {\n value = v;\n };\n var clone = function () {\n return Cell(get());\n };\n return {\n get: get,\n set: set,\n clone: clone\n };\n };\n\n var base = function (handleUnsupported, required) {\n return baseWith(handleUnsupported, required, {\n validate: isFunction,\n label: 'function'\n });\n };\n var baseWith = function (handleUnsupported, required, pred) {\n if (required.length === 0) {\n throw new Error('You must specify at least one required field.');\n }\n validateStrArr('required', required);\n checkDupes(required);\n return function (obj) {\n var keys$1 = keys(obj);\n var allReqd = forall(required, function (req) {\n return contains(keys$1, req);\n });\n if (!allReqd) {\n reqMessage(required, keys$1);\n }\n handleUnsupported(required, keys$1);\n var invalidKeys = filter(required, function (key) {\n return !pred.validate(obj[key], key);\n });\n if (invalidKeys.length > 0) {\n invalidTypeMessage(invalidKeys, pred.label);\n }\n return obj;\n };\n };\n var handleExact = function (required, keys) {\n var unsupported = filter(keys, function (key) {\n return !contains(required, key);\n });\n if (unsupported.length > 0) {\n unsuppMessage(unsupported);\n }\n };\n var exactly = function (required) {\n return base(handleExact, required);\n };\n\n var verifyGenerators = exactly([\n 'cell',\n 'row',\n 'replace',\n 'gap'\n ]);\n var elementToData = function (element) {\n var colspan = has(element, 'colspan') ? parseInt(get(element, 'colspan'), 10) : 1;\n var rowspan = has(element, 'rowspan') ? parseInt(get(element, 'rowspan'), 10) : 1;\n return {\n element: constant(element),\n colspan: constant(colspan),\n rowspan: constant(rowspan)\n };\n };\n var modification = function (generators, toData) {\n if (toData === void 0) {\n toData = elementToData;\n }\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var nu = function (data) {\n return generators.cell(data);\n };\n var nuFrom = function (element) {\n var data = toData(element);\n return nu(data);\n };\n var add = function (element) {\n var replacement = nuFrom(element);\n if (position.get().isNone()) {\n position.set(Option.some(replacement));\n }\n recent = Option.some({\n item: element,\n replacement: replacement\n });\n return replacement;\n };\n var recent = Option.none();\n var getOrInit = function (element, comparator) {\n return recent.fold(function () {\n return add(element);\n }, function (p) {\n return comparator(element, p.item) ? p.replacement : add(element);\n });\n };\n return {\n getOrInit: getOrInit,\n cursor: position.get\n };\n };\n var transform = function (scope, tag) {\n return function (generators) {\n var position = Cell(Option.none());\n verifyGenerators(generators);\n var list = [];\n var find$1 = function (element, comparator) {\n return find(list, function (x) {\n return comparator(x.item, element);\n });\n };\n var makeNew = function (element) {\n var attrs = { scope: scope };\n var cell = generators.replace(element, tag, attrs);\n list.push({\n item: element,\n sub: cell\n });\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return cell;\n };\n var replaceOrInit = function (element, comparator) {\n return find$1(element, comparator).fold(function () {\n return makeNew(element);\n }, function (p) {\n return comparator(element, p.item) ? p.sub : makeNew(element);\n });\n };\n return {\n replaceOrInit: replaceOrInit,\n cursor: position.get\n };\n };\n };\n var merging = function (generators) {\n verifyGenerators(generators);\n var position = Cell(Option.none());\n var combine = function (cell) {\n if (position.get().isNone()) {\n position.set(Option.some(cell));\n }\n return function () {\n var raw = generators.cell({\n element: constant(cell),\n colspan: constant(1),\n rowspan: constant(1)\n });\n remove$1(raw, 'width');\n remove$1(cell, 'width');\n return raw;\n };\n };\n return {\n combine: combine,\n cursor: position.get\n };\n };\n var Generators = {\n modification: modification,\n transform: transform,\n merging: merging\n };\n\n var blockList = [\n 'body',\n 'p',\n 'div',\n 'article',\n 'aside',\n 'figcaption',\n 'figure',\n 'footer',\n 'header',\n 'nav',\n 'section',\n 'ol',\n 'ul',\n 'table',\n 'thead',\n 'tfoot',\n 'tbody',\n 'caption',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'blockquote',\n 'pre',\n 'address'\n ];\n var isList = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'ol',\n 'ul'\n ], tagName);\n };\n var isBlock = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains(blockList, tagName);\n };\n var isFormatting = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'address',\n 'pre',\n 'p',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isHeading = function (universe, item) {\n var tagName = universe.property().name(item);\n return contains([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6'\n ], tagName);\n };\n var isContainer = function (universe, item) {\n return contains([\n 'div',\n 'li',\n 'td',\n 'th',\n 'blockquote',\n 'body',\n 'caption'\n ], universe.property().name(item));\n };\n var isEmptyTag = function (universe, item) {\n return contains([\n 'br',\n 'img',\n 'hr',\n 'input'\n ], universe.property().name(item));\n };\n var isFrame = function (universe, item) {\n return universe.property().name(item) === 'iframe';\n };\n var isInline = function (universe, item) {\n return !(isBlock(universe, item) || isEmptyTag(universe, item)) && universe.property().name(item) !== 'li';\n };\n var Structure = {\n isBlock: isBlock,\n isList: isList,\n isFormatting: isFormatting,\n isHeading: isHeading,\n isContainer: isContainer,\n isEmptyTag: isEmptyTag,\n isFrame: isFrame,\n isInline: isInline\n };\n\n var universe$1 = DomUniverse();\n var isBlock$1 = function (element) {\n return Structure.isBlock(universe$1, element);\n };\n var isList$1 = function (element) {\n return Structure.isList(universe$1, element);\n };\n var isFormatting$1 = function (element) {\n return Structure.isFormatting(universe$1, element);\n };\n var isHeading$1 = function (element) {\n return Structure.isHeading(universe$1, element);\n };\n var isContainer$1 = function (element) {\n return Structure.isContainer(universe$1, element);\n };\n var isEmptyTag$1 = function (element) {\n return Structure.isEmptyTag(universe$1, element);\n };\n var isFrame$1 = function (element) {\n return Structure.isFrame(universe$1, element);\n };\n var isInline$1 = function (element) {\n return Structure.isInline(universe$1, element);\n };\n var DomStructure = {\n isBlock: isBlock$1,\n isList: isList$1,\n isFormatting: isFormatting$1,\n isHeading: isHeading$1,\n isContainer: isContainer$1,\n isEmptyTag: isEmptyTag$1,\n isFrame: isFrame$1,\n isInline: isInline$1\n };\n\n var merge$2 = function (cells) {\n var isBr = function (el) {\n return name(el) === 'br';\n };\n var advancedBr = function (children) {\n return forall(children, function (c) {\n return isBr(c) || isText(c) && get$2(c).trim().length === 0;\n });\n };\n var isListItem = function (el) {\n return name(el) === 'li' || ancestor(el, DomStructure.isList).isSome();\n };\n var siblingIsBlock = function (el) {\n return nextSibling(el).map(function (rightSibling) {\n if (DomStructure.isBlock(rightSibling)) {\n return true;\n }\n if (DomStructure.isEmptyTag(rightSibling)) {\n return name(rightSibling) === 'img' ? false : true;\n }\n return false;\n }).getOr(false);\n };\n var markCell = function (cell) {\n return last$1(cell).bind(function (rightEdge) {\n var rightSiblingIsBlock = siblingIsBlock(rightEdge);\n return parent(rightEdge).map(function (parent) {\n return rightSiblingIsBlock === true || isListItem(parent) || isBr(rightEdge) || DomStructure.isBlock(parent) && !eq(cell, parent) ? [] : [Element.fromTag('br')];\n });\n }).getOr([]);\n };\n var markContent = function () {\n var content = bind(cells, function (cell) {\n var children$1 = children(cell);\n return advancedBr(children$1) ? [] : children$1.concat(markCell(cell));\n });\n return content.length === 0 ? [Element.fromTag('br')] : content;\n };\n var contents = markContent();\n empty(cells[0]);\n append$1(cells[0], contents);\n };\n var TableContent = { merge: merge$2 };\n\n var prune = function (table) {\n var cells = TableLookup.cells(table);\n if (cells.length === 0) {\n remove$2(table);\n }\n };\n var outcome = Immutable('grid', 'cursor');\n var elementFromGrid = function (grid, row, column) {\n return findIn(grid, row, column).orThunk(function () {\n return findIn(grid, 0, 0);\n });\n };\n var findIn = function (grid, row, column) {\n return Option.from(grid[row]).bind(function (r) {\n return Option.from(r.cells()[column]).bind(function (c) {\n return Option.from(c.element());\n });\n });\n };\n var bundle = function (grid, row, column) {\n return outcome(grid, findIn(grid, row, column));\n };\n var uniqueRows = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.row() === detail.row();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.row() - detailB.row();\n });\n };\n var uniqueColumns = function (details) {\n return foldl(details, function (rest, detail) {\n return exists(rest, function (currentDetail) {\n return currentDetail.column() === detail.column();\n }) ? rest : rest.concat([detail]);\n }, []).sort(function (detailA, detailB) {\n return detailA.column() - detailB.column();\n });\n };\n var insertRowBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsBefore = function (grid, details, comparator, genWrappers) {\n var example = details[0].row();\n var targetIndex = details[0].row();\n var rows = uniqueRows(details);\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertRowAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.row();\n var targetIndex = detail.row() + detail.rowspan();\n var newGrid = ModificationOperations.insertRowAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, targetIndex, detail.column());\n };\n var insertRowsAfter = function (grid, details, comparator, genWrappers) {\n var rows = uniqueRows(details);\n var example = rows[rows.length - 1].row();\n var targetIndex = rows[rows.length - 1].row() + rows[rows.length - 1].rowspan();\n var newGrid = foldl(rows, function (newG, _row) {\n return ModificationOperations.insertRowAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, targetIndex, details[0].column());\n };\n var insertColumnBefore = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsBefore = function (grid, details, comparator, genWrappers) {\n var columns = uniqueColumns(details);\n var example = columns[0].column();\n var targetIndex = columns[0].column();\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var insertColumnAfter = function (grid, detail, comparator, genWrappers) {\n var example = detail.column();\n var targetIndex = detail.column() + detail.colspan();\n var newGrid = ModificationOperations.insertColumnAt(grid, targetIndex, example, comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), targetIndex);\n };\n var insertColumnsAfter = function (grid, details, comparator, genWrappers) {\n var example = details[details.length - 1].column();\n var targetIndex = details[details.length - 1].column() + details[details.length - 1].colspan();\n var columns = uniqueColumns(details);\n var newGrid = foldl(columns, function (newG, _row) {\n return ModificationOperations.insertColumnAt(newG, targetIndex, example, comparator, genWrappers.getOrInit);\n }, grid);\n return bundle(newGrid, details[0].row(), targetIndex);\n };\n var makeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var makeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeRowHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceRow(grid, detail.row(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var unmakeColumnHeader = function (grid, detail, comparator, genWrappers) {\n var newGrid = TransformOperations.replaceColumn(grid, detail.column(), comparator, genWrappers.replaceOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoColumns$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoColumns(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var splitCellIntoRows$1 = function (grid, detail, comparator, genWrappers) {\n var newGrid = ModificationOperations.splitCellIntoRows(grid, detail.row(), detail.column(), comparator, genWrappers.getOrInit);\n return bundle(newGrid, detail.row(), detail.column());\n };\n var eraseColumns = function (grid, details, _comparator, _genWrappers) {\n var columns = uniqueColumns(details);\n var newGrid = ModificationOperations.deleteColumnsAt(grid, columns[0].column(), columns[columns.length - 1].column());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var eraseRows = function (grid, details, _comparator, _genWrappers) {\n var rows = uniqueRows(details);\n var newGrid = ModificationOperations.deleteRowsAt(grid, rows[0].row(), rows[rows.length - 1].row());\n var cursor = elementFromGrid(newGrid, details[0].row(), details[0].column());\n return outcome(newGrid, cursor);\n };\n var mergeCells = function (grid, mergable, comparator, _genWrappers) {\n var cells = mergable.cells();\n TableContent.merge(cells);\n var newGrid = MergingOperations.merge(grid, mergable.bounds(), comparator, constant(cells[0]));\n return outcome(newGrid, Option.from(cells[0]));\n };\n var unmergeCells = function (grid, unmergable, comparator, genWrappers) {\n var newGrid = foldr(unmergable, function (b, cell) {\n return MergingOperations.unmerge(b, cell, comparator, genWrappers.combine(cell));\n }, grid);\n return outcome(newGrid, Option.from(unmergable[0]));\n };\n var pasteCells = function (grid, pasteDetails, comparator, _genWrappers) {\n var gridify = function (table, generators) {\n var list = DetailsList.fromTable(table);\n var wh = Warehouse.generate(list);\n return Transitions.toGrid(wh, generators, true);\n };\n var gridB = gridify(pasteDetails.clipboard(), pasteDetails.generators());\n var startAddress = address(pasteDetails.row(), pasteDetails.column());\n var mergedGrid = TableMerge.merge(startAddress, grid, gridB, pasteDetails.generators(), comparator);\n return mergedGrid.fold(function () {\n return outcome(grid, Option.some(pasteDetails.element()));\n }, function (nuGrid) {\n var cursor = elementFromGrid(nuGrid, pasteDetails.row(), pasteDetails.column());\n return outcome(nuGrid, cursor);\n });\n };\n var gridifyRows = function (rows, generators, example) {\n var pasteDetails = DetailsList.fromPastedRows(rows, example);\n var wh = Warehouse.generate(pasteDetails);\n return Transitions.toGrid(wh, generators, true);\n };\n var pasteRowsBefore = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[0].row();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var pasteRowsAfter = function (grid, pasteDetails, comparator, _genWrappers) {\n var example = grid[pasteDetails.cells[0].row()];\n var index = pasteDetails.cells[pasteDetails.cells.length - 1].row() + pasteDetails.cells[pasteDetails.cells.length - 1].rowspan();\n var gridB = gridifyRows(pasteDetails.clipboard(), pasteDetails.generators(), example);\n var mergedGrid = TableMerge.insert(index, grid, gridB, pasteDetails.generators(), comparator);\n var cursor = elementFromGrid(mergedGrid, pasteDetails.cells[0].row(), pasteDetails.cells[0].column());\n return outcome(mergedGrid, cursor);\n };\n var resize = Adjustments.adjustWidthTo;\n var TableOperations = {\n insertRowBefore: run(insertRowBefore, onCell, noop, noop, Generators.modification),\n insertRowsBefore: run(insertRowsBefore, onCells, noop, noop, Generators.modification),\n insertRowAfter: run(insertRowAfter, onCell, noop, noop, Generators.modification),\n insertRowsAfter: run(insertRowsAfter, onCells, noop, noop, Generators.modification),\n insertColumnBefore: run(insertColumnBefore, onCell, resize, noop, Generators.modification),\n insertColumnsBefore: run(insertColumnsBefore, onCells, resize, noop, Generators.modification),\n insertColumnAfter: run(insertColumnAfter, onCell, resize, noop, Generators.modification),\n insertColumnsAfter: run(insertColumnsAfter, onCells, resize, noop, Generators.modification),\n splitCellIntoColumns: run(splitCellIntoColumns$1, onCell, resize, noop, Generators.modification),\n splitCellIntoRows: run(splitCellIntoRows$1, onCell, noop, noop, Generators.modification),\n eraseColumns: run(eraseColumns, onCells, resize, prune, Generators.modification),\n eraseRows: run(eraseRows, onCells, noop, prune, Generators.modification),\n makeColumnHeader: run(makeColumnHeader, onCell, noop, noop, Generators.transform('row', 'th')),\n unmakeColumnHeader: run(unmakeColumnHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n makeRowHeader: run(makeRowHeader, onCell, noop, noop, Generators.transform('col', 'th')),\n unmakeRowHeader: run(unmakeRowHeader, onCell, noop, noop, Generators.transform(null, 'td')),\n mergeCells: run(mergeCells, onMergable, noop, noop, Generators.merging),\n unmergeCells: run(unmergeCells, onUnmergable, resize, noop, Generators.merging),\n pasteCells: run(pasteCells, onPaste, resize, noop, Generators.modification),\n pasteRowsBefore: run(pasteRowsBefore, onPasteRows, noop, noop, Generators.modification),\n pasteRowsAfter: run(pasteRowsAfter, onPasteRows, noop, noop, Generators.modification)\n };\n\n var getBody$1 = function (editor) {\n return Element.fromDom(editor.getBody());\n };\n var getPixelWidth$1 = function (elm) {\n return elm.getBoundingClientRect().width;\n };\n var getPixelHeight = function (elm) {\n return elm.getBoundingClientRect().height;\n };\n var getIsRoot = function (editor) {\n return function (element) {\n return eq(element, getBody$1(editor));\n };\n };\n var removePxSuffix = function (size) {\n return size ? size.replace(/px$/, '') : '';\n };\n var addSizeSuffix = function (size) {\n if (/^[0-9]+$/.test(size)) {\n size += 'px';\n }\n return size;\n };\n var removeDataStyle = function (table) {\n var dataStyleCells = descendants$1(table, 'td[data-mce-style],th[data-mce-style]');\n remove(table, 'data-mce-style');\n each(dataStyleCells, function (cell) {\n remove(cell, 'data-mce-style');\n });\n };\n\n var getDirection = function (element) {\n return get$1(element, 'direction') === 'rtl' ? 'rtl' : 'ltr';\n };\n\n var ltr$1 = { isRtl: constant(false) };\n var rtl$1 = { isRtl: constant(true) };\n var directionAt = function (element) {\n var dir = getDirection(element);\n return dir === 'rtl' ? rtl$1 : ltr$1;\n };\n var Direction = { directionAt: directionAt };\n\n var defaultTableToolbar = [\n 'tableprops',\n 'tabledelete',\n '|',\n 'tableinsertrowbefore',\n 'tableinsertrowafter',\n 'tabledeleterow',\n '|',\n 'tableinsertcolbefore',\n 'tableinsertcolafter',\n 'tabledeletecol'\n ];\n var defaultStyles = {\n 'border-collapse': 'collapse',\n 'width': '100%'\n };\n var defaultAttributes = { border: '1' };\n var getDefaultAttributes = function (editor) {\n return editor.getParam('table_default_attributes', defaultAttributes, 'object');\n };\n var getDefaultStyles = function (editor) {\n return editor.getParam('table_default_styles', defaultStyles, 'object');\n };\n var hasTableResizeBars = function (editor) {\n return editor.getParam('table_resize_bars', true, 'boolean');\n };\n var hasTabNavigation = function (editor) {\n return editor.getParam('table_tab_navigation', true, 'boolean');\n };\n var hasAdvancedCellTab = function (editor) {\n return editor.getParam('table_cell_advtab', true, 'boolean');\n };\n var hasAdvancedRowTab = function (editor) {\n return editor.getParam('table_row_advtab', true, 'boolean');\n };\n var hasAdvancedTableTab = function (editor) {\n return editor.getParam('table_advtab', true, 'boolean');\n };\n var hasAppearanceOptions = function (editor) {\n return editor.getParam('table_appearance_options', true, 'boolean');\n };\n var hasTableGrid = function (editor) {\n return editor.getParam('table_grid', true, 'boolean');\n };\n var shouldStyleWithCss = function (editor) {\n return editor.getParam('table_style_by_css', false, 'boolean');\n };\n var getCellClassList = function (editor) {\n return editor.getParam('table_cell_class_list', [], 'array');\n };\n var getRowClassList = function (editor) {\n return editor.getParam('table_row_class_list', [], 'array');\n };\n var getTableClassList = function (editor) {\n return editor.getParam('table_class_list', [], 'array');\n };\n var getColorPickerCallback = function (editor) {\n return editor.getParam('color_picker_callback');\n };\n var isPixelsForced = function (editor) {\n return editor.getParam('table_responsive_width') === false;\n };\n var getCloneElements = function (editor) {\n var cloneElements = editor.getParam('table_clone_elements');\n if (isString(cloneElements)) {\n return Option.some(cloneElements.split(/[ ,]/));\n } else if (Array.isArray(cloneElements)) {\n return Option.some(cloneElements);\n } else {\n return Option.none();\n }\n };\n var hasObjectResizing = function (editor) {\n var objectResizing = editor.getParam('object_resizing', true);\n return objectResizing === 'table' || objectResizing;\n };\n var getToolbar = function (editor) {\n var toolbar = editor.getParam('table_toolbar', defaultTableToolbar);\n if (toolbar === '' || toolbar === false) {\n return [];\n } else if (isString(toolbar)) {\n return toolbar.split(/[ ,]/);\n } else if (isArray(toolbar)) {\n return toolbar;\n } else {\n return [];\n }\n };\n\n var fireNewRow = function (editor, row) {\n return editor.fire('newrow', { node: row });\n };\n var fireNewCell = function (editor, cell) {\n return editor.fire('newcell', { node: cell });\n };\n var fireObjectResizeStart = function (editor, target, width, height) {\n editor.fire('ObjectResizeStart', {\n target: target,\n width: width,\n height: height\n });\n };\n var fireObjectResized = function (editor, target, width, height) {\n editor.fire('ObjectResized', {\n target: target,\n width: width,\n height: height\n });\n };\n\n var TableActions = function (editor, lazyWire) {\n var isTableBody = function (editor) {\n return name(getBody$1(editor)) === 'table';\n };\n var lastRowGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.rows() > 1;\n };\n var lastColumnGuard = function (table) {\n var size = TableGridSize.getGridSize(table);\n return isTableBody(editor) === false || size.columns() > 1;\n };\n var cloneFormats = getCloneElements(editor);\n var execute = function (operation, guard, mutate, lazyWire) {\n return function (table, target) {\n removeDataStyle(table);\n var wire = lazyWire();\n var doc = Element.fromDom(editor.getDoc());\n var direction = TableDirection(Direction.directionAt);\n var generators = TableFill.cellOperations(mutate, doc, cloneFormats);\n return guard(table) ? operation(wire, table, target, generators, direction).bind(function (result) {\n each(result.newRows(), function (row) {\n fireNewRow(editor, row.dom());\n });\n each(result.newCells(), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n return result.cursor().map(function (cell) {\n var rng = editor.dom.createRng();\n rng.setStart(cell.dom(), 0);\n rng.setEnd(cell.dom(), 0);\n return rng;\n });\n }) : Option.none();\n };\n };\n var deleteRow = execute(TableOperations.eraseRows, lastRowGuard, noop, lazyWire);\n var deleteColumn = execute(TableOperations.eraseColumns, lastColumnGuard, noop, lazyWire);\n var insertRowsBefore = execute(TableOperations.insertRowsBefore, always, noop, lazyWire);\n var insertRowsAfter = execute(TableOperations.insertRowsAfter, always, noop, lazyWire);\n var insertColumnsBefore = execute(TableOperations.insertColumnsBefore, always, CellMutations.halve, lazyWire);\n var insertColumnsAfter = execute(TableOperations.insertColumnsAfter, always, CellMutations.halve, lazyWire);\n var mergeCells = execute(TableOperations.mergeCells, always, noop, lazyWire);\n var unmergeCells = execute(TableOperations.unmergeCells, always, noop, lazyWire);\n var pasteRowsBefore = execute(TableOperations.pasteRowsBefore, always, noop, lazyWire);\n var pasteRowsAfter = execute(TableOperations.pasteRowsAfter, always, noop, lazyWire);\n var pasteCells = execute(TableOperations.pasteCells, always, noop, lazyWire);\n return {\n deleteRow: deleteRow,\n deleteColumn: deleteColumn,\n insertRowsBefore: insertRowsBefore,\n insertRowsAfter: insertRowsAfter,\n insertColumnsBefore: insertColumnsBefore,\n insertColumnsAfter: insertColumnsAfter,\n mergeCells: mergeCells,\n unmergeCells: unmergeCells,\n pasteRowsBefore: pasteRowsBefore,\n pasteRowsAfter: pasteRowsAfter,\n pasteCells: pasteCells\n };\n };\n\n var copyRows = function (table, target, generators) {\n var list = DetailsList.fromTable(table);\n var house = Warehouse.generate(list);\n var details = onCells(house, target);\n return details.map(function (selectedCells) {\n var grid = Transitions.toGrid(house, generators, false);\n var slicedGrid = grid.slice(selectedCells[0].row(), selectedCells[selectedCells.length - 1].row() + selectedCells[selectedCells.length - 1].rowspan());\n var slicedDetails = toDetailList(slicedGrid, generators);\n return Redraw.copy(slicedDetails);\n });\n };\n var CopyRows = { copyRows: copyRows };\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var getTDTHOverallStyle = function (dom, elm, name) {\n var cells = dom.select('td,th', elm);\n var firstChildStyle;\n var checkChildren = function (firstChildStyle, elms) {\n for (var i = 0; i < elms.length; i++) {\n var currentStyle = dom.getStyle(elms[i], name);\n if (typeof firstChildStyle === 'undefined') {\n firstChildStyle = currentStyle;\n }\n if (firstChildStyle !== currentStyle) {\n return '';\n }\n }\n return firstChildStyle;\n };\n firstChildStyle = checkChildren(firstChildStyle, cells);\n return firstChildStyle;\n };\n var applyAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('align' + name, {}, elm);\n }\n };\n var applyVAlign = function (editor, elm, name) {\n if (name) {\n editor.formatter.apply('valign' + name, {}, elm);\n }\n };\n var unApplyAlign = function (editor, elm) {\n global$1.each('left center right'.split(' '), function (name) {\n editor.formatter.remove('align' + name, {}, elm);\n });\n };\n var unApplyVAlign = function (editor, elm) {\n global$1.each('top middle bottom'.split(' '), function (name) {\n editor.formatter.remove('valign' + name, {}, elm);\n });\n };\n var Styles$1 = {\n applyAlign: applyAlign,\n applyVAlign: applyVAlign,\n unApplyAlign: unApplyAlign,\n unApplyVAlign: unApplyVAlign,\n getTDTHOverallStyle: getTDTHOverallStyle\n };\n\n var buildListItems = function (inputList, itemCallback, startItems) {\n var appendItems = function (values, output) {\n output = output || [];\n global$1.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n if (itemCallback) {\n itemCallback(menuItem);\n }\n }\n output.push(menuItem);\n });\n return output;\n };\n return appendItems(inputList, startItems || []);\n };\n function styleFieldHasFocus(e) {\n return e.control.rootControl.find('#style')[0].getEl().isEqualNode(domGlobals.document.activeElement);\n }\n var syncAdvancedStyleFields = function (editor, evt) {\n if (styleFieldHasFocus(evt)) {\n updateAdvancedFields(editor, evt);\n } else {\n updateStyleField(editor, evt);\n }\n };\n var updateStyleField = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n css['border-style'] = data.borderStyle;\n css['border-color'] = data.borderColor;\n css['background-color'] = data.backgroundColor;\n css.width = data.width ? addSizeSuffix(data.width) : '';\n css.height = data.height ? addSizeSuffix(data.height) : '';\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n var updateAdvancedFields = function (editor, evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#borderStyle').value(css['border-style'] || '');\n rootControl.find('#borderColor').value(css['border-color'] || '');\n rootControl.find('#backgroundColor').value(css['background-color'] || '');\n rootControl.find('#width').value(css.width || '');\n rootControl.find('#height').value(css.height || '');\n };\n var extractAdvancedStyles = function (dom, elm) {\n var css = dom.parseStyle(dom.getAttrib(elm, 'style'));\n var data = {};\n if (css['border-style']) {\n data.borderStyle = css['border-style'];\n }\n if (css['border-color']) {\n data.borderColor = css['border-color'];\n }\n if (css['background-color']) {\n data.backgroundColor = css['background-color'];\n }\n data.style = dom.serializeStyle(css);\n return data;\n };\n var createStyleForm = function (editor) {\n var createColorPickAction = function () {\n var colorPickerCallback = getColorPickerCallback(editor);\n if (colorPickerCallback) {\n return function (evt) {\n return colorPickerCallback.call(editor, function (value) {\n evt.control.value(value).fire('change');\n }, evt.control.value());\n };\n }\n };\n return {\n title: 'Advanced',\n type: 'form',\n defaults: { onchange: curry(updateStyleField, editor) },\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: curry(updateAdvancedFields, editor)\n },\n {\n type: 'form',\n padding: 0,\n formItemDefaults: {\n layout: 'grid',\n alignH: [\n 'start',\n 'right'\n ]\n },\n defaults: { size: 7 },\n items: [\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n onselect: curry(updateStyleField, editor),\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n },\n {\n label: 'Border color',\n type: 'colorbox',\n name: 'borderColor',\n onaction: createColorPickAction()\n },\n {\n label: 'Background color',\n type: 'colorbox',\n name: 'backgroundColor',\n onaction: createColorPickAction()\n }\n ]\n }\n ]\n };\n };\n var Helpers = {\n createStyleForm: createStyleForm,\n buildListItems: buildListItems,\n updateStyleField: updateStyleField,\n extractAdvancedStyles: extractAdvancedStyles,\n updateAdvancedFields: updateAdvancedFields,\n syncAdvancedStyleFields: syncAdvancedStyleFields\n };\n\n var updateStyles = function (elm, cssText) {\n delete elm.dataset.mceStyle;\n elm.style.cssText += ';' + cssText;\n };\n var extractDataFromElement = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(elm, 'width') || dom.getAttrib(elm, 'width'),\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n type: elm.nodeName.toLowerCase(),\n style: '',\n align: '',\n valign: ''\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n global$1.each('top middle bottom'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'valign' + name)) {\n data.valign = name;\n }\n });\n if (hasAdvancedCellTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var onSubmitCellForm = function (editor, cells, evt) {\n var dom = editor.dom;\n var data;\n function setAttrib(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (cells.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedCellTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(cells, function (cellElm) {\n setAttrib(cellElm, 'scope', data.scope);\n if (cells.length === 1) {\n setAttrib(cellElm, 'style', data.style);\n } else {\n updateStyles(cellElm, data.style);\n }\n setAttrib(cellElm, 'class', data.class);\n setStyle(cellElm, 'width', addSizeSuffix(data.width));\n setStyle(cellElm, 'height', addSizeSuffix(data.height));\n if (data.type && cellElm.nodeName.toLowerCase() !== data.type) {\n cellElm = dom.rename(cellElm, data.type);\n }\n if (cells.length === 1) {\n Styles$1.unApplyAlign(editor, cellElm);\n Styles$1.unApplyVAlign(editor, cellElm);\n }\n if (data.align) {\n Styles$1.applyAlign(editor, cellElm, data.align);\n }\n if (data.valign) {\n Styles$1.applyVAlign(editor, cellElm, data.valign);\n }\n });\n editor.focus();\n });\n };\n var open = function (editor) {\n var cellElm, data, classListCtrl, cells = [];\n cells = editor.dom.select('td[data-mce-selected],th[data-mce-selected]');\n cellElm = editor.dom.getParent(editor.selection.getStart(), 'td,th');\n if (!cells.length && cellElm) {\n cells.push(cellElm);\n }\n cellElm = cellElm || cells[0];\n if (!cellElm) {\n return;\n }\n if (cells.length > 1) {\n data = {\n width: '',\n height: '',\n scope: '',\n class: '',\n align: '',\n valign: '',\n style: '',\n type: cellElm.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement(editor, cellElm);\n }\n if (getCellClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getCellClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'td',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n var generalCellForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n layout: 'grid',\n columns: 2,\n labelGapCalc: false,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: [\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell type',\n name: 'type',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'Cell',\n value: 'td'\n },\n {\n text: 'Header cell',\n value: 'th'\n }\n ]\n },\n {\n label: 'Scope',\n name: 'scope',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Row',\n value: 'row'\n },\n {\n text: 'Column',\n value: 'col'\n },\n {\n text: 'Row group',\n value: 'rowgroup'\n },\n {\n text: 'Column group',\n value: 'colgroup'\n }\n ]\n },\n {\n label: 'H Align',\n name: 'align',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'V Align',\n name: 'valign',\n type: 'listbox',\n text: 'None',\n minWidth: 90,\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Top',\n value: 'top'\n },\n {\n text: 'Middle',\n value: 'middle'\n },\n {\n text: 'Bottom',\n value: 'bottom'\n }\n ]\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedCellTab(editor)) {\n editor.windowManager.open({\n title: 'Cell properties',\n bodyType: 'tabpanel',\n data: data,\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalCellForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n } else {\n editor.windowManager.open({\n title: 'Cell properties',\n data: data,\n body: generalCellForm,\n onsubmit: curry(onSubmitCellForm, editor, cells)\n });\n }\n };\n var CellDialog = { open: open };\n\n var extractDataFromElement$1 = function (editor, elm) {\n var dom = editor.dom;\n var data = {\n height: dom.getStyle(elm, 'height') || dom.getAttrib(elm, 'height'),\n scope: dom.getAttrib(elm, 'scope'),\n class: dom.getAttrib(elm, 'class'),\n align: '',\n style: '',\n type: elm.parentNode.nodeName.toLowerCase()\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(elm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedRowTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, elm));\n }\n return data;\n };\n var switchRowType = function (dom, rowElm, toType) {\n var tableElm = dom.getParent(rowElm, 'table');\n var oldParentElm = rowElm.parentNode;\n var parentElm = dom.select(toType, tableElm)[0];\n if (!parentElm) {\n parentElm = dom.create(toType);\n if (tableElm.firstChild) {\n if (tableElm.firstChild.nodeName === 'CAPTION') {\n dom.insertAfter(parentElm, tableElm.firstChild);\n } else {\n tableElm.insertBefore(parentElm, tableElm.firstChild);\n }\n } else {\n tableElm.appendChild(parentElm);\n }\n }\n parentElm.appendChild(rowElm);\n if (!oldParentElm.hasChildNodes()) {\n dom.remove(oldParentElm);\n }\n };\n function onSubmitRowForm(editor, rows, oldData, evt) {\n var dom = editor.dom;\n function setAttrib(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setAttrib(elm, name, value);\n }\n }\n function setStyle(elm, name, value) {\n if (rows.length === 1 || value) {\n dom.setStyle(elm, name, value);\n }\n }\n if (hasAdvancedRowTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n var data = evt.control.rootControl.toJSON();\n editor.undoManager.transact(function () {\n global$1.each(rows, function (rowElm) {\n setAttrib(rowElm, 'scope', data.scope);\n setAttrib(rowElm, 'style', data.style);\n setAttrib(rowElm, 'class', data.class);\n setStyle(rowElm, 'height', addSizeSuffix(data.height));\n if (data.type !== rowElm.parentNode.nodeName.toLowerCase()) {\n switchRowType(editor.dom, rowElm, data.type);\n }\n if (data.align !== oldData.align) {\n Styles$1.unApplyAlign(editor, rowElm);\n Styles$1.applyAlign(editor, rowElm, data.align);\n }\n });\n editor.focus();\n });\n }\n var open$1 = function (editor) {\n var dom = editor.dom;\n var tableElm, cellElm, rowElm, classListCtrl, data;\n var rows = [];\n var generalRowForm;\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n cellElm = dom.getParent(editor.selection.getStart(), 'td,th');\n global$1.each(tableElm.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n if (dom.getAttrib(cell, 'data-mce-selected') || cell === cellElm) {\n rows.push(row);\n return false;\n }\n });\n });\n rowElm = rows[0];\n if (!rowElm) {\n return;\n }\n if (rows.length > 1) {\n data = {\n height: '',\n scope: '',\n style: '',\n class: '',\n align: '',\n type: rowElm.parentNode.nodeName.toLowerCase()\n };\n } else {\n data = extractDataFromElement$1(editor, rowElm);\n }\n if (getRowClassList(editor).length > 0) {\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getRowClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'tr',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalRowForm = {\n type: 'form',\n columns: 2,\n padding: 0,\n defaults: { type: 'textbox' },\n items: [\n {\n type: 'listbox',\n name: 'type',\n label: 'Row type',\n text: 'Header',\n maxWidth: null,\n values: [\n {\n text: 'Header',\n value: 'thead'\n },\n {\n text: 'Body',\n value: 'tbody'\n },\n {\n text: 'Footer',\n value: 'tfoot'\n }\n ]\n },\n {\n type: 'listbox',\n name: 'align',\n label: 'Alignment',\n text: 'None',\n maxWidth: null,\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n {\n label: 'Height',\n name: 'height'\n },\n classListCtrl\n ]\n };\n if (hasAdvancedRowTab(editor)) {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalRowForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n } else {\n editor.windowManager.open({\n title: 'Row properties',\n data: data,\n body: generalRowForm,\n onsubmit: curry(onSubmitRowForm, editor, rows, data)\n });\n }\n };\n var RowDialog = { open: open$1 };\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.Env');\n\n var DefaultRenderOptions = {\n styles: {\n 'border-collapse': 'collapse',\n 'width': '100%'\n },\n attributes: { border: '1' },\n percentages: true\n };\n var makeTable = function () {\n return Element.fromTag('table');\n };\n var tableBody = function () {\n return Element.fromTag('tbody');\n };\n var tableRow = function () {\n return Element.fromTag('tr');\n };\n var tableHeaderCell = function () {\n return Element.fromTag('th');\n };\n var tableCell = function () {\n return Element.fromTag('td');\n };\n var render$1 = function (rows, columns, rowHeaders, columnHeaders, renderOpts) {\n if (renderOpts === void 0) {\n renderOpts = DefaultRenderOptions;\n }\n var table = makeTable();\n setAll$1(table, renderOpts.styles);\n setAll(table, renderOpts.attributes);\n var tbody = tableBody();\n append(table, tbody);\n var trs = [];\n for (var i = 0; i < rows; i++) {\n var tr = tableRow();\n for (var j = 0; j < columns; j++) {\n var td = i < rowHeaders || j < columnHeaders ? tableHeaderCell() : tableCell();\n if (j < columnHeaders) {\n set(td, 'scope', 'row');\n }\n if (i < rowHeaders) {\n set(td, 'scope', 'col');\n }\n append(td, Element.fromTag('br'));\n if (renderOpts.percentages) {\n set$1(td, 'width', 100 / columns + '%');\n }\n append(tr, td);\n }\n trs.push(tr);\n }\n append$1(tbody, trs);\n return table;\n };\n\n var get$7 = function (element) {\n return element.dom().innerHTML;\n };\n var getOuter$2 = function (element) {\n var container = Element.fromTag('div');\n var clone = Element.fromDom(element.dom().cloneNode(true));\n append(container, clone);\n return get$7(container);\n };\n\n var placeCaretInCell = function (editor, cell) {\n editor.selection.select(cell.dom(), true);\n editor.selection.collapse(true);\n };\n var selectFirstCellInTable = function (editor, tableElm) {\n descendant$1(tableElm, 'td,th').each(curry(placeCaretInCell, editor));\n };\n var fireEvents = function (editor, table) {\n each(descendants$1(table, 'tr'), function (row) {\n fireNewRow(editor, row.dom());\n each(descendants$1(row, 'th,td'), function (cell) {\n fireNewCell(editor, cell.dom());\n });\n });\n };\n var isPercentage = function (width) {\n return isString(width) && width.indexOf('%') !== -1;\n };\n var insert$1 = function (editor, columns, rows) {\n var defaultStyles = getDefaultStyles(editor);\n var options = {\n styles: defaultStyles,\n attributes: getDefaultAttributes(editor),\n percentages: isPercentage(defaultStyles.width) && !isPixelsForced(editor)\n };\n var table = render$1(rows, columns, 0, 0, options);\n set(table, 'data-mce-id', '__mce');\n var html = getOuter$2(table);\n editor.insertContent(html);\n return descendant$1(getBody$1(editor), 'table[data-mce-id=\"__mce\"]').map(function (table) {\n if (isPixelsForced(editor)) {\n set$1(table, 'width', get$1(table, 'width'));\n }\n remove(table, 'data-mce-id');\n fireEvents(editor, table);\n selectFirstCellInTable(editor, table);\n return table.dom();\n }).getOr(null);\n };\n var InsertTable = { insert: insert$1 };\n\n function styleTDTH(dom, elm, name, value) {\n if (elm.tagName === 'TD' || elm.tagName === 'TH') {\n dom.setStyle(elm, name, value);\n } else {\n if (elm.children) {\n for (var i = 0; i < elm.children.length; i++) {\n styleTDTH(dom, elm.children[i], name, value);\n }\n }\n }\n }\n var extractDataFromElement$2 = function (editor, tableElm) {\n var dom = editor.dom;\n var data = {\n width: dom.getStyle(tableElm, 'width') || dom.getAttrib(tableElm, 'width'),\n height: dom.getStyle(tableElm, 'height') || dom.getAttrib(tableElm, 'height'),\n cellspacing: dom.getStyle(tableElm, 'border-spacing') || dom.getAttrib(tableElm, 'cellspacing'),\n cellpadding: dom.getAttrib(tableElm, 'data-mce-cell-padding') || dom.getAttrib(tableElm, 'cellpadding') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'padding'),\n border: dom.getAttrib(tableElm, 'data-mce-border') || dom.getAttrib(tableElm, 'border') || Styles$1.getTDTHOverallStyle(editor.dom, tableElm, 'border'),\n borderColor: dom.getAttrib(tableElm, 'data-mce-border-color'),\n caption: !!dom.select('caption', tableElm)[0],\n class: dom.getAttrib(tableElm, 'class')\n };\n global$1.each('left center right'.split(' '), function (name) {\n if (editor.formatter.matchNode(tableElm, 'align' + name)) {\n data.align = name;\n }\n });\n if (hasAdvancedTableTab(editor)) {\n global$1.extend(data, Helpers.extractAdvancedStyles(dom, tableElm));\n }\n return data;\n };\n var applyDataToElement = function (editor, tableElm, data) {\n var dom = editor.dom;\n var attrs = {};\n var styles = {};\n attrs.class = data.class;\n styles.height = addSizeSuffix(data.height);\n if (dom.getAttrib(tableElm, 'width') && !shouldStyleWithCss(editor)) {\n attrs.width = removePxSuffix(data.width);\n } else {\n styles.width = addSizeSuffix(data.width);\n }\n if (shouldStyleWithCss(editor)) {\n styles['border-width'] = addSizeSuffix(data.border);\n styles['border-spacing'] = addSizeSuffix(data.cellspacing);\n global$1.extend(attrs, {\n 'data-mce-border-color': data.borderColor,\n 'data-mce-cell-padding': data.cellpadding,\n 'data-mce-border': data.border\n });\n } else {\n global$1.extend(attrs, {\n border: data.border,\n cellpadding: data.cellpadding,\n cellspacing: data.cellspacing\n });\n }\n if (shouldStyleWithCss(editor)) {\n if (tableElm.children) {\n for (var i = 0; i < tableElm.children.length; i++) {\n styleTDTH(dom, tableElm.children[i], {\n 'border-width': addSizeSuffix(data.border),\n 'border-color': data.borderColor,\n 'padding': addSizeSuffix(data.cellpadding)\n });\n }\n }\n }\n if (data.style) {\n global$1.extend(styles, dom.parseStyle(data.style));\n } else {\n styles = global$1.extend({}, dom.parseStyle(dom.getAttrib(tableElm, 'style')), styles);\n }\n attrs.style = dom.serializeStyle(styles);\n dom.setAttribs(tableElm, attrs);\n };\n var onSubmitTableForm = function (editor, tableElm, evt) {\n var dom = editor.dom;\n var captionElm;\n var data;\n if (hasAdvancedTableTab(editor)) {\n Helpers.syncAdvancedStyleFields(editor, evt);\n }\n data = evt.control.rootControl.toJSON();\n if (data.class === false) {\n delete data.class;\n }\n editor.undoManager.transact(function () {\n if (!tableElm) {\n tableElm = InsertTable.insert(editor, data.cols || 1, data.rows || 1);\n }\n applyDataToElement(editor, tableElm, data);\n captionElm = dom.select('caption', tableElm)[0];\n if (captionElm && !data.caption) {\n dom.remove(captionElm);\n }\n if (!captionElm && data.caption) {\n captionElm = dom.create('caption');\n captionElm.innerHTML = !global$2.ie ? '
    ' : '\\xA0';\n tableElm.insertBefore(captionElm, tableElm.firstChild);\n }\n Styles$1.unApplyAlign(editor, tableElm);\n if (data.align) {\n Styles$1.applyAlign(editor, tableElm, data.align);\n }\n editor.focus();\n editor.addVisual();\n });\n };\n var open$2 = function (editor, isProps) {\n var dom = editor.dom;\n var tableElm, colsCtrl, rowsCtrl, classListCtrl, data = {}, generalTableForm;\n if (isProps === true) {\n tableElm = dom.getParent(editor.selection.getStart(), 'table');\n if (tableElm) {\n data = extractDataFromElement$2(editor, tableElm);\n }\n } else {\n colsCtrl = {\n label: 'Cols',\n name: 'cols'\n };\n rowsCtrl = {\n label: 'Rows',\n name: 'rows'\n };\n }\n if (getTableClassList(editor).length > 0) {\n if (data.class) {\n data.class = data.class.replace(/\\s*mce\\-item\\-table\\s*/g, '');\n }\n classListCtrl = {\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Helpers.buildListItems(getTableClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n block: 'table',\n classes: [item.value]\n });\n };\n }\n })\n };\n }\n generalTableForm = {\n type: 'form',\n layout: 'flex',\n direction: 'column',\n labelGapCalc: 'children',\n padding: 0,\n items: [\n {\n type: 'form',\n labelGapCalc: false,\n padding: 0,\n layout: 'grid',\n columns: 2,\n defaults: {\n type: 'textbox',\n maxWidth: 50\n },\n items: hasAppearanceOptions(editor) ? [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Cell spacing',\n name: 'cellspacing'\n },\n {\n label: 'Cell padding',\n name: 'cellpadding'\n },\n {\n label: 'Border',\n name: 'border'\n },\n {\n label: 'Caption',\n name: 'caption',\n type: 'checkbox'\n }\n ] : [\n colsCtrl,\n rowsCtrl,\n {\n label: 'Width',\n name: 'width',\n onchange: curry(Helpers.updateStyleField, editor)\n },\n {\n label: 'Height',\n name: 'height',\n onchange: curry(Helpers.updateStyleField, editor)\n }\n ]\n },\n {\n label: 'Alignment',\n name: 'align',\n type: 'listbox',\n text: 'None',\n values: [\n {\n text: 'None',\n value: ''\n },\n {\n text: 'Left',\n value: 'left'\n },\n {\n text: 'Center',\n value: 'center'\n },\n {\n text: 'Right',\n value: 'right'\n }\n ]\n },\n classListCtrl\n ]\n };\n if (hasAdvancedTableTab(editor)) {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n bodyType: 'tabpanel',\n body: [\n {\n title: 'General',\n type: 'form',\n items: generalTableForm\n },\n Helpers.createStyleForm(editor)\n ],\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n } else {\n editor.windowManager.open({\n title: 'Table properties',\n data: data,\n body: generalTableForm,\n onsubmit: curry(onSubmitTableForm, editor, tableElm)\n });\n }\n };\n var TableDialog = { open: open$2 };\n\n var each$3 = global$1.each;\n var registerCommands = function (editor, actions, cellSelection, selections, clipboardRows) {\n var isRoot = getIsRoot(editor);\n var eraseTable = function () {\n getSelectionStartCell().orThunk(getSelectionStartCaption).each(function (cellOrCaption) {\n var table = TableLookup.table(cellOrCaption, isRoot);\n table.filter(not(isRoot)).each(function (table) {\n var cursor = Element.fromText('');\n after(table, cursor);\n remove$2(table);\n var rng = editor.dom.createRng();\n rng.setStart(cursor.dom(), 0);\n rng.setEnd(cursor.dom(), 0);\n editor.selection.setRng(rng);\n });\n });\n };\n var getSelectionStartFromSelector = function (selector) {\n return function () {\n return Option.from(editor.dom.getParent(editor.selection.getStart(), selector)).map(Element.fromDom);\n };\n };\n var getSelectionStartCaption = getSelectionStartFromSelector('caption');\n var getSelectionStartCell = getSelectionStartFromSelector('th,td');\n var getTableFromCell = function (cell) {\n return TableLookup.table(cell, isRoot);\n };\n var getSize = function (table) {\n return {\n width: getPixelWidth$1(table.dom()),\n height: getPixelWidth$1(table.dom())\n };\n };\n var resizeChange = function (editor, oldSize, table) {\n var newSize = getSize(table);\n if (oldSize.width !== newSize.width || oldSize.height !== newSize.height) {\n fireObjectResizeStart(editor, table.dom(), oldSize.width, oldSize.height);\n fireObjectResized(editor, table.dom(), newSize.width, newSize.height);\n }\n };\n var actOnSelection = function (execute) {\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var targets = TableTargets.forMenu(selections, table, cell);\n var beforeSize = getSize(table);\n execute(table, targets).each(function (rng) {\n resizeChange(editor, beforeSize, table);\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n removeDataStyle(table);\n });\n });\n });\n };\n var copyRowSelection = function (execute) {\n return getSelectionStartCell().bind(function (cell) {\n return getTableFromCell(cell).bind(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var targets = TableTargets.forMenu(selections, table, cell);\n var generators = TableFill.cellOperations(noop, doc, Option.none());\n return CopyRows.copyRows(table, targets, generators);\n });\n });\n };\n var pasteOnSelection = function (execute) {\n clipboardRows.get().each(function (rows) {\n var clonedRows = map(rows, function (row) {\n return deep(row);\n });\n getSelectionStartCell().each(function (cell) {\n getTableFromCell(cell).each(function (table) {\n var doc = Element.fromDom(editor.getDoc());\n var generators = TableFill.paste(doc);\n var targets = TableTargets.pasteRows(selections, table, cell, clonedRows, generators);\n execute(table, targets).each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n cellSelection.clear(table);\n });\n });\n });\n });\n };\n each$3({\n mceTableSplitCells: function () {\n actOnSelection(actions.unmergeCells);\n },\n mceTableMergeCells: function () {\n actOnSelection(actions.mergeCells);\n },\n mceTableInsertRowBefore: function () {\n actOnSelection(actions.insertRowsBefore);\n },\n mceTableInsertRowAfter: function () {\n actOnSelection(actions.insertRowsAfter);\n },\n mceTableInsertColBefore: function () {\n actOnSelection(actions.insertColumnsBefore);\n },\n mceTableInsertColAfter: function () {\n actOnSelection(actions.insertColumnsAfter);\n },\n mceTableDeleteCol: function () {\n actOnSelection(actions.deleteColumn);\n },\n mceTableDeleteRow: function () {\n actOnSelection(actions.deleteRow);\n },\n mceTableCutRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n actOnSelection(actions.deleteRow);\n },\n mceTableCopyRow: function (grid) {\n clipboardRows.set(copyRowSelection());\n },\n mceTablePasteRowBefore: function (grid) {\n pasteOnSelection(actions.pasteRowsBefore);\n },\n mceTablePasteRowAfter: function (grid) {\n pasteOnSelection(actions.pasteRowsAfter);\n },\n mceTableDelete: eraseTable\n }, function (func, name) {\n editor.addCommand(name, func);\n });\n each$3({\n mceInsertTable: curry(TableDialog.open, editor),\n mceTableProps: curry(TableDialog.open, editor, true),\n mceTableRowProps: curry(RowDialog.open, editor),\n mceTableCellProps: curry(CellDialog.open, editor)\n }, function (func, name) {\n editor.addCommand(name, function (ui, val) {\n func(val);\n });\n });\n };\n var Commands = { registerCommands: registerCommands };\n\n var only = function (element) {\n var parent = Option.from(element.dom().documentElement).map(Element.fromDom).getOr(element);\n return {\n parent: constant(parent),\n view: constant(element),\n origin: constant(Position(0, 0))\n };\n };\n var detached = function (editable, chrome) {\n var origin = function () {\n return absolute(chrome);\n };\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: origin\n };\n };\n var body$1 = function (editable, chrome) {\n return {\n parent: constant(chrome),\n view: constant(editable),\n origin: constant(Position(0, 0))\n };\n };\n var ResizeWire = {\n only: only,\n detached: detached,\n body: body$1\n };\n\n var Event = function (fields) {\n var struct = Immutable.apply(null, fields);\n var handlers = [];\n var bind = function (handler) {\n if (handler === undefined) {\n throw new Error('Event bind error: undefined handler');\n }\n handlers.push(handler);\n };\n var unbind = function (handler) {\n handlers = filter(handlers, function (h) {\n return h !== handler;\n });\n };\n var trigger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var event = struct.apply(null, args);\n each(handlers, function (handler) {\n handler(event);\n });\n };\n return {\n bind: bind,\n unbind: unbind,\n trigger: trigger\n };\n };\n\n var create$1 = function (typeDefs) {\n var registry = map$1(typeDefs, function (event) {\n return {\n bind: event.bind,\n unbind: event.unbind\n };\n });\n var trigger = map$1(typeDefs, function (event) {\n return event.trigger;\n });\n return {\n registry: registry,\n trigger: trigger\n };\n };\n var Events = { create: create$1 };\n\n var mkEvent = function (target, x, y, stop, prevent, kill, raw) {\n return {\n target: constant(target),\n x: constant(x),\n y: constant(y),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(raw)\n };\n };\n var handle = function (filter, handler) {\n return function (rawEvent) {\n if (!filter(rawEvent)) {\n return;\n }\n var target = Element.fromDom(rawEvent.target);\n var stop = function () {\n rawEvent.stopPropagation();\n };\n var prevent = function () {\n rawEvent.preventDefault();\n };\n var kill = compose(prevent, stop);\n var evt = mkEvent(target, rawEvent.clientX, rawEvent.clientY, stop, prevent, kill, rawEvent);\n handler(evt);\n };\n };\n var binder = function (element, event, filter, handler, useCapture) {\n var wrapped = handle(filter, handler);\n element.dom().addEventListener(event, wrapped, useCapture);\n return { unbind: curry(unbind, element, event, wrapped, useCapture) };\n };\n var bind$1 = function (element, event, filter, handler) {\n return binder(element, event, filter, handler, false);\n };\n var unbind = function (element, event, handler, useCapture) {\n element.dom().removeEventListener(event, handler, useCapture);\n };\n\n var filter$1 = constant(true);\n var bind$2 = function (element, event, handler) {\n return bind$1(element, event, filter$1, handler);\n };\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow$1 = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge$3 = baseMerge(shallow$1);\n\n var styles$1 = css('ephox-dragster');\n var Styles$2 = { resolve: styles$1.resolve };\n\n var Blocker = function (options) {\n var settings = merge$3({ layerClass: Styles$2.resolve('blocker') }, options);\n var div = Element.fromTag('div');\n set(div, 'role', 'presentation');\n setAll$1(div, {\n position: 'fixed',\n left: '0px',\n top: '0px',\n width: '100%',\n height: '100%'\n });\n add$2(div, Styles$2.resolve('blocker'));\n add$2(div, settings.layerClass);\n var element = function () {\n return div;\n };\n var destroy = function () {\n remove$2(div);\n };\n return {\n element: element,\n destroy: destroy\n };\n };\n\n var DragMode = exactly([\n 'compare',\n 'extract',\n 'mutate',\n 'sink'\n ]);\n var DragSink = exactly([\n 'element',\n 'start',\n 'stop',\n 'destroy'\n ]);\n var DragApi = exactly([\n 'forceDrop',\n 'drop',\n 'move',\n 'delayDrop'\n ]);\n\n var compare = function (old, nu) {\n return Position(nu.left() - old.left(), nu.top() - old.top());\n };\n var extract$1 = function (event) {\n return Option.some(Position(event.x(), event.y()));\n };\n var mutate = function (mutation, info) {\n mutation.mutate(info.left(), info.top());\n };\n var sink = function (dragApi, settings) {\n var blocker = Blocker(settings);\n var mdown = bind$2(blocker.element(), 'mousedown', dragApi.forceDrop);\n var mup = bind$2(blocker.element(), 'mouseup', dragApi.drop);\n var mmove = bind$2(blocker.element(), 'mousemove', dragApi.move);\n var mout = bind$2(blocker.element(), 'mouseout', dragApi.delayDrop);\n var destroy = function () {\n blocker.destroy();\n mup.unbind();\n mmove.unbind();\n mout.unbind();\n mdown.unbind();\n };\n var start = function (parent) {\n append(parent, blocker.element());\n };\n var stop = function () {\n remove$2(blocker.element());\n };\n return DragSink({\n element: blocker.element,\n start: start,\n stop: stop,\n destroy: destroy\n });\n };\n var MouseDrag = DragMode({\n compare: compare,\n extract: extract$1,\n sink: sink,\n mutate: mutate\n });\n\n var last$2 = function (fn, rate) {\n var timer = null;\n var cancel = function () {\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n timer = null;\n }\n };\n var throttle = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (timer !== null) {\n domGlobals.clearTimeout(timer);\n }\n timer = domGlobals.setTimeout(function () {\n fn.apply(null, args);\n timer = null;\n }, rate);\n };\n return {\n cancel: cancel,\n throttle: throttle\n };\n };\n\n function InDrag () {\n var previous = Option.none();\n var reset = function () {\n previous = Option.none();\n };\n var update = function (mode, nu) {\n var result = previous.map(function (old) {\n return mode.compare(old, nu);\n });\n previous = Option.some(nu);\n return result;\n };\n var onEvent = function (event, mode) {\n var dataOption = mode.extract(event);\n dataOption.each(function (data) {\n var offset = update(mode, data);\n offset.each(function (d) {\n events.trigger.move(d);\n });\n });\n };\n var events = Events.create({ move: Event(['info']) });\n return {\n onEvent: onEvent,\n reset: reset,\n events: events.registry\n };\n }\n\n function NoDrag () {\n return {\n onEvent: noop,\n reset: noop\n };\n }\n\n function Movement () {\n var noDragState = NoDrag();\n var inDragState = InDrag();\n var dragState = noDragState;\n var on = function () {\n dragState.reset();\n dragState = inDragState;\n };\n var off = function () {\n dragState.reset();\n dragState = noDragState;\n };\n var onEvent = function (event, mode) {\n dragState.onEvent(event, mode);\n };\n var isOn = function () {\n return dragState === inDragState;\n };\n return {\n on: on,\n off: off,\n isOn: isOn,\n onEvent: onEvent,\n events: inDragState.events\n };\n }\n\n var setup = function (mutation, mode, settings) {\n var active = false;\n var events = Events.create({\n start: Event([]),\n stop: Event([])\n });\n var movement = Movement();\n var drop = function () {\n sink.stop();\n if (movement.isOn()) {\n movement.off();\n events.trigger.stop();\n }\n };\n var throttledDrop = last$2(drop, 200);\n var go = function (parent) {\n sink.start(parent);\n movement.on();\n events.trigger.start();\n };\n var mousemove = function (event) {\n throttledDrop.cancel();\n movement.onEvent(event, mode);\n };\n movement.events.move.bind(function (event) {\n mode.mutate(mutation, event.info());\n });\n var on = function () {\n active = true;\n };\n var off = function () {\n active = false;\n };\n var runIfActive = function (f) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (active) {\n f.apply(null, args);\n }\n };\n };\n var sink = mode.sink(DragApi({\n forceDrop: drop,\n drop: runIfActive(drop),\n move: runIfActive(mousemove),\n delayDrop: runIfActive(throttledDrop.throttle)\n }), settings);\n var destroy = function () {\n sink.destroy();\n };\n return {\n element: sink.element,\n go: go,\n on: on,\n off: off,\n destroy: destroy,\n events: events.registry\n };\n };\n var Dragging = { setup: setup };\n\n var transform$1 = function (mutation, settings) {\n if (settings === void 0) {\n settings = {};\n }\n var mode = settings.mode !== undefined ? settings.mode : MouseDrag;\n return Dragging.setup(mutation, mode, settings);\n };\n var Dragger = { transform: transform$1 };\n\n var Mutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta'\n ])\n });\n var mutate = function (x, y) {\n events.trigger.drag(x, y);\n };\n return {\n mutate: mutate,\n events: events.registry\n };\n };\n\n var BarMutation = function () {\n var events = Events.create({\n drag: Event([\n 'xDelta',\n 'yDelta',\n 'target'\n ])\n });\n var target = Option.none();\n var delegate = Mutation();\n delegate.events.drag.bind(function (event) {\n target.each(function (t) {\n events.trigger.drag(event.xDelta(), event.yDelta(), t);\n });\n });\n var assign = function (t) {\n target = Option.some(t);\n };\n var get = function () {\n return target;\n };\n return {\n assign: assign,\n get: get,\n mutate: delegate.mutate,\n events: events.registry\n };\n };\n\n var isContentEditableTrue = function (elm) {\n return get(elm, 'contenteditable') === 'true';\n };\n var findClosestContentEditable = function (target, isRoot) {\n return closest$1(target, '[contenteditable]', isRoot);\n };\n\n var resizeBarDragging = Styles.resolve('resizer-bar-dragging');\n var BarManager = function (wire, direction, hdirection) {\n var mutation = BarMutation();\n var resizing = Dragger.transform(mutation, {});\n var hoverTable = Option.none();\n var getResizer = function (element, type) {\n return Option.from(get(element, type));\n };\n mutation.events.drag.bind(function (event) {\n getResizer(event.target(), 'data-row').each(function (_dataRow) {\n var currentRow = CellUtils.getInt(event.target(), 'top');\n set$1(event.target(), 'top', currentRow + event.yDelta() + 'px');\n });\n getResizer(event.target(), 'data-column').each(function (_dataCol) {\n var currentCol = CellUtils.getInt(event.target(), 'left');\n set$1(event.target(), 'left', currentCol + event.xDelta() + 'px');\n });\n });\n var getDelta = function (target, dir) {\n var newX = CellUtils.getInt(target, dir);\n var oldX = parseInt(get(target, 'data-initial-' + dir), 10);\n return newX - oldX;\n };\n resizing.events.stop.bind(function () {\n mutation.get().each(function (target) {\n hoverTable.each(function (table) {\n getResizer(target, 'data-row').each(function (row) {\n var delta = getDelta(target, 'top');\n remove(target, 'data-initial-top');\n events.trigger.adjustHeight(table, delta, parseInt(row, 10));\n });\n getResizer(target, 'data-column').each(function (column) {\n var delta = getDelta(target, 'left');\n remove(target, 'data-initial-left');\n events.trigger.adjustWidth(table, delta, parseInt(column, 10));\n });\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n });\n var handler = function (target, dir) {\n events.trigger.startAdjust();\n mutation.assign(target);\n set(target, 'data-initial-' + dir, parseInt(get$1(target, dir), 10));\n add$2(target, resizeBarDragging);\n set$1(target, 'opacity', '0.2');\n resizing.go(wire.parent());\n };\n var mousedown = bind$2(wire.parent(), 'mousedown', function (event) {\n if (Bars.isRowBar(event.target())) {\n handler(event.target(), 'top');\n }\n if (Bars.isColBar(event.target())) {\n handler(event.target(), 'left');\n }\n });\n var isRoot = function (e) {\n return eq(e, wire.view());\n };\n var findClosestEditableTable = function (target) {\n return closest$1(target, 'table', isRoot).filter(function (table) {\n return findClosestContentEditable(table, isRoot).exists(isContentEditableTrue);\n });\n };\n var mouseover = bind$2(wire.view(), 'mouseover', function (event) {\n findClosestEditableTable(event.target()).fold(function () {\n if (inBody(event.target())) {\n Bars.destroy(wire);\n }\n }, function (table) {\n hoverTable = Option.some(table);\n Bars.refresh(wire, table, hdirection, direction);\n });\n });\n var destroy = function () {\n mousedown.unbind();\n mouseover.unbind();\n resizing.destroy();\n Bars.destroy(wire);\n };\n var refresh = function (tbl) {\n Bars.refresh(wire, tbl, hdirection, direction);\n };\n var events = Events.create({\n adjustHeight: Event([\n 'table',\n 'delta',\n 'row'\n ]),\n adjustWidth: Event([\n 'table',\n 'delta',\n 'column'\n ]),\n startAdjust: Event([])\n });\n return {\n destroy: destroy,\n refresh: refresh,\n on: resizing.on,\n off: resizing.off,\n hideBars: curry(Bars.hide, wire),\n showBars: curry(Bars.show, wire),\n events: events.registry\n };\n };\n\n var create$2 = function (wire, vdirection) {\n var hdirection = BarPositions.height;\n var manager = BarManager(wire, vdirection, hdirection);\n var events = Events.create({\n beforeResize: Event(['table']),\n afterResize: Event(['table']),\n startDrag: Event([])\n });\n manager.events.adjustHeight.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = hdirection.delta(event.delta(), event.table());\n Adjustments.adjustHeight(event.table(), delta, event.row(), hdirection);\n events.trigger.afterResize(event.table());\n });\n manager.events.startAdjust.bind(function (event) {\n events.trigger.startDrag();\n });\n manager.events.adjustWidth.bind(function (event) {\n events.trigger.beforeResize(event.table());\n var delta = vdirection.delta(event.delta(), event.table());\n Adjustments.adjustWidth(event.table(), delta, event.column(), vdirection);\n events.trigger.afterResize(event.table());\n });\n return {\n on: manager.on,\n off: manager.off,\n hideBars: manager.hideBars,\n showBars: manager.showBars,\n destroy: manager.destroy,\n events: events.registry\n };\n };\n var TableResize = { create: create$2 };\n\n var createContainer = function () {\n var container = Element.fromTag('div');\n setAll$1(container, {\n position: 'static',\n height: '0',\n width: '0',\n padding: '0',\n margin: '0',\n border: '0'\n });\n append(body(), container);\n return container;\n };\n var get$8 = function (editor, container) {\n return editor.inline ? ResizeWire.body(getBody$1(editor), createContainer()) : ResizeWire.only(Element.fromDom(editor.getDoc()));\n };\n var remove$6 = function (editor, wire) {\n if (editor.inline) {\n remove$2(wire.parent());\n }\n };\n var TableWire = {\n get: get$8,\n remove: remove$6\n };\n\n var ResizeHandler = function (editor) {\n var selectionRng = Option.none();\n var resize = Option.none();\n var wire = Option.none();\n var percentageBasedSizeRegex = /(\\d+(\\.\\d+)?)%/;\n var startW, startRawW;\n var isTable = function (elm) {\n return elm.nodeName === 'TABLE';\n };\n var getRawWidth = function (elm) {\n return editor.dom.getStyle(elm, 'width') || editor.dom.getAttrib(elm, 'width');\n };\n var lazyResize = function () {\n return resize;\n };\n var lazyWire = function () {\n return wire.getOr(ResizeWire.only(Element.fromDom(editor.getBody())));\n };\n var destroy = function () {\n resize.each(function (sz) {\n sz.destroy();\n });\n wire.each(function (w) {\n TableWire.remove(editor, w);\n });\n };\n editor.on('init', function () {\n var direction = TableDirection(Direction.directionAt);\n var rawWire = TableWire.get(editor);\n wire = Option.some(rawWire);\n if (hasObjectResizing(editor) && hasTableResizeBars(editor)) {\n var sz = TableResize.create(rawWire, direction);\n sz.on();\n sz.events.startDrag.bind(function (event) {\n selectionRng = Option.some(editor.selection.getRng());\n });\n sz.events.beforeResize.bind(function (event) {\n var rawTable = event.table().dom();\n fireObjectResizeStart(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n });\n sz.events.afterResize.bind(function (event) {\n var table = event.table();\n var rawTable = table.dom();\n removeDataStyle(table);\n selectionRng.each(function (rng) {\n editor.selection.setRng(rng);\n editor.focus();\n });\n fireObjectResized(editor, rawTable, getPixelWidth$1(rawTable), getPixelHeight(rawTable));\n editor.undoManager.add();\n });\n resize = Option.some(sz);\n }\n });\n editor.on('ObjectResizeStart', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n startW = e.width;\n startRawW = getRawWidth(targetElm);\n }\n });\n editor.on('ObjectResized', function (e) {\n var targetElm = e.target;\n if (isTable(targetElm)) {\n var table = targetElm;\n if (percentageBasedSizeRegex.test(startRawW)) {\n var percentW = parseFloat(percentageBasedSizeRegex.exec(startRawW)[1]);\n var targetPercentW = e.width * percentW / startW;\n editor.dom.setStyle(table, 'width', targetPercentW + '%');\n } else {\n var newCellSizes_1 = [];\n global$1.each(table.rows, function (row) {\n global$1.each(row.cells, function (cell) {\n var width = editor.dom.getStyle(cell, 'width', true);\n newCellSizes_1.push({\n cell: cell,\n width: width\n });\n });\n });\n global$1.each(newCellSizes_1, function (newCellSize) {\n editor.dom.setStyle(newCellSize.cell, 'width', newCellSize.width);\n editor.dom.setAttrib(newCellSize.cell, 'width', null);\n });\n }\n }\n });\n return {\n lazyResize: lazyResize,\n lazyWire: lazyWire,\n destroy: destroy\n };\n };\n\n var adt$1 = Adt.generate([\n { none: ['current'] },\n { first: ['current'] },\n {\n middle: [\n 'current',\n 'target'\n ]\n },\n { last: ['current'] }\n ]);\n var none$1 = function (current) {\n if (current === void 0) {\n current = undefined;\n }\n return adt$1.none(current);\n };\n var CellLocation = __assign(__assign({}, adt$1), { none: none$1 });\n\n var detect$4 = function (current, isRoot) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var all = TableLookup.cells(table);\n var index = findIndex(all, function (x) {\n return eq(current, x);\n });\n return index.map(function (ind) {\n return {\n index: constant(ind),\n all: constant(all)\n };\n });\n });\n };\n var next = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none(current);\n }, function (info) {\n return info.index() + 1 < info.all().length ? CellLocation.middle(current, info.all()[info.index() + 1]) : CellLocation.last(current);\n });\n };\n var prev = function (current, isRoot) {\n var detection = detect$4(current, isRoot);\n return detection.fold(function () {\n return CellLocation.none();\n }, function (info) {\n return info.index() - 1 >= 0 ? CellLocation.middle(current, info.all()[info.index() - 1]) : CellLocation.first(current);\n });\n };\n var CellNavigation = {\n next: next,\n prev: prev\n };\n\n var create$3 = Immutable('start', 'soffset', 'finish', 'foffset');\n var SimRange = { create: create$3 };\n\n var adt$2 = Adt.generate([\n { before: ['element'] },\n {\n on: [\n 'element',\n 'offset'\n ]\n },\n { after: ['element'] }\n ]);\n var cata$1 = function (subject, onBefore, onOn, onAfter) {\n return subject.fold(onBefore, onOn, onAfter);\n };\n var getStart = function (situ) {\n return situ.fold(identity, identity, identity);\n };\n var before$2 = adt$2.before;\n var on = adt$2.on;\n var after$2 = adt$2.after;\n var Situ = {\n before: before$2,\n on: on,\n after: after$2,\n cata: cata$1,\n getStart: getStart\n };\n\n var adt$3 = Adt.generate([\n { domRange: ['rng'] },\n {\n relative: [\n 'startSitu',\n 'finishSitu'\n ]\n },\n {\n exact: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var exactFromRange = function (simRange) {\n return adt$3.exact(simRange.start(), simRange.soffset(), simRange.finish(), simRange.foffset());\n };\n var getStart$1 = function (selection) {\n return selection.match({\n domRange: function (rng) {\n return Element.fromDom(rng.startContainer);\n },\n relative: function (startSitu, finishSitu) {\n return Situ.getStart(startSitu);\n },\n exact: function (start, soffset, finish, foffset) {\n return start;\n }\n });\n };\n var domRange = adt$3.domRange;\n var relative = adt$3.relative;\n var exact = adt$3.exact;\n var getWin = function (selection) {\n var start = getStart$1(selection);\n return defaultView(start);\n };\n var range$1 = SimRange.create;\n var Selection = {\n domRange: domRange,\n relative: relative,\n exact: exact,\n exactFromRange: exactFromRange,\n getWin: getWin,\n range: range$1\n };\n\n var selectNodeContents = function (win, element) {\n var rng = win.document.createRange();\n selectNodeContentsUsing(rng, element);\n return rng;\n };\n var selectNodeContentsUsing = function (rng, element) {\n rng.selectNodeContents(element.dom());\n };\n var setStart = function (rng, situ) {\n situ.fold(function (e) {\n rng.setStartBefore(e.dom());\n }, function (e, o) {\n rng.setStart(e.dom(), o);\n }, function (e) {\n rng.setStartAfter(e.dom());\n });\n };\n var setFinish = function (rng, situ) {\n situ.fold(function (e) {\n rng.setEndBefore(e.dom());\n }, function (e, o) {\n rng.setEnd(e.dom(), o);\n }, function (e) {\n rng.setEndAfter(e.dom());\n });\n };\n var relativeToNative = function (win, startSitu, finishSitu) {\n var range = win.document.createRange();\n setStart(range, startSitu);\n setFinish(range, finishSitu);\n return range;\n };\n var exactToNative = function (win, start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var toRect = function (rect) {\n return {\n left: constant(rect.left),\n top: constant(rect.top),\n right: constant(rect.right),\n bottom: constant(rect.bottom),\n width: constant(rect.width),\n height: constant(rect.height)\n };\n };\n var getFirstRect = function (rng) {\n var rects = rng.getClientRects();\n var rect = rects.length > 0 ? rects[0] : rng.getBoundingClientRect();\n return rect.width > 0 || rect.height > 0 ? Option.some(rect).map(toRect) : Option.none();\n };\n\n var adt$4 = Adt.generate([\n {\n ltr: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n },\n {\n rtl: [\n 'start',\n 'soffset',\n 'finish',\n 'foffset'\n ]\n }\n ]);\n var fromRange = function (win, type, range) {\n return type(Element.fromDom(range.startContainer), range.startOffset, Element.fromDom(range.endContainer), range.endOffset);\n };\n var getRanges = function (win, selection) {\n return selection.match({\n domRange: function (rng) {\n return {\n ltr: constant(rng),\n rtl: Option.none\n };\n },\n relative: function (startSitu, finishSitu) {\n return {\n ltr: cached(function () {\n return relativeToNative(win, startSitu, finishSitu);\n }),\n rtl: cached(function () {\n return Option.some(relativeToNative(win, finishSitu, startSitu));\n })\n };\n },\n exact: function (start, soffset, finish, foffset) {\n return {\n ltr: cached(function () {\n return exactToNative(win, start, soffset, finish, foffset);\n }),\n rtl: cached(function () {\n return Option.some(exactToNative(win, finish, foffset, start, soffset));\n })\n };\n }\n });\n };\n var doDiagnose = function (win, ranges) {\n var rng = ranges.ltr();\n if (rng.collapsed) {\n var reversed = ranges.rtl().filter(function (rev) {\n return rev.collapsed === false;\n });\n return reversed.map(function (rev) {\n return adt$4.rtl(Element.fromDom(rev.endContainer), rev.endOffset, Element.fromDom(rev.startContainer), rev.startOffset);\n }).getOrThunk(function () {\n return fromRange(win, adt$4.ltr, rng);\n });\n } else {\n return fromRange(win, adt$4.ltr, rng);\n }\n };\n var diagnose = function (win, selection) {\n var ranges = getRanges(win, selection);\n return doDiagnose(win, ranges);\n };\n var asLtrRange = function (win, selection) {\n var diagnosis = diagnose(win, selection);\n return diagnosis.match({\n ltr: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n },\n rtl: function (start, soffset, finish, foffset) {\n var rng = win.document.createRange();\n rng.setStart(finish.dom(), foffset);\n rng.setEnd(start.dom(), soffset);\n return rng;\n }\n });\n };\n\n var searchForPoint = function (rectForOffset, x, y, maxX, length) {\n if (length === 0) {\n return 0;\n } else if (x === maxX) {\n return length - 1;\n }\n var xDelta = maxX;\n for (var i = 1; i < length; i++) {\n var rect = rectForOffset(i);\n var curDeltaX = Math.abs(x - rect.left);\n if (y <= rect.bottom) {\n if (y < rect.top || curDeltaX > xDelta) {\n return i - 1;\n } else {\n xDelta = curDeltaX;\n }\n }\n }\n return 0;\n };\n var inRect = function (rect, x, y) {\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n };\n\n var locateOffset = function (doc, textnode, x, y, rect) {\n var rangeForOffset = function (o) {\n var r = doc.dom().createRange();\n r.setStart(textnode.dom(), o);\n r.collapse(true);\n return r;\n };\n var rectForOffset = function (o) {\n var r = rangeForOffset(o);\n return r.getBoundingClientRect();\n };\n var length = get$2(textnode).length;\n var offset = searchForPoint(rectForOffset, x, y, rect.right, length);\n return rangeForOffset(offset);\n };\n var locate = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rects = r.getClientRects();\n var foundRect = findMap(rects, function (rect) {\n return inRect(rect, x, y) ? Option.some(rect) : Option.none();\n });\n return foundRect.map(function (rect) {\n return locateOffset(doc, node, x, y, rect);\n });\n };\n\n var searchInChildren = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n var nodes = children(node);\n return findMap(nodes, function (n) {\n r.selectNode(n.dom());\n return inRect(r.getBoundingClientRect(), x, y) ? locateNode(doc, n, x, y) : Option.none();\n });\n };\n var locateNode = function (doc, node, x, y) {\n return isText(node) ? locate(doc, node, x, y) : searchInChildren(doc, node, x, y);\n };\n var locate$1 = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locateNode(doc, node, boundedX, boundedY);\n };\n\n var COLLAPSE_TO_LEFT = true;\n var COLLAPSE_TO_RIGHT = false;\n var getCollapseDirection = function (rect, x) {\n return x - rect.left < rect.right - x ? COLLAPSE_TO_LEFT : COLLAPSE_TO_RIGHT;\n };\n var createCollapsedNode = function (doc, target, collapseDirection) {\n var r = doc.dom().createRange();\n r.selectNode(target.dom());\n r.collapse(collapseDirection);\n return r;\n };\n var locateInElement = function (doc, node, x) {\n var cursorRange = doc.dom().createRange();\n cursorRange.selectNode(node.dom());\n var rect = cursorRange.getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n var f = collapseDirection === COLLAPSE_TO_LEFT ? first : last$1;\n return f(node).map(function (target) {\n return createCollapsedNode(doc, target, collapseDirection);\n });\n };\n var locateInEmpty = function (doc, node, x) {\n var rect = node.dom().getBoundingClientRect();\n var collapseDirection = getCollapseDirection(rect, x);\n return Option.some(createCollapsedNode(doc, node, collapseDirection));\n };\n var search = function (doc, node, x) {\n var f = children(node).length === 0 ? locateInEmpty : locateInElement;\n return f(doc, node, x);\n };\n\n var caretPositionFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretPositionFromPoint(x, y)).bind(function (pos) {\n if (pos.offsetNode === null) {\n return Option.none();\n }\n var r = doc.dom().createRange();\n r.setStart(pos.offsetNode, pos.offset);\n r.collapse();\n return Option.some(r);\n });\n };\n var caretRangeFromPoint = function (doc, x, y) {\n return Option.from(doc.dom().caretRangeFromPoint(x, y));\n };\n var searchTextNodes = function (doc, node, x, y) {\n var r = doc.dom().createRange();\n r.selectNode(node.dom());\n var rect = r.getBoundingClientRect();\n var boundedX = Math.max(rect.left, Math.min(rect.right, x));\n var boundedY = Math.max(rect.top, Math.min(rect.bottom, y));\n return locate$1(doc, node, boundedX, boundedY);\n };\n var searchFromPoint = function (doc, x, y) {\n return Element.fromPoint(doc, x, y).bind(function (elem) {\n var fallback = function () {\n return search(doc, elem, x);\n };\n return children(elem).length === 0 ? fallback() : searchTextNodes(doc, elem, x, y).orThunk(fallback);\n });\n };\n var availableSearch = document.caretPositionFromPoint ? caretPositionFromPoint : document.caretRangeFromPoint ? caretRangeFromPoint : searchFromPoint;\n var fromPoint$1 = function (win, x, y) {\n var doc = Element.fromDom(win.document);\n return availableSearch(doc, x, y).map(function (rng) {\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n });\n };\n\n var beforeSpecial = function (element, offset) {\n var name$1 = name(element);\n if ('input' === name$1) {\n return Situ.after(element);\n } else if (!contains([\n 'br',\n 'img'\n ], name$1)) {\n return Situ.on(element, offset);\n } else {\n return offset === 0 ? Situ.before(element) : Situ.after(element);\n }\n };\n var preprocessRelative = function (startSitu, finishSitu) {\n var start = startSitu.fold(Situ.before, beforeSpecial, Situ.after);\n var finish = finishSitu.fold(Situ.before, beforeSpecial, Situ.after);\n return Selection.relative(start, finish);\n };\n var preprocessExact = function (start, soffset, finish, foffset) {\n var startSitu = beforeSpecial(start, soffset);\n var finishSitu = beforeSpecial(finish, foffset);\n return Selection.relative(startSitu, finishSitu);\n };\n var preprocess = function (selection) {\n return selection.match({\n domRange: function (rng) {\n var start = Element.fromDom(rng.startContainer);\n var finish = Element.fromDom(rng.endContainer);\n return preprocessExact(start, rng.startOffset, finish, rng.endOffset);\n },\n relative: preprocessRelative,\n exact: preprocessExact\n });\n };\n\n var makeRange = function (start, soffset, finish, foffset) {\n var doc = owner(start);\n var rng = doc.dom().createRange();\n rng.setStart(start.dom(), soffset);\n rng.setEnd(finish.dom(), foffset);\n return rng;\n };\n var after$3 = function (start, soffset, finish, foffset) {\n var r = makeRange(start, soffset, finish, foffset);\n var same = eq(start, finish) && soffset === foffset;\n return r.collapsed && !same;\n };\n\n var doSetNativeRange = function (win, rng) {\n Option.from(win.getSelection()).each(function (selection) {\n selection.removeAllRanges();\n selection.addRange(rng);\n });\n };\n var doSetRange = function (win, start, soffset, finish, foffset) {\n var rng = exactToNative(win, start, soffset, finish, foffset);\n doSetNativeRange(win, rng);\n };\n var setLegacyRtlRange = function (win, selection, start, soffset, finish, foffset) {\n selection.collapse(start.dom(), soffset);\n selection.extend(finish.dom(), foffset);\n };\n var setRangeFromRelative = function (win, relative) {\n return diagnose(win, relative).match({\n ltr: function (start, soffset, finish, foffset) {\n doSetRange(win, start, soffset, finish, foffset);\n },\n rtl: function (start, soffset, finish, foffset) {\n var selection = win.getSelection();\n if (selection.setBaseAndExtent) {\n selection.setBaseAndExtent(start.dom(), soffset, finish.dom(), foffset);\n } else if (selection.extend) {\n try {\n setLegacyRtlRange(win, selection, start, soffset, finish, foffset);\n } catch (e) {\n doSetRange(win, finish, foffset, start, soffset);\n }\n } else {\n doSetRange(win, finish, foffset, start, soffset);\n }\n }\n });\n };\n var setExact = function (win, start, soffset, finish, foffset) {\n var relative = preprocessExact(start, soffset, finish, foffset);\n setRangeFromRelative(win, relative);\n };\n var setRelative = function (win, startSitu, finishSitu) {\n var relative = preprocessRelative(startSitu, finishSitu);\n setRangeFromRelative(win, relative);\n };\n var toNative = function (selection) {\n var win = Selection.getWin(selection).dom();\n var getDomRange = function (start, soffset, finish, foffset) {\n return exactToNative(win, start, soffset, finish, foffset);\n };\n var filtered = preprocess(selection);\n return diagnose(win, filtered).match({\n ltr: getDomRange,\n rtl: getDomRange\n });\n };\n var readRange = function (selection) {\n if (selection.rangeCount > 0) {\n var firstRng = selection.getRangeAt(0);\n var lastRng = selection.getRangeAt(selection.rangeCount - 1);\n return Option.some(SimRange.create(Element.fromDom(firstRng.startContainer), firstRng.startOffset, Element.fromDom(lastRng.endContainer), lastRng.endOffset));\n } else {\n return Option.none();\n }\n };\n var doGetExact = function (selection) {\n var anchor = Element.fromDom(selection.anchorNode);\n var focus = Element.fromDom(selection.focusNode);\n return after$3(anchor, selection.anchorOffset, focus, selection.focusOffset) ? Option.some(SimRange.create(anchor, selection.anchorOffset, focus, selection.focusOffset)) : readRange(selection);\n };\n var setToElement = function (win, element) {\n var rng = selectNodeContents(win, element);\n doSetNativeRange(win, rng);\n };\n var getExact = function (win) {\n return Option.from(win.getSelection()).filter(function (sel) {\n return sel.rangeCount > 0;\n }).bind(doGetExact);\n };\n var get$9 = function (win) {\n return getExact(win).map(function (range) {\n return Selection.exact(range.start(), range.soffset(), range.finish(), range.foffset());\n });\n };\n var getFirstRect$1 = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return getFirstRect(rng);\n };\n var getAtPoint = function (win, x, y) {\n return fromPoint$1(win, x, y);\n };\n var clear = function (win) {\n var selection = win.getSelection();\n selection.removeAllRanges();\n };\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');\n\n var forward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.next(cell), lazyWire);\n };\n var backward = function (editor, isRoot, cell, lazyWire) {\n return go(editor, isRoot, CellNavigation.prev(cell), lazyWire);\n };\n var getCellFirstCursorPosition = function (editor, cell) {\n var selection = Selection.exact(cell, 0, cell, 0);\n return toNative(selection);\n };\n var getNewRowCursorPosition = function (editor, table) {\n var rows = descendants$1(table, 'tr');\n return last(rows).bind(function (last) {\n return descendant$1(last, 'td,th').map(function (first) {\n return getCellFirstCursorPosition(editor, first);\n });\n });\n };\n var go = function (editor, isRoot, cell, actions, lazyWire) {\n return cell.fold(Option.none, Option.none, function (current, next) {\n return first(next).map(function (cell) {\n return getCellFirstCursorPosition(editor, cell);\n });\n }, function (current) {\n return TableLookup.table(current, isRoot).bind(function (table) {\n var targets = TableTargets.noMenu(current);\n editor.undoManager.transact(function () {\n actions.insertRowsAfter(table, targets);\n });\n return getNewRowCursorPosition(editor, table);\n });\n });\n };\n var rootElements = [\n 'table',\n 'li',\n 'dl'\n ];\n var handle$1 = function (event, editor, actions, lazyWire) {\n if (event.keyCode === global$3.TAB) {\n var body_1 = getBody$1(editor);\n var isRoot_1 = function (element) {\n var name$1 = name(element);\n return eq(element, body_1) || contains(rootElements, name$1);\n };\n var rng = editor.selection.getRng();\n if (rng.collapsed) {\n var start = Element.fromDom(rng.startContainer);\n TableLookup.cell(start, isRoot_1).each(function (cell) {\n event.preventDefault();\n var navigation = event.shiftKey ? backward : forward;\n var rng = navigation(editor, isRoot_1, cell, actions, lazyWire);\n rng.each(function (range) {\n editor.selection.setRng(range);\n });\n });\n }\n }\n };\n var TabContext = { handle: handle$1 };\n\n var create$4 = Immutable('selection', 'kill');\n var Response = { create: create$4 };\n\n var create$5 = function (start, soffset, finish, foffset) {\n return {\n start: constant(Situ.on(start, soffset)),\n finish: constant(Situ.on(finish, foffset))\n };\n };\n var Situs = { create: create$5 };\n\n var convertToRange = function (win, selection) {\n var rng = asLtrRange(win, selection);\n return SimRange.create(Element.fromDom(rng.startContainer), rng.startOffset, Element.fromDom(rng.endContainer), rng.endOffset);\n };\n var makeSitus = Situs.create;\n var Util = {\n convertToRange: convertToRange,\n makeSitus: makeSitus\n };\n\n var sync = function (container, isRoot, start, soffset, finish, foffset, selectRange) {\n if (!(eq(start, finish) && soffset === foffset)) {\n return closest$1(start, 'td,th', isRoot).bind(function (s) {\n return closest$1(finish, 'td,th', isRoot).bind(function (f) {\n return detect$5(container, isRoot, s, f, selectRange);\n });\n });\n } else {\n return Option.none();\n }\n };\n var detect$5 = function (container, isRoot, start, finish, selectRange) {\n if (!eq(start, finish)) {\n return CellSelection.identify(start, finish, isRoot).bind(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 0) {\n selectRange(container, boxes, cellSel.start(), cellSel.finish());\n return Option.some(Response.create(Option.some(Util.makeSitus(start, 0, start, getEnd(start))), true));\n } else {\n return Option.none();\n }\n });\n } else {\n return Option.none();\n }\n };\n var update = function (rows, columns, container, selected, annotations) {\n var updateSelection = function (newSels) {\n annotations.clear(container);\n annotations.selectRange(container, newSels.boxes(), newSels.start(), newSels.finish());\n return newSels.boxes();\n };\n return CellSelection.shiftSelection(selected, rows, columns, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(updateSelection);\n };\n var KeySelection = {\n sync: sync,\n detect: detect$5,\n update: update\n };\n\n var traverse = Immutable('item', 'mode');\n var backtrack = function (universe, item, _direction, transition) {\n if (transition === void 0) {\n transition = sidestep;\n }\n return universe.property().parent(item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var sidestep = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n return direction.sibling(universe, item).map(function (p) {\n return traverse(p, transition);\n });\n };\n var advance = function (universe, item, direction, transition) {\n if (transition === void 0) {\n transition = advance;\n }\n var children = universe.property().children(item);\n var result = direction.first(children);\n return result.map(function (r) {\n return traverse(r, transition);\n });\n };\n var successors = [\n {\n current: backtrack,\n next: sidestep,\n fallback: Option.none()\n },\n {\n current: sidestep,\n next: advance,\n fallback: Option.some(backtrack)\n },\n {\n current: advance,\n next: advance,\n fallback: Option.some(sidestep)\n }\n ];\n var go$1 = function (universe, item, mode, direction, rules) {\n if (rules === void 0) {\n rules = successors;\n }\n var ruleOpt = find(rules, function (succ) {\n return succ.current === mode;\n });\n return ruleOpt.bind(function (rule) {\n return rule.current(universe, item, direction, rule.next).orThunk(function () {\n return rule.fallback.bind(function (fb) {\n return go$1(universe, item, fb, direction);\n });\n });\n });\n };\n\n var left = function () {\n var sibling = function (universe, item) {\n return universe.query().prevSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[children.length - 1]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var right = function () {\n var sibling = function (universe, item) {\n return universe.query().nextSibling(item);\n };\n var first = function (children) {\n return children.length > 0 ? Option.some(children[0]) : Option.none();\n };\n return {\n sibling: sibling,\n first: first\n };\n };\n var Walkers = {\n left: left,\n right: right\n };\n\n var hone = function (universe, item, predicate, mode, direction, isRoot) {\n var next = go$1(universe, item, mode, direction);\n return next.bind(function (n) {\n if (isRoot(n.item())) {\n return Option.none();\n } else {\n return predicate(n.item()) ? Option.some(n.item()) : hone(universe, n.item(), predicate, n.mode(), direction, isRoot);\n }\n });\n };\n var left$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.left(), isRoot);\n };\n var right$1 = function (universe, item, predicate, isRoot) {\n return hone(universe, item, predicate, sidestep, Walkers.right(), isRoot);\n };\n\n var isLeaf = function (universe) {\n return function (element) {\n return universe.property().children(element).length === 0;\n };\n };\n var before$3 = function (universe, item, isRoot) {\n return seekLeft(universe, item, isLeaf(universe), isRoot);\n };\n var after$4 = function (universe, item, isRoot) {\n return seekRight(universe, item, isLeaf(universe), isRoot);\n };\n var seekLeft = left$1;\n var seekRight = right$1;\n\n var universe$2 = DomUniverse();\n var before$4 = function (element, isRoot) {\n return before$3(universe$2, element, isRoot);\n };\n var after$5 = function (element, isRoot) {\n return after$4(universe$2, element, isRoot);\n };\n var seekLeft$1 = function (element, predicate, isRoot) {\n return seekLeft(universe$2, element, predicate, isRoot);\n };\n var seekRight$1 = function (element, predicate, isRoot) {\n return seekRight(universe$2, element, predicate, isRoot);\n };\n\n var ancestor$2 = function (scope, predicate, isRoot) {\n return ancestor(scope, predicate, isRoot).isSome();\n };\n\n var point = Immutable('element', 'offset');\n var delta = Immutable('element', 'deltaOffset');\n var range$2 = Immutable('element', 'start', 'finish');\n var points = Immutable('begin', 'end');\n var text = Immutable('element', 'text');\n\n var adt$5 = Adt.generate([\n { none: ['message'] },\n { success: [] },\n { failedUp: ['cell'] },\n { failedDown: ['cell'] }\n ]);\n var isOverlapping = function (bridge, before, after) {\n var beforeBounds = bridge.getRect(before);\n var afterBounds = bridge.getRect(after);\n return afterBounds.right > beforeBounds.left && afterBounds.left < beforeBounds.right;\n };\n var isRow = function (elem) {\n return closest$1(elem, 'tr');\n };\n var verify = function (bridge, before, beforeOffset, after, afterOffset, failure, isRoot) {\n return closest$1(after, 'td,th', isRoot).bind(function (afterCell) {\n return closest$1(before, 'td,th', isRoot).map(function (beforeCell) {\n if (!eq(afterCell, beforeCell)) {\n return DomParent.sharedOne(isRow, [\n afterCell,\n beforeCell\n ]).fold(function () {\n return isOverlapping(bridge, beforeCell, afterCell) ? adt$5.success() : failure(beforeCell);\n }, function (_sharedRow) {\n return failure(beforeCell);\n });\n } else {\n return eq(after, afterCell) && getEnd(afterCell) === afterOffset ? failure(beforeCell) : adt$5.none('in same cell');\n }\n });\n }).getOr(adt$5.none('default'));\n };\n var cata$2 = function (subject, onNone, onSuccess, onFailedUp, onFailedDown) {\n return subject.fold(onNone, onSuccess, onFailedUp, onFailedDown);\n };\n var BeforeAfter = __assign(__assign({}, adt$5), {\n verify: verify,\n cata: cata$2\n });\n\n var inAncestor = Immutable('ancestor', 'descendants', 'element', 'index');\n var inParent = Immutable('parent', 'children', 'element', 'index');\n var indexInParent = function (element) {\n return parent(element).bind(function (parent) {\n var children$1 = children(parent);\n return indexOf(children$1, element).map(function (index) {\n return inParent(parent, children$1, element, index);\n });\n });\n };\n var indexOf = function (elements, element) {\n return findIndex(elements, curry(eq, element));\n };\n\n var isBr = function (elem) {\n return name(elem) === 'br';\n };\n var gatherer = function (cand, gather, isRoot) {\n return gather(cand, isRoot).bind(function (target) {\n return isText(target) && get$2(target).trim().length === 0 ? gatherer(target, gather, isRoot) : Option.some(target);\n });\n };\n var handleBr = function (isRoot, element, direction) {\n return direction.traverse(element).orThunk(function () {\n return gatherer(element, direction.gather, isRoot);\n }).map(direction.relative);\n };\n var findBr = function (element, offset) {\n return child(element, offset).filter(isBr).orThunk(function () {\n return child(element, offset - 1).filter(isBr);\n });\n };\n var handleParent = function (isRoot, element, offset, direction) {\n return findBr(element, offset).bind(function (br) {\n return direction.traverse(br).fold(function () {\n return gatherer(br, direction.gather, isRoot).map(direction.relative);\n }, function (adjacent) {\n return indexInParent(adjacent).map(function (info) {\n return Situ.on(info.parent(), info.index());\n });\n });\n });\n };\n var tryBr = function (isRoot, element, offset, direction) {\n var target = isBr(element) ? handleBr(isRoot, element, direction) : handleParent(isRoot, element, offset, direction);\n return target.map(function (tgt) {\n return {\n start: constant(tgt),\n finish: constant(tgt)\n };\n });\n };\n var process = function (analysis) {\n return BeforeAfter.cata(analysis, function (message) {\n return Option.none();\n }, function () {\n return Option.none();\n }, function (cell) {\n return Option.some(point(cell, 0));\n }, function (cell) {\n return Option.some(point(cell, getEnd(cell)));\n });\n };\n var BrTags = {\n tryBr: tryBr,\n process: process\n };\n\n var nu$3 = MixedBag([\n 'left',\n 'top',\n 'right',\n 'bottom'\n ], []);\n var moveDown = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() + amount,\n right: caret.right(),\n bottom: caret.bottom() + amount\n });\n };\n var moveUp = function (caret, amount) {\n return nu$3({\n left: caret.left(),\n top: caret.top() - amount,\n right: caret.right(),\n bottom: caret.bottom() - amount\n });\n };\n var moveBottomTo = function (caret, bottom) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: bottom - height,\n right: caret.right(),\n bottom: bottom\n });\n };\n var moveTopTo = function (caret, top) {\n var height = caret.bottom() - caret.top();\n return nu$3({\n left: caret.left(),\n top: top,\n right: caret.right(),\n bottom: top + height\n });\n };\n var translate = function (caret, xDelta, yDelta) {\n return nu$3({\n left: caret.left() + xDelta,\n top: caret.top() + yDelta,\n right: caret.right() + xDelta,\n bottom: caret.bottom() + yDelta\n });\n };\n var getTop$1 = function (caret) {\n return caret.top();\n };\n var getBottom = function (caret) {\n return caret.bottom();\n };\n var toString = function (caret) {\n return '(' + caret.left() + ', ' + caret.top() + ') -> (' + caret.right() + ', ' + caret.bottom() + ')';\n };\n var Carets = {\n nu: nu$3,\n moveUp: moveUp,\n moveDown: moveDown,\n moveBottomTo: moveBottomTo,\n moveTopTo: moveTopTo,\n getTop: getTop$1,\n getBottom: getBottom,\n translate: translate,\n toString: toString\n };\n\n var getPartialBox = function (bridge, element, offset) {\n if (offset >= 0 && offset < getEnd(element)) {\n return bridge.getRangedRect(element, offset, element, offset + 1);\n } else if (offset > 0) {\n return bridge.getRangedRect(element, offset - 1, element, offset);\n }\n return Option.none();\n };\n var toCaret = function (rect) {\n return Carets.nu({\n left: rect.left,\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom\n });\n };\n var getElemBox = function (bridge, element) {\n return Option.some(bridge.getRect(element));\n };\n var getBoxAt = function (bridge, element, offset) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return getPartialBox(bridge, element, offset).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var getEntireBox = function (bridge, element) {\n if (isElement(element)) {\n return getElemBox(bridge, element).map(toCaret);\n } else if (isText(element)) {\n return bridge.getRangedRect(element, 0, element, getEnd(element)).map(toCaret);\n } else {\n return Option.none();\n }\n };\n var Rectangles = {\n getBoxAt: getBoxAt,\n getEntireBox: getEntireBox\n };\n\n var JUMP_SIZE = 5;\n var NUM_RETRIES = 100;\n var adt$6 = Adt.generate([\n { none: [] },\n { retry: ['caret'] }\n ]);\n var isOutside = function (caret, box) {\n return caret.left() < box.left() || Math.abs(box.right() - caret.left()) < 1 || caret.left() > box.right();\n };\n var inOutsideBlock = function (bridge, element, caret) {\n return closest(element, DomStructure.isBlock).fold(constant(false), function (cell) {\n return Rectangles.getEntireBox(bridge, cell).exists(function (box) {\n return isOutside(caret, box);\n });\n });\n };\n var adjustDown = function (bridge, element, guessBox, original, caret) {\n var lowerCaret = Carets.moveDown(caret, JUMP_SIZE);\n if (Math.abs(guessBox.bottom() - original.bottom()) < 1) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() > caret.bottom()) {\n return adt$6.retry(lowerCaret);\n } else if (guessBox.top() === caret.bottom()) {\n return adt$6.retry(Carets.moveDown(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(lowerCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var adjustUp = function (bridge, element, guessBox, original, caret) {\n var higherCaret = Carets.moveUp(caret, JUMP_SIZE);\n if (Math.abs(guessBox.top() - original.top()) < 1) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() < caret.top()) {\n return adt$6.retry(higherCaret);\n } else if (guessBox.bottom() === caret.top()) {\n return adt$6.retry(Carets.moveUp(caret, 1));\n } else {\n return inOutsideBlock(bridge, element, caret) ? adt$6.retry(Carets.translate(higherCaret, JUMP_SIZE, 0)) : adt$6.none();\n }\n };\n var upMovement = {\n point: Carets.getTop,\n adjuster: adjustUp,\n move: Carets.moveUp,\n gather: before$4\n };\n var downMovement = {\n point: Carets.getBottom,\n adjuster: adjustDown,\n move: Carets.moveDown,\n gather: after$5\n };\n var isAtTable = function (bridge, x, y) {\n return bridge.elementFromPoint(x, y).filter(function (elm) {\n return name(elm) === 'table';\n }).isSome();\n };\n var adjustForTable = function (bridge, movement, original, caret, numRetries) {\n return adjustTil(bridge, movement, original, movement.move(caret, JUMP_SIZE), numRetries);\n };\n var adjustTil = function (bridge, movement, original, caret, numRetries) {\n if (numRetries === 0) {\n return Option.some(caret);\n }\n if (isAtTable(bridge, caret.left(), movement.point(caret))) {\n return adjustForTable(bridge, movement, original, caret, numRetries - 1);\n }\n return bridge.situsFromPoint(caret.left(), movement.point(caret)).bind(function (guess) {\n return guess.start().fold(Option.none, function (element) {\n return Rectangles.getEntireBox(bridge, element).bind(function (guessBox) {\n return movement.adjuster(bridge, element, guessBox, original, caret).fold(Option.none, function (newCaret) {\n return adjustTil(bridge, movement, original, newCaret, numRetries - 1);\n });\n }).orThunk(function () {\n return Option.some(caret);\n });\n }, Option.none);\n });\n };\n var ieTryDown = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.bottom() + JUMP_SIZE);\n };\n var ieTryUp = function (bridge, caret) {\n return bridge.situsFromPoint(caret.left(), caret.top() - JUMP_SIZE);\n };\n var checkScroll = function (movement, adjusted, bridge) {\n if (movement.point(adjusted) > bridge.getInnerHeight()) {\n return Option.some(movement.point(adjusted) - bridge.getInnerHeight());\n } else if (movement.point(adjusted) < 0) {\n return Option.some(-movement.point(adjusted));\n } else {\n return Option.none();\n }\n };\n var retry = function (movement, bridge, caret) {\n var moved = movement.move(caret, JUMP_SIZE);\n var adjusted = adjustTil(bridge, movement, caret, moved, NUM_RETRIES).getOr(moved);\n return checkScroll(movement, adjusted, bridge).fold(function () {\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted));\n }, function (delta) {\n bridge.scrollBy(0, delta);\n return bridge.situsFromPoint(adjusted.left(), movement.point(adjusted) - delta);\n });\n };\n var Retries = {\n tryUp: curry(retry, upMovement),\n tryDown: curry(retry, downMovement),\n ieTryUp: ieTryUp,\n ieTryDown: ieTryDown,\n getJumpSize: constant(JUMP_SIZE)\n };\n\n var MAX_RETRIES = 20;\n var platform$1 = PlatformDetection$1.detect();\n var findSpot = function (bridge, isRoot, direction) {\n return bridge.getSelection().bind(function (sel) {\n return BrTags.tryBr(isRoot, sel.finish(), sel.foffset(), direction).fold(function () {\n return Option.some(point(sel.finish(), sel.foffset()));\n }, function (brNeighbour) {\n var range = bridge.fromSitus(brNeighbour);\n var analysis = BeforeAfter.verify(bridge, sel.finish(), sel.foffset(), range.finish(), range.foffset(), direction.failure, isRoot);\n return BrTags.process(analysis);\n });\n });\n };\n var scan = function (bridge, isRoot, element, offset, direction, numRetries) {\n if (numRetries === 0) {\n return Option.none();\n }\n return tryCursor(bridge, isRoot, element, offset, direction).bind(function (situs) {\n var range = bridge.fromSitus(situs);\n var analysis = BeforeAfter.verify(bridge, element, offset, range.finish(), range.foffset(), direction.failure, isRoot);\n return BeforeAfter.cata(analysis, function () {\n return Option.none();\n }, function () {\n return Option.some(situs);\n }, function (cell) {\n if (eq(element, cell) && offset === 0) {\n return tryAgain(bridge, element, offset, Carets.moveUp, direction);\n } else {\n return scan(bridge, isRoot, cell, 0, direction, numRetries - 1);\n }\n }, function (cell) {\n if (eq(element, cell) && offset === getEnd(cell)) {\n return tryAgain(bridge, element, offset, Carets.moveDown, direction);\n } else {\n return scan(bridge, isRoot, cell, getEnd(cell), direction, numRetries - 1);\n }\n });\n });\n };\n var tryAgain = function (bridge, element, offset, move, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, move(box, Retries.getJumpSize()));\n });\n };\n var tryAt = function (bridge, direction, box) {\n if (platform$1.browser.isChrome() || platform$1.browser.isSafari() || platform$1.browser.isFirefox() || platform$1.browser.isEdge()) {\n return direction.otherRetry(bridge, box);\n } else if (platform$1.browser.isIE()) {\n return direction.ieRetry(bridge, box);\n } else {\n return Option.none();\n }\n };\n var tryCursor = function (bridge, isRoot, element, offset, direction) {\n return Rectangles.getBoxAt(bridge, element, offset).bind(function (box) {\n return tryAt(bridge, direction, box);\n });\n };\n var handle$2 = function (bridge, isRoot, direction) {\n return findSpot(bridge, isRoot, direction).bind(function (spot) {\n return scan(bridge, isRoot, spot.element(), spot.offset(), direction, MAX_RETRIES).map(bridge.fromSitus);\n });\n };\n var TableKeys = { handle: handle$2 };\n\n var detection = PlatformDetection$1.detect();\n var inSameTable = function (elem, table) {\n return ancestor$2(elem, function (e) {\n return parent(e).exists(function (p) {\n return eq(p, table);\n });\n });\n };\n var simulate = function (bridge, isRoot, direction, initial, anchor) {\n return closest$1(initial, 'td,th', isRoot).bind(function (start) {\n return closest$1(start, 'table', isRoot).bind(function (table) {\n if (!inSameTable(anchor, table)) {\n return Option.none();\n }\n return TableKeys.handle(bridge, isRoot, direction).bind(function (range) {\n return closest$1(range.finish(), 'td,th', isRoot).map(function (finish) {\n return {\n start: constant(start),\n finish: constant(finish),\n range: constant(range)\n };\n });\n });\n });\n });\n };\n var navigate = function (bridge, isRoot, direction, initial, anchor, precheck) {\n if (detection.browser.isIE()) {\n return Option.none();\n } else {\n return precheck(initial, isRoot).orThunk(function () {\n return simulate(bridge, isRoot, direction, initial, anchor).map(function (info) {\n var range = info.range();\n return Response.create(Option.some(Util.makeSitus(range.start(), range.soffset(), range.finish(), range.foffset())), true);\n });\n });\n }\n };\n var firstUpCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[0])) {\n return seekLeft$1(table, function (element) {\n return last$1(element).isSome();\n }, isRoot).map(function (last) {\n var lastOffset = getEnd(last);\n return Response.create(Option.some(Util.makeSitus(last, lastOffset, last, lastOffset)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var lastDownCheck = function (initial, isRoot) {\n return closest$1(initial, 'tr', isRoot).bind(function (startRow) {\n return closest$1(startRow, 'table', isRoot).bind(function (table) {\n var rows = descendants$1(table, 'tr');\n if (eq(startRow, rows[rows.length - 1])) {\n return seekRight$1(table, function (element) {\n return first(element).isSome();\n }, isRoot).map(function (first) {\n return Response.create(Option.some(Util.makeSitus(first, 0, first, 0)), true);\n });\n } else {\n return Option.none();\n }\n });\n });\n };\n var select = function (bridge, container, isRoot, direction, initial, anchor, selectRange) {\n return simulate(bridge, isRoot, direction, initial, anchor).bind(function (info) {\n return KeySelection.detect(container, isRoot, info.start(), info.finish(), selectRange);\n });\n };\n var VerticalMovement = {\n navigate: navigate,\n select: select,\n firstUpCheck: firstUpCheck,\n lastDownCheck: lastDownCheck\n };\n\n var findCell = function (target, isRoot) {\n return closest$1(target, 'td,th', isRoot);\n };\n function MouseSelection (bridge, container, isRoot, annotations) {\n var cursor = Option.none();\n var clearState = function () {\n cursor = Option.none();\n };\n var mousedown = function (event) {\n annotations.clear(container);\n cursor = findCell(event.target(), isRoot);\n };\n var mouseover = function (event) {\n cursor.each(function (start) {\n annotations.clear(container);\n findCell(event.target(), isRoot).each(function (finish) {\n CellSelection.identify(start, finish, isRoot).each(function (cellSel) {\n var boxes = cellSel.boxes().getOr([]);\n if (boxes.length > 1 || boxes.length === 1 && !eq(start, finish)) {\n annotations.selectRange(container, boxes, cellSel.start(), cellSel.finish());\n bridge.selectContents(finish);\n }\n });\n });\n });\n };\n var mouseup = function (_event) {\n cursor.each(clearState);\n };\n return {\n mousedown: mousedown,\n mouseover: mouseover,\n mouseup: mouseup\n };\n }\n\n var down = {\n traverse: nextSibling,\n gather: after$5,\n relative: Situ.before,\n otherRetry: Retries.tryDown,\n ieRetry: Retries.ieTryDown,\n failure: BeforeAfter.failedDown\n };\n var up = {\n traverse: prevSibling,\n gather: before$4,\n relative: Situ.before,\n otherRetry: Retries.tryUp,\n ieRetry: Retries.ieTryUp,\n failure: BeforeAfter.failedUp\n };\n var KeyDirection = {\n down: down,\n up: up\n };\n\n var isKey = function (key) {\n return function (keycode) {\n return keycode === key;\n };\n };\n var isUp = isKey(38);\n var isDown = isKey(40);\n var isNavigation = function (keycode) {\n return keycode >= 37 && keycode <= 40;\n };\n var SelectionKeys = {\n ltr: {\n isBackward: isKey(37),\n isForward: isKey(39)\n },\n rtl: {\n isBackward: isKey(39),\n isForward: isKey(37)\n },\n isUp: isUp,\n isDown: isDown,\n isNavigation: isNavigation\n };\n\n var toRaw = function (sr) {\n return {\n left: sr.left(),\n top: sr.top(),\n right: sr.right(),\n bottom: sr.bottom(),\n width: sr.width(),\n height: sr.height()\n };\n };\n var Rect = { toRaw: toRaw };\n\n var isSafari = PlatformDetection$1.detect().browser.isSafari();\n var get$a = function (_DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var x = doc.body.scrollLeft || doc.documentElement.scrollLeft;\n var y = doc.body.scrollTop || doc.documentElement.scrollTop;\n return Position(x, y);\n };\n var by = function (x, y, _DOC) {\n var doc = _DOC !== undefined ? _DOC.dom() : domGlobals.document;\n var win = doc.defaultView;\n win.scrollBy(x, y);\n };\n\n var WindowBridge = function (win) {\n var elementFromPoint = function (x, y) {\n return Element.fromPoint(Element.fromDom(win.document), x, y);\n };\n var getRect = function (element) {\n return element.dom().getBoundingClientRect();\n };\n var getRangedRect = function (start, soffset, finish, foffset) {\n var sel = Selection.exact(start, soffset, finish, foffset);\n return getFirstRect$1(win, sel).map(Rect.toRaw);\n };\n var getSelection = function () {\n return get$9(win).map(function (exactAdt) {\n return Util.convertToRange(win, exactAdt);\n });\n };\n var fromSitus = function (situs) {\n var relative = Selection.relative(situs.start(), situs.finish());\n return Util.convertToRange(win, relative);\n };\n var situsFromPoint = function (x, y) {\n return getAtPoint(win, x, y).map(function (exact) {\n return Situs.create(exact.start(), exact.soffset(), exact.finish(), exact.foffset());\n });\n };\n var clearSelection = function () {\n clear(win);\n };\n var selectContents = function (element) {\n setToElement(win, element);\n };\n var setSelection = function (sel) {\n setExact(win, sel.start(), sel.soffset(), sel.finish(), sel.foffset());\n };\n var setRelativeSelection = function (start, finish) {\n setRelative(win, start, finish);\n };\n var getInnerHeight = function () {\n return win.innerHeight;\n };\n var getScrollY = function () {\n var pos = get$a(Element.fromDom(win.document));\n return pos.top();\n };\n var scrollBy = function (x, y) {\n by(x, y, Element.fromDom(win.document));\n };\n return {\n elementFromPoint: elementFromPoint,\n getRect: getRect,\n getRangedRect: getRangedRect,\n getSelection: getSelection,\n fromSitus: fromSitus,\n situsFromPoint: situsFromPoint,\n clearSelection: clearSelection,\n setSelection: setSelection,\n setRelativeSelection: setRelativeSelection,\n selectContents: selectContents,\n getInnerHeight: getInnerHeight,\n getScrollY: getScrollY,\n scrollBy: scrollBy\n };\n };\n\n var rc = Immutable('rows', 'cols');\n var mouse = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var handlers = MouseSelection(bridge, container, isRoot, annotations);\n return {\n mousedown: handlers.mousedown,\n mouseover: handlers.mouseover,\n mouseup: handlers.mouseup\n };\n };\n var keyboard = function (win, container, isRoot, annotations) {\n var bridge = WindowBridge(win);\n var clearToNavigate = function () {\n annotations.clear(container);\n return Option.none();\n };\n var keydown = function (event, start, soffset, finish, foffset, direction) {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n var handler = CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.down, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return curry(VerticalMovement.select, bridge, container, isRoot, KeyDirection.up, finish, start, annotations.selectRange);\n } else if (SelectionKeys.isDown(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.down, finish, start, VerticalMovement.lastDownCheck);\n } else if (SelectionKeys.isUp(keycode)) {\n return curry(VerticalMovement.navigate, bridge, isRoot, KeyDirection.up, finish, start, VerticalMovement.firstUpCheck);\n } else {\n return Option.none;\n }\n }, function (selected) {\n var update = function (attempts) {\n return function () {\n var navigation = findMap(attempts, function (delta) {\n return KeySelection.update(delta.rows(), delta.cols(), container, selected, annotations);\n });\n return navigation.fold(function () {\n return CellSelection.getEdges(container, annotations.firstSelectedSelector(), annotations.lastSelectedSelector()).map(function (edges) {\n var relative = SelectionKeys.isDown(keycode) || direction.isForward(keycode) ? Situ.after : Situ.before;\n bridge.setRelativeSelection(Situ.on(edges.first(), 0), relative(edges.table()));\n annotations.clear(container);\n return Response.create(Option.none(), true);\n });\n }, function (_) {\n return Option.some(Response.create(Option.none(), true));\n });\n };\n };\n if (SelectionKeys.isDown(keycode) && shiftKey) {\n return update([rc(+1, 0)]);\n } else if (SelectionKeys.isUp(keycode) && shiftKey) {\n return update([rc(-1, 0)]);\n } else if (direction.isBackward(keycode) && shiftKey) {\n return update([\n rc(0, -1),\n rc(-1, 0)\n ]);\n } else if (direction.isForward(keycode) && shiftKey) {\n return update([\n rc(0, +1),\n rc(+1, 0)\n ]);\n } else if (SelectionKeys.isNavigation(keycode) && shiftKey === false) {\n return clearToNavigate;\n } else {\n return Option.none;\n }\n });\n return handler();\n };\n var keyup = function (event, start, soffset, finish, foffset) {\n return CellSelection.retrieve(container, annotations.selectedSelector()).fold(function () {\n var realEvent = event.raw();\n var keycode = realEvent.which;\n var shiftKey = realEvent.shiftKey === true;\n if (shiftKey === false) {\n return Option.none();\n }\n if (SelectionKeys.isNavigation(keycode)) {\n return KeySelection.sync(container, isRoot, start, soffset, finish, foffset, annotations.selectRange);\n } else {\n return Option.none();\n }\n }, Option.none);\n };\n return {\n keydown: keydown,\n keyup: keyup\n };\n };\n var InputHandlers = {\n mouse: mouse,\n keyboard: keyboard\n };\n\n var remove$7 = function (element, classes) {\n each(classes, function (x) {\n remove$5(element, x);\n });\n };\n\n var addClass = function (clazz) {\n return function (element) {\n add$2(element, clazz);\n };\n };\n var removeClasses = function (classes) {\n return function (element) {\n remove$7(element, classes);\n };\n };\n\n var byClass = function (ephemera) {\n var addSelectionClass = addClass(ephemera.selected());\n var removeSelectionClasses = removeClasses([\n ephemera.selected(),\n ephemera.lastSelected(),\n ephemera.firstSelected()\n ]);\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionClasses);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionClass);\n add$2(start, ephemera.firstSelected());\n add$2(finish, ephemera.lastSelected());\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var byAttr = function (ephemera) {\n var removeSelectionAttributes = function (element) {\n remove(element, ephemera.selected());\n remove(element, ephemera.firstSelected());\n remove(element, ephemera.lastSelected());\n };\n var addSelectionAttribute = function (element) {\n set(element, ephemera.selected(), '1');\n };\n var clear = function (container) {\n var sels = descendants$1(container, ephemera.selectedSelector());\n each(sels, removeSelectionAttributes);\n };\n var selectRange = function (container, cells, start, finish) {\n clear(container);\n each(cells, addSelectionAttribute);\n set(start, ephemera.firstSelected(), '1');\n set(finish, ephemera.lastSelected(), '1');\n };\n return {\n clear: clear,\n selectRange: selectRange,\n selectedSelector: ephemera.selectedSelector,\n firstSelectedSelector: ephemera.firstSelectedSelector,\n lastSelectedSelector: ephemera.lastSelectedSelector\n };\n };\n var SelectionAnnotation = {\n byClass: byClass,\n byAttr: byAttr\n };\n\n var hasInternalTarget = function (e) {\n return has$1(Element.fromDom(e.target), 'ephox-snooker-resizer-bar') === false;\n };\n function CellSelection$1 (editor, lazyResize) {\n var handlerStruct = MixedBag([\n 'mousedown',\n 'mouseover',\n 'mouseup',\n 'keyup',\n 'keydown'\n ], []);\n var handlers = Option.none();\n var annotations = SelectionAnnotation.byAttr(Ephemera);\n editor.on('init', function (e) {\n var win = editor.getWin();\n var body = getBody$1(editor);\n var isRoot = getIsRoot(editor);\n var syncSelection = function () {\n var sel = editor.selection;\n var start = Element.fromDom(sel.getStart());\n var end = Element.fromDom(sel.getEnd());\n var shared = DomParent.sharedOne(TableLookup.table, [\n start,\n end\n ]);\n shared.fold(function () {\n annotations.clear(body);\n }, noop);\n };\n var mouseHandlers = InputHandlers.mouse(win, body, isRoot, annotations);\n var keyHandlers = InputHandlers.keyboard(win, body, isRoot, annotations);\n var hasShiftKey = function (event) {\n return event.raw().shiftKey === true;\n };\n var handleResponse = function (event, response) {\n if (!hasShiftKey(event)) {\n return;\n }\n if (response.kill()) {\n event.kill();\n }\n response.selection().each(function (ns) {\n var relative = Selection.relative(ns.start(), ns.finish());\n var rng = asLtrRange(win, relative);\n editor.selection.setRng(rng);\n });\n };\n var keyup = function (event) {\n var wrappedEvent = wrapEvent(event);\n if (wrappedEvent.raw().shiftKey && SelectionKeys.isNavigation(wrappedEvent.raw().which)) {\n var rng = editor.selection.getRng();\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n keyHandlers.keyup(wrappedEvent, start, rng.startOffset, end, rng.endOffset).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n }\n };\n var keydown = function (event) {\n var wrappedEvent = wrapEvent(event);\n lazyResize().each(function (resize) {\n resize.hideBars();\n });\n var rng = editor.selection.getRng();\n var startContainer = Element.fromDom(editor.selection.getStart());\n var start = Element.fromDom(rng.startContainer);\n var end = Element.fromDom(rng.endContainer);\n var direction = Direction.directionAt(startContainer).isRtl() ? SelectionKeys.rtl : SelectionKeys.ltr;\n keyHandlers.keydown(wrappedEvent, start, rng.startOffset, end, rng.endOffset, direction).each(function (response) {\n handleResponse(wrappedEvent, response);\n });\n lazyResize().each(function (resize) {\n resize.showBars();\n });\n };\n var isMouseEvent = function (event) {\n return event.hasOwnProperty('x') && event.hasOwnProperty('y');\n };\n var wrapEvent = function (event) {\n var target = Element.fromDom(event.target);\n var stop = function () {\n event.stopPropagation();\n };\n var prevent = function () {\n event.preventDefault();\n };\n var kill = compose(prevent, stop);\n return {\n target: constant(target),\n x: constant(isMouseEvent(event) ? event.x : null),\n y: constant(isMouseEvent(event) ? event.y : null),\n stop: stop,\n prevent: prevent,\n kill: kill,\n raw: constant(event)\n };\n };\n var isLeftMouse = function (raw) {\n return raw.button === 0;\n };\n var isLeftButtonPressed = function (raw) {\n if (raw.buttons === undefined) {\n return true;\n }\n if (global$2.ie && global$2.ie >= 12 && raw.buttons === 0) {\n return true;\n }\n return (raw.buttons & 1) !== 0;\n };\n var mouseDown = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mousedown(wrapEvent(e));\n }\n };\n var mouseOver = function (e) {\n if (isLeftButtonPressed(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseover(wrapEvent(e));\n }\n };\n var mouseUp = function (e) {\n if (isLeftMouse(e) && hasInternalTarget(e)) {\n mouseHandlers.mouseup(wrapEvent(e));\n }\n };\n editor.on('mousedown', mouseDown);\n editor.on('mouseover', mouseOver);\n editor.on('mouseup', mouseUp);\n editor.on('keyup', keyup);\n editor.on('keydown', keydown);\n editor.on('nodechange', syncSelection);\n handlers = Option.some(handlerStruct({\n mousedown: mouseDown,\n mouseover: mouseOver,\n mouseup: mouseUp,\n keyup: keyup,\n keydown: keydown\n }));\n });\n var destroy = function () {\n handlers.each(function (handlers) {\n });\n };\n return {\n clear: annotations.clear,\n destroy: destroy\n };\n }\n\n var Selections = function (editor) {\n var get = function () {\n var body = getBody$1(editor);\n return TableSelection.retrieve(body, Ephemera.selectedSelector()).fold(function () {\n if (editor.selection.getStart() === undefined) {\n return SelectionTypes.none();\n } else {\n return SelectionTypes.single(editor.selection);\n }\n }, function (cells) {\n return SelectionTypes.multiple(cells);\n });\n };\n return { get: get };\n };\n\n var each$4 = global$1.each;\n var addButtons = function (editor) {\n var menuItems = [];\n each$4('inserttable tableprops deletetable | cell row column'.split(' '), function (name) {\n if (name === '|') {\n menuItems.push({ text: '-' });\n } else {\n menuItems.push(editor.menuItems[name]);\n }\n });\n editor.addButton('table', {\n type: 'menubutton',\n title: 'Table',\n menu: menuItems\n });\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n editor.addButton('tableprops', {\n title: 'Table properties',\n onclick: cmd('mceTableProps'),\n icon: 'table'\n });\n editor.addButton('tabledelete', {\n title: 'Delete table',\n onclick: cmd('mceTableDelete')\n });\n editor.addButton('tablecellprops', {\n title: 'Cell properties',\n onclick: cmd('mceTableCellProps')\n });\n editor.addButton('tablemergecells', {\n title: 'Merge cells',\n onclick: cmd('mceTableMergeCells')\n });\n editor.addButton('tablesplitcells', {\n title: 'Split cell',\n onclick: cmd('mceTableSplitCells')\n });\n editor.addButton('tableinsertrowbefore', {\n title: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore')\n });\n editor.addButton('tableinsertrowafter', {\n title: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter')\n });\n editor.addButton('tabledeleterow', {\n title: 'Delete row',\n onclick: cmd('mceTableDeleteRow')\n });\n editor.addButton('tablerowprops', {\n title: 'Row properties',\n onclick: cmd('mceTableRowProps')\n });\n editor.addButton('tablecutrow', {\n title: 'Cut row',\n onclick: cmd('mceTableCutRow')\n });\n editor.addButton('tablecopyrow', {\n title: 'Copy row',\n onclick: cmd('mceTableCopyRow')\n });\n editor.addButton('tablepasterowbefore', {\n title: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore')\n });\n editor.addButton('tablepasterowafter', {\n title: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter')\n });\n editor.addButton('tableinsertcolbefore', {\n title: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore')\n });\n editor.addButton('tableinsertcolafter', {\n title: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter')\n });\n editor.addButton('tabledeletecol', {\n title: 'Delete column',\n onclick: cmd('mceTableDeleteCol')\n });\n };\n var addToolbars = function (editor) {\n var isTable = function (table) {\n var selectorMatched = editor.dom.is(table, 'table') && editor.getBody().contains(table);\n return selectorMatched;\n };\n var toolbar = getToolbar(editor);\n if (toolbar.length > 0) {\n editor.addContextToolbar(isTable, toolbar.join(' '));\n }\n };\n var Buttons = {\n addButtons: addButtons,\n addToolbars: addToolbars\n };\n\n var addMenuItems = function (editor, selections) {\n var targets = Option.none();\n var tableCtrls = [];\n var cellCtrls = [];\n var mergeCtrls = [];\n var unmergeCtrls = [];\n var noTargetDisable = function (ctrl) {\n ctrl.disabled(true);\n };\n var ctrlEnable = function (ctrl) {\n ctrl.disabled(false);\n };\n var pushTable = function () {\n var self = this;\n tableCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushCell = function () {\n var self = this;\n cellCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n ctrlEnable(self);\n });\n };\n var pushMerge = function () {\n var self = this;\n mergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.mergable().isNone());\n });\n };\n var pushUnmerge = function () {\n var self = this;\n unmergeCtrls.push(self);\n targets.fold(function () {\n noTargetDisable(self);\n }, function (targets) {\n self.disabled(targets.unmergable().isNone());\n });\n };\n var setDisabledCtrls = function () {\n targets.fold(function () {\n each(tableCtrls, noTargetDisable);\n each(cellCtrls, noTargetDisable);\n each(mergeCtrls, noTargetDisable);\n each(unmergeCtrls, noTargetDisable);\n }, function (targets) {\n each(tableCtrls, ctrlEnable);\n each(cellCtrls, ctrlEnable);\n each(mergeCtrls, function (mergeCtrl) {\n mergeCtrl.disabled(targets.mergable().isNone());\n });\n each(unmergeCtrls, function (unmergeCtrl) {\n unmergeCtrl.disabled(targets.unmergable().isNone());\n });\n });\n };\n editor.on('init', function () {\n editor.on('nodechange', function (e) {\n var cellOpt = Option.from(editor.dom.getParent(editor.selection.getStart(), 'th,td'));\n targets = cellOpt.bind(function (cellDom) {\n var cell = Element.fromDom(cellDom);\n var table = TableLookup.table(cell);\n return table.map(function (table) {\n return TableTargets.forMenu(selections, table, cell);\n });\n });\n setDisabledCtrls();\n });\n });\n var generateTableGrid = function () {\n var html = '';\n html = '';\n for (var y = 0; y < 10; y++) {\n html += '';\n for (var x = 0; x < 10; x++) {\n html += '';\n }\n html += '';\n }\n html += '
    ';\n html += '
    1 x 1
    ';\n return html;\n };\n var selectGrid = function (editor, tx, ty, control) {\n var table = control.getEl().getElementsByTagName('table')[0];\n var x, y, focusCell, cell, active;\n var rtl = control.isRtl() || control.parent().rel === 'tl-tr';\n table.nextSibling.innerHTML = tx + 1 + ' x ' + (ty + 1);\n if (rtl) {\n tx = 9 - tx;\n }\n for (y = 0; y < 10; y++) {\n for (x = 0; x < 10; x++) {\n cell = table.rows[y].childNodes[x].firstChild;\n active = (rtl ? x >= tx : x <= tx) && y <= ty;\n editor.dom.toggleClass(cell, 'mce-active', active);\n if (active) {\n focusCell = cell;\n }\n }\n }\n return focusCell.parentNode;\n };\n var insertTable = hasTableGrid(editor) === false ? {\n text: 'Table',\n icon: 'table',\n context: 'table',\n onclick: cmd('mceInsertTable')\n } : {\n text: 'Table',\n icon: 'table',\n context: 'table',\n ariaHideMenu: true,\n onclick: function (e) {\n if (e.aria) {\n this.parent().hideAll();\n e.stopImmediatePropagation();\n editor.execCommand('mceInsertTable');\n }\n },\n onshow: function () {\n selectGrid(editor, 0, 0, this.menu.items()[0]);\n },\n onhide: function () {\n var elements = this.menu.items()[0].getEl().getElementsByTagName('a');\n editor.dom.removeClass(elements, 'mce-active');\n editor.dom.addClass(elements[0], 'mce-active');\n },\n menu: [{\n type: 'container',\n html: generateTableGrid(),\n onPostRender: function () {\n this.lastX = this.lastY = 0;\n },\n onmousemove: function (e) {\n var target = e.target;\n var x, y;\n if (target.tagName.toUpperCase() === 'A') {\n x = parseInt(target.getAttribute('data-mce-x'), 10);\n y = parseInt(target.getAttribute('data-mce-y'), 10);\n if (this.isRtl() || this.parent().rel === 'tl-tr') {\n x = 9 - x;\n }\n if (x !== this.lastX || y !== this.lastY) {\n selectGrid(editor, x, y, e.control);\n this.lastX = x;\n this.lastY = y;\n }\n }\n },\n onclick: function (e) {\n var self = this;\n if (e.target.tagName.toUpperCase() === 'A') {\n e.preventDefault();\n e.stopPropagation();\n self.parent().cancel();\n editor.undoManager.transact(function () {\n InsertTable.insert(editor, self.lastX + 1, self.lastY + 1);\n });\n editor.addVisual();\n }\n }\n }]\n };\n function cmd(command) {\n return function () {\n editor.execCommand(command);\n };\n }\n var tableProperties = {\n text: 'Table properties',\n context: 'table',\n onPostRender: pushTable,\n onclick: cmd('mceTableProps')\n };\n var deleteTable = {\n text: 'Delete table',\n context: 'table',\n onPostRender: pushTable,\n cmd: 'mceTableDelete'\n };\n var row = {\n text: 'Row',\n context: 'table',\n menu: [\n {\n text: 'Insert row before',\n onclick: cmd('mceTableInsertRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert row after',\n onclick: cmd('mceTableInsertRowAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete row',\n onclick: cmd('mceTableDeleteRow'),\n onPostRender: pushCell\n },\n {\n text: 'Row properties',\n onclick: cmd('mceTableRowProps'),\n onPostRender: pushCell\n },\n { text: '-' },\n {\n text: 'Cut row',\n onclick: cmd('mceTableCutRow'),\n onPostRender: pushCell\n },\n {\n text: 'Copy row',\n onclick: cmd('mceTableCopyRow'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row before',\n onclick: cmd('mceTablePasteRowBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Paste row after',\n onclick: cmd('mceTablePasteRowAfter'),\n onPostRender: pushCell\n }\n ]\n };\n var column = {\n text: 'Column',\n context: 'table',\n menu: [\n {\n text: 'Insert column before',\n onclick: cmd('mceTableInsertColBefore'),\n onPostRender: pushCell\n },\n {\n text: 'Insert column after',\n onclick: cmd('mceTableInsertColAfter'),\n onPostRender: pushCell\n },\n {\n text: 'Delete column',\n onclick: cmd('mceTableDeleteCol'),\n onPostRender: pushCell\n }\n ]\n };\n var cell = {\n separator: 'before',\n text: 'Cell',\n context: 'table',\n menu: [\n {\n text: 'Cell properties',\n onclick: cmd('mceTableCellProps'),\n onPostRender: pushCell\n },\n {\n text: 'Merge cells',\n onclick: cmd('mceTableMergeCells'),\n onPostRender: pushMerge\n },\n {\n text: 'Split cell',\n onclick: cmd('mceTableSplitCells'),\n onPostRender: pushUnmerge\n }\n ]\n };\n editor.addMenuItem('inserttable', insertTable);\n editor.addMenuItem('tableprops', tableProperties);\n editor.addMenuItem('deletetable', deleteTable);\n editor.addMenuItem('row', row);\n editor.addMenuItem('column', column);\n editor.addMenuItem('cell', cell);\n };\n var MenuItems = { addMenuItems: addMenuItems };\n\n var getClipboardRows = function (clipboardRows) {\n return clipboardRows.get().fold(function () {\n return;\n }, function (rows) {\n return map(rows, function (row) {\n return row.dom();\n });\n });\n };\n var setClipboardRows = function (rows, clipboardRows) {\n var sugarRows = map(rows, Element.fromDom);\n clipboardRows.set(Option.from(sugarRows));\n };\n var getApi = function (editor, clipboardRows) {\n return {\n insertTable: function (columns, rows) {\n return InsertTable.insert(editor, columns, rows);\n },\n setClipboardRows: function (rows) {\n return setClipboardRows(rows, clipboardRows);\n },\n getClipboardRows: function () {\n return getClipboardRows(clipboardRows);\n }\n };\n };\n\n function Plugin(editor) {\n var resizeHandler = ResizeHandler(editor);\n var cellSelection = CellSelection$1(editor, resizeHandler.lazyResize);\n var actions = TableActions(editor, resizeHandler.lazyWire);\n var selections = Selections(editor);\n var clipboardRows = Cell(Option.none());\n Commands.registerCommands(editor, actions, cellSelection, selections, clipboardRows);\n Clipboard.registerEvents(editor, selections, actions, cellSelection);\n MenuItems.addMenuItems(editor, selections);\n Buttons.addButtons(editor);\n Buttons.addToolbars(editor);\n editor.on('PreInit', function () {\n editor.serializer.addTempAttr(Ephemera.firstSelected());\n editor.serializer.addTempAttr(Ephemera.lastSelected());\n });\n if (hasTabNavigation(editor)) {\n editor.on('keydown', function (e) {\n TabContext.handle(e, editor, actions, resizeHandler.lazyWire);\n });\n }\n editor.on('remove', function () {\n resizeHandler.destroy();\n cellSelection.destroy();\n });\n return getApi(editor, clipboardRows);\n }\n global.add('table', Plugin);\n function Plugin$1 () {\n }\n\n return Plugin$1;\n\n}(window));\n})();\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function plural(word, num) {\n var forms = word.split('_');\n return num % 10 === 1 && num % 100 !== 11\n ? forms[0]\n : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n ? forms[1]\n : forms[2];\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n hh: 'час_часа_часов',\n dd: 'день_дня_дней',\n ww: 'неделя_недели_недель',\n MM: 'месяц_месяца_месяцев',\n yy: 'год_года_лет',\n };\n if (key === 'm') {\n return withoutSuffix ? 'минута' : 'минуту';\n } else {\n return number + ' ' + plural(format[key], +number);\n }\n }\n var monthsParse = [\n /^янв/i,\n /^фев/i,\n /^мар/i,\n /^апр/i,\n /^ма[йя]/i,\n /^июн/i,\n /^июл/i,\n /^авг/i,\n /^сен/i,\n /^окт/i,\n /^ноя/i,\n /^дек/i,\n ];\n\n // http://new.gramota.ru/spravka/rules/139-prop : § 103\n // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n var ru = moment.defineLocale('ru', {\n months: {\n format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n '_'\n ),\n standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n '_'\n ),\n },\n monthsShort: {\n // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n '_'\n ),\n },\n weekdays: {\n standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n '_'\n ),\n format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n '_'\n ),\n isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n },\n weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // копия предыдущего\n monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n // полные названия с падежами\n monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n // Выражение, которое соответствует только сокращённым формам\n monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY г.',\n LLL: 'D MMMM YYYY г., H:mm',\n LLLL: 'dddd, D MMMM YYYY г., H:mm',\n },\n calendar: {\n sameDay: '[Сегодня, в] LT',\n nextDay: '[Завтра, в] LT',\n lastDay: '[Вчера, в] LT',\n nextWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В следующее] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В следующий] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В следующую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n lastWeek: function (now) {\n if (now.week() !== this.week()) {\n switch (this.day()) {\n case 0:\n return '[В прошлое] dddd, [в] LT';\n case 1:\n case 2:\n case 4:\n return '[В прошлый] dddd, [в] LT';\n case 3:\n case 5:\n case 6:\n return '[В прошлую] dddd, [в] LT';\n }\n } else {\n if (this.day() === 2) {\n return '[Во] dddd, [в] LT';\n } else {\n return '[В] dddd, [в] LT';\n }\n }\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'через %s',\n past: '%s назад',\n s: 'несколько секунд',\n ss: relativeTimeWithPlural,\n m: relativeTimeWithPlural,\n mm: relativeTimeWithPlural,\n h: 'час',\n hh: relativeTimeWithPlural,\n d: 'день',\n dd: relativeTimeWithPlural,\n w: 'неделя',\n ww: relativeTimeWithPlural,\n M: 'месяц',\n MM: relativeTimeWithPlural,\n y: 'год',\n yy: relativeTimeWithPlural,\n },\n meridiemParse: /ночи|утра|дня|вечера/i,\n isPM: function (input) {\n return /^(дня|вечера)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ночи';\n } else if (hour < 12) {\n return 'утра';\n } else if (hour < 17) {\n return 'дня';\n } else {\n return 'вечера';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'M':\n case 'd':\n case 'DDD':\n return number + '-й';\n case 'D':\n return number + '-го';\n case 'w':\n case 'W':\n return number + '-я';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function translate(number, withoutSuffix, key, isFuture) {\n switch (key) {\n case 's':\n return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n case 'ss':\n return number + (withoutSuffix ? ' секунд' : ' секундын');\n case 'm':\n case 'mm':\n return number + (withoutSuffix ? ' минут' : ' минутын');\n case 'h':\n case 'hh':\n return number + (withoutSuffix ? ' цаг' : ' цагийн');\n case 'd':\n case 'dd':\n return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n case 'M':\n case 'MM':\n return number + (withoutSuffix ? ' сар' : ' сарын');\n case 'y':\n case 'yy':\n return number + (withoutSuffix ? ' жил' : ' жилийн');\n default:\n return number;\n }\n }\n\n var mn = moment.defineLocale('mn', {\n months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n '_'\n ),\n monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'YYYY оны MMMMын D',\n LLL: 'YYYY оны MMMMын D HH:mm',\n LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n },\n meridiemParse: /ҮӨ|ҮХ/i,\n isPM: function (input) {\n return input === 'ҮХ';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ҮӨ';\n } else {\n return 'ҮХ';\n }\n },\n calendar: {\n sameDay: '[Өнөөдөр] LT',\n nextDay: '[Маргааш] LT',\n nextWeek: '[Ирэх] dddd LT',\n lastDay: '[Өчигдөр] LT',\n lastWeek: '[Өнгөрсөн] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s дараа',\n past: '%s өмнө',\n s: translate,\n ss: translate,\n m: translate,\n mm: translate,\n h: translate,\n hh: translate,\n d: translate,\n dd: translate,\n M: translate,\n MM: translate,\n y: translate,\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n ordinal: function (number, period) {\n switch (period) {\n case 'd':\n case 'D':\n case 'DDD':\n return number + ' өдөр';\n default:\n return number;\n }\n },\n });\n\n return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var suffixes = {\n 0: '-чү',\n 1: '-чи',\n 2: '-чи',\n 3: '-чү',\n 4: '-чү',\n 5: '-чи',\n 6: '-чы',\n 7: '-чи',\n 8: '-чи',\n 9: '-чу',\n 10: '-чу',\n 20: '-чы',\n 30: '-чу',\n 40: '-чы',\n 50: '-чү',\n 60: '-чы',\n 70: '-чи',\n 80: '-чи',\n 90: '-чу',\n 100: '-чү',\n };\n\n var ky = moment.defineLocale('ky', {\n months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n '_'\n ),\n monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n '_'\n ),\n weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n '_'\n ),\n weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Бүгүн саат] LT',\n nextDay: '[Эртең саат] LT',\n nextWeek: 'dddd [саат] LT',\n lastDay: '[Кечээ саат] LT',\n lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ичинде',\n past: '%s мурун',\n s: 'бирнече секунд',\n ss: '%d секунд',\n m: 'бир мүнөт',\n mm: '%d мүнөт',\n h: 'бир саат',\n hh: '%d саат',\n d: 'бир күн',\n dd: '%d күн',\n M: 'бир ай',\n MM: '%d ай',\n y: 'бир жыл',\n yy: '%d жыл',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n ordinal: function (number) {\n var a = number % 10,\n b = number >= 100 ? 100 : null;\n return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '১',\n 2: '২',\n 3: '৩',\n 4: '৪',\n 5: '৫',\n 6: '৬',\n 7: '৭',\n 8: '৮',\n 9: '৯',\n 0: '০',\n },\n numberMap = {\n '১': '1',\n '২': '2',\n '৩': '3',\n '৪': '4',\n '৫': '5',\n '৬': '6',\n '৭': '7',\n '৮': '8',\n '৯': '9',\n '০': '0',\n };\n\n var bnBd = moment.defineLocale('bn-bd', {\n months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n '_'\n ),\n monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n '_'\n ),\n weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n '_'\n ),\n weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n longDateFormat: {\n LT: 'A h:mm সময়',\n LTS: 'A h:mm:ss সময়',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm সময়',\n LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n },\n calendar: {\n sameDay: '[আজ] LT',\n nextDay: '[আগামীকাল] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[গতকাল] LT',\n lastWeek: '[গত] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s পরে',\n past: '%s আগে',\n s: 'কয়েক সেকেন্ড',\n ss: '%d সেকেন্ড',\n m: 'এক মিনিট',\n mm: '%d মিনিট',\n h: 'এক ঘন্টা',\n hh: '%d ঘন্টা',\n d: 'এক দিন',\n dd: '%d দিন',\n M: 'এক মাস',\n MM: '%d মাস',\n y: 'এক বছর',\n yy: '%d বছর',\n },\n preparse: function (string) {\n return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n\n meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'রাত') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ভোর') {\n return hour;\n } else if (meridiem === 'সকাল') {\n return hour;\n } else if (meridiem === 'দুপুর') {\n return hour >= 3 ? hour : hour + 12;\n } else if (meridiem === 'বিকাল') {\n return hour + 12;\n } else if (meridiem === 'সন্ধ্যা') {\n return hour + 12;\n }\n },\n\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'রাত';\n } else if (hour < 6) {\n return 'ভোর';\n } else if (hour < 12) {\n return 'সকাল';\n } else if (hour < 15) {\n return 'দুপুর';\n } else if (hour < 18) {\n return 'বিকাল';\n } else if (hour < 20) {\n return 'সন্ধ্যা';\n } else {\n return 'রাত';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n var format = {\n ss: 'secunde',\n mm: 'minute',\n hh: 'ore',\n dd: 'zile',\n ww: 'săptămâni',\n MM: 'luni',\n yy: 'ani',\n },\n separator = ' ';\n if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n separator = ' de ';\n }\n return number + separator + format[key];\n }\n\n var ro = moment.defineLocale('ro', {\n months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n '_'\n ),\n monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY H:mm',\n LLLL: 'dddd, D MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[azi la] LT',\n nextDay: '[mâine la] LT',\n nextWeek: 'dddd [la] LT',\n lastDay: '[ieri la] LT',\n lastWeek: '[fosta] dddd [la] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'peste %s',\n past: '%s în urmă',\n s: 'câteva secunde',\n ss: relativeTimeWithPlural,\n m: 'un minut',\n mm: relativeTimeWithPlural,\n h: 'o oră',\n hh: relativeTimeWithPlural,\n d: 'o zi',\n dd: relativeTimeWithPlural,\n w: 'o săptămână',\n ww: relativeTimeWithPlural,\n M: 'o lună',\n MM: relativeTimeWithPlural,\n y: 'un an',\n yy: relativeTimeWithPlural,\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ro;\n\n})));\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var cy = moment.defineLocale('cy', {\n months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n '_'\n ),\n monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n '_'\n ),\n weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n '_'\n ),\n weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n weekdaysParseExact: true,\n // time formats are the same as en-gb\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Heddiw am] LT',\n nextDay: '[Yfory am] LT',\n nextWeek: 'dddd [am] LT',\n lastDay: '[Ddoe am] LT',\n lastWeek: 'dddd [diwethaf am] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'mewn %s',\n past: '%s yn ôl',\n s: 'ychydig eiliadau',\n ss: '%d eiliad',\n m: 'munud',\n mm: '%d munud',\n h: 'awr',\n hh: '%d awr',\n d: 'diwrnod',\n dd: '%d diwrnod',\n M: 'mis',\n MM: '%d mis',\n y: 'blwyddyn',\n yy: '%d flynedd',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n ordinal: function (number) {\n var b = number,\n output = '',\n lookup = [\n '',\n 'af',\n 'il',\n 'ydd',\n 'ydd',\n 'ed',\n 'ed',\n 'ed',\n 'fed',\n 'fed',\n 'fed', // 1af to 10fed\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'eg',\n 'fed',\n 'eg',\n 'fed', // 11eg to 20fed\n ];\n if (b > 20) {\n if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n output = 'fed'; // not 30ain, 70ain or 90ain\n } else {\n output = 'ain';\n }\n } else if (b > 0) {\n output = lookup[b];\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return cy;\n\n})));\n","module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"fb15\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"00ee\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n\n\n/***/ }),\n\n/***/ \"0366\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(\"1c0b\");\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ \"057f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar nativeGetOwnPropertyNames = __webpack_require__(\"241c\").f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return nativeGetOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n\n\n/***/ }),\n\n/***/ \"06cf\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar propertyIsEnumerableModule = __webpack_require__(\"d1e7\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar toPrimitive = __webpack_require__(\"c04e\");\nvar has = __webpack_require__(\"5135\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"0cfb\");\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ \"0cfb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar fails = __webpack_require__(\"d039\");\nvar createElement = __webpack_require__(\"cc12\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"1276\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(\"d784\");\nvar isRegExp = __webpack_require__(\"44e7\");\nvar anObject = __webpack_require__(\"825a\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar speciesConstructor = __webpack_require__(\"4840\");\nvar advanceStringIndex = __webpack_require__(\"8aa5\");\nvar toLength = __webpack_require__(\"50c4\");\nvar callRegExpExec = __webpack_require__(\"14c3\");\nvar regexpExec = __webpack_require__(\"9263\");\nvar fails = __webpack_require__(\"d039\");\n\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, !SUPPORTS_Y);\n\n\n/***/ }),\n\n/***/ \"14c3\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(\"c6b6\");\nvar regexpExec = __webpack_require__(\"9263\");\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n\n\n/***/ }),\n\n/***/ \"159b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar DOMIterables = __webpack_require__(\"fdbc\");\nvar forEach = __webpack_require__(\"17c2\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n\n\n/***/ }),\n\n/***/ \"17c2\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $forEach = __webpack_require__(\"b727\").forEach;\nvar arrayMethodIsStrict = __webpack_require__(\"a640\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n\n\n/***/ }),\n\n/***/ \"1be4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n\n\n/***/ }),\n\n/***/ \"1c0b\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"1c7e\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ \"1d80\":\n/***/ (function(module, exports) {\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ \"1dde\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar V8_VERSION = __webpack_require__(\"2d00\");\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n\n\n/***/ }),\n\n/***/ \"23cb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ \"23e7\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar getOwnPropertyDescriptor = __webpack_require__(\"06cf\").f;\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar setGlobal = __webpack_require__(\"ce4e\");\nvar copyConstructorProperties = __webpack_require__(\"e893\");\nvar isForced = __webpack_require__(\"94ca\");\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ \"241c\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(\"ca84\");\nvar enumBugKeys = __webpack_require__(\"7839\");\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ \"2532\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar notARegExp = __webpack_require__(\"5a34\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar correctIsRegExpLogic = __webpack_require__(\"ab13\");\n\n// `String.prototype.includes` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~String(requireObjectCoercible(this))\n .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"25f0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefine = __webpack_require__(\"6eeb\");\nvar anObject = __webpack_require__(\"825a\");\nvar fails = __webpack_require__(\"d039\");\nvar flags = __webpack_require__(\"ad6d\");\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = nativeToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = String(R.source);\n var rf = R.flags;\n var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n\n\n/***/ }),\n\n/***/ \"2626\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getBuiltIn = __webpack_require__(\"d066\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n\n\n/***/ }),\n\n/***/ \"2d00\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar userAgent = __webpack_require__(\"342f\");\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n\n\n/***/ }),\n\n/***/ \"342f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n\n\n/***/ }),\n\n/***/ \"35a1\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(\"f5df\");\nvar Iterators = __webpack_require__(\"3f8c\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ \"37e8\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar anObject = __webpack_require__(\"825a\");\nvar objectKeys = __webpack_require__(\"df75\");\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n\n\n/***/ }),\n\n/***/ \"3bbe\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"3ca3\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar charAt = __webpack_require__(\"6547\").charAt;\nvar InternalStateModule = __webpack_require__(\"69f3\");\nvar defineIterator = __webpack_require__(\"7dd0\");\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ \"3f8c\":\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"4160\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar forEach = __webpack_require__(\"17c2\");\n\n// `Array.prototype.forEach` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {\n forEach: forEach\n});\n\n\n/***/ }),\n\n/***/ \"428f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\n\nmodule.exports = global;\n\n\n/***/ }),\n\n/***/ \"44ad\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\nvar classof = __webpack_require__(\"c6b6\");\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ \"44d2\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar create = __webpack_require__(\"7c73\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n\n/***/ \"44e7\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\nvar classof = __webpack_require__(\"c6b6\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n\n\n/***/ }),\n\n/***/ \"45fc\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $some = __webpack_require__(\"b727\").some;\nvar arrayMethodIsStrict = __webpack_require__(\"a640\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('some');\n\n// `Array.prototype.some` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"466d\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(\"d784\");\nvar anObject = __webpack_require__(\"825a\");\nvar toLength = __webpack_require__(\"50c4\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar advanceStringIndex = __webpack_require__(\"8aa5\");\nvar regExpExec = __webpack_require__(\"14c3\");\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n\n\n/***/ }),\n\n/***/ \"4840\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"825a\");\nvar aFunction = __webpack_require__(\"1c0b\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.github.io/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n\n\n/***/ }),\n\n/***/ \"4930\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ \"498a\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $trim = __webpack_require__(\"58a8\").trim;\nvar forcedStringTrimMethod = __webpack_require__(\"c8d2\");\n\n// `String.prototype.trim` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n\n\n/***/ }),\n\n/***/ \"4d63\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar global = __webpack_require__(\"da84\");\nvar isForced = __webpack_require__(\"94ca\");\nvar inheritIfRequired = __webpack_require__(\"7156\");\nvar defineProperty = __webpack_require__(\"9bf2\").f;\nvar getOwnPropertyNames = __webpack_require__(\"241c\").f;\nvar isRegExp = __webpack_require__(\"44e7\");\nvar getFlags = __webpack_require__(\"ad6d\");\nvar stickyHelpers = __webpack_require__(\"9f7f\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar fails = __webpack_require__(\"d039\");\nvar setInternalState = __webpack_require__(\"69f3\").set;\nvar setSpecies = __webpack_require__(\"2626\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar FORCED = DESCRIPTORS && isForced('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n})));\n\n// `RegExp` constructor\n// https://tc39.github.io/ecma262/#sec-regexp-constructor\nif (FORCED) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = this instanceof RegExpWrapper;\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var sticky;\n\n if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) {\n return pattern;\n }\n\n if (CORRECT_NEW) {\n if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source;\n } else if (pattern instanceof RegExpWrapper) {\n if (flagsAreUndefined) flags = getFlags.call(pattern);\n pattern = pattern.source;\n }\n\n if (UNSUPPORTED_Y) {\n sticky = !!flags && flags.indexOf('y') > -1;\n if (sticky) flags = flags.replace(/y/g, '');\n }\n\n var result = inheritIfRequired(\n CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags),\n thisIsRegExp ? this : RegExpPrototype,\n RegExpWrapper\n );\n\n if (UNSUPPORTED_Y && sticky) setInternalState(result, { sticky: sticky });\n\n return result;\n };\n var proxy = function (key) {\n key in RegExpWrapper || defineProperty(RegExpWrapper, key, {\n configurable: true,\n get: function () { return NativeRegExp[key]; },\n set: function (it) { NativeRegExp[key] = it; }\n });\n };\n var keys = getOwnPropertyNames(NativeRegExp);\n var index = 0;\n while (keys.length > index) proxy(keys[index++]);\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.github.io/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n\n\n/***/ }),\n\n/***/ \"4d64\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(\"fc6a\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toAbsoluteIndex = __webpack_require__(\"23cb\");\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n\n\n/***/ }),\n\n/***/ \"4de4\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar $filter = __webpack_require__(\"b727\").filter;\nvar arrayMethodHasSpeciesSupport = __webpack_require__(\"1dde\");\nvar arrayMethodUsesToLength = __webpack_require__(\"ae40\");\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n// Edge 14- issue\nvar USES_TO_LENGTH = arrayMethodUsesToLength('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n/***/ }),\n\n/***/ \"4df4\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(\"0366\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar callWithSafeIterationClosing = __webpack_require__(\"9bdd\");\nvar isArrayIteratorMethod = __webpack_require__(\"e95a\");\nvar toLength = __webpack_require__(\"50c4\");\nvar createProperty = __webpack_require__(\"8418\");\nvar getIteratorMethod = __webpack_require__(\"35a1\");\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"50c4\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"5135\":\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"5319\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(\"d784\");\nvar anObject = __webpack_require__(\"825a\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar toLength = __webpack_require__(\"50c4\");\nvar toInteger = __webpack_require__(\"a691\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar advanceStringIndex = __webpack_require__(\"8aa5\");\nvar regExpExec = __webpack_require__(\"14c3\");\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n\n\n/***/ }),\n\n/***/ \"5692\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar IS_PURE = __webpack_require__(\"c430\");\nvar store = __webpack_require__(\"c6cd\");\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.6.5',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"56ef\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getBuiltIn = __webpack_require__(\"d066\");\nvar getOwnPropertyNamesModule = __webpack_require__(\"241c\");\nvar getOwnPropertySymbolsModule = __webpack_require__(\"7418\");\nvar anObject = __webpack_require__(\"825a\");\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ \"5899\":\n/***/ (function(module, exports) {\n\n// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n\n\n/***/ }),\n\n/***/ \"58a8\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\nvar whitespaces = __webpack_require__(\"5899\");\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n\n\n/***/ }),\n\n/***/ \"5a34\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isRegExp = __webpack_require__(\"44e7\");\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"5c6c\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ \"60da\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar DESCRIPTORS = __webpack_require__(\"83ab\");\nvar fails = __webpack_require__(\"d039\");\nvar objectKeys = __webpack_require__(\"df75\");\nvar getOwnPropertySymbolsModule = __webpack_require__(\"7418\");\nvar propertyIsEnumerableModule = __webpack_require__(\"d1e7\");\nvar toObject = __webpack_require__(\"7b0b\");\nvar IndexedObject = __webpack_require__(\"44ad\");\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n\n\n/***/ }),\n\n/***/ \"6547\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(\"a691\");\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n\n\n/***/ }),\n\n/***/ \"65f0\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\nvar isArray = __webpack_require__(\"e8b5\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n\n\n/***/ }),\n\n/***/ \"69f3\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(\"7f9a\");\nvar global = __webpack_require__(\"da84\");\nvar isObject = __webpack_require__(\"861d\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar objectHas = __webpack_require__(\"5135\");\nvar sharedKey = __webpack_require__(\"f772\");\nvar hiddenKeys = __webpack_require__(\"d012\");\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ \"6eeb\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar has = __webpack_require__(\"5135\");\nvar setGlobal = __webpack_require__(\"ce4e\");\nvar inspectSource = __webpack_require__(\"8925\");\nvar InternalStateModule = __webpack_require__(\"69f3\");\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n\n\n/***/ }),\n\n/***/ \"7156\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\nvar setPrototypeOf = __webpack_require__(\"d2bb\");\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n\n\n/***/ }),\n\n/***/ \"7418\":\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"746f\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar path = __webpack_require__(\"428f\");\nvar has = __webpack_require__(\"5135\");\nvar wrappedWellKnownSymbolModule = __webpack_require__(\"e538\");\nvar defineProperty = __webpack_require__(\"9bf2\").f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n\n\n/***/ }),\n\n/***/ \"7839\":\n/***/ (function(module, exports) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ \"7b0b\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(\"1d80\");\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ \"7c73\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(\"825a\");\nvar defineProperties = __webpack_require__(\"37e8\");\nvar enumBugKeys = __webpack_require__(\"7839\");\nvar hiddenKeys = __webpack_require__(\"d012\");\nvar html = __webpack_require__(\"1be4\");\nvar documentCreateElement = __webpack_require__(\"cc12\");\nvar sharedKey = __webpack_require__(\"f772\");\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\n\n/***/ }),\n\n/***/ \"7dd0\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(\"23e7\");\nvar createIteratorConstructor = __webpack_require__(\"9ed3\");\nvar getPrototypeOf = __webpack_require__(\"e163\");\nvar setPrototypeOf = __webpack_require__(\"d2bb\");\nvar setToStringTag = __webpack_require__(\"d44e\");\nvar createNonEnumerableProperty = __webpack_require__(\"9112\");\nvar redefine = __webpack_require__(\"6eeb\");\nvar wellKnownSymbol = __webpack_require__(\"b622\");\nvar IS_PURE = __webpack_require__(\"c430\");\nvar Iterators = __webpack_require__(\"3f8c\");\nvar IteratorsCore = __webpack_require__(\"ae93\");\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n\n\n/***/ }),\n\n/***/ \"7f9a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(\"da84\");\nvar inspectSource = __webpack_require__(\"8925\");\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n\n\n/***/ }),\n\n/***/ \"825a\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(\"861d\");\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"83ab\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(\"d039\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n\n\n/***/ }),\n\n/***/ \"8418\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(\"c04e\");\nvar definePropertyModule = __webpack_require__(\"9bf2\");\nvar createPropertyDescriptor = __webpack_require__(\"5c6c\");\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ \"861d\":\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"8875\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// addapted from the document.currentScript polyfill by Adam Miller\n// MIT license\n// source: https://github.com/amiller-gh/currentScript-polyfill\n\n// added support for Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=1620505\n\n(function (root, factory) {\n if (true) {\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n}(typeof self !== 'undefined' ? self : this, function () {\n function getCurrentScript () {\n if (document.currentScript) {\n return document.currentScript\n }\n \n // IE 8-10 support script readyState\n // IE 11+ & Firefox support stack trace\n try {\n throw new Error();\n }\n catch (err) {\n // Find the second match for the \"at\" string to get file src url from stack.\n var ieStackRegExp = /.*at [^(]*\\((.*):(.+):(.+)\\)$/ig,\n ffStackRegExp = /@([^@]*):(\\d+):(\\d+)\\s*$/ig,\n stackDetails = ieStackRegExp.exec(err.stack) || ffStackRegExp.exec(err.stack),\n scriptLocation = (stackDetails && stackDetails[1]) || false,\n line = (stackDetails && stackDetails[2]) || false,\n currentLocation = document.location.href.replace(document.location.hash, ''),\n pageSource,\n inlineScriptSourceRegExp,\n inlineScriptSource,\n scripts = document.getElementsByTagName('script'); // Live NodeList collection\n \n if (scriptLocation === currentLocation) {\n pageSource = document.documentElement.outerHTML;\n inlineScriptSourceRegExp = new RegExp('(?:[^\\\\n]+?\\\\n){0,' + (line - 2) + '}[^<]*\n\n\n\n","import mod from \"-!../../../cache-loader/dist/cjs.js??ref--12-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-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--12-0!../../../thread-loader/dist/cjs.js!../../../babel-loader/lib/index.js!../../../cache-loader/dist/cjs.js??ref--0-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\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./QuizTeacherCreateQuestion.vue?vue&type=template&id=203d62ae&\"\nimport script from \"./QuizTeacherCreateQuestion.vue?vue&type=script&lang=js&\"\nexport * from \"./QuizTeacherCreateQuestion.vue?vue&type=script&lang=js&\"\nimport style0 from \"./QuizTeacherCreateQuestion.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","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enSg = moment.defineLocale('en-sg', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//! Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var nn = moment.defineLocale('nn', {\n months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY [kl.] H:mm',\n LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n },\n calendar: {\n sameDay: '[I dag klokka] LT',\n nextDay: '[I morgon klokka] LT',\n nextWeek: 'dddd [klokka] LT',\n lastDay: '[I går klokka] LT',\n lastWeek: '[Føregåande] dddd [klokka] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'om %s',\n past: '%s sidan',\n s: 'nokre sekund',\n ss: '%d sekund',\n m: 'eit minutt',\n mm: '%d minutt',\n h: 'ein time',\n hh: '%d timar',\n d: 'ein dag',\n dd: '%d dagar',\n w: 'ei veke',\n ww: '%d veker',\n M: 'ein månad',\n MM: '%d månader',\n y: 'eit år',\n yy: '%d år',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var units = {\n ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n h: 'stundas_stundām_stunda_stundas'.split('_'),\n hh: 'stundas_stundām_stunda_stundas'.split('_'),\n d: 'dienas_dienām_diena_dienas'.split('_'),\n dd: 'dienas_dienām_diena_dienas'.split('_'),\n M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n y: 'gada_gadiem_gads_gadi'.split('_'),\n yy: 'gada_gadiem_gads_gadi'.split('_'),\n };\n /**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\n function format(forms, number, withoutSuffix) {\n if (withoutSuffix) {\n // E.g. \"21 minūte\", \"3 minūtes\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n } else {\n // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n }\n }\n function relativeTimeWithPlural(number, withoutSuffix, key) {\n return number + ' ' + format(units[key], number, withoutSuffix);\n }\n function relativeTimeWithSingular(number, withoutSuffix, key) {\n return format(units[key], number, withoutSuffix);\n }\n function relativeSeconds(number, withoutSuffix) {\n return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n }\n\n var lv = moment.defineLocale('lv', {\n months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n '_'\n ),\n monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n '_'\n ),\n weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY.',\n LL: 'YYYY. [gada] D. MMMM',\n LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n },\n calendar: {\n sameDay: '[Šodien pulksten] LT',\n nextDay: '[Rīt pulksten] LT',\n nextWeek: 'dddd [pulksten] LT',\n lastDay: '[Vakar pulksten] LT',\n lastWeek: '[Pagājušā] dddd [pulksten] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'pēc %s',\n past: 'pirms %s',\n s: relativeSeconds,\n ss: relativeTimeWithPlural,\n m: relativeTimeWithSingular,\n mm: relativeTimeWithPlural,\n h: relativeTimeWithSingular,\n hh: relativeTimeWithPlural,\n d: relativeTimeWithSingular,\n dd: relativeTimeWithPlural,\n M: relativeTimeWithSingular,\n MM: relativeTimeWithPlural,\n y: relativeTimeWithSingular,\n yy: relativeTimeWithPlural,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n m: ['eine Minute', 'einer Minute'],\n h: ['eine Stunde', 'einer Stunde'],\n d: ['ein Tag', 'einem Tag'],\n dd: [number + ' Tage', number + ' Tagen'],\n w: ['eine Woche', 'einer Woche'],\n M: ['ein Monat', 'einem Monat'],\n MM: [number + ' Monate', number + ' Monaten'],\n y: ['ein Jahr', 'einem Jahr'],\n yy: [number + ' Jahre', number + ' Jahren'],\n };\n return withoutSuffix ? format[key][0] : format[key][1];\n }\n\n var deCh = moment.defineLocale('de-ch', {\n months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n '_'\n ),\n monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n '_'\n ),\n weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY HH:mm',\n LLLL: 'dddd, D. MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[heute um] LT [Uhr]',\n sameElse: 'L',\n nextDay: '[morgen um] LT [Uhr]',\n nextWeek: 'dddd [um] LT [Uhr]',\n lastDay: '[gestern um] LT [Uhr]',\n lastWeek: '[letzten] dddd [um] LT [Uhr]',\n },\n relativeTime: {\n future: 'in %s',\n past: 'vor %s',\n s: 'ein paar Sekunden',\n ss: '%d Sekunden',\n m: processRelativeTime,\n mm: '%d Minuten',\n h: processRelativeTime,\n hh: '%d Stunden',\n d: processRelativeTime,\n dd: processRelativeTime,\n w: processRelativeTime,\n ww: '%d Wochen',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return deCh;\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","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var tzm = moment.defineLocale('tzm', {\n months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n '_'\n ),\n weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n nextWeek: 'dddd [ⴴ] LT',\n lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n lastWeek: 'dddd [ⴴ] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n past: 'ⵢⴰⵏ %s',\n s: 'ⵉⵎⵉⴽ',\n ss: '%d ⵉⵎⵉⴽ',\n m: 'ⵎⵉⵏⵓⴺ',\n mm: '%d ⵎⵉⵏⵓⴺ',\n h: 'ⵙⴰⵄⴰ',\n hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n d: 'ⴰⵙⵙ',\n dd: '%d oⵙⵙⴰⵏ',\n M: 'ⴰⵢoⵓⵔ',\n MM: '%d ⵉⵢⵢⵉⵔⵏ',\n y: 'ⴰⵙⴳⴰⵙ',\n yy: '%d ⵉⵙⴳⴰⵙⵏ',\n },\n week: {\n dow: 6, // Saturday is the first day of the week.\n doy: 12, // The week that contains Jan 12th is the first week of the year.\n },\n });\n\n return tzm;\n\n})));\n","//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i;\n for (i = 0; i < arr.length; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i, prop, val;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentProperties.length > 0) {\n for (i = 0; i < momentProperties.length; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key;\n for (i = 0; i < arguments.length; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i;\n for (i = 0; i < prioritized.length; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n matched,\n p1,\n p2,\n p3,\n p4\n ) {\n return p1 || p2 || p3 || p4;\n })\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n for (i = 0; i < token.length; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n '_'\n ),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat;\n\n if (match) {\n getParsingFlags(config).iso = true;\n\n for (i = 0, l = isoDates.length; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimes.length; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n for (i = 0; i < tokens.length; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false;\n\n if (config._f.length === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < config._f.length; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < ordering.length; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n input,\n array,\n config,\n token\n ) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n });\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n input,\n week,\n config,\n token\n ) {\n week[token.substr(0, 2)] = toInt(input);\n });\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\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');","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var he = moment.defineLocale('he', {\n months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n '_'\n ),\n monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(\n '_'\n ),\n weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [ב]MMMM YYYY',\n LLL: 'D [ב]MMMM YYYY HH:mm',\n LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n l: 'D/M/YYYY',\n ll: 'D MMM YYYY',\n lll: 'D MMM YYYY HH:mm',\n llll: 'ddd, D MMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[היום ב־]LT',\n nextDay: '[מחר ב־]LT',\n nextWeek: 'dddd [בשעה] LT',\n lastDay: '[אתמול ב־]LT',\n lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'בעוד %s',\n past: 'לפני %s',\n s: 'מספר שניות',\n ss: '%d שניות',\n m: 'דקה',\n mm: '%d דקות',\n h: 'שעה',\n hh: function (number) {\n if (number === 2) {\n return 'שעתיים';\n }\n return number + ' שעות';\n },\n d: 'יום',\n dd: function (number) {\n if (number === 2) {\n return 'יומיים';\n }\n return number + ' ימים';\n },\n M: 'חודש',\n MM: function (number) {\n if (number === 2) {\n return 'חודשיים';\n }\n return number + ' חודשים';\n },\n y: 'שנה',\n yy: function (number) {\n if (number === 2) {\n return 'שנתיים';\n } else if (number % 10 === 0 && number !== 10) {\n return number + ' שנה';\n }\n return number + ' שנים';\n },\n },\n meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n isPM: function (input) {\n return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 5) {\n return 'לפנות בוקר';\n } else if (hour < 10) {\n return 'בבוקר';\n } else if (hour < 12) {\n return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n } else if (hour < 18) {\n return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n } else {\n return 'בערב';\n }\n },\n });\n\n return he;\n\n})));\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var sq = moment.defineLocale('sq', {\n months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n '_'\n ),\n monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n '_'\n ),\n weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n weekdaysParseExact: true,\n meridiemParse: /PD|MD/,\n isPM: function (input) {\n return input.charAt(0) === 'M';\n },\n meridiem: function (hours, minutes, isLower) {\n return hours < 12 ? 'PD' : 'MD';\n },\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Sot në] LT',\n nextDay: '[Nesër në] LT',\n nextWeek: 'dddd [në] LT',\n lastDay: '[Dje në] LT',\n lastWeek: 'dddd [e kaluar në] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'në %s',\n past: '%s më parë',\n s: 'disa sekonda',\n ss: '%d sekonda',\n m: 'një minutë',\n mm: '%d minuta',\n h: 'një orë',\n hh: '%d orë',\n d: 'një ditë',\n dd: '%d ditë',\n M: 'një muaj',\n MM: '%d muaj',\n y: 'një vit',\n yy: '%d vite',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return sq;\n\n})));\n","(function () {\nvar image = (function (domGlobals) {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var hasDimensions = function (editor) {\n return editor.settings.image_dimensions === false ? false : true;\n };\n var hasAdvTab = function (editor) {\n return editor.settings.image_advtab === true ? true : false;\n };\n var getPrependUrl = function (editor) {\n return editor.getParam('image_prepend_url', '');\n };\n var getClassList = function (editor) {\n return editor.getParam('image_class_list');\n };\n var hasDescription = function (editor) {\n return editor.settings.image_description === false ? false : true;\n };\n var hasImageTitle = function (editor) {\n return editor.settings.image_title === true ? true : false;\n };\n var hasImageCaption = function (editor) {\n return editor.settings.image_caption === true ? true : false;\n };\n var getImageList = function (editor) {\n return editor.getParam('image_list', false);\n };\n var hasUploadUrl = function (editor) {\n return editor.getParam('images_upload_url', false);\n };\n var hasUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler', false);\n };\n var getUploadUrl = function (editor) {\n return editor.getParam('images_upload_url');\n };\n var getUploadHandler = function (editor) {\n return editor.getParam('images_upload_handler');\n };\n var getUploadBasePath = function (editor) {\n return editor.getParam('images_upload_base_path');\n };\n var getUploadCredentials = function (editor) {\n return editor.getParam('images_upload_credentials');\n };\n var Settings = {\n hasDimensions: hasDimensions,\n hasAdvTab: hasAdvTab,\n getPrependUrl: getPrependUrl,\n getClassList: getClassList,\n hasDescription: hasDescription,\n hasImageTitle: hasImageTitle,\n hasImageCaption: hasImageCaption,\n getImageList: getImageList,\n hasUploadUrl: hasUploadUrl,\n hasUploadHandler: hasUploadHandler,\n getUploadUrl: getUploadUrl,\n getUploadHandler: getUploadHandler,\n getUploadBasePath: getUploadBasePath,\n getUploadCredentials: getUploadCredentials\n };\n\n var Global = typeof domGlobals.window !== 'undefined' ? domGlobals.window : Function('return this;')();\n\n var path = function (parts, scope) {\n var o = scope !== undefined && scope !== null ? scope : Global;\n for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i) {\n o = o[parts[i]];\n }\n return o;\n };\n var resolve = function (p, scope) {\n var parts = p.split('.');\n return path(parts, scope);\n };\n\n var unsafe = function (name, scope) {\n return resolve(name, scope);\n };\n var getOrDie = function (name, scope) {\n var actual = unsafe(name, scope);\n if (actual === undefined || actual === null) {\n throw new Error(name + ' not available on this browser');\n }\n return actual;\n };\n var Global$1 = { getOrDie: getOrDie };\n\n function FileReader () {\n var f = Global$1.getOrDie('FileReader');\n return new f();\n }\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');\n\n var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');\n\n var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');\n\n var parseIntAndGetMax = function (val1, val2) {\n return Math.max(parseInt(val1, 10), parseInt(val2, 10));\n };\n var getImageSize = function (url, callback) {\n var img = domGlobals.document.createElement('img');\n function done(width, height) {\n if (img.parentNode) {\n img.parentNode.removeChild(img);\n }\n callback({\n width: width,\n height: height\n });\n }\n img.onload = function () {\n var width = parseIntAndGetMax(img.width, img.clientWidth);\n var height = parseIntAndGetMax(img.height, img.clientHeight);\n done(width, height);\n };\n img.onerror = function () {\n done(0, 0);\n };\n var style = img.style;\n style.visibility = 'hidden';\n style.position = 'fixed';\n style.bottom = style.left = '0px';\n style.width = style.height = 'auto';\n domGlobals.document.body.appendChild(img);\n img.src = url;\n };\n var buildListItems = function (inputList, itemCallback, startItems) {\n function appendItems(values, output) {\n output = output || [];\n global$2.each(values, function (item) {\n var menuItem = { text: item.text || item.title };\n if (item.menu) {\n menuItem.menu = appendItems(item.menu);\n } else {\n menuItem.value = item.value;\n itemCallback(menuItem);\n }\n output.push(menuItem);\n });\n return output;\n }\n return appendItems(inputList, startItems || []);\n };\n var removePixelSuffix = function (value) {\n if (value) {\n value = value.replace(/px$/, '');\n }\n return value;\n };\n var addPixelSuffix = function (value) {\n if (value.length > 0 && /^[0-9]+$/.test(value)) {\n value += 'px';\n }\n return value;\n };\n var mergeMargins = function (css) {\n if (css.margin) {\n var splitMargin = css.margin.split(' ');\n switch (splitMargin.length) {\n case 1:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[0];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[0];\n break;\n case 2:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 3:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[1];\n break;\n case 4:\n css['margin-top'] = css['margin-top'] || splitMargin[0];\n css['margin-right'] = css['margin-right'] || splitMargin[1];\n css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];\n css['margin-left'] = css['margin-left'] || splitMargin[3];\n }\n delete css.margin;\n }\n return css;\n };\n var createImageList = function (editor, callback) {\n var imageList = Settings.getImageList(editor);\n if (typeof imageList === 'string') {\n global$3.send({\n url: imageList,\n success: function (text) {\n callback(JSON.parse(text));\n }\n });\n } else if (typeof imageList === 'function') {\n imageList(callback);\n } else {\n callback(imageList);\n }\n };\n var waitLoadImage = function (editor, data, imgElm) {\n function selectImage() {\n imgElm.onload = imgElm.onerror = null;\n if (editor.selection) {\n editor.selection.select(imgElm);\n editor.nodeChanged();\n }\n }\n imgElm.onload = function () {\n if (!data.width && !data.height && Settings.hasDimensions(editor)) {\n editor.dom.setAttribs(imgElm, {\n width: imgElm.clientWidth,\n height: imgElm.clientHeight\n });\n }\n selectImage();\n };\n imgElm.onerror = selectImage;\n };\n var blobToDataUri = function (blob) {\n return new global$1(function (resolve, reject) {\n var reader = FileReader();\n reader.onload = function () {\n resolve(reader.result);\n };\n reader.onerror = function () {\n reject(reader.error.message);\n };\n reader.readAsDataURL(blob);\n });\n };\n var Utils = {\n getImageSize: getImageSize,\n buildListItems: buildListItems,\n removePixelSuffix: removePixelSuffix,\n addPixelSuffix: addPixelSuffix,\n mergeMargins: mergeMargins,\n createImageList: createImageList,\n waitLoadImage: waitLoadImage,\n blobToDataUri: blobToDataUri\n };\n\n var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n var shallow = function (old, nu) {\n return nu;\n };\n var baseMerge = function (merger) {\n return function () {\n var objects = new Array(arguments.length);\n for (var i = 0; i < objects.length; i++) {\n objects[i] = arguments[i];\n }\n if (objects.length === 0) {\n throw new Error('Can\\'t merge zero objects');\n }\n var ret = {};\n for (var j = 0; j < objects.length; j++) {\n var curObject = objects[j];\n for (var key in curObject) {\n if (hasOwnProperty.call(curObject, key)) {\n ret[key] = merger(ret[key], curObject[key]);\n }\n }\n }\n return ret;\n };\n };\n var merge = baseMerge(shallow);\n\n var DOM = global$4.DOM;\n var getHspace = function (image) {\n if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {\n return Utils.removePixelSuffix(image.style.marginLeft);\n } else {\n return '';\n }\n };\n var getVspace = function (image) {\n if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {\n return Utils.removePixelSuffix(image.style.marginTop);\n } else {\n return '';\n }\n };\n var getBorder = function (image) {\n if (image.style.borderWidth) {\n return Utils.removePixelSuffix(image.style.borderWidth);\n } else {\n return '';\n }\n };\n var getAttrib = function (image, name) {\n if (image.hasAttribute(name)) {\n return image.getAttribute(name);\n } else {\n return '';\n }\n };\n var getStyle = function (image, name) {\n return image.style[name] ? image.style[name] : '';\n };\n var hasCaption = function (image) {\n return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';\n };\n var setAttrib = function (image, name, value) {\n image.setAttribute(name, value);\n };\n var wrapInFigure = function (image) {\n var figureElm = DOM.create('figure', { class: 'image' });\n DOM.insertAfter(figureElm, image);\n figureElm.appendChild(image);\n figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figureElm.contentEditable = 'false';\n };\n var removeFigure = function (image) {\n var figureElm = image.parentNode;\n DOM.insertAfter(image, figureElm);\n DOM.remove(figureElm);\n };\n var toggleCaption = function (image) {\n if (hasCaption(image)) {\n removeFigure(image);\n } else {\n wrapInFigure(image);\n }\n };\n var normalizeStyle = function (image, normalizeCss) {\n var attrValue = image.getAttribute('style');\n var value = normalizeCss(attrValue !== null ? attrValue : '');\n if (value.length > 0) {\n image.setAttribute('style', value);\n image.setAttribute('data-mce-style', value);\n } else {\n image.removeAttribute('style');\n }\n };\n var setSize = function (name, normalizeCss) {\n return function (image, name, value) {\n if (image.style[name]) {\n image.style[name] = Utils.addPixelSuffix(value);\n normalizeStyle(image, normalizeCss);\n } else {\n setAttrib(image, name, value);\n }\n };\n };\n var getSize = function (image, name) {\n if (image.style[name]) {\n return Utils.removePixelSuffix(image.style[name]);\n } else {\n return getAttrib(image, name);\n }\n };\n var setHspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginLeft = pxValue;\n image.style.marginRight = pxValue;\n };\n var setVspace = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.marginTop = pxValue;\n image.style.marginBottom = pxValue;\n };\n var setBorder = function (image, value) {\n var pxValue = Utils.addPixelSuffix(value);\n image.style.borderWidth = pxValue;\n };\n var setBorderStyle = function (image, value) {\n image.style.borderStyle = value;\n };\n var getBorderStyle = function (image) {\n return getStyle(image, 'borderStyle');\n };\n var isFigure = function (elm) {\n return elm.nodeName === 'FIGURE';\n };\n var defaultData = function () {\n return {\n src: '',\n alt: '',\n title: '',\n width: '',\n height: '',\n class: '',\n style: '',\n caption: false,\n hspace: '',\n vspace: '',\n border: '',\n borderStyle: ''\n };\n };\n var getStyleValue = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n setAttrib(image, 'style', data.style);\n if (getHspace(image) || data.hspace !== '') {\n setHspace(image, data.hspace);\n }\n if (getVspace(image) || data.vspace !== '') {\n setVspace(image, data.vspace);\n }\n if (getBorder(image) || data.border !== '') {\n setBorder(image, data.border);\n }\n if (getBorderStyle(image) || data.borderStyle !== '') {\n setBorderStyle(image, data.borderStyle);\n }\n return normalizeCss(image.getAttribute('style'));\n };\n var create = function (normalizeCss, data) {\n var image = domGlobals.document.createElement('img');\n write(normalizeCss, merge(data, { caption: false }), image);\n setAttrib(image, 'alt', data.alt);\n if (data.caption) {\n var figure = DOM.create('figure', { class: 'image' });\n figure.appendChild(image);\n figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));\n figure.contentEditable = 'false';\n return figure;\n } else {\n return image;\n }\n };\n var read = function (normalizeCss, image) {\n return {\n src: getAttrib(image, 'src'),\n alt: getAttrib(image, 'alt'),\n title: getAttrib(image, 'title'),\n width: getSize(image, 'width'),\n height: getSize(image, 'height'),\n class: getAttrib(image, 'class'),\n style: normalizeCss(getAttrib(image, 'style')),\n caption: hasCaption(image),\n hspace: getHspace(image),\n vspace: getVspace(image),\n border: getBorder(image),\n borderStyle: getStyle(image, 'borderStyle')\n };\n };\n var updateProp = function (image, oldData, newData, name, set) {\n if (newData[name] !== oldData[name]) {\n set(image, name, newData[name]);\n }\n };\n var normalized = function (set, normalizeCss) {\n return function (image, name, value) {\n set(image, value);\n normalizeStyle(image, normalizeCss);\n };\n };\n var write = function (normalizeCss, newData, image) {\n var oldData = read(normalizeCss, image);\n updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {\n return toggleCaption(image);\n });\n updateProp(image, oldData, newData, 'src', setAttrib);\n updateProp(image, oldData, newData, 'alt', setAttrib);\n updateProp(image, oldData, newData, 'title', setAttrib);\n updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));\n updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));\n updateProp(image, oldData, newData, 'class', setAttrib);\n updateProp(image, oldData, newData, 'style', normalized(function (image, value) {\n return setAttrib(image, 'style', value);\n }, normalizeCss));\n updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));\n updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));\n updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));\n updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));\n };\n\n var normalizeCss = function (editor, cssText) {\n var css = editor.dom.styles.parse(cssText);\n var mergedCss = Utils.mergeMargins(css);\n var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));\n return editor.dom.styles.serialize(compressed);\n };\n var getSelectedImage = function (editor) {\n var imgElm = editor.selection.getNode();\n var figureElm = editor.dom.getParent(imgElm, 'figure.image');\n if (figureElm) {\n return editor.dom.select('img', figureElm)[0];\n }\n if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {\n return null;\n }\n return imgElm;\n };\n var splitTextBlock = function (editor, figure) {\n var dom = editor.dom;\n var textBlock = dom.getParent(figure.parentNode, function (node) {\n return editor.schema.getTextBlockElements()[node.nodeName];\n }, editor.getBody());\n if (textBlock) {\n return dom.split(textBlock, figure);\n } else {\n return figure;\n }\n };\n var readImageDataFromSelection = function (editor) {\n var image = getSelectedImage(editor);\n return image ? read(function (css) {\n return normalizeCss(editor, css);\n }, image) : defaultData();\n };\n var insertImageAtCaret = function (editor, data) {\n var elm = create(function (css) {\n return normalizeCss(editor, css);\n }, data);\n editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');\n editor.focus();\n editor.selection.setContent(elm.outerHTML);\n var insertedElm = editor.dom.select('*[data-mce-id=\"__mcenew\"]')[0];\n editor.dom.setAttrib(insertedElm, 'data-mce-id', null);\n if (isFigure(insertedElm)) {\n var figure = splitTextBlock(editor, insertedElm);\n editor.selection.select(figure);\n } else {\n editor.selection.select(insertedElm);\n }\n };\n var syncSrcAttr = function (editor, image) {\n editor.dom.setAttrib(image, 'src', image.getAttribute('src'));\n };\n var deleteImage = function (editor, image) {\n if (image) {\n var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;\n editor.dom.remove(elm);\n editor.focus();\n editor.nodeChanged();\n if (editor.dom.isEmpty(editor.getBody())) {\n editor.setContent('');\n editor.selection.setCursorLocation();\n }\n }\n };\n var writeImageDataToSelection = function (editor, data) {\n var image = getSelectedImage(editor);\n write(function (css) {\n return normalizeCss(editor, css);\n }, data, image);\n syncSrcAttr(editor, image);\n if (isFigure(image.parentNode)) {\n var figure = image.parentNode;\n splitTextBlock(editor, figure);\n editor.selection.select(image.parentNode);\n } else {\n editor.selection.select(image);\n Utils.waitLoadImage(editor, data, image);\n }\n };\n var insertOrUpdateImage = function (editor, data) {\n var image = getSelectedImage(editor);\n if (image) {\n if (data.src) {\n writeImageDataToSelection(editor, data);\n } else {\n deleteImage(editor, image);\n }\n } else if (data.src) {\n insertImageAtCaret(editor, data);\n }\n };\n\n var updateVSpaceHSpaceBorder = function (editor) {\n return function (evt) {\n var dom = editor.dom;\n var rootControl = evt.control.rootControl;\n if (!Settings.hasAdvTab(editor)) {\n return;\n }\n var data = rootControl.toJSON();\n var css = dom.parseStyle(data.style);\n rootControl.find('#vspace').value('');\n rootControl.find('#hspace').value('');\n css = Utils.mergeMargins(css);\n if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {\n if (css['margin-top'] === css['margin-bottom']) {\n rootControl.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));\n } else {\n rootControl.find('#vspace').value('');\n }\n if (css['margin-right'] === css['margin-left']) {\n rootControl.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));\n } else {\n rootControl.find('#hspace').value('');\n }\n }\n if (css['border-width']) {\n rootControl.find('#border').value(Utils.removePixelSuffix(css['border-width']));\n } else {\n rootControl.find('#border').value('');\n }\n if (css['border-style']) {\n rootControl.find('#borderStyle').value(css['border-style']);\n } else {\n rootControl.find('#borderStyle').value('');\n }\n rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));\n };\n };\n var updateStyle = function (editor, win) {\n win.find('#style').each(function (ctrl) {\n var value = getStyleValue(function (css) {\n return normalizeCss(editor, css);\n }, merge(defaultData(), win.toJSON()));\n ctrl.value(value);\n });\n };\n var makeTab = function (editor) {\n return {\n title: 'Advanced',\n type: 'form',\n pack: 'start',\n items: [\n {\n label: 'Style',\n name: 'style',\n type: 'textbox',\n onchange: updateVSpaceHSpaceBorder(editor)\n },\n {\n type: 'form',\n layout: 'grid',\n packV: 'start',\n columns: 2,\n padding: 0,\n defaults: {\n type: 'textbox',\n maxWidth: 50,\n onchange: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n }\n },\n items: [\n {\n label: 'Vertical space',\n name: 'vspace'\n },\n {\n label: 'Border width',\n name: 'border'\n },\n {\n label: 'Horizontal space',\n name: 'hspace'\n },\n {\n label: 'Border style',\n type: 'listbox',\n name: 'borderStyle',\n width: 90,\n maxWidth: 90,\n onselect: function (evt) {\n updateStyle(editor, evt.control.rootControl);\n },\n values: [\n {\n text: 'Select...',\n value: ''\n },\n {\n text: 'Solid',\n value: 'solid'\n },\n {\n text: 'Dotted',\n value: 'dotted'\n },\n {\n text: 'Dashed',\n value: 'dashed'\n },\n {\n text: 'Double',\n value: 'double'\n },\n {\n text: 'Groove',\n value: 'groove'\n },\n {\n text: 'Ridge',\n value: 'ridge'\n },\n {\n text: 'Inset',\n value: 'inset'\n },\n {\n text: 'Outset',\n value: 'outset'\n },\n {\n text: 'None',\n value: 'none'\n },\n {\n text: 'Hidden',\n value: 'hidden'\n }\n ]\n }\n ]\n }\n ]\n };\n };\n var AdvTab = { makeTab: makeTab };\n\n var doSyncSize = function (widthCtrl, heightCtrl) {\n widthCtrl.state.set('oldVal', widthCtrl.value());\n heightCtrl.state.set('oldVal', heightCtrl.value());\n };\n var doSizeControls = function (win, f) {\n var widthCtrl = win.find('#width')[0];\n var heightCtrl = win.find('#height')[0];\n var constrained = win.find('#constrain')[0];\n if (widthCtrl && heightCtrl && constrained) {\n f(widthCtrl, heightCtrl, constrained.checked());\n }\n };\n var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {\n var oldWidth = widthCtrl.state.get('oldVal');\n var oldHeight = heightCtrl.state.get('oldVal');\n var newWidth = widthCtrl.value();\n var newHeight = heightCtrl.value();\n if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {\n if (newWidth !== oldWidth) {\n newHeight = Math.round(newWidth / oldWidth * newHeight);\n if (!isNaN(newHeight)) {\n heightCtrl.value(newHeight);\n }\n } else {\n newWidth = Math.round(newHeight / oldHeight * newWidth);\n if (!isNaN(newWidth)) {\n widthCtrl.value(newWidth);\n }\n }\n }\n doSyncSize(widthCtrl, heightCtrl);\n };\n var syncSize = function (win) {\n doSizeControls(win, doSyncSize);\n };\n var updateSize = function (win) {\n doSizeControls(win, doUpdateSize);\n };\n var createUi = function () {\n var recalcSize = function (evt) {\n updateSize(evt.control.rootControl);\n };\n return {\n type: 'container',\n label: 'Dimensions',\n layout: 'flex',\n align: 'center',\n spacing: 5,\n items: [\n {\n name: 'width',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Width'\n },\n {\n type: 'label',\n text: 'x'\n },\n {\n name: 'height',\n type: 'textbox',\n maxLength: 5,\n size: 5,\n onchange: recalcSize,\n ariaLabel: 'Height'\n },\n {\n name: 'constrain',\n type: 'checkbox',\n checked: true,\n text: 'Constrain proportions'\n }\n ]\n };\n };\n var SizeManager = {\n createUi: createUi,\n syncSize: syncSize,\n updateSize: updateSize\n };\n\n var onSrcChange = function (evt, editor) {\n var srcURL, prependURL, absoluteURLPattern;\n var meta = evt.meta || {};\n var control = evt.control;\n var rootControl = control.rootControl;\n var imageListCtrl = rootControl.find('#image-list')[0];\n if (imageListCtrl) {\n imageListCtrl.value(editor.convertURL(control.value(), 'src'));\n }\n global$2.each(meta, function (value, key) {\n rootControl.find('#' + key).value(value);\n });\n if (!meta.width && !meta.height) {\n srcURL = editor.convertURL(control.value(), 'src');\n prependURL = Settings.getPrependUrl(editor);\n absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');\n if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {\n srcURL = prependURL + srcURL;\n }\n control.value(srcURL);\n Utils.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {\n if (data.width && data.height && Settings.hasDimensions(editor)) {\n rootControl.find('#width').value(data.width);\n rootControl.find('#height').value(data.height);\n SizeManager.syncSize(rootControl);\n }\n });\n }\n };\n var onBeforeCall = function (evt) {\n evt.meta = evt.control.rootControl.toJSON();\n };\n var getGeneralItems = function (editor, imageListCtrl) {\n var generalFormItems = [\n {\n name: 'src',\n type: 'filepicker',\n filetype: 'image',\n label: 'Source',\n autofocus: true,\n onchange: function (evt) {\n onSrcChange(evt, editor);\n },\n onbeforecall: onBeforeCall\n },\n imageListCtrl\n ];\n if (Settings.hasDescription(editor)) {\n generalFormItems.push({\n name: 'alt',\n type: 'textbox',\n label: 'Image description'\n });\n }\n if (Settings.hasImageTitle(editor)) {\n generalFormItems.push({\n name: 'title',\n type: 'textbox',\n label: 'Image Title'\n });\n }\n if (Settings.hasDimensions(editor)) {\n generalFormItems.push(SizeManager.createUi());\n }\n if (Settings.getClassList(editor)) {\n generalFormItems.push({\n name: 'class',\n type: 'listbox',\n label: 'Class',\n values: Utils.buildListItems(Settings.getClassList(editor), function (item) {\n if (item.value) {\n item.textStyle = function () {\n return editor.formatter.getCssText({\n inline: 'img',\n classes: [item.value]\n });\n };\n }\n })\n });\n }\n if (Settings.hasImageCaption(editor)) {\n generalFormItems.push({\n name: 'caption',\n type: 'checkbox',\n label: 'Caption'\n });\n }\n return generalFormItems;\n };\n var makeTab$1 = function (editor, imageListCtrl) {\n return {\n title: 'General',\n type: 'form',\n items: getGeneralItems(editor, imageListCtrl)\n };\n };\n var MainTab = {\n makeTab: makeTab$1,\n getGeneralItems: getGeneralItems\n };\n\n var url = function () {\n return Global$1.getOrDie('URL');\n };\n var createObjectURL = function (blob) {\n return url().createObjectURL(blob);\n };\n var revokeObjectURL = function (u) {\n url().revokeObjectURL(u);\n };\n var URL = {\n createObjectURL: createObjectURL,\n revokeObjectURL: revokeObjectURL\n };\n\n var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');\n\n function XMLHttpRequest () {\n var f = Global$1.getOrDie('XMLHttpRequest');\n return new f();\n }\n\n var noop = function () {\n };\n var pathJoin = function (path1, path2) {\n if (path1) {\n return path1.replace(/\\/$/, '') + '/' + path2.replace(/^\\//, '');\n }\n return path2;\n };\n function Uploader (settings) {\n var defaultHandler = function (blobInfo, success, failure, progress) {\n var xhr, formData;\n xhr = XMLHttpRequest();\n xhr.open('POST', settings.url);\n xhr.withCredentials = settings.credentials;\n xhr.upload.onprogress = function (e) {\n progress(e.loaded / e.total * 100);\n };\n xhr.onerror = function () {\n failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);\n };\n xhr.onload = function () {\n var json;\n if (xhr.status < 200 || xhr.status >= 300) {\n failure('HTTP Error: ' + xhr.status);\n return;\n }\n json = JSON.parse(xhr.responseText);\n if (!json || typeof json.location !== 'string') {\n failure('Invalid JSON: ' + xhr.responseText);\n return;\n }\n success(pathJoin(settings.basePath, json.location));\n };\n formData = new domGlobals.FormData();\n formData.append('file', blobInfo.blob(), blobInfo.filename());\n xhr.send(formData);\n };\n var uploadBlob = function (blobInfo, handler) {\n return new global$1(function (resolve, reject) {\n try {\n handler(blobInfo, resolve, reject, noop);\n } catch (ex) {\n reject(ex.message);\n }\n });\n };\n var isDefaultHandler = function (handler) {\n return handler === defaultHandler;\n };\n var upload = function (blobInfo) {\n return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);\n };\n settings = global$2.extend({\n credentials: false,\n handler: defaultHandler\n }, settings);\n return { upload: upload };\n }\n\n var onFileInput = function (editor) {\n return function (evt) {\n var Throbber = global$5.get('Throbber');\n var rootControl = evt.control.rootControl;\n var throbber = new Throbber(rootControl.getEl());\n var file = evt.control.value();\n var blobUri = URL.createObjectURL(file);\n var uploader = Uploader({\n url: Settings.getUploadUrl(editor),\n basePath: Settings.getUploadBasePath(editor),\n credentials: Settings.getUploadCredentials(editor),\n handler: Settings.getUploadHandler(editor)\n });\n var finalize = function () {\n throbber.hide();\n URL.revokeObjectURL(blobUri);\n };\n throbber.show();\n return Utils.blobToDataUri(file).then(function (dataUrl) {\n var blobInfo = editor.editorUpload.blobCache.create({\n blob: file,\n blobUri: blobUri,\n name: file.name ? file.name.replace(/\\.[^\\.]+$/, '') : null,\n base64: dataUrl.split(',')[1]\n });\n return uploader.upload(blobInfo).then(function (url) {\n var src = rootControl.find('#src');\n src.value(url);\n rootControl.find('tabpanel')[0].activateTab(0);\n src.fire('change');\n finalize();\n return url;\n });\n }).catch(function (err) {\n editor.windowManager.alert(err);\n finalize();\n });\n };\n };\n var acceptExts = '.jpg,.jpeg,.png,.gif';\n var makeTab$2 = function (editor) {\n return {\n title: 'Upload',\n type: 'form',\n layout: 'flex',\n direction: 'column',\n align: 'stretch',\n padding: '20 20 20 20',\n items: [\n {\n type: 'container',\n layout: 'flex',\n direction: 'column',\n align: 'center',\n spacing: 10,\n items: [\n {\n text: 'Browse for an image',\n type: 'browsebutton',\n accept: acceptExts,\n onchange: onFileInput(editor)\n },\n {\n text: 'OR',\n type: 'label'\n }\n ]\n },\n {\n text: 'Drop an image here',\n type: 'dropzone',\n accept: acceptExts,\n height: 100,\n onchange: onFileInput(editor)\n }\n ]\n };\n };\n var UploadTab = { makeTab: makeTab$2 };\n\n function curry(fn) {\n var initialArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n initialArgs[_i - 1] = arguments[_i];\n }\n return function () {\n var restArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n restArgs[_i] = arguments[_i];\n }\n var all = initialArgs.concat(restArgs);\n return fn.apply(null, all);\n };\n }\n\n var submitForm = function (editor, evt) {\n var win = evt.control.getRoot();\n SizeManager.updateSize(win);\n editor.undoManager.transact(function () {\n var data = merge(readImageDataFromSelection(editor), win.toJSON());\n insertOrUpdateImage(editor, data);\n });\n editor.editorUpload.uploadImagesAuto();\n };\n function Dialog (editor) {\n function showDialog(imageList) {\n var data = readImageDataFromSelection(editor);\n var win, imageListCtrl;\n if (imageList) {\n imageListCtrl = {\n type: 'listbox',\n label: 'Image list',\n name: 'image-list',\n values: Utils.buildListItems(imageList, function (item) {\n item.value = editor.convertURL(item.value || item.url, 'src');\n }, [{\n text: 'None',\n value: ''\n }]),\n value: data.src && editor.convertURL(data.src, 'src'),\n onselect: function (e) {\n var altCtrl = win.find('#alt');\n if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {\n altCtrl.value(e.control.text());\n }\n win.find('#src').value(e.control.value()).fire('change');\n },\n onPostRender: function () {\n imageListCtrl = this;\n }\n };\n }\n if (Settings.hasAdvTab(editor) || Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n var body = [MainTab.makeTab(editor, imageListCtrl)];\n if (Settings.hasAdvTab(editor)) {\n body.push(AdvTab.makeTab(editor));\n }\n if (Settings.hasUploadUrl(editor) || Settings.hasUploadHandler(editor)) {\n body.push(UploadTab.makeTab(editor));\n }\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n bodyType: 'tabpanel',\n body: body,\n onSubmit: curry(submitForm, editor)\n });\n } else {\n win = editor.windowManager.open({\n title: 'Insert/edit image',\n data: data,\n body: MainTab.getGeneralItems(editor, imageListCtrl),\n onSubmit: curry(submitForm, editor)\n });\n }\n SizeManager.syncSize(win);\n }\n function open() {\n Utils.createImageList(editor, showDialog);\n }\n return { open: open };\n }\n\n var register = function (editor) {\n editor.addCommand('mceImage', Dialog(editor).open);\n };\n var Commands = { register: register };\n\n var hasImageClass = function (node) {\n var className = node.attr('class');\n return className && /\\bimage\\b/.test(className);\n };\n var toggleContentEditableState = function (state) {\n return function (nodes) {\n var i = nodes.length, node;\n var toggleContentEditable = function (node) {\n node.attr('contenteditable', state ? 'true' : null);\n };\n while (i--) {\n node = nodes[i];\n if (hasImageClass(node)) {\n node.attr('contenteditable', state ? 'false' : null);\n global$2.each(node.getAll('figcaption'), toggleContentEditable);\n }\n }\n };\n };\n var setup = function (editor) {\n editor.on('preInit', function () {\n editor.parser.addNodeFilter('figure', toggleContentEditableState(true));\n editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));\n });\n };\n var FilterContent = { setup: setup };\n\n var register$1 = function (editor) {\n editor.addButton('image', {\n icon: 'image',\n tooltip: 'Insert/edit image',\n onclick: Dialog(editor).open,\n stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'\n });\n editor.addMenuItem('image', {\n icon: 'image',\n text: 'Image',\n onclick: Dialog(editor).open,\n context: 'insert',\n prependToContext: true\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('image', function (editor) {\n FilterContent.setup(editor);\n Buttons.register(editor);\n Commands.register(editor);\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}(window));\n})();\n","(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","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković : https://github.com/milan-j\n//! author : Stefan Crnjaković : https://github.com/crnjakovic\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var translator = {\n words: {\n //Different grammatical cases\n ss: ['sekunda', 'sekunde', 'sekundi'],\n m: ['jedan minut', 'jedne minute'],\n mm: ['minut', 'minute', 'minuta'],\n h: ['jedan sat', 'jednog sata'],\n hh: ['sat', 'sata', 'sati'],\n dd: ['dan', 'dana', 'dana'],\n MM: ['mesec', 'meseca', 'meseci'],\n yy: ['godina', 'godine', 'godina'],\n },\n correctGrammaticalCase: function (number, wordKey) {\n return number === 1\n ? wordKey[0]\n : number >= 2 && number <= 4\n ? wordKey[1]\n : wordKey[2];\n },\n translate: function (number, withoutSuffix, key) {\n var wordKey = translator.words[key];\n if (key.length === 1) {\n return withoutSuffix ? wordKey[0] : wordKey[1];\n } else {\n return (\n number +\n ' ' +\n translator.correctGrammaticalCase(number, wordKey)\n );\n }\n },\n };\n\n var sr = moment.defineLocale('sr', {\n months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n '_'\n ),\n monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n '_'\n ),\n weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'D. M. YYYY.',\n LL: 'D. MMMM YYYY.',\n LLL: 'D. MMMM YYYY. H:mm',\n LLLL: 'dddd, D. MMMM YYYY. H:mm',\n },\n calendar: {\n sameDay: '[danas u] LT',\n nextDay: '[sutra u] LT',\n nextWeek: function () {\n switch (this.day()) {\n case 0:\n return '[u] [nedelju] [u] LT';\n case 3:\n return '[u] [sredu] [u] LT';\n case 6:\n return '[u] [subotu] [u] LT';\n case 1:\n case 2:\n case 4:\n case 5:\n return '[u] dddd [u] LT';\n }\n },\n lastDay: '[juče u] LT',\n lastWeek: function () {\n var lastWeekDays = [\n '[prošle] [nedelje] [u] LT',\n '[prošlog] [ponedeljka] [u] LT',\n '[prošlog] [utorka] [u] LT',\n '[prošle] [srede] [u] LT',\n '[prošlog] [četvrtka] [u] LT',\n '[prošlog] [petka] [u] LT',\n '[prošle] [subote] [u] LT',\n ];\n return lastWeekDays[this.day()];\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'za %s',\n past: 'pre %s',\n s: 'nekoliko sekundi',\n ss: translator.translate,\n m: translator.translate,\n mm: translator.translate,\n h: translator.translate,\n hh: translator.translate,\n d: 'dan',\n dd: translator.translate,\n M: 'mesec',\n MM: translator.translate,\n y: 'godinu',\n yy: translator.translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n // This is currently too difficult (maybe even impossible) to add.\n var tzl = moment.defineLocale('tzl', {\n months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n '_'\n ),\n monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM [dallas] YYYY',\n LLL: 'D. MMMM [dallas] YYYY HH.mm',\n LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n },\n meridiemParse: /d\\'o|d\\'a/i,\n isPM: function (input) {\n return \"d'o\" === input.toLowerCase();\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? \"d'o\" : \"D'O\";\n } else {\n return isLower ? \"d'a\" : \"D'A\";\n }\n },\n calendar: {\n sameDay: '[oxhi à] LT',\n nextDay: '[demà à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[ieiri à] LT',\n lastWeek: '[sür el] dddd [lasteu à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'osprei %s',\n past: 'ja%s',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: processRelativeTime,\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['viensas secunds', \"'iensas secunds\"],\n ss: [number + ' secunds', '' + number + ' secunds'],\n m: [\"'n míut\", \"'iens míut\"],\n mm: [number + ' míuts', '' + number + ' míuts'],\n h: [\"'n þora\", \"'iensa þora\"],\n hh: [number + ' þoras', '' + number + ' þoras'],\n d: [\"'n ziua\", \"'iensa ziua\"],\n dd: [number + ' ziuas', '' + number + ' ziuas'],\n M: [\"'n mes\", \"'iens mes\"],\n MM: [number + ' mesen', '' + number + ' mesen'],\n y: [\"'n ar\", \"'iens ar\"],\n yy: [number + ' ars', '' + number + ' ars'],\n };\n return isFuture\n ? format[key][0]\n : withoutSuffix\n ? format[key][0]\n : format[key][1];\n }\n\n return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n function translateFuture(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'leS'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'waQ'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'nem'\n : time + ' pIq';\n return time;\n }\n\n function translatePast(output) {\n var time = output;\n time =\n output.indexOf('jaj') !== -1\n ? time.slice(0, -3) + 'Hu’'\n : output.indexOf('jar') !== -1\n ? time.slice(0, -3) + 'wen'\n : output.indexOf('DIS') !== -1\n ? time.slice(0, -3) + 'ben'\n : time + ' ret';\n return time;\n }\n\n function translate(number, withoutSuffix, string, isFuture) {\n var numberNoun = numberAsNoun(number);\n switch (string) {\n case 'ss':\n return numberNoun + ' lup';\n case 'mm':\n return numberNoun + ' tup';\n case 'hh':\n return numberNoun + ' rep';\n case 'dd':\n return numberNoun + ' jaj';\n case 'MM':\n return numberNoun + ' jar';\n case 'yy':\n return numberNoun + ' DIS';\n }\n }\n\n function numberAsNoun(number) {\n var hundred = Math.floor((number % 1000) / 100),\n ten = Math.floor((number % 100) / 10),\n one = number % 10,\n word = '';\n if (hundred > 0) {\n word += numbersNouns[hundred] + 'vatlh';\n }\n if (ten > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n }\n if (one > 0) {\n word += (word !== '' ? ' ' : '') + numbersNouns[one];\n }\n return word === '' ? 'pagh' : word;\n }\n\n var tlh = moment.defineLocale('tlh', {\n months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n '_'\n ),\n monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n '_'\n ),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[DaHjaj] LT',\n nextDay: '[wa’leS] LT',\n nextWeek: 'LLL',\n lastDay: '[wa’Hu’] LT',\n lastWeek: 'LLL',\n sameElse: 'L',\n },\n relativeTime: {\n future: translateFuture,\n past: translatePast,\n s: 'puS lup',\n ss: translate,\n m: 'wa’ tup',\n mm: translate,\n h: 'wa’ rep',\n hh: translate,\n d: 'wa’ jaj',\n dd: translate,\n M: 'wa’ jar',\n MM: translate,\n y: 'wa’ DIS',\n yy: translate,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return tlh;\n\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","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '༡',\n 2: '༢',\n 3: '༣',\n 4: '༤',\n 5: '༥',\n 6: '༦',\n 7: '༧',\n 8: '༨',\n 9: '༩',\n 0: '༠',\n },\n numberMap = {\n '༡': '1',\n '༢': '2',\n '༣': '3',\n '༤': '4',\n '༥': '5',\n '༦': '6',\n '༧': '7',\n '༨': '8',\n '༩': '9',\n '༠': '0',\n };\n\n var bo = moment.defineLocale('bo', {\n months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n '_'\n ),\n monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n '_'\n ),\n monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n monthsParseExact: true,\n weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n '_'\n ),\n weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n '_'\n ),\n weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n longDateFormat: {\n LT: 'A h:mm',\n LTS: 'A h:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm',\n LLLL: 'dddd, D MMMM YYYY, A h:mm',\n },\n calendar: {\n sameDay: '[དི་རིང] LT',\n nextDay: '[སང་ཉིན] LT',\n nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n lastDay: '[ཁ་སང] LT',\n lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ལ་',\n past: '%s སྔན་ལ',\n s: 'ལམ་སང',\n ss: '%d སྐར་ཆ།',\n m: 'སྐར་མ་གཅིག',\n mm: '%d སྐར་མ',\n h: 'ཆུ་ཚོད་གཅིག',\n hh: '%d ཆུ་ཚོད',\n d: 'ཉིན་གཅིག',\n dd: '%d ཉིན་',\n M: 'ཟླ་བ་གཅིག',\n MM: '%d ཟླ་བ',\n y: 'ལོ་གཅིག',\n yy: '%d ལོ',\n },\n preparse: function (string) {\n return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (\n (meridiem === 'མཚན་མོ' && hour >= 4) ||\n (meridiem === 'ཉིན་གུང' && hour < 5) ||\n meridiem === 'དགོང་དག'\n ) {\n return hour + 12;\n } else {\n return hour;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'མཚན་མོ';\n } else if (hour < 10) {\n return 'ཞོགས་ཀས';\n } else if (hour < 17) {\n return 'ཉིན་གུང';\n } else if (hour < 20) {\n return 'དགོང་དག';\n } else {\n return 'མཚན་མོ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ptBr = moment.defineLocale('pt-br', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n '_'\n ),\n weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'poucos segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n invalidDate: 'Data inválida',\n });\n\n return ptBr;\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');","module.exports = __webpack_public_path__ + \"img/bgApps.16703050.jpg\";","(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","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var fil = moment.defineLocale('fil', {\n months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n '_'\n ),\n monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n '_'\n ),\n weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'MM/D/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY HH:mm',\n LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n },\n calendar: {\n sameDay: 'LT [ngayong araw]',\n nextDay: '[Bukas ng] LT',\n nextWeek: 'LT [sa susunod na] dddd',\n lastDay: 'LT [kahapon]',\n lastWeek: 'LT [noong nakaraang] dddd',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'sa loob ng %s',\n past: '%s ang nakalipas',\n s: 'ilang segundo',\n ss: '%d segundo',\n m: 'isang minuto',\n mm: '%d minuto',\n h: 'isang oras',\n hh: '%d oras',\n d: 'isang araw',\n dd: '%d araw',\n M: 'isang buwan',\n MM: '%d buwan',\n y: 'isang taon',\n yy: '%d taon',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}/,\n ordinal: function (number) {\n return number;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var hyAm = moment.defineLocale('hy-am', {\n months: {\n format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n '_'\n ),\n standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n '_'\n ),\n },\n monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n '_'\n ),\n weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D MMMM YYYY թ.',\n LLL: 'D MMMM YYYY թ., HH:mm',\n LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n },\n calendar: {\n sameDay: '[այսօր] LT',\n nextDay: '[վաղը] LT',\n lastDay: '[երեկ] LT',\n nextWeek: function () {\n return 'dddd [օրը ժամը] LT';\n },\n lastWeek: function () {\n return '[անցած] dddd [օրը ժամը] LT';\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s հետո',\n past: '%s առաջ',\n s: 'մի քանի վայրկյան',\n ss: '%d վայրկյան',\n m: 'րոպե',\n mm: '%d րոպե',\n h: 'ժամ',\n hh: '%d ժամ',\n d: 'օր',\n dd: '%d օր',\n M: 'ամիս',\n MM: '%d ամիս',\n y: 'տարի',\n yy: '%d տարի',\n },\n meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n isPM: function (input) {\n return /^(ցերեկվա|երեկոյան)$/.test(input);\n },\n meridiem: function (hour) {\n if (hour < 4) {\n return 'գիշերվա';\n } else if (hour < 12) {\n return 'առավոտվա';\n } else if (hour < 17) {\n return 'ցերեկվա';\n } else {\n return 'երեկոյան';\n }\n },\n dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n ordinal: function (number, period) {\n switch (period) {\n case 'DDD':\n case 'w':\n case 'W':\n case 'DDDo':\n if (number === 1) {\n return number + '-ին';\n }\n return number + '-րդ';\n default:\n return number;\n }\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return hyAm;\n\n})));\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ca = moment.defineLocale('ca', {\n months: {\n standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n '_'\n ),\n format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n '_'\n ),\n isFormat: /D[oD]?(\\s)+MMMM/,\n },\n monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n '_'\n ),\n weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM [de] YYYY',\n ll: 'D MMM YYYY',\n LLL: 'D MMMM [de] YYYY [a les] H:mm',\n lll: 'D MMM YYYY, H:mm',\n LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n llll: 'ddd D MMM YYYY, H:mm',\n },\n calendar: {\n sameDay: function () {\n return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextDay: function () {\n return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n nextWeek: function () {\n return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastDay: function () {\n return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n },\n lastWeek: function () {\n return (\n '[el] dddd [passat a ' +\n (this.hours() !== 1 ? 'les' : 'la') +\n '] LT'\n );\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: \"d'aquí %s\",\n past: 'fa %s',\n s: 'uns segons',\n ss: '%d segons',\n m: 'un minut',\n mm: '%d minuts',\n h: 'una hora',\n hh: '%d hores',\n d: 'un dia',\n dd: '%d dies',\n M: 'un mes',\n MM: '%d mesos',\n y: 'un any',\n yy: '%d anys',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n ordinal: function (number, period) {\n var output =\n number === 1\n ? 'r'\n : number === 2\n ? 'n'\n : number === 3\n ? 'r'\n : number === 4\n ? 't'\n : 'è';\n if (period === 'w' || period === 'W') {\n output = 'a';\n }\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return ca;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var frCa = moment.defineLocale('fr-ca', {\n months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n '_'\n ),\n monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'YYYY-MM-DD',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Aujourd’hui à] LT',\n nextDay: '[Demain à] LT',\n nextWeek: 'dddd [à] LT',\n lastDay: '[Hier à] LT',\n lastWeek: 'dddd [dernier à] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dans %s',\n past: 'il y a %s',\n s: 'quelques secondes',\n ss: '%d secondes',\n m: 'une minute',\n mm: '%d minutes',\n h: 'une heure',\n hh: '%d heures',\n d: 'un jour',\n dd: '%d jours',\n M: 'un mois',\n MM: '%d mois',\n y: 'un an',\n yy: '%d ans',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n ordinal: function (number, period) {\n switch (period) {\n // Words with masculine grammatical gender: mois, trimestre, jour\n default:\n case 'M':\n case 'Q':\n case 'D':\n case 'DDD':\n case 'd':\n return number + (number === 1 ? 'er' : 'e');\n\n // Words with feminine grammatical gender: semaine\n case 'w':\n case 'W':\n return number + (number === 1 ? 're' : 'e');\n }\n },\n });\n\n return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n '_'\n ),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nlBe = moment.defineLocale('nl-be', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n '_'\n ),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nlBe;\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","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '१',\n 2: '२',\n 3: '३',\n 4: '४',\n 5: '५',\n 6: '६',\n 7: '७',\n 8: '८',\n 9: '९',\n 0: '०',\n },\n numberMap = {\n '१': '1',\n '२': '2',\n '३': '3',\n '४': '4',\n '५': '5',\n '६': '6',\n '७': '7',\n '८': '8',\n '९': '9',\n '०': '0',\n },\n monthsParse = [\n /^जन/i,\n /^फ़र|फर/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सितं|सित/i,\n /^अक्टू/i,\n /^नव|नवं/i,\n /^दिसं|दिस/i,\n ],\n shortMonthsParse = [\n /^जन/i,\n /^फ़र/i,\n /^मार्च/i,\n /^अप्रै/i,\n /^मई/i,\n /^जून/i,\n /^जुल/i,\n /^अग/i,\n /^सित/i,\n /^अक्टू/i,\n /^नव/i,\n /^दिस/i,\n ];\n\n var hi = moment.defineLocale('hi', {\n months: {\n format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n '_'\n ),\n standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n '_'\n ),\n },\n monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(\n '_'\n ),\n weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n longDateFormat: {\n LT: 'A h:mm बजे',\n LTS: 'A h:mm:ss बजे',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm बजे',\n LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n },\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: shortMonthsParse,\n\n monthsRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsShortRegex: /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n monthsShortStrictRegex: /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n calendar: {\n sameDay: '[आज] LT',\n nextDay: '[कल] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[कल] LT',\n lastWeek: '[पिछले] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s में',\n past: '%s पहले',\n s: 'कुछ ही क्षण',\n ss: '%d सेकंड',\n m: 'एक मिनट',\n mm: '%d मिनट',\n h: 'एक घंटा',\n hh: '%d घंटे',\n d: 'एक दिन',\n dd: '%d दिन',\n M: 'एक महीने',\n MM: '%d महीने',\n y: 'एक वर्ष',\n yy: '%d वर्ष',\n },\n preparse: function (string) {\n return string.replace(/[१२३४५६७८९०]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n meridiemParse: /रात|सुबह|दोपहर|शाम/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'रात') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'सुबह') {\n return hour;\n } else if (meridiem === 'दोपहर') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'शाम') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'रात';\n } else if (hour < 10) {\n return 'सुबह';\n } else if (hour < 17) {\n return 'दोपहर';\n } else if (hour < 20) {\n return 'शाम';\n } else {\n return 'रात';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return hi;\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');","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '૧',\n 2: '૨',\n 3: '૩',\n 4: '૪',\n 5: '૫',\n 6: '૬',\n 7: '૭',\n 8: '૮',\n 9: '૯',\n 0: '૦',\n },\n numberMap = {\n '૧': '1',\n '૨': '2',\n '૩': '3',\n '૪': '4',\n '૫': '5',\n '૬': '6',\n '૭': '7',\n '૮': '8',\n '૯': '9',\n '૦': '0',\n };\n\n var gu = moment.defineLocale('gu', {\n months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n '_'\n ),\n monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n '_'\n ),\n weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm વાગ્યે',\n LTS: 'A h:mm:ss વાગ્યે',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n },\n calendar: {\n sameDay: '[આજ] LT',\n nextDay: '[કાલે] LT',\n nextWeek: 'dddd, LT',\n lastDay: '[ગઇકાલે] LT',\n lastWeek: '[પાછલા] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s મા',\n past: '%s પહેલા',\n s: 'અમુક પળો',\n ss: '%d સેકંડ',\n m: 'એક મિનિટ',\n mm: '%d મિનિટ',\n h: 'એક કલાક',\n hh: '%d કલાક',\n d: 'એક દિવસ',\n dd: '%d દિવસ',\n M: 'એક મહિનો',\n MM: '%d મહિનો',\n y: 'એક વર્ષ',\n yy: '%d વર્ષ',\n },\n preparse: function (string) {\n return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'રાત') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'સવાર') {\n return hour;\n } else if (meridiem === 'બપોર') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'સાંજ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'રાત';\n } else if (hour < 10) {\n return 'સવાર';\n } else if (hour < 17) {\n return 'બપોર';\n } else if (hour < 20) {\n return 'સાંજ';\n } else {\n return 'રાત';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return gu;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIe = moment.defineLocale('en-ie', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return enIe;\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","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '១',\n 2: '២',\n 3: '៣',\n 4: '៤',\n 5: '៥',\n 6: '៦',\n 7: '៧',\n 8: '៨',\n 9: '៩',\n 0: '០',\n },\n numberMap = {\n '១': '1',\n '២': '2',\n '៣': '3',\n '៤': '4',\n '៥': '5',\n '៦': '6',\n '៧': '7',\n '៨': '8',\n '៩': '9',\n '០': '0',\n };\n\n var km = moment.defineLocale('km', {\n months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n '_'\n ),\n weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n meridiemParse: /ព្រឹក|ល្ងាច/,\n isPM: function (input) {\n return input === 'ល្ងាច';\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 12) {\n return 'ព្រឹក';\n } else {\n return 'ល្ងាច';\n }\n },\n calendar: {\n sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n nextDay: '[ស្អែក ម៉ោង] LT',\n nextWeek: 'dddd [ម៉ោង] LT',\n lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sទៀត',\n past: '%sមុន',\n s: 'ប៉ុន្មានវិនាទី',\n ss: '%d វិនាទី',\n m: 'មួយនាទី',\n mm: '%d នាទី',\n h: 'មួយម៉ោង',\n hh: '%d ម៉ោង',\n d: 'មួយថ្ងៃ',\n dd: '%d ថ្ងៃ',\n M: 'មួយខែ',\n MM: '%d ខែ',\n y: 'មួយឆ្នាំ',\n yy: '%d ឆ្នាំ',\n },\n dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n ordinal: 'ទី%d',\n preparse: function (string) {\n return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return km;\n\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');","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var ms = moment.defineLocale('ms', {\n months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n longDateFormat: {\n LT: 'HH.mm',\n LTS: 'HH.mm.ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY [pukul] HH.mm',\n LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n },\n meridiemParse: /pagi|tengahari|petang|malam/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'pagi') {\n return hour;\n } else if (meridiem === 'tengahari') {\n return hour >= 11 ? hour : hour + 12;\n } else if (meridiem === 'petang' || meridiem === 'malam') {\n return hour + 12;\n }\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours < 11) {\n return 'pagi';\n } else if (hours < 15) {\n return 'tengahari';\n } else if (hours < 19) {\n return 'petang';\n } else {\n return 'malam';\n }\n },\n calendar: {\n sameDay: '[Hari ini pukul] LT',\n nextDay: '[Esok pukul] LT',\n nextWeek: 'dddd [pukul] LT',\n lastDay: '[Kelmarin pukul] LT',\n lastWeek: 'dddd [lepas pukul] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'dalam %s',\n past: '%s yang lepas',\n s: 'beberapa saat',\n ss: '%d saat',\n m: 'seminit',\n mm: '%d minit',\n h: 'sejam',\n hh: '%d jam',\n d: 'sehari',\n dd: '%d hari',\n M: 'sebulan',\n MM: '%d bulan',\n y: 'setahun',\n yy: '%d tahun',\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 7, // The week that contains Jan 7th is the first week of the year.\n },\n });\n\n return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n function processRelativeTime(number, withoutSuffix, key, isFuture) {\n var format = {\n s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n ss: [number + 'sekundi', number + 'sekundit'],\n m: ['ühe minuti', 'üks minut'],\n mm: [number + ' minuti', number + ' minutit'],\n h: ['ühe tunni', 'tund aega', 'üks tund'],\n hh: [number + ' tunni', number + ' tundi'],\n d: ['ühe päeva', 'üks päev'],\n M: ['kuu aja', 'kuu aega', 'üks kuu'],\n MM: [number + ' kuu', number + ' kuud'],\n y: ['ühe aasta', 'aasta', 'üks aasta'],\n yy: [number + ' aasta', number + ' aastat'],\n };\n if (withoutSuffix) {\n return format[key][2] ? format[key][2] : format[key][1];\n }\n return isFuture ? format[key][0] : format[key][1];\n }\n\n var et = moment.defineLocale('et', {\n months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n '_'\n ),\n monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(\n '_'\n ),\n weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n '_'\n ),\n weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n longDateFormat: {\n LT: 'H:mm',\n LTS: 'H:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'D. MMMM YYYY',\n LLL: 'D. MMMM YYYY H:mm',\n LLLL: 'dddd, D. MMMM YYYY H:mm',\n },\n calendar: {\n sameDay: '[Täna,] LT',\n nextDay: '[Homme,] LT',\n nextWeek: '[Järgmine] dddd LT',\n lastDay: '[Eile,] LT',\n lastWeek: '[Eelmine] dddd LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s pärast',\n past: '%s tagasi',\n s: processRelativeTime,\n ss: processRelativeTime,\n m: processRelativeTime,\n mm: processRelativeTime,\n h: processRelativeTime,\n hh: processRelativeTime,\n d: processRelativeTime,\n dd: '%d päeva',\n M: processRelativeTime,\n MM: processRelativeTime,\n y: processRelativeTime,\n yy: processRelativeTime,\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var enIn = moment.defineLocale('en-in', {\n months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n '_'\n ),\n weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n longDateFormat: {\n LT: 'h:mm A',\n LTS: 'h:mm:ss A',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY h:mm A',\n LLLL: 'dddd, D MMMM YYYY h:mm A',\n },\n calendar: {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 1st is the first week of the year.\n },\n });\n\n return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n /*jshint -W100*/\n var si = moment.defineLocale('si', {\n months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n '_'\n ),\n monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n '_'\n ),\n weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n '_'\n ),\n weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'a h:mm',\n LTS: 'a h:mm:ss',\n L: 'YYYY/MM/DD',\n LL: 'YYYY MMMM D',\n LLL: 'YYYY MMMM D, a h:mm',\n LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n },\n calendar: {\n sameDay: '[අද] LT[ට]',\n nextDay: '[හෙට] LT[ට]',\n nextWeek: 'dddd LT[ට]',\n lastDay: '[ඊයේ] LT[ට]',\n lastWeek: '[පසුගිය] dddd LT[ට]',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%sකින්',\n past: '%sකට පෙර',\n s: 'තත්පර කිහිපය',\n ss: 'තත්පර %d',\n m: 'මිනිත්තුව',\n mm: 'මිනිත්තු %d',\n h: 'පැය',\n hh: 'පැය %d',\n d: 'දිනය',\n dd: 'දින %d',\n M: 'මාසය',\n MM: 'මාස %d',\n y: 'වසර',\n yy: 'වසර %d',\n },\n dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n ordinal: function (number) {\n return number + ' වැනි';\n },\n meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n isPM: function (input) {\n return input === 'ප.ව.' || input === 'පස් වරු';\n },\n meridiem: function (hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'ප.ව.' : 'පස් වරු';\n } else {\n return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n }\n },\n });\n\n return si;\n\n})));\n","// Exports the \"nonbreaking\" plugin for usage with module loaders\n// Usage:\n// CommonJS:\n// require('tinymce/plugins/nonbreaking')\n// ES2015:\n// import 'tinymce/plugins/nonbreaking'\nrequire('./plugin.js');","(function () {\nvar code = (function () {\n 'use strict';\n\n var global = tinymce.util.Tools.resolve('tinymce.PluginManager');\n\n var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');\n\n var getMinWidth = function (editor) {\n return editor.getParam('code_dialog_width', 600);\n };\n var getMinHeight = function (editor) {\n return editor.getParam('code_dialog_height', Math.min(global$1.DOM.getViewPort().h - 200, 500));\n };\n var Settings = {\n getMinWidth: getMinWidth,\n getMinHeight: getMinHeight\n };\n\n var setContent = function (editor, html) {\n editor.focus();\n editor.undoManager.transact(function () {\n editor.setContent(html);\n });\n editor.selection.setCursorLocation();\n editor.nodeChanged();\n };\n var getContent = function (editor) {\n return editor.getContent({ source_view: true });\n };\n var Content = {\n setContent: setContent,\n getContent: getContent\n };\n\n var open = function (editor) {\n var minWidth = Settings.getMinWidth(editor);\n var minHeight = Settings.getMinHeight(editor);\n var win = editor.windowManager.open({\n title: 'Source code',\n body: {\n type: 'textbox',\n name: 'code',\n multiline: true,\n minWidth: minWidth,\n minHeight: minHeight,\n spellcheck: false,\n style: 'direction: ltr; text-align: left'\n },\n onSubmit: function (e) {\n Content.setContent(editor, e.data.code);\n }\n });\n win.find('#code').value(Content.getContent(editor));\n };\n var Dialog = { open: open };\n\n var register = function (editor) {\n editor.addCommand('mceCodeEditor', function () {\n Dialog.open(editor);\n });\n };\n var Commands = { register: register };\n\n var register$1 = function (editor) {\n editor.addButton('code', {\n icon: 'code',\n tooltip: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n editor.addMenuItem('code', {\n icon: 'code',\n text: 'Source code',\n onclick: function () {\n Dialog.open(editor);\n }\n });\n };\n var Buttons = { register: register$1 };\n\n global.add('code', function (editor) {\n Commands.register(editor);\n Buttons.register(editor);\n return {};\n });\n function Plugin () {\n }\n\n return Plugin;\n\n}());\n})();\n","// 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');","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QuizTeacherCreateQuestion.vue?vue&type=style&index=0&lang=css&\"","(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","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var pt = moment.defineLocale('pt', {\n months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n '_'\n ),\n monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n '_'\n ),\n weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D [de] MMMM [de] YYYY',\n LLL: 'D [de] MMMM [de] YYYY HH:mm',\n LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n },\n calendar: {\n sameDay: '[Hoje às] LT',\n nextDay: '[Amanhã às] LT',\n nextWeek: 'dddd [às] LT',\n lastDay: '[Ontem às] LT',\n lastWeek: function () {\n return this.day() === 0 || this.day() === 6\n ? '[Último] dddd [às] LT' // Saturday + Sunday\n : '[Última] dddd [às] LT'; // Monday - Friday\n },\n sameElse: 'L',\n },\n relativeTime: {\n future: 'em %s',\n past: 'há %s',\n s: 'segundos',\n ss: '%d segundos',\n m: 'um minuto',\n mm: '%d minutos',\n h: 'uma hora',\n hh: '%d horas',\n d: 'um dia',\n dd: '%d dias',\n w: 'uma semana',\n ww: '%d semanas',\n M: 'um mês',\n MM: '%d meses',\n y: 'um ano',\n yy: '%d anos',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}º/,\n ordinal: '%dº',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return pt;\n\n})));\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var symbolMap = {\n 1: '੧',\n 2: '੨',\n 3: '੩',\n 4: '੪',\n 5: '੫',\n 6: '੬',\n 7: '੭',\n 8: '੮',\n 9: '੯',\n 0: '੦',\n },\n numberMap = {\n '੧': '1',\n '੨': '2',\n '੩': '3',\n '੪': '4',\n '੫': '5',\n '੬': '6',\n '੭': '7',\n '੮': '8',\n '੯': '9',\n '੦': '0',\n };\n\n var paIn = moment.defineLocale('pa-in', {\n // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n '_'\n ),\n weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n '_'\n ),\n weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n longDateFormat: {\n LT: 'A h:mm ਵਜੇ',\n LTS: 'A h:mm:ss ਵਜੇ',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n },\n calendar: {\n sameDay: '[ਅਜ] LT',\n nextDay: '[ਕਲ] LT',\n nextWeek: '[ਅਗਲਾ] dddd, LT',\n lastDay: '[ਕਲ] LT',\n lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s ਵਿੱਚ',\n past: '%s ਪਿਛਲੇ',\n s: 'ਕੁਝ ਸਕਿੰਟ',\n ss: '%d ਸਕਿੰਟ',\n m: 'ਇਕ ਮਿੰਟ',\n mm: '%d ਮਿੰਟ',\n h: 'ਇੱਕ ਘੰਟਾ',\n hh: '%d ਘੰਟੇ',\n d: 'ਇੱਕ ਦਿਨ',\n dd: '%d ਦਿਨ',\n M: 'ਇੱਕ ਮਹੀਨਾ',\n MM: '%d ਮਹੀਨੇ',\n y: 'ਇੱਕ ਸਾਲ',\n yy: '%d ਸਾਲ',\n },\n preparse: function (string) {\n return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n return numberMap[match];\n });\n },\n postformat: function (string) {\n return string.replace(/\\d/g, function (match) {\n return symbolMap[match];\n });\n },\n // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n meridiemHour: function (hour, meridiem) {\n if (hour === 12) {\n hour = 0;\n }\n if (meridiem === 'ਰਾਤ') {\n return hour < 4 ? hour : hour + 12;\n } else if (meridiem === 'ਸਵੇਰ') {\n return hour;\n } else if (meridiem === 'ਦੁਪਹਿਰ') {\n return hour >= 10 ? hour : hour + 12;\n } else if (meridiem === 'ਸ਼ਾਮ') {\n return hour + 12;\n }\n },\n meridiem: function (hour, minute, isLower) {\n if (hour < 4) {\n return 'ਰਾਤ';\n } else if (hour < 10) {\n return 'ਸਵੇਰ';\n } else if (hour < 17) {\n return 'ਦੁਪਹਿਰ';\n } else if (hour < 20) {\n return 'ਸ਼ਾਮ';\n } else {\n return 'ਰਾਤ';\n }\n },\n week: {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n },\n });\n\n return paIn;\n\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');","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var months = [\n 'Am Faoilleach',\n 'An Gearran',\n 'Am Màrt',\n 'An Giblean',\n 'An Cèitean',\n 'An t-Ògmhios',\n 'An t-Iuchar',\n 'An Lùnastal',\n 'An t-Sultain',\n 'An Dàmhair',\n 'An t-Samhain',\n 'An Dùbhlachd',\n ],\n monthsShort = [\n 'Faoi',\n 'Gear',\n 'Màrt',\n 'Gibl',\n 'Cèit',\n 'Ògmh',\n 'Iuch',\n 'Lùn',\n 'Sult',\n 'Dàmh',\n 'Samh',\n 'Dùbh',\n ],\n weekdays = [\n 'Didòmhnaich',\n 'Diluain',\n 'Dimàirt',\n 'Diciadain',\n 'Diardaoin',\n 'Dihaoine',\n 'Disathairne',\n ],\n weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n var gd = moment.defineLocale('gd', {\n months: months,\n monthsShort: monthsShort,\n monthsParseExact: true,\n weekdays: weekdays,\n weekdaysShort: weekdaysShort,\n weekdaysMin: weekdaysMin,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[An-diugh aig] LT',\n nextDay: '[A-màireach aig] LT',\n nextWeek: 'dddd [aig] LT',\n lastDay: '[An-dè aig] LT',\n lastWeek: 'dddd [seo chaidh] [aig] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'ann an %s',\n past: 'bho chionn %s',\n s: 'beagan diogan',\n ss: '%d diogan',\n m: 'mionaid',\n mm: '%d mionaidean',\n h: 'uair',\n hh: '%d uairean',\n d: 'latha',\n dd: '%d latha',\n M: 'mìos',\n MM: '%d mìosan',\n y: 'bliadhna',\n yy: '%d bliadhna',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n ordinal: function (number) {\n var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return gd;\n\n})));\n","(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","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(\n '_'\n ),\n monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(\n '_'\n ),\n monthsParse = [\n /^jan/i,\n /^feb/i,\n /^maart|mrt.?$/i,\n /^apr/i,\n /^mei$/i,\n /^jun[i.]?$/i,\n /^jul[i.]?$/i,\n /^aug/i,\n /^sep/i,\n /^okt/i,\n /^nov/i,\n /^dec/i,\n ],\n monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n var nl = moment.defineLocale('nl', {\n months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n '_'\n ),\n monthsShort: function (m, format) {\n if (!m) {\n return monthsShortWithDots;\n } else if (/-MMM-/.test(format)) {\n return monthsShortWithoutDots[m.month()];\n } else {\n return monthsShortWithDots[m.month()];\n }\n },\n\n monthsRegex: monthsRegex,\n monthsShortRegex: monthsRegex,\n monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n monthsParse: monthsParse,\n longMonthsParse: monthsParse,\n shortMonthsParse: monthsParse,\n\n weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(\n '_'\n ),\n weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD-MM-YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[vandaag om] LT',\n nextDay: '[morgen om] LT',\n nextWeek: 'dddd [om] LT',\n lastDay: '[gisteren om] LT',\n lastWeek: '[afgelopen] dddd [om] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'over %s',\n past: '%s geleden',\n s: 'een paar seconden',\n ss: '%d seconden',\n m: 'één minuut',\n mm: '%d minuten',\n h: 'één uur',\n hh: '%d uur',\n d: 'één dag',\n dd: '%d dagen',\n w: 'één week',\n ww: '%d weken',\n M: 'één maand',\n MM: '%d maanden',\n y: 'één jaar',\n yy: '%d jaar',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n ordinal: function (number) {\n return (\n number +\n (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n );\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return nl;\n\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","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var xPseudo = moment.defineLocale('x-pseudo', {\n months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n '_'\n ),\n monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n '_'\n ),\n monthsParseExact: true,\n weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n '_'\n ),\n weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n weekdaysParseExact: true,\n longDateFormat: {\n LT: 'HH:mm',\n L: 'DD/MM/YYYY',\n LL: 'D MMMM YYYY',\n LLL: 'D MMMM YYYY HH:mm',\n LLLL: 'dddd, D MMMM YYYY HH:mm',\n },\n calendar: {\n sameDay: '[T~ódá~ý át] LT',\n nextDay: '[T~ómó~rró~w át] LT',\n nextWeek: 'dddd [át] LT',\n lastDay: '[Ý~ést~érdá~ý át] LT',\n lastWeek: '[L~ást] dddd [át] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: 'í~ñ %s',\n past: '%s á~gó',\n s: 'á ~féw ~sécó~ñds',\n ss: '%d s~écóñ~ds',\n m: 'á ~míñ~úté',\n mm: '%d m~íñú~tés',\n h: 'á~ñ hó~úr',\n hh: '%d h~óúrs',\n d: 'á ~dáý',\n dd: '%d d~áýs',\n M: 'á ~móñ~th',\n MM: '%d m~óñt~hs',\n y: 'á ~ýéár',\n yy: '%d ý~éárs',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n ~~((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return xPseudo;\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');","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n && typeof require === 'function' ? factory(require('../moment')) :\n typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n //! moment.js locale configuration\n\n var se = moment.defineLocale('se', {\n months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n '_'\n ),\n monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(\n '_'\n ),\n weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n '_'\n ),\n weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n longDateFormat: {\n LT: 'HH:mm',\n LTS: 'HH:mm:ss',\n L: 'DD.MM.YYYY',\n LL: 'MMMM D. [b.] YYYY',\n LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n },\n calendar: {\n sameDay: '[otne ti] LT',\n nextDay: '[ihttin ti] LT',\n nextWeek: 'dddd [ti] LT',\n lastDay: '[ikte ti] LT',\n lastWeek: '[ovddit] dddd [ti] LT',\n sameElse: 'L',\n },\n relativeTime: {\n future: '%s geažes',\n past: 'maŋit %s',\n s: 'moadde sekunddat',\n ss: '%d sekunddat',\n m: 'okta minuhta',\n mm: '%d minuhtat',\n h: 'okta diimmu',\n hh: '%d diimmut',\n d: 'okta beaivi',\n dd: '%d beaivvit',\n M: 'okta mánnu',\n MM: '%d mánut',\n y: 'okta jahki',\n yy: '%d jagit',\n },\n dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n ordinal: '%d.',\n week: {\n dow: 1, // Monday is the first day of the week.\n doy: 4, // The week that contains Jan 4th is the first week of the year.\n },\n });\n\n return se;\n\n})));\n"],"sourceRoot":""}