ÿØÿàJFIFHHÿá .
BSA HACKER
Logo of a company Server : Apache
System : Linux nusantara.hosteko.com 4.18.0-553.16.1.lve.el8.x86_64 #1 SMP Tue Aug 13 17:45:03 UTC 2024 x86_64
User : koperas1 ( 1254)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /home/koperas1/public_html/assets/admin/plugins/summernote/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/koperas1/public_html/assets/admin/plugins/summernote/summernote-lite.js.map
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///external {\"root\":\"jQuery\",\"commonjs2\":\"jquery\",\"commonjs\":\"jquery\",\"amd\":\"jquery\"}","webpack:///./src/js/base/renderer.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./src/js/base/summernote-en-US.js","webpack:///./src/js/base/core/env.js","webpack:///./src/js/base/core/func.js","webpack:///./src/js/base/core/lists.js","webpack:///./src/js/base/core/dom.js","webpack:///./src/js/base/Context.js","webpack:///./src/js/summernote.js","webpack:///./src/js/base/core/range.js","webpack:///./src/js/base/core/key.js","webpack:///./src/js/base/core/async.js","webpack:///./src/js/base/editing/History.js","webpack:///./src/js/base/editing/Style.js","webpack:///./src/js/base/editing/Bullet.js","webpack:///./src/js/base/editing/Typing.js","webpack:///./src/js/base/editing/Table.js","webpack:///./src/js/base/module/Editor.js","webpack:///./src/js/base/module/Clipboard.js","webpack:///./src/js/base/module/Dropzone.js","webpack:///./src/js/base/module/Codeview.js","webpack:///./src/js/base/module/Statusbar.js","webpack:///./src/js/base/module/Fullscreen.js","webpack:///./src/js/base/module/Handle.js","webpack:///./src/js/base/module/AutoLink.js","webpack:///./src/js/base/module/AutoSync.js","webpack:///./src/js/base/module/AutoReplace.js","webpack:///./src/js/base/module/Placeholder.js","webpack:///./src/js/base/module/Buttons.js","webpack:///./src/js/base/module/Toolbar.js","webpack:///./src/js/base/module/LinkDialog.js","webpack:///./src/js/base/module/LinkPopover.js","webpack:///./src/js/base/module/ImageDialog.js","webpack:///./src/js/base/module/ImagePopover.js","webpack:///./src/js/base/module/TablePopover.js","webpack:///./src/js/base/module/VideoDialog.js","webpack:///./src/js/base/module/HelpDialog.js","webpack:///./src/js/base/module/AirPopover.js","webpack:///./src/js/base/module/HintPopover.js","webpack:///./src/js/base/settings.js","webpack:///./src/js/lite/ui/TooltipUI.js","webpack:///./src/js/lite/ui/DropdownUI.js","webpack:///./src/js/lite/ui/ModalUI.js","webpack:///./src/js/lite/ui.js","webpack:///./src/js/lite/settings.js","webpack:///./src/styles/summernote-lite.scss"],"names":["Renderer","markup","children","options","callback","$parent","$node","$","contents","html","className","addClass","data","each","k","v","attr","click","on","$container","find","forEach","child","render","length","append","create","arguments","Array","isArray","summernote","lang","extend","font","bold","italic","underline","clear","height","name","strikethrough","subscript","superscript","size","sizeunit","image","insert","resizeFull","resizeHalf","resizeQuarter","resizeNone","floatLeft","floatRight","floatNone","shapeRounded","shapeCircle","shapeThumbnail","shapeNone","dragImageHere","dropImage","selectFromFiles","maximumFileSize","maximumFileSizeError","url","remove","original","video","videoLink","providers","link","unlink","edit","textToDisplay","openInNewWindow","useProtocol","table","addRowAbove","addRowBelow","addColLeft","addColRight","delRow","delCol","delTable","hr","style","p","blockquote","pre","h1","h2","h3","h4","h5","h6","lists","unordered","ordered","help","fullscreen","codeview","paragraph","outdent","indent","left","center","right","justify","color","recent","more","background","foreground","transparent","setTransparent","reset","resetToDefault","cpSelect","shortcut","shortcuts","close","textFormatting","action","paragraphFormatting","documentStyle","extraKeys","history","undo","redo","specialChar","select","output","noSelection","isSupportAmd","define","genericFontFamilies","validFontName","fontName","inArray","toLowerCase","isFontInstalled","testFontName","testText","testSize","canvas","document","createElement","context","getContext","originalWidth","measureText","width","userAgent","navigator","isMSIE","test","browserVersion","matches","exec","parseFloat","isEdge","isSupportTouch","window","MaxTouchPoints","msMaxTouchPoints","inputEventName","isMac","appVersion","indexOf","isFF","isPhantom","isWebkit","isChrome","isSafari","jqueryVersion","fn","jquery","isW3CRangeSupport","createRange","eq","itemA","itemB","eq2","peq2","propName","ok","fail","not","f","apply","and","fA","fB","item","self","a","invoke","obj","method","idCounter","resetUniqueId","uniqueId","prefix","id","rect2bnd","rect","$document","top","scrollTop","scrollLeft","bottom","invertObject","inverted","key","Object","prototype","hasOwnProperty","call","namespaceToCamel","namespace","split","map","substring","toUpperCase","join","debounce","func","wait","immediate","timeout","args","later","callNow","clearTimeout","setTimeout","isValidUrl","expression","head","array","last","initial","slice","tail","pred","idx","len","all","contains","sum","reduce","memo","from","collection","result","isEmpty","clusterBy","aTail","aLast","compact","aResult","push","unique","results","next","prev","NBSP_CHAR","String","fromCharCode","ZERO_WIDTH_NBSP_CHAR","isEditable","node","hasClass","isControlSizing","makePredByNodeName","nodeName","isText","nodeType","isElement","isVoid","isPara","isHeading","isPre","isLi","isPurePara","isTable","isData","isInline","isBodyContainer","isList","isHr","isBlockquote","isCell","isAnchor","isParaInline","ancestor","isBodyInline","isBody","isClosestSibling","nodeA","nodeB","nextSibling","previousSibling","withClosestSiblings","siblings","blankHTML","env","nodeLength","nodeValue","childNodes","deepestChildIsEmpty","firstElementChild","innerHTML","paddingBlankHTML","parentNode","singleChildAncestor","listAncestor","ancestors","el","lastAncestor","filter","commonAncestor","n","listPrev","nodes","listNext","listDescendant","descendants","fnWalk","current","wrap","wrapperName","parent","wrapper","insertBefore","appendChild","insertAfter","preceding","appendChildNodes","aChild","isLeftEdgePoint","point","offset","isRightEdgePoint","isEdgePoint","isLeftEdgeOf","position","isRightEdgeOf","isLeftEdgePointOf","isRightEdgePointOf","hasChildren","prevPoint","isSkipInnerOffset","nextPoint","nextTextNode","getNextTextNode","nextPointWithEmptyNode","actual","undefined","isSamePoint","pointA","pointB","isVisiblePoint","leftNode","rightNode","prevPointUntil","nextPointUntil","isCharPoint","ch","charAt","isSpacePoint","walkPoint","startPoint","endPoint","handler","isSkipOffset","makeOffsetPath","reverse","fromOffsetPath","offsets","i","splitNode","isSkipPaddingBlankHTML","isNotSplitEdgePoint","isDiscardEmptySplits","splitText","childNode","clone","cloneNode","splitTree","root","splitPoint","topAncestor","splitRoot","container","pivot","createText","text","createTextNode","isRemoveChild","removeNode","removeChild","removeWhile","replace","newNode","cssText","isTextarea","value","stripLinebreaks","val","isNewlineOnBlock","regexTag","match","endSlash","isEndOfInlineContainer","isBlockNode","trim","posFromPlaceholder","placeholder","$placeholder","pos","outerHeight","attachEvents","events","keys","detachEvents","off","isCustomStyleTag","classList","blank","emptyPara","isBlock","isDiv","isBR","isSpan","isB","isU","isS","isI","isImg","isEmptyAnchor","Context","$note","memos","modules","layoutInfo","ui","ui_template","initialize","createLayout","_initialize","hide","_destroy","removeData","removeLayout","disabled","isDisabled","code","dom","disable","now","editor","buttons","plugins","module","initializeModule","removeModule","removeMemo","triggerEvent","isActivated","codable","editable","editing","callbacks","trigger","shouldInitialize","ModuleClass","withoutIntialize","destroy","event","createInvokeHandler","preventDefault","$target","target","closest","splits","hasSeparator","moduleName","methodName","type","isExternalAPICalled","hasInitOptions","langInfo","icons","tooltip","note","first","focus","textRangeToPoint","textRange","isStart","parentElement","tester","body","createTextRange","prevContainer","moveToElementText","compareEndPoints","textRangeStart","curTextNode","collapse","firstChild","pointTester","duplicate","setEndPoint","textCount","dummy","cont","pointToTextRange","textRangeInfo","isCollapseToStart","prevTextNodes","collapseToStart","info","moveStart","WrappedRange","sc","so","ec","eo","isOnEditable","makeIsOn","isOnList","isOnAnchor","isOnCell","isOnData","w3cRange","setStart","setEnd","nativeRng","nativeRange","selection","getSelection","rangeCount","removeAllRanges","addRange","offsetTop","Math","abs","getVisiblePoint","isLeftToRight","block","hasRightNode","hasLeftNode","getEndPoint","isCollapsed","getStartPoint","includeAncestor","fullyContains","leftEdgeNodes","startAncestor","endAncestor","boundaryPoints","getPoints","isSameContainer","rng","emptyParents","normalize","inlineSiblings","concat","para","wrapBodyInlineWithPara","deleteContents","contentsContainer","reversed","insertNode","toString","findAfter","isNotTextPoint","regex","index","s","path","e","paras","getClientRects","wrappedRange","createFromSelection","bodyElement","lastChild","createFromBodyElement","createFromNode","anchorNode","getRangeAt","startContainer","startOffset","endContainer","endOffset","textRangeEnd","isTextNode","createFromNodeBefore","createFromNodeAfter","createFromBookmark","bookmark","createFromParaBookmark","KEY_MAP","isEdit","keyCode","BACKSPACE","TAB","ENTER","SPACE","DELETE","isMove","LEFT","UP","RIGHT","DOWN","isNavigation","HOME","END","PAGEUP","PAGEDOWN","nameFromCode","readFileAsDataURL","file","Deferred","deferred","FileReader","onload","dataURL","resolve","onerror","err","reject","readAsDataURL","promise","createImage","$img","one","detach","css","display","appendTo","History","stack","stackOffset","$editable","range","emptyBookmark","snapshot","recordUndo","applySnapshot","makeSnapshot","historyLimit","shift","Style","$obj","propertyNames","propertyName","properties","styleInfo","jQueryCSS","fontSize","parseInt","expandClosestSibling","onlyPartialContains","nodesInRange","tails","elem","$cont","fromNode","queryCommandState","queryCommandValue","orderedTypes","isUnordered","lineHeight","toFixed","anchor","Bullet","toggleList","clustereds","previousList","findList","wrapList","appendToPrevious","releaseList","listName","paraBookmark","wrappedParas","diffLists","listNode","prevList","nextList","isEscapseToBody","releasedParas","headList","parentItem","newList","findNextSiblings","lastList","middleList","rootLists","rootList","listNodes","Typing","bullet","tabsize","tab","nextPara","blockquoteBreakingLevel","emptyAnchors","scrollIntoView","TableResultAction","where","domTable","_startPoint","_virtualTable","_actionCellList","setStartPoint","tagName","colPos","cellIndex","rowPos","rowIndex","setVirtualTablePosition","baseRow","baseCell","isRowSpan","isColSpan","isVirtualCell","objPosition","getActionCell","virtualTableCellObj","resultAction","virtualRowPosition","virtualColPosition","recoverCellIndex","newCellIndex","addCellInfoToVirtual","row","cell","cellHasColspan","colSpan","cellHasRowspan","rowSpan","isThisSelectedCell","rowspanNumber","attributes","rp","rowspanIndex","adjustStartPoint","colspanNumber","cp","cellspanIndex","isSelectedCell","createVirtualTable","rows","cells","getDeleteResultActionToCell","Column","SubtractSpanCount","Row","isVirtual","AddCell","RemoveCell","getAddResultActionToCell","SumSpanCount","Ignore","init","getActionList","fixedRow","fixedCol","actualPosition","canContinue","rowPosition","colPosition","requestAction","Add","Delete","Table","isShift","nextCell","currentTr","trAttributes","recoverAttributes","vTable","actions","idCell","currentCell","tdAttributes","baseCellTr","isTopFromRowSpan","newTd","removeAttr","setAttribute","before","lastTrIndex","after","rowsGroup","actionIndex","resultStr","attrList","specified","cellPos","virtualPosition","virtualTable","hasRowspan","nextRow","cloneRow","removeAttribute","hasColspan","colCount","rowCount","tds","tdHTML","idxCol","trs","trHTML","idxRow","$table","tableClassName","KEY_BOGUS","Editor","$editor","lastRange","typing","escape","untab","insertParagraph","insertOrderedList","insertUnorderedList","formatPara","insertHorizontalRule","commands","sCmd","beforeCommand","execCommand","afterCommand","wrapCommand","fontStyling","unit","currentStyle","fontSizeUnit","formatBlock","isLimited","getLastRange","setLastRange","insertText","textNode","pasteHTML","onApplyCustomStyle","onFormatBlock","hrNode","stylePara","createLink","linkInfo","linkUrl","linkText","isNewWindow","checkProtocol","additionalTextLength","isTextChanged","onCreateLink","defaultProtocol","anchors","styleNodes","createRangeFromList","colorInfo","foreColor","backColor","insertTable","dim","dimension","createTable","removeMedia","restoreTarget","floatMe","toggleClass","resize","hasKeyShortCut","isDefaultPrevented","handleKeyMap","preventDefaultEditableShortCuts","recordEveryKeystroke","spellCheck","disableGrammar","airMode","overrideContextMenu","outerWidth","maxHeight","minHeight","keyMap","metaKey","ctrlKey","altKey","shiftKey","keyName","eventName","tabDisable","pad","maxTextLength","lst","startRange","endRange","thenCollapse","commit","styleWithCSS","isPreventTrigger","normalizeContent","tabSize","insertTab","src","param","then","$image","min","show","files","filename","maximumImageFileSize","insertImage","onImageUpload","insertImagesAsDataURL","currentRange","spans","firstSpan","noteStatusOutput","expand","$anchor","addRow","addCol","deleteRow","deleteCol","deleteTable","bKeepRatio","imageSize","newRatio","y","x","ratio","is","hasFocus","Clipboard","pasteByEvent","bind","clipboardData","originalEvent","items","kind","getAsFile","getData","Dropzone","$eventListener","documentEventHandlers","$dropzone","prependTo","disableDragAndDrop","onDrop","attachDragAndDropEvent","$dropzoneMessage","onDragenter","isCodeview","hasEditorSize","add","onDragleave","removeClass","dataTransfer","types","content","substr","CodeView","$codable","CodeMirrorConstructor","CodeMirror","codemirror","getDoc","setValue","save","ESCAPE","deactivate","activate","codeviewFilter","codeviewFilterRegex","codeviewIframeFilter","whitelist","codeviewIframeWhitelistSrc","codeviewIframeWhitelistSrcBase","tag","RegExp","prettifyHtml","cmEditor","fromTextArea","tern","server","TernServer","ternServer","cm","updateArgHints","getValue","setSize","toTextArea","purify","isChange","EDITABLE_PADDING","Statusbar","$statusbar","statusbar","disableResizeEditor","stopPropagation","editableTop","onMouseMove","clientY","minheight","max","Fullscreen","$toolbar","toolbar","$window","$scrollbar","onResize","resizeTo","h","setsize","isFullscreen","Handle","$editingArea","editingArea","we","update","$handle","disableResizeImage","posStart","clientX","isImage","$selection","w","origImageObj","Image","sizingText","defaultScheme","linkPattern","AutoLink","handleKeyup","handleKeydown","lastWordRange","keyword","urlText","showDomainOnlyForAutolink","linkTargetBlank","wordRange","getWordRange","AutoSync","AutoReplace","PERIOD","COMMA","SEMICOLON","SLASH","previousKeydownCode","lastWord","jQuery","Node","Placeholder","inheritPlaceholder","isShow","toggle","Buttons","invertedKeyMap","editorMethod","o","button","addToolbarButtons","addImagePopoverButtons","addLinkPopoverButtons","addTablePopoverButtons","fontInstalledMap","fontNamesIgnoreCheck","buttonGroup","icon","$button","currentTarget","$recentColor","colorButton","dropdownButtonContents","dropdown","$dropdown","$holder","palette","colors","colorsName","customColors","change","$chip","$picker","$palette","prepend","$color","$currentButton","magic","styleTags","title","template","styleIdx","styleLen","representShortcut","createInvokeHandlerAndUpdateState","eraser","addDefaultFonts","fontname","isFontDeservedToAdd","fontNames","dropdownCheck","checkClassName","menuCheck","fontSizes","fontSizeUnits","colorPalette","unorderedlist","orderedlist","justifyLeft","alignLeft","justifyCenter","alignCenter","justifyRight","alignRight","justifyFull","alignJustify","textHeight","lineHeights","$catcher","insertTableMaxSize","col","mousedown","tableMoveHandler","picture","minus","arrowsAlt","question","rollback","trash","rowAbove","rowBelow","colBefore","colAfter","rowRemove","colRemove","groups","groupIdx","groupLen","group","groupName","$group","btn","updateBtnStates","$item","isChecked","infos","selector","toggleBtnActive","PX_PER_EM","$dimensionDisplay","$highlighted","$unhighlighted","posOffset","offsetX","posCatcher","pageX","pageY","offsetY","c","ceil","r","Toolbar","isFollowing","followScroll","toolbarContainer","changeContainer","followingToolbar","editorHeight","editorWidth","toolbarHeight","statusbarHeight","otherBarHeight","otherStaticBar","currentOffset","editorOffsetTop","editorOffsetBottom","activateOffset","deactivateOffsetBottom","marginTop","zIndex","isIncludeCodeview","$btn","toggleBtn","LinkDialog","$body","dialogsInBody","disableLinkTarget","checkbox","checked","buttonClass","footer","$dialog","dialog","fade","dialogsFade","hideDialog","$input","$linkBtn","$linkText","$linkUrl","$openInNewWindow","$useProtocol","onDialogShown","toggleLinkBtn","bindEnterKey","isNewWindowChecked","prop","useProtocolChecked","onDialogHidden","state","showDialog","showLinkDialog","LinkPopover","popover","$popover","$content","href","containerOffset","ImageDialog","imageLimitation","floor","log","readableSize","pow","showImageDialog","onImageLinkInsert","$imageInput","$imageUrl","$imageBtn","replaceWith","ImagePopover","popatmouse","TablePopover","VideoDialog","ytRegExp","ytRegExpForStart","ytMatch","igRegExp","igMatch","vRegExp","vMatch","vimRegExp","vimMatch","dmRegExp","dmMatch","youkuRegExp","youkuMatch","qqRegExp","qqMatch","qqRegExp2","qqMatch2","mp4RegExp","mp4Match","oggRegExp","oggMatch","webmRegExp","webmMatch","fbRegExp","fbMatch","$video","youtubeId","start","ytMatchForStart","vid","encodeURIComponent","showVideoDialog","createVideoNode","$videoUrl","$videoBtn","HelpDialog","createShortcutList","command","$row","showHelpDialog","AIRMODE_POPOVER_X_OFFSET","AIRMODE_POPOVER_Y_OFFSET","AirPopover","hidable","onContextmenu","air","forcelyOpen","POPOVER_DIST","HintPopover","hint","direction","hintDirection","hints","matchingWord","hideArrow","innerHeight","$current","$next","selectItem","$nextGroup","$prev","$prevGroup","nodeFromItem","rangeCompute","hintSelect","hintIdx","moveUp","moveDown","search","searchKeyword","createItemTemplates","hintMode","getWordsRange","getWordsMatchRange","empty","bnd","createGroup","version","Codeview","toolbarPosition","codeviewKeepButton","tabDisabled","textareaAutoSync","onBeforeCommand","onBlur","onBlurCodeview","onChange","onChangeCodeview","onEnter","onFocus","onImageUploadError","onInit","onKeydown","onKeyup","onMousedown","onMouseup","onPaste","onScroll","mode","htmlMode","lineNumbers","pc","mac","TooltipUI","placement","$tooltip","showCallback","hideCallback","toggleCallback","targetOffset","nodeWidth","nodeHeight","tooltipWidth","tooltipHeight","DropdownUI","setEvent","stopImmediatePropagation","windowWidth","targetMarginRight","isOpened","ModalUI","$modal","$backdrop","which","renderer","airEditor","airEditable","$temp","$a","itemClick","caret","dropdownButton","opt","dropdownCheckButton","paragraphDropdownButton","tableDropdownButton","mousemove","rowSize","colSize","colorName","colorDropdownButton","currentClick","foreinput","getElementById","backinput","videoDialog","imageDialog","linkDialog","iconClassName","editorOptions","isEnable","isActive","check","$dom","getPopoverContent","getDialogBody"],"mappings":"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","file":"summernote-lite.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"jquery\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"jquery\")) : factory(root[\"jQuery\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__) {\nreturn "," \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 = 51);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","import $ from 'jquery';\n\nclass Renderer {\n  constructor(markup, children, options, callback) {\n    this.markup = markup;\n    this.children = children;\n    this.options = options;\n    this.callback = callback;\n  }\n\n  render($parent) {\n    const $node = $(this.markup);\n\n    if (this.options && this.options.contents) {\n      $node.html(this.options.contents);\n    }\n\n    if (this.options && this.options.className) {\n      $node.addClass(this.options.className);\n    }\n\n    if (this.options && this.options.data) {\n      $.each(this.options.data, (k, v) => {\n        $node.attr('data-' + k, v);\n      });\n    }\n\n    if (this.options && this.options.click) {\n      $node.on('click', this.options.click);\n    }\n\n    if (this.children) {\n      const $container = $node.find('.note-children-container');\n      this.children.forEach((child) => {\n        child.render($container.length ? $container : $node);\n      });\n    }\n\n    if (this.callback) {\n      this.callback($node, this.options);\n    }\n\n    if (this.options && this.options.callback) {\n      this.options.callback($node);\n    }\n\n    if ($parent) {\n      $parent.append($node);\n    }\n\n    return $node;\n  }\n}\n\nexport default {\n  create: (markup, callback) => {\n    return function() {\n      const options = typeof arguments[1] === 'object' ? arguments[1] : arguments[0];\n      let children = Array.isArray(arguments[0]) ? arguments[0] : [];\n      if (options && options.children) {\n        children = options.children;\n      }\n      return new Renderer(markup, children, options, callback);\n    };\n  },\n};\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","import $ from 'jquery';\n\n$.summernote = $.summernote || {\n  lang: {},\n};\n\n$.extend($.summernote.lang, {\n  'en-US': {\n    font: {\n      bold: 'Bold',\n      italic: 'Italic',\n      underline: 'Underline',\n      clear: 'Remove Font Style',\n      height: 'Line Height',\n      name: 'Font Family',\n      strikethrough: 'Strikethrough',\n      subscript: 'Subscript',\n      superscript: 'Superscript',\n      size: 'Font Size',\n      sizeunit: 'Font Size Unit',\n    },\n    image: {\n      image: 'Picture',\n      insert: 'Insert Image',\n      resizeFull: 'Resize full',\n      resizeHalf: 'Resize half',\n      resizeQuarter: 'Resize quarter',\n      resizeNone: 'Original size',\n      floatLeft: 'Float Left',\n      floatRight: 'Float Right',\n      floatNone: 'Remove float',\n      shapeRounded: 'Shape: Rounded',\n      shapeCircle: 'Shape: Circle',\n      shapeThumbnail: 'Shape: Thumbnail',\n      shapeNone: 'Shape: None',\n      dragImageHere: 'Drag image or text here',\n      dropImage: 'Drop image or Text',\n      selectFromFiles: 'Select from files',\n      maximumFileSize: 'Maximum file size',\n      maximumFileSizeError: 'Maximum file size exceeded.',\n      url: 'Image URL',\n      remove: 'Remove Image',\n      original: 'Original',\n    },\n    video: {\n      video: 'Video',\n      videoLink: 'Video Link',\n      insert: 'Insert Video',\n      url: 'Video URL',\n      providers: '(YouTube, Vimeo, Vine, Instagram, DailyMotion or Youku)',\n    },\n    link: {\n      link: 'Link',\n      insert: 'Insert Link',\n      unlink: 'Unlink',\n      edit: 'Edit',\n      textToDisplay: 'Text to display',\n      url: 'To what URL should this link go?',\n      openInNewWindow: 'Open in new window',\n      useProtocol: 'Use default protocol',\n    },\n    table: {\n      table: 'Table',\n      addRowAbove: 'Add row above',\n      addRowBelow: 'Add row below',\n      addColLeft: 'Add column left',\n      addColRight: 'Add column right',\n      delRow: 'Delete row',\n      delCol: 'Delete column',\n      delTable: 'Delete table',\n    },\n    hr: {\n      insert: 'Insert Horizontal Rule',\n    },\n    style: {\n      style: 'Style',\n      p: 'Normal',\n      blockquote: 'Quote',\n      pre: 'Code',\n      h1: 'Header 1',\n      h2: 'Header 2',\n      h3: 'Header 3',\n      h4: 'Header 4',\n      h5: 'Header 5',\n      h6: 'Header 6',\n    },\n    lists: {\n      unordered: 'Unordered list',\n      ordered: 'Ordered list',\n    },\n    options: {\n      help: 'Help',\n      fullscreen: 'Full Screen',\n      codeview: 'Code View',\n    },\n    paragraph: {\n      paragraph: 'Paragraph',\n      outdent: 'Outdent',\n      indent: 'Indent',\n      left: 'Align left',\n      center: 'Align center',\n      right: 'Align right',\n      justify: 'Justify full',\n    },\n    color: {\n      recent: 'Recent Color',\n      more: 'More Color',\n      background: 'Background Color',\n      foreground: 'Text Color',\n      transparent: 'Transparent',\n      setTransparent: 'Set transparent',\n      reset: 'Reset',\n      resetToDefault: 'Reset to default',\n      cpSelect: 'Select',\n    },\n    shortcut: {\n      shortcuts: 'Keyboard shortcuts',\n      close: 'Close',\n      textFormatting: 'Text formatting',\n      action: 'Action',\n      paragraphFormatting: 'Paragraph formatting',\n      documentStyle: 'Document Style',\n      extraKeys: 'Extra keys',\n    },\n    help: {\n      'escape': 'Escape',\n      'insertParagraph': 'Insert Paragraph',\n      'undo': 'Undo the last command',\n      'redo': 'Redo the last command',\n      'tab': 'Tab',\n      'untab': 'Untab',\n      'bold': 'Set a bold style',\n      'italic': 'Set a italic style',\n      'underline': 'Set a underline style',\n      'strikethrough': 'Set a strikethrough style',\n      'removeFormat': 'Clean a style',\n      'justifyLeft': 'Set left align',\n      'justifyCenter': 'Set center align',\n      'justifyRight': 'Set right align',\n      'justifyFull': 'Set full align',\n      'insertUnorderedList': 'Toggle unordered list',\n      'insertOrderedList': 'Toggle ordered list',\n      'outdent': 'Outdent on current paragraph',\n      'indent': 'Indent on current paragraph',\n      'formatPara': 'Change current block\\'s format as a paragraph(P tag)',\n      'formatH1': 'Change current block\\'s format as H1',\n      'formatH2': 'Change current block\\'s format as H2',\n      'formatH3': 'Change current block\\'s format as H3',\n      'formatH4': 'Change current block\\'s format as H4',\n      'formatH5': 'Change current block\\'s format as H5',\n      'formatH6': 'Change current block\\'s format as H6',\n      'insertHorizontalRule': 'Insert horizontal rule',\n      'linkDialog.show': 'Show Link Dialog',\n    },\n    history: {\n      undo: 'Undo',\n      redo: 'Redo',\n    },\n    specialChar: {\n      specialChar: 'SPECIAL CHARACTERS',\n      select: 'Select Special characters',\n    },\n    output: {\n      noSelection: 'No Selection Made!',\n    },\n  },\n});\n","import $ from 'jquery';\nconst isSupportAmd = typeof define === 'function' && define.amd; // eslint-disable-line\n\n/**\n * returns whether font is installed or not.\n *\n * @param {String} fontName\n * @return {Boolean}\n */\nconst genericFontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive', 'fantasy'];\n\nfunction validFontName(fontName) {\n  return ($.inArray(fontName.toLowerCase(), genericFontFamilies) === -1) ? `'${fontName}'` : fontName;\n}\n\nfunction isFontInstalled(fontName) {\n  const testFontName = fontName === 'Comic Sans MS' ? 'Courier New' : 'Comic Sans MS';\n  const testText = 'mmmmmmmmmmwwwww';\n  const testSize = '200px';\n\n  var canvas = document.createElement('canvas');\n  var context = canvas.getContext('2d');\n\n  context.font = testSize + \" '\" + testFontName + \"'\";\n  const originalWidth = context.measureText(testText).width;\n\n  context.font = testSize + ' ' + validFontName(fontName) + ', \"' + testFontName + '\"';\n  const width = context.measureText(testText).width;\n\n  return originalWidth !== width;\n}\n\nconst userAgent = navigator.userAgent;\nconst isMSIE = /MSIE|Trident/i.test(userAgent);\nlet browserVersion;\nif (isMSIE) {\n  let matches = /MSIE (\\d+[.]\\d+)/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n  matches = /Trident\\/.*rv:([0-9]{1,}[.0-9]{0,})/.exec(userAgent);\n  if (matches) {\n    browserVersion = parseFloat(matches[1]);\n  }\n}\n\nconst isEdge = /Edge\\/\\d+/.test(userAgent);\n\nconst isSupportTouch =\n  (('ontouchstart' in window) ||\n   (navigator.MaxTouchPoints > 0) ||\n   (navigator.msMaxTouchPoints > 0));\n\n// [workaround] IE doesn't have input events for contentEditable\n// - see: https://goo.gl/4bfIvA\nconst inputEventName = (isMSIE) ? 'DOMCharacterDataModified DOMSubtreeModified DOMNodeInserted' : 'input';\n\n/**\n * @class core.env\n *\n * Object which check platform and agent\n *\n * @singleton\n * @alternateClassName env\n */\nexport default {\n  isMac: navigator.appVersion.indexOf('Mac') > -1,\n  isMSIE,\n  isEdge,\n  isFF: !isEdge && /firefox/i.test(userAgent),\n  isPhantom: /PhantomJS/i.test(userAgent),\n  isWebkit: !isEdge && /webkit/i.test(userAgent),\n  isChrome: !isEdge && /chrome/i.test(userAgent),\n  isSafari: !isEdge && /safari/i.test(userAgent) && (!/chrome/i.test(userAgent)),\n  browserVersion,\n  jqueryVersion: parseFloat($.fn.jquery),\n  isSupportAmd,\n  isSupportTouch,\n  isFontInstalled,\n  isW3CRangeSupport: !!document.createRange,\n  inputEventName,\n  genericFontFamilies,\n  validFontName,\n};\n","import $ from 'jquery';\n\n/**\n * @class core.func\n *\n * func utils (for high-order func's arg)\n *\n * @singleton\n * @alternateClassName func\n */\nfunction eq(itemA) {\n  return function(itemB) {\n    return itemA === itemB;\n  };\n}\n\nfunction eq2(itemA, itemB) {\n  return itemA === itemB;\n}\n\nfunction peq2(propName) {\n  return function(itemA, itemB) {\n    return itemA[propName] === itemB[propName];\n  };\n}\n\nfunction ok() {\n  return true;\n}\n\nfunction fail() {\n  return false;\n}\n\nfunction not(f) {\n  return function() {\n    return !f.apply(f, arguments);\n  };\n}\n\nfunction and(fA, fB) {\n  return function(item) {\n    return fA(item) && fB(item);\n  };\n}\n\nfunction self(a) {\n  return a;\n}\n\nfunction invoke(obj, method) {\n  return function() {\n    return obj[method].apply(obj, arguments);\n  };\n}\n\nlet idCounter = 0;\n\n/**\n * reset globally-unique id\n *\n */\nfunction resetUniqueId() {\n  idCounter = 0;\n}\n\n/**\n * generate a globally-unique id\n *\n * @param {String} [prefix]\n */\nfunction uniqueId(prefix) {\n  const id = ++idCounter + '';\n  return prefix ? prefix + id : id;\n}\n\n/**\n * returns bnd (bounds) from rect\n *\n * - IE Compatibility Issue: http://goo.gl/sRLOAo\n * - Scroll Issue: http://goo.gl/sNjUc\n *\n * @param {Rect} rect\n * @return {Object} bounds\n * @return {Number} bounds.top\n * @return {Number} bounds.left\n * @return {Number} bounds.width\n * @return {Number} bounds.height\n */\nfunction rect2bnd(rect) {\n  const $document = $(document);\n  return {\n    top: rect.top + $document.scrollTop(),\n    left: rect.left + $document.scrollLeft(),\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top,\n  };\n}\n\n/**\n * returns a copy of the object where the keys have become the values and the values the keys.\n * @param {Object} obj\n * @return {Object}\n */\nfunction invertObject(obj) {\n  const inverted = {};\n  for (const key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      inverted[obj[key]] = key;\n    }\n  }\n  return inverted;\n}\n\n/**\n * @param {String} namespace\n * @param {String} [prefix]\n * @return {String}\n */\nfunction namespaceToCamel(namespace, prefix) {\n  prefix = prefix || '';\n  return prefix + namespace.split('.').map(function(name) {\n    return name.substring(0, 1).toUpperCase() + name.substring(1);\n  }).join('');\n}\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing.\n * @param {Function} func\n * @param {Number} wait\n * @param {Boolean} immediate\n * @return {Function}\n */\nfunction debounce(func, wait, immediate) {\n  let timeout;\n  return function() {\n    const context = this;\n    const args = arguments;\n    const later = () => {\n      timeout = null;\n      if (!immediate) {\n        func.apply(context, args);\n      }\n    };\n    const callNow = immediate && !timeout;\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n    if (callNow) {\n      func.apply(context, args);\n    }\n  };\n}\n\n/**\n *\n * @param {String} url\n * @return {Boolean}\n */\nfunction isValidUrl(url) {\n  const expression = /[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/gi;\n  return expression.test(url);\n}\n\nexport default {\n  eq,\n  eq2,\n  peq2,\n  ok,\n  fail,\n  self,\n  not,\n  and,\n  invoke,\n  resetUniqueId,\n  uniqueId,\n  rect2bnd,\n  invertObject,\n  namespaceToCamel,\n  debounce,\n  isValidUrl,\n};\n","import func from './func';\n\n/**\n * returns the first item of an array.\n *\n * @param {Array} array\n */\nfunction head(array) {\n  return array[0];\n}\n\n/**\n * returns the last item of an array.\n *\n * @param {Array} array\n */\nfunction last(array) {\n  return array[array.length - 1];\n}\n\n/**\n * returns everything but the last entry of the array.\n *\n * @param {Array} array\n */\nfunction initial(array) {\n  return array.slice(0, array.length - 1);\n}\n\n/**\n * returns the rest of the items in an array.\n *\n * @param {Array} array\n */\nfunction tail(array) {\n  return array.slice(1);\n}\n\n/**\n * returns item of array\n */\nfunction find(array, pred) {\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    const item = array[idx];\n    if (pred(item)) {\n      return item;\n    }\n  }\n}\n\n/**\n * returns true if all of the values in the array pass the predicate truth test.\n */\nfunction all(array, pred) {\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (!pred(array[idx])) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * returns true if the value is present in the list.\n */\nfunction contains(array, item) {\n  if (array && array.length && item) {\n    if (array.indexOf) {\n      return array.indexOf(item) !== -1;\n    } else if (array.contains) {\n      // `DOMTokenList` doesn't implement `.indexOf`, but it implements `.contains`\n      return array.contains(item);\n    }\n  }\n  return false;\n}\n\n/**\n * get sum from a list\n *\n * @param {Array} array - array\n * @param {Function} fn - iterator\n */\nfunction sum(array, fn) {\n  fn = fn || func.self;\n  return array.reduce(function(memo, v) {\n    return memo + fn(v);\n  }, 0);\n}\n\n/**\n * returns a copy of the collection with array type.\n * @param {Collection} collection - collection eg) node.childNodes, ...\n */\nfunction from(collection) {\n  const result = [];\n  const length = collection.length;\n  let idx = -1;\n  while (++idx < length) {\n    result[idx] = collection[idx];\n  }\n  return result;\n}\n\n/**\n * returns whether list is empty or not\n */\nfunction isEmpty(array) {\n  return !array || !array.length;\n}\n\n/**\n * cluster elements by predicate function.\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n * @param {Array[]}\n */\nfunction clusterBy(array, fn) {\n  if (!array.length) { return []; }\n  const aTail = tail(array);\n  return aTail.reduce(function(memo, v) {\n    const aLast = last(memo);\n    if (fn(last(aLast), v)) {\n      aLast[aLast.length] = v;\n    } else {\n      memo[memo.length] = [v];\n    }\n    return memo;\n  }, [[head(array)]]);\n}\n\n/**\n * returns a copy of the array with all false values removed\n *\n * @param {Array} array - array\n * @param {Function} fn - predicate function for cluster rule\n */\nfunction compact(array) {\n  const aResult = [];\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (array[idx]) { aResult.push(array[idx]); }\n  }\n  return aResult;\n}\n\n/**\n * produces a duplicate-free version of the array\n *\n * @param {Array} array\n */\nfunction unique(array) {\n  const results = [];\n\n  for (let idx = 0, len = array.length; idx < len; idx++) {\n    if (!contains(results, array[idx])) {\n      results.push(array[idx]);\n    }\n  }\n\n  return results;\n}\n\n/**\n * returns next item.\n * @param {Array} array\n */\nfunction next(array, item) {\n  if (array && array.length && item) {\n    const idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx + 1];\n  }\n  return null;\n}\n\n/**\n * returns prev item.\n * @param {Array} array\n */\nfunction prev(array, item) {\n  if (array && array.length && item) {\n    const idx = array.indexOf(item);\n    return idx === -1 ? null : array[idx - 1];\n  }\n  return null;\n}\n\n/**\n * @class core.list\n *\n * list utils\n *\n * @singleton\n * @alternateClassName list\n */\nexport default {\n  head,\n  last,\n  initial,\n  tail,\n  prev,\n  next,\n  find,\n  contains,\n  all,\n  sum,\n  from,\n  isEmpty,\n  clusterBy,\n  compact,\n  unique,\n};\n","import $ from 'jquery';\nimport func from './func';\nimport lists from './lists';\nimport env from './env';\n\nconst NBSP_CHAR = String.fromCharCode(160);\nconst ZERO_WIDTH_NBSP_CHAR = '\\ufeff';\n\n/**\n * @method isEditable\n *\n * returns whether node is `note-editable` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEditable(node) {\n  return node && $(node).hasClass('note-editable');\n}\n\n/**\n * @method isControlSizing\n *\n * returns whether node is `note-control-sizing` or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isControlSizing(node) {\n  return node && $(node).hasClass('note-control-sizing');\n}\n\n/**\n * @method makePredByNodeName\n *\n * returns predicate which judge whether nodeName is same\n *\n * @param {String} nodeName\n * @return {Function}\n */\nfunction makePredByNodeName(nodeName) {\n  nodeName = nodeName.toUpperCase();\n  return function(node) {\n    return node && node.nodeName.toUpperCase() === nodeName;\n  };\n}\n\n/**\n * @method isText\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is text(3)\n */\nfunction isText(node) {\n  return node && node.nodeType === 3;\n}\n\n/**\n * @method isElement\n *\n *\n *\n * @param {Node} node\n * @return {Boolean} true if node's type is element(1)\n */\nfunction isElement(node) {\n  return node && node.nodeType === 1;\n}\n\n/**\n * ex) br, col, embed, hr, img, input, ...\n * @see http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\n */\nfunction isVoid(node) {\n  return node && /^BR|^IMG|^HR|^IFRAME|^BUTTON|^INPUT|^AUDIO|^VIDEO|^EMBED/.test(node.nodeName.toUpperCase());\n}\n\nfunction isPara(node) {\n  if (isEditable(node)) {\n    return false;\n  }\n\n  // Chrome(v31.0), FF(v25.0.1) use DIV for paragraph\n  return node && /^DIV|^P|^LI|^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nfunction isHeading(node) {\n  return node && /^H[1-7]/.test(node.nodeName.toUpperCase());\n}\n\nconst isPre = makePredByNodeName('PRE');\n\nconst isLi = makePredByNodeName('LI');\n\nfunction isPurePara(node) {\n  return isPara(node) && !isLi(node);\n}\n\nconst isTable = makePredByNodeName('TABLE');\n\nconst isData = makePredByNodeName('DATA');\n\nfunction isInline(node) {\n  return !isBodyContainer(node) &&\n         !isList(node) &&\n         !isHr(node) &&\n         !isPara(node) &&\n         !isTable(node) &&\n         !isBlockquote(node) &&\n         !isData(node);\n}\n\nfunction isList(node) {\n  return node && /^UL|^OL/.test(node.nodeName.toUpperCase());\n}\n\nconst isHr = makePredByNodeName('HR');\n\nfunction isCell(node) {\n  return node && /^TD|^TH/.test(node.nodeName.toUpperCase());\n}\n\nconst isBlockquote = makePredByNodeName('BLOCKQUOTE');\n\nfunction isBodyContainer(node) {\n  return isCell(node) || isBlockquote(node) || isEditable(node);\n}\n\nconst isAnchor = makePredByNodeName('A');\n\nfunction isParaInline(node) {\n  return isInline(node) && !!ancestor(node, isPara);\n}\n\nfunction isBodyInline(node) {\n  return isInline(node) && !ancestor(node, isPara);\n}\n\nconst isBody = makePredByNodeName('BODY');\n\n/**\n * returns whether nodeB is closest sibling of nodeA\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n * @return {Boolean}\n */\nfunction isClosestSibling(nodeA, nodeB) {\n  return nodeA.nextSibling === nodeB ||\n         nodeA.previousSibling === nodeB;\n}\n\n/**\n * returns array of closest siblings with node\n *\n * @param {Node} node\n * @param {function} [pred] - predicate function\n * @return {Node[]}\n */\nfunction withClosestSiblings(node, pred) {\n  pred = pred || func.ok;\n\n  const siblings = [];\n  if (node.previousSibling && pred(node.previousSibling)) {\n    siblings.push(node.previousSibling);\n  }\n  siblings.push(node);\n  if (node.nextSibling && pred(node.nextSibling)) {\n    siblings.push(node.nextSibling);\n  }\n  return siblings;\n}\n\n/**\n * blank HTML for cursor position\n * - [workaround] old IE only works with &nbsp;\n * - [workaround] IE11 and other browser works with bogus br\n */\nconst blankHTML = env.isMSIE && env.browserVersion < 11 ? '&nbsp;' : '<br>';\n\n/**\n * @method nodeLength\n *\n * returns #text's text size or element's childNodes size\n *\n * @param {Node} node\n */\nfunction nodeLength(node) {\n  if (isText(node)) {\n    return node.nodeValue.length;\n  }\n\n  if (node) {\n    return node.childNodes.length;\n  }\n\n  return 0;\n}\n\n/**\n * returns whether deepest child node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction deepestChildIsEmpty(node) {\n  do {\n    if (node.firstElementChild === null || node.firstElementChild.innerHTML === '') break;\n  } while ((node = node.firstElementChild));\n\n  return isEmpty(node);\n}\n\n/**\n * returns whether node is empty or not.\n *\n * @param {Node} node\n * @return {Boolean}\n */\nfunction isEmpty(node) {\n  const len = nodeLength(node);\n\n  if (len === 0) {\n    return true;\n  } else if (!isText(node) && len === 1 && node.innerHTML === blankHTML) {\n    // ex) <p><br></p>, <span><br></span>\n    return true;\n  } else if (lists.all(node.childNodes, isText) && node.innerHTML === '') {\n    // ex) <p></p>, <span></span>\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * padding blankHTML if node is empty (for cursor position)\n */\nfunction paddingBlankHTML(node) {\n  if (!isVoid(node) && !nodeLength(node)) {\n    node.innerHTML = blankHTML;\n  }\n}\n\n/**\n * find nearest ancestor predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction ancestor(node, pred) {\n  while (node) {\n    if (pred(node)) { return node; }\n    if (isEditable(node)) { break; }\n\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * find nearest ancestor only single child blood line and predicate hit\n *\n * @param {Node} node\n * @param {Function} pred - predicate function\n */\nfunction singleChildAncestor(node, pred) {\n  node = node.parentNode;\n\n  while (node) {\n    if (nodeLength(node) !== 1) { break; }\n    if (pred(node)) { return node; }\n    if (isEditable(node)) { break; }\n\n    node = node.parentNode;\n  }\n  return null;\n}\n\n/**\n * returns new array of ancestor nodes (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listAncestor(node, pred) {\n  pred = pred || func.fail;\n\n  const ancestors = [];\n  ancestor(node, function(el) {\n    if (!isEditable(el)) {\n      ancestors.push(el);\n    }\n\n    return pred(el);\n  });\n  return ancestors;\n}\n\n/**\n * find farthest ancestor predicate hit\n */\nfunction lastAncestor(node, pred) {\n  const ancestors = listAncestor(node);\n  return lists.last(ancestors.filter(pred));\n}\n\n/**\n * returns common ancestor node between two nodes.\n *\n * @param {Node} nodeA\n * @param {Node} nodeB\n */\nfunction commonAncestor(nodeA, nodeB) {\n  const ancestors = listAncestor(nodeA);\n  for (let n = nodeB; n; n = n.parentNode) {\n    if (ancestors.indexOf(n) > -1) return n;\n  }\n  return null; // difference document area\n}\n\n/**\n * listing all previous siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [optional] pred - predicate function\n */\nfunction listPrev(node, pred) {\n  pred = pred || func.fail;\n\n  const nodes = [];\n  while (node) {\n    if (pred(node)) { break; }\n    nodes.push(node);\n    node = node.previousSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing next siblings (until predicate hit).\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listNext(node, pred) {\n  pred = pred || func.fail;\n\n  const nodes = [];\n  while (node) {\n    if (pred(node)) { break; }\n    nodes.push(node);\n    node = node.nextSibling;\n  }\n  return nodes;\n}\n\n/**\n * listing descendant nodes\n *\n * @param {Node} node\n * @param {Function} [pred] - predicate function\n */\nfunction listDescendant(node, pred) {\n  const descendants = [];\n  pred = pred || func.ok;\n\n  // start DFS(depth first search) with node\n  (function fnWalk(current) {\n    if (node !== current && pred(current)) {\n      descendants.push(current);\n    }\n    for (let idx = 0, len = current.childNodes.length; idx < len; idx++) {\n      fnWalk(current.childNodes[idx]);\n    }\n  })(node);\n\n  return descendants;\n}\n\n/**\n * wrap node with new tag.\n *\n * @param {Node} node\n * @param {Node} tagName of wrapper\n * @return {Node} - wrapper\n */\nfunction wrap(node, wrapperName) {\n  const parent = node.parentNode;\n  const wrapper = $('<' + wrapperName + '>')[0];\n\n  parent.insertBefore(wrapper, node);\n  wrapper.appendChild(node);\n\n  return wrapper;\n}\n\n/**\n * insert node after preceding\n *\n * @param {Node} node\n * @param {Node} preceding - predicate function\n */\nfunction insertAfter(node, preceding) {\n  const next = preceding.nextSibling;\n  let parent = preceding.parentNode;\n  if (next) {\n    parent.insertBefore(node, next);\n  } else {\n    parent.appendChild(node);\n  }\n  return node;\n}\n\n/**\n * append elements.\n *\n * @param {Node} node\n * @param {Collection} aChild\n */\nfunction appendChildNodes(node, aChild) {\n  $.each(aChild, function(idx, child) {\n    node.appendChild(child);\n  });\n  return node;\n}\n\n/**\n * returns whether boundaryPoint is left edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isLeftEdgePoint(point) {\n  return point.offset === 0;\n}\n\n/**\n * returns whether boundaryPoint is right edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isRightEdgePoint(point) {\n  return point.offset === nodeLength(point.node);\n}\n\n/**\n * returns whether boundaryPoint is edge or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isEdgePoint(point) {\n  return isLeftEdgePoint(point) || isRightEdgePoint(point);\n}\n\n/**\n * returns whether node is left edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgeOf(node, ancestor) {\n  while (node && node !== ancestor) {\n    if (position(node) !== 0) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * returns whether node is right edge of ancestor or not.\n *\n * @param {Node} node\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgeOf(node, ancestor) {\n  if (!ancestor) {\n    return false;\n  }\n  while (node && node !== ancestor) {\n    if (position(node) !== nodeLength(node.parentNode) - 1) {\n      return false;\n    }\n    node = node.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * returns whether point is left edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isLeftEdgePointOf(point, ancestor) {\n  return isLeftEdgePoint(point) && isLeftEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns whether point is right edge of ancestor or not.\n * @param {BoundaryPoint} point\n * @param {Node} ancestor\n * @return {Boolean}\n */\nfunction isRightEdgePointOf(point, ancestor) {\n  return isRightEdgePoint(point) && isRightEdgeOf(point.node, ancestor);\n}\n\n/**\n * returns offset from parent.\n *\n * @param {Node} node\n */\nfunction position(node) {\n  let offset = 0;\n  while ((node = node.previousSibling)) {\n    offset += 1;\n  }\n  return offset;\n}\n\nfunction hasChildren(node) {\n  return !!(node && node.childNodes && node.childNodes.length);\n}\n\n/**\n * returns previous boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction prevPoint(point, isSkipInnerOffset) {\n  let node;\n  let offset;\n\n  if (point.offset === 0) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    node = point.node.parentNode;\n    offset = position(point.node);\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset - 1];\n    offset = nodeLength(node);\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? 0 : point.offset - 1;\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/**\n * returns next boundaryPoint\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPoint(point, isSkipInnerOffset) {\n  let node, offset;\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    let nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/**\n * returns next boundaryPoint with empty node\n *\n * @param {BoundaryPoint} point\n * @param {Boolean} isSkipInnerOffset\n * @return {BoundaryPoint}\n */\nfunction nextPointWithEmptyNode(point, isSkipInnerOffset) {\n  let node, offset;\n\n  // if node is empty string node, return current node's sibling.\n  if (isEmpty(point.node)) {\n    node = point.node.nextSibling;\n    offset = 0;\n\n    return {\n      node: node,\n      offset: offset,\n    };\n  }\n\n  if (nodeLength(point.node) === point.offset) {\n    if (isEditable(point.node)) {\n      return null;\n    }\n\n    let nextTextNode = getNextTextNode(point.node);\n    if (nextTextNode) {\n      node = nextTextNode;\n      offset = 0;\n    } else {\n      node = point.node.parentNode;\n      offset = position(point.node) + 1;\n    }\n\n    // if next node is editable, return current node's sibling node.\n    if (isEditable(node)) {\n      node = point.node.nextSibling;\n      offset = 0;\n    }\n  } else if (hasChildren(point.node)) {\n    node = point.node.childNodes[point.offset];\n    offset = 0;\n    if (isEmpty(node)) {\n      return null;\n    }\n  } else {\n    node = point.node;\n    offset = isSkipInnerOffset ? nodeLength(point.node) : point.offset + 1;\n\n    if (isEmpty(node)) {\n      return null;\n    }\n  }\n\n  return {\n    node: node,\n    offset: offset,\n  };\n}\n\n/*\n* returns the next Text node index or 0 if not found.\n*/\nfunction getNextTextNode(actual) {\n  if (!actual.nextSibling) return undefined;\n  if (actual.parent !== actual.nextSibling.parent) return undefined;\n  if (isText(actual.nextSibling)) return actual.nextSibling;\n  return getNextTextNode(actual.nextSibling);\n}\n\n/**\n * returns whether pointA and pointB is same or not.\n *\n * @param {BoundaryPoint} pointA\n * @param {BoundaryPoint} pointB\n * @return {Boolean}\n */\nfunction isSamePoint(pointA, pointB) {\n  return pointA.node === pointB.node && pointA.offset === pointB.offset;\n}\n\n/**\n * returns whether point is visible (can set cursor) or not.\n *\n * @param {BoundaryPoint} point\n * @return {Boolean}\n */\nfunction isVisiblePoint(point) {\n  if (isText(point.node) || !hasChildren(point.node) || isEmpty(point.node)) {\n    return true;\n  }\n\n  const leftNode = point.node.childNodes[point.offset - 1];\n  const rightNode = point.node.childNodes[point.offset];\n  if ((!leftNode || isVoid(leftNode)) && (!rightNode || isVoid(rightNode))) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * @method prevPointUtil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction prevPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = prevPoint(point);\n  }\n\n  return null;\n}\n\n/**\n * @method nextPointUntil\n *\n * @param {BoundaryPoint} point\n * @param {Function} pred\n * @return {BoundaryPoint}\n */\nfunction nextPointUntil(point, pred) {\n  while (point) {\n    if (pred(point)) {\n      return point;\n    }\n\n    point = nextPoint(point);\n  }\n\n  return null;\n}\n\n/**\n * returns whether point has character or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isCharPoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  const ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch && (ch !== ' ' && ch !== NBSP_CHAR);\n}\n\n/**\n * returns whether point has space or not.\n *\n * @param {Point} point\n * @return {Boolean}\n */\nfunction isSpacePoint(point) {\n  if (!isText(point.node)) {\n    return false;\n  }\n\n  const ch = point.node.nodeValue.charAt(point.offset - 1);\n  return ch === ' ' || ch === NBSP_CHAR;\n}\n\n/**\n * @method walkPoint\n *\n * @param {BoundaryPoint} startPoint\n * @param {BoundaryPoint} endPoint\n * @param {Function} handler\n * @param {Boolean} isSkipInnerOffset\n */\nfunction walkPoint(startPoint, endPoint, handler, isSkipInnerOffset) {\n  let point = startPoint;\n\n  while (point) {\n    handler(point);\n\n    if (isSamePoint(point, endPoint)) {\n      break;\n    }\n\n    const isSkipOffset = isSkipInnerOffset &&\n                       startPoint.node !== point.node &&\n                       endPoint.node !== point.node;\n    point = nextPointWithEmptyNode(point, isSkipOffset);\n  }\n}\n\n/**\n * @method makeOffsetPath\n *\n * return offsetPath(array of offset) from ancestor\n *\n * @param {Node} ancestor - ancestor node\n * @param {Node} node\n */\nfunction makeOffsetPath(ancestor, node) {\n  const ancestors = listAncestor(node, func.eq(ancestor));\n  return ancestors.map(position).reverse();\n}\n\n/**\n * @method fromOffsetPath\n *\n * return element from offsetPath(array of offset)\n *\n * @param {Node} ancestor - ancestor node\n * @param {array} offsets - offsetPath\n */\nfunction fromOffsetPath(ancestor, offsets) {\n  let current = ancestor;\n  for (let i = 0, len = offsets.length; i < len; i++) {\n    if (current.childNodes.length <= offsets[i]) {\n      current = current.childNodes[current.childNodes.length - 1];\n    } else {\n      current = current.childNodes[offsets[i]];\n    }\n  }\n  return current;\n}\n\n/**\n * @method splitNode\n *\n * split element or #text\n *\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @param {Boolean} [options.isDiscardEmptySplits] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitNode(point, options) {\n  let isSkipPaddingBlankHTML = options && options.isSkipPaddingBlankHTML;\n  const isNotSplitEdgePoint = options && options.isNotSplitEdgePoint;\n  const isDiscardEmptySplits = options && options.isDiscardEmptySplits;\n\n  if (isDiscardEmptySplits) {\n    isSkipPaddingBlankHTML = true;\n  }\n\n  // edge case\n  if (isEdgePoint(point) && (isText(point.node) || isNotSplitEdgePoint)) {\n    if (isLeftEdgePoint(point)) {\n      return point.node;\n    } else if (isRightEdgePoint(point)) {\n      return point.node.nextSibling;\n    }\n  }\n\n  // split #text\n  if (isText(point.node)) {\n    return point.node.splitText(point.offset);\n  } else {\n    const childNode = point.node.childNodes[point.offset];\n    const clone = insertAfter(point.node.cloneNode(false), point.node);\n    appendChildNodes(clone, listNext(childNode));\n\n    if (!isSkipPaddingBlankHTML) {\n      paddingBlankHTML(point.node);\n      paddingBlankHTML(clone);\n    }\n\n    if (isDiscardEmptySplits) {\n      if (isEmpty(point.node)) {\n        remove(point.node);\n      }\n      if (isEmpty(clone)) {\n        remove(clone);\n        return point.node.nextSibling;\n      }\n    }\n\n    return clone;\n  }\n}\n\n/**\n * @method splitTree\n *\n * split tree by point\n *\n * @param {Node} root - split root\n * @param {BoundaryPoint} point\n * @param {Object} [options]\n * @param {Boolean} [options.isSkipPaddingBlankHTML] - default: false\n * @param {Boolean} [options.isNotSplitEdgePoint] - default: false\n * @return {Node} right node of boundaryPoint\n */\nfunction splitTree(root, point, options) {\n  // ex) [#text, <span>, <p>]\n  const ancestors = listAncestor(point.node, func.eq(root));\n\n  if (!ancestors.length) {\n    return null;\n  } else if (ancestors.length === 1) {\n    return splitNode(point, options);\n  }\n\n  return ancestors.reduce(function(node, parent) {\n    if (node === point.node) {\n      node = splitNode(point, options);\n    }\n\n    return splitNode({\n      node: parent,\n      offset: node ? position(node) : nodeLength(parent),\n    }, options);\n  });\n}\n\n/**\n * split point\n *\n * @param {Point} point\n * @param {Boolean} isInline\n * @return {Object}\n */\nfunction splitPoint(point, isInline) {\n  // find splitRoot, container\n  //  - inline: splitRoot is a child of paragraph\n  //  - block: splitRoot is a child of bodyContainer\n  const pred = isInline ? isPara : isBodyContainer;\n  const ancestors = listAncestor(point.node, pred);\n  const topAncestor = lists.last(ancestors) || point.node;\n\n  let splitRoot, container;\n  if (pred(topAncestor)) {\n    splitRoot = ancestors[ancestors.length - 2];\n    container = topAncestor;\n  } else {\n    splitRoot = topAncestor;\n    container = splitRoot.parentNode;\n  }\n\n  // if splitRoot is exists, split with splitTree\n  let pivot = splitRoot && splitTree(splitRoot, point, {\n    isSkipPaddingBlankHTML: isInline,\n    isNotSplitEdgePoint: isInline,\n  });\n\n  // if container is point.node, find pivot with point.offset\n  if (!pivot && container === point.node) {\n    pivot = point.node.childNodes[point.offset];\n  }\n\n  return {\n    rightNode: pivot,\n    container: container,\n  };\n}\n\nfunction create(nodeName) {\n  return document.createElement(nodeName);\n}\n\nfunction createText(text) {\n  return document.createTextNode(text);\n}\n\n/**\n * @method remove\n *\n * remove node, (isRemoveChild: remove child or not)\n *\n * @param {Node} node\n * @param {Boolean} isRemoveChild\n */\nfunction remove(node, isRemoveChild) {\n  if (!node || !node.parentNode) { return; }\n  if (node.removeNode) { return node.removeNode(isRemoveChild); }\n\n  const parent = node.parentNode;\n  if (!isRemoveChild) {\n    const nodes = [];\n    for (let i = 0, len = node.childNodes.length; i < len; i++) {\n      nodes.push(node.childNodes[i]);\n    }\n\n    for (let i = 0, len = nodes.length; i < len; i++) {\n      parent.insertBefore(nodes[i], node);\n    }\n  }\n\n  parent.removeChild(node);\n}\n\n/**\n * @method removeWhile\n *\n * @param {Node} node\n * @param {Function} pred\n */\nfunction removeWhile(node, pred) {\n  while (node) {\n    if (isEditable(node) || !pred(node)) {\n      break;\n    }\n\n    const parent = node.parentNode;\n    remove(node);\n    node = parent;\n  }\n}\n\n/**\n * @method replace\n *\n * replace node with provided nodeName\n *\n * @param {Node} node\n * @param {String} nodeName\n * @return {Node} - new node\n */\nfunction replace(node, nodeName) {\n  if (node.nodeName.toUpperCase() === nodeName.toUpperCase()) {\n    return node;\n  }\n\n  const newNode = create(nodeName);\n\n  if (node.style.cssText) {\n    newNode.style.cssText = node.style.cssText;\n  }\n\n  appendChildNodes(newNode, lists.from(node.childNodes));\n  insertAfter(newNode, node);\n  remove(node);\n\n  return newNode;\n}\n\nconst isTextarea = makePredByNodeName('TEXTAREA');\n\n/**\n * @param {jQuery} $node\n * @param {Boolean} [stripLinebreaks] - default: false\n */\nfunction value($node, stripLinebreaks) {\n  const val = isTextarea($node[0]) ? $node.val() : $node.html();\n  if (stripLinebreaks) {\n    return val.replace(/[\\n\\r]/g, '');\n  }\n  return val;\n}\n\n/**\n * @method html\n *\n * get the HTML contents of node\n *\n * @param {jQuery} $node\n * @param {Boolean} [isNewlineOnBlock]\n */\nfunction html($node, isNewlineOnBlock) {\n  let markup = value($node);\n\n  if (isNewlineOnBlock) {\n    const regexTag = /<(\\/?)(\\b(?!!)[^>\\s]*)(.*?)(\\s*\\/?>)/g;\n    markup = markup.replace(regexTag, function(match, endSlash, name) {\n      name = name.toUpperCase();\n      const isEndOfInlineContainer = /^DIV|^TD|^TH|^P|^LI|^H[1-7]/.test(name) &&\n                                   !!endSlash;\n      const isBlockNode = /^BLOCKQUOTE|^TABLE|^TBODY|^TR|^HR|^UL|^OL/.test(name);\n\n      return match + ((isEndOfInlineContainer || isBlockNode) ? '\\n' : '');\n    });\n    markup = markup.trim();\n  }\n\n  return markup;\n}\n\nfunction posFromPlaceholder(placeholder) {\n  const $placeholder = $(placeholder);\n  const pos = $placeholder.offset();\n  const height = $placeholder.outerHeight(true); // include margin\n\n  return {\n    left: pos.left,\n    top: pos.top + height,\n  };\n}\n\nfunction attachEvents($node, events) {\n  Object.keys(events).forEach(function(key) {\n    $node.on(key, events[key]);\n  });\n}\n\nfunction detachEvents($node, events) {\n  Object.keys(events).forEach(function(key) {\n    $node.off(key, events[key]);\n  });\n}\n\n/**\n * @method isCustomStyleTag\n *\n * assert if a node contains a \"note-styletag\" class,\n * which implies that's a custom-made style tag node\n *\n * @param {Node} an HTML DOM node\n */\nfunction isCustomStyleTag(node) {\n  return node && !isText(node) && lists.contains(node.classList, 'note-styletag');\n}\n\nexport default {\n  /** @property {String} NBSP_CHAR */\n  NBSP_CHAR,\n  /** @property {String} ZERO_WIDTH_NBSP_CHAR */\n  ZERO_WIDTH_NBSP_CHAR,\n  /** @property {String} blank */\n  blank: blankHTML,\n  /** @property {String} emptyPara */\n  emptyPara: `<p>${blankHTML}</p>`,\n  makePredByNodeName,\n  isEditable,\n  isControlSizing,\n  isText,\n  isElement,\n  isVoid,\n  isPara,\n  isPurePara,\n  isHeading,\n  isInline,\n  isBlock: func.not(isInline),\n  isBodyInline,\n  isBody,\n  isParaInline,\n  isPre,\n  isList,\n  isTable,\n  isData,\n  isCell,\n  isBlockquote,\n  isBodyContainer,\n  isAnchor,\n  isDiv: makePredByNodeName('DIV'),\n  isLi,\n  isBR: makePredByNodeName('BR'),\n  isSpan: makePredByNodeName('SPAN'),\n  isB: makePredByNodeName('B'),\n  isU: makePredByNodeName('U'),\n  isS: makePredByNodeName('S'),\n  isI: makePredByNodeName('I'),\n  isImg: makePredByNodeName('IMG'),\n  isTextarea,\n  deepestChildIsEmpty,\n  isEmpty,\n  isEmptyAnchor: func.and(isAnchor, isEmpty),\n  isClosestSibling,\n  withClosestSiblings,\n  nodeLength,\n  isLeftEdgePoint,\n  isRightEdgePoint,\n  isEdgePoint,\n  isLeftEdgeOf,\n  isRightEdgeOf,\n  isLeftEdgePointOf,\n  isRightEdgePointOf,\n  prevPoint,\n  nextPoint,\n  nextPointWithEmptyNode,\n  isSamePoint,\n  isVisiblePoint,\n  prevPointUntil,\n  nextPointUntil,\n  isCharPoint,\n  isSpacePoint,\n  walkPoint,\n  ancestor,\n  singleChildAncestor,\n  listAncestor,\n  lastAncestor,\n  listNext,\n  listPrev,\n  listDescendant,\n  commonAncestor,\n  wrap,\n  insertAfter,\n  appendChildNodes,\n  position,\n  hasChildren,\n  makeOffsetPath,\n  fromOffsetPath,\n  splitTree,\n  splitPoint,\n  create,\n  createText,\n  remove,\n  removeWhile,\n  replace,\n  html,\n  value,\n  posFromPlaceholder,\n  attachEvents,\n  detachEvents,\n  isCustomStyleTag,\n};\n","import $ from 'jquery';\nimport func from './core/func';\nimport lists from './core/lists';\nimport dom from './core/dom';\n\nexport default class Context {\n  /**\n   * @param {jQuery} $note\n   * @param {Object} options\n   */\n  constructor($note, options) {\n    this.$note = $note;\n\n    this.memos = {};\n    this.modules = {};\n    this.layoutInfo = {};\n    this.options = $.extend(true, {}, options);\n\n    // init ui with options\n    $.summernote.ui = $.summernote.ui_template(this.options);\n    this.ui = $.summernote.ui;\n\n    this.initialize();\n  }\n\n  /**\n   * create layout and initialize modules and other resources\n   */\n  initialize() {\n    this.layoutInfo = this.ui.createLayout(this.$note);\n    this._initialize();\n    this.$note.hide();\n    return this;\n  }\n\n  /**\n   * destroy modules and other resources and remove layout\n   */\n  destroy() {\n    this._destroy();\n    this.$note.removeData('summernote');\n    this.ui.removeLayout(this.$note, this.layoutInfo);\n  }\n\n  /**\n   * destory modules and other resources and initialize it again\n   */\n  reset() {\n    const disabled = this.isDisabled();\n    this.code(dom.emptyPara);\n    this._destroy();\n    this._initialize();\n\n    if (disabled) {\n      this.disable();\n    }\n  }\n\n  _initialize() {\n    // set own id\n    this.options.id = func.uniqueId($.now());\n    // set default container for tooltips, popovers, and dialogs\n    this.options.container = this.options.container || this.layoutInfo.editor;\n\n    // add optional buttons\n    const buttons = $.extend({}, this.options.buttons);\n    Object.keys(buttons).forEach((key) => {\n      this.memo('button.' + key, buttons[key]);\n    });\n\n    const modules = $.extend({}, this.options.modules, $.summernote.plugins || {});\n\n    // add and initialize modules\n    Object.keys(modules).forEach((key) => {\n      this.module(key, modules[key], true);\n    });\n\n    Object.keys(this.modules).forEach((key) => {\n      this.initializeModule(key);\n    });\n  }\n\n  _destroy() {\n    // destroy modules with reversed order\n    Object.keys(this.modules).reverse().forEach((key) => {\n      this.removeModule(key);\n    });\n\n    Object.keys(this.memos).forEach((key) => {\n      this.removeMemo(key);\n    });\n    // trigger custom onDestroy callback\n    this.triggerEvent('destroy', this);\n  }\n\n  code(html) {\n    const isActivated = this.invoke('codeview.isActivated');\n\n    if (html === undefined) {\n      this.invoke('codeview.sync');\n      return isActivated ? this.layoutInfo.codable.val() : this.layoutInfo.editable.html();\n    } else {\n      if (isActivated) {\n        this.invoke('codeview.sync', html);\n      } else {\n        this.layoutInfo.editable.html(html);\n      }\n      this.$note.val(html);\n      this.triggerEvent('change', html, this.layoutInfo.editable);\n    }\n  }\n\n  isDisabled() {\n    return this.layoutInfo.editable.attr('contenteditable') === 'false';\n  }\n\n  enable() {\n    this.layoutInfo.editable.attr('contenteditable', true);\n    this.invoke('toolbar.activate', true);\n    this.triggerEvent('disable', false);\n    this.options.editing = true;\n  }\n\n  disable() {\n    // close codeview if codeview is opend\n    if (this.invoke('codeview.isActivated')) {\n      this.invoke('codeview.deactivate');\n    }\n    this.layoutInfo.editable.attr('contenteditable', false);\n    this.options.editing = false;\n    this.invoke('toolbar.deactivate', true);\n\n    this.triggerEvent('disable', true);\n  }\n\n  triggerEvent() {\n    const namespace = lists.head(arguments);\n    const args = lists.tail(lists.from(arguments));\n\n    const callback = this.options.callbacks[func.namespaceToCamel(namespace, 'on')];\n    if (callback) {\n      callback.apply(this.$note[0], args);\n    }\n    this.$note.trigger('summernote.' + namespace, args);\n  }\n\n  initializeModule(key) {\n    const module = this.modules[key];\n    module.shouldInitialize = module.shouldInitialize || func.ok;\n    if (!module.shouldInitialize()) {\n      return;\n    }\n\n    // initialize module\n    if (module.initialize) {\n      module.initialize();\n    }\n\n    // attach events\n    if (module.events) {\n      dom.attachEvents(this.$note, module.events);\n    }\n  }\n\n  module(key, ModuleClass, withoutIntialize) {\n    if (arguments.length === 1) {\n      return this.modules[key];\n    }\n\n    this.modules[key] = new ModuleClass(this);\n\n    if (!withoutIntialize) {\n      this.initializeModule(key);\n    }\n  }\n\n  removeModule(key) {\n    const module = this.modules[key];\n    if (module.shouldInitialize()) {\n      if (module.events) {\n        dom.detachEvents(this.$note, module.events);\n      }\n\n      if (module.destroy) {\n        module.destroy();\n      }\n    }\n\n    delete this.modules[key];\n  }\n\n  memo(key, obj) {\n    if (arguments.length === 1) {\n      return this.memos[key];\n    }\n    this.memos[key] = obj;\n  }\n\n  removeMemo(key) {\n    if (this.memos[key] && this.memos[key].destroy) {\n      this.memos[key].destroy();\n    }\n\n    delete this.memos[key];\n  }\n\n  /**\n   * Some buttons need to change their visual style immediately once they get pressed\n   */\n  createInvokeHandlerAndUpdateState(namespace, value) {\n    return (event) => {\n      this.createInvokeHandler(namespace, value)(event);\n      this.invoke('buttons.updateCurrentStyle');\n    };\n  }\n\n  createInvokeHandler(namespace, value) {\n    return (event) => {\n      event.preventDefault();\n      const $target = $(event.target);\n      this.invoke(namespace, value || $target.closest('[data-value]').data('value'), $target);\n    };\n  }\n\n  invoke() {\n    const namespace = lists.head(arguments);\n    const args = lists.tail(lists.from(arguments));\n\n    const splits = namespace.split('.');\n    const hasSeparator = splits.length > 1;\n    const moduleName = hasSeparator && lists.head(splits);\n    const methodName = hasSeparator ? lists.last(splits) : lists.head(splits);\n\n    const module = this.modules[moduleName || 'editor'];\n    if (!moduleName && this[methodName]) {\n      return this[methodName].apply(this, args);\n    } else if (module && module[methodName] && module.shouldInitialize()) {\n      return module[methodName].apply(module, args);\n    }\n  }\n}\n","import $ from 'jquery';\nimport env from './base/core/env';\nimport lists from './base/core/lists';\nimport Context from './base/Context';\n\n$.fn.extend({\n  /**\n   * Summernote API\n   *\n   * @param {Object|String}\n   * @return {this}\n   */\n  summernote: function() {\n    const type = $.type(lists.head(arguments));\n    const isExternalAPICalled = type === 'string';\n    const hasInitOptions = type === 'object';\n\n    const options = $.extend({}, $.summernote.options, hasInitOptions ? lists.head(arguments) : {});\n\n    // Update options\n    options.langInfo = $.extend(true, {}, $.summernote.lang['en-US'], $.summernote.lang[options.lang]);\n    options.icons = $.extend(true, {}, $.summernote.options.icons, options.icons);\n    options.tooltip = options.tooltip === 'auto' ? !env.isSupportTouch : options.tooltip;\n\n    this.each((idx, note) => {\n      const $note = $(note);\n      if (!$note.data('summernote')) {\n        const context = new Context($note, options);\n        $note.data('summernote', context);\n        $note.data('summernote').triggerEvent('init', context.layoutInfo);\n      }\n    });\n\n    const $note = this.first();\n    if ($note.length) {\n      const context = $note.data('summernote');\n      if (isExternalAPICalled) {\n        return context.invoke.apply(context, lists.from(arguments));\n      } else if (options.focus) {\n        context.invoke('editor.focus');\n      }\n    }\n\n    return this;\n  },\n});\n","import $ from 'jquery';\nimport env from './env';\nimport func from './func';\nimport lists from './lists';\nimport dom from './dom';\n\n/**\n * return boundaryPoint from TextRange, inspired by Andy Na's HuskyRange.js\n *\n * @param {TextRange} textRange\n * @param {Boolean} isStart\n * @return {BoundaryPoint}\n *\n * @see http://msdn.microsoft.com/en-us/library/ie/ms535872(v=vs.85).aspx\n */\nfunction textRangeToPoint(textRange, isStart) {\n  let container = textRange.parentElement();\n  let offset;\n\n  const tester = document.body.createTextRange();\n  let prevContainer;\n  const childNodes = lists.from(container.childNodes);\n  for (offset = 0; offset < childNodes.length; offset++) {\n    if (dom.isText(childNodes[offset])) {\n      continue;\n    }\n    tester.moveToElementText(childNodes[offset]);\n    if (tester.compareEndPoints('StartToStart', textRange) >= 0) {\n      break;\n    }\n    prevContainer = childNodes[offset];\n  }\n\n  if (offset !== 0 && dom.isText(childNodes[offset - 1])) {\n    const textRangeStart = document.body.createTextRange();\n    let curTextNode = null;\n    textRangeStart.moveToElementText(prevContainer || container);\n    textRangeStart.collapse(!prevContainer);\n    curTextNode = prevContainer ? prevContainer.nextSibling : container.firstChild;\n\n    const pointTester = textRange.duplicate();\n    pointTester.setEndPoint('StartToStart', textRangeStart);\n    let textCount = pointTester.text.replace(/[\\r\\n]/g, '').length;\n\n    while (textCount > curTextNode.nodeValue.length && curTextNode.nextSibling) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    // [workaround] enforce IE to re-reference curTextNode, hack\n    const dummy = curTextNode.nodeValue; // eslint-disable-line\n\n    if (isStart && curTextNode.nextSibling && dom.isText(curTextNode.nextSibling) &&\n      textCount === curTextNode.nodeValue.length) {\n      textCount -= curTextNode.nodeValue.length;\n      curTextNode = curTextNode.nextSibling;\n    }\n\n    container = curTextNode;\n    offset = textCount;\n  }\n\n  return {\n    cont: container,\n    offset: offset,\n  };\n}\n\n/**\n * return TextRange from boundary point (inspired by google closure-library)\n * @param {BoundaryPoint} point\n * @return {TextRange}\n */\nfunction pointToTextRange(point) {\n  const textRangeInfo = function(container, offset) {\n    let node, isCollapseToStart;\n\n    if (dom.isText(container)) {\n      const prevTextNodes = dom.listPrev(container, func.not(dom.isText));\n      const prevContainer = lists.last(prevTextNodes).previousSibling;\n      node = prevContainer || container.parentNode;\n      offset += lists.sum(lists.tail(prevTextNodes), dom.nodeLength);\n      isCollapseToStart = !prevContainer;\n    } else {\n      node = container.childNodes[offset] || container;\n      if (dom.isText(node)) {\n        return textRangeInfo(node, 0);\n      }\n\n      offset = 0;\n      isCollapseToStart = false;\n    }\n\n    return {\n      node: node,\n      collapseToStart: isCollapseToStart,\n      offset: offset,\n    };\n  };\n\n  const textRange = document.body.createTextRange();\n  const info = textRangeInfo(point.node, point.offset);\n\n  textRange.moveToElementText(info.node);\n  textRange.collapse(info.collapseToStart);\n  textRange.moveStart('character', info.offset);\n  return textRange;\n}\n\n/**\n   * Wrapped Range\n   *\n   * @constructor\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   */\nclass WrappedRange {\n  constructor(sc, so, ec, eo) {\n    this.sc = sc;\n    this.so = so;\n    this.ec = ec;\n    this.eo = eo;\n\n    // isOnEditable: judge whether range is on editable or not\n    this.isOnEditable = this.makeIsOn(dom.isEditable);\n    // isOnList: judge whether range is on list node or not\n    this.isOnList = this.makeIsOn(dom.isList);\n    // isOnAnchor: judge whether range is on anchor node or not\n    this.isOnAnchor = this.makeIsOn(dom.isAnchor);\n    // isOnCell: judge whether range is on cell node or not\n    this.isOnCell = this.makeIsOn(dom.isCell);\n    // isOnData: judge whether range is on data node or not\n    this.isOnData = this.makeIsOn(dom.isData);\n  }\n\n  // nativeRange: get nativeRange from sc, so, ec, eo\n  nativeRange() {\n    if (env.isW3CRangeSupport) {\n      const w3cRange = document.createRange();\n      w3cRange.setStart(this.sc, this.so);\n      w3cRange.setEnd(this.ec, this.eo);\n\n      return w3cRange;\n    } else {\n      const textRange = pointToTextRange({\n        node: this.sc,\n        offset: this.so,\n      });\n\n      textRange.setEndPoint('EndToEnd', pointToTextRange({\n        node: this.ec,\n        offset: this.eo,\n      }));\n\n      return textRange;\n    }\n  }\n\n  getPoints() {\n    return {\n      sc: this.sc,\n      so: this.so,\n      ec: this.ec,\n      eo: this.eo,\n    };\n  }\n\n  getStartPoint() {\n    return {\n      node: this.sc,\n      offset: this.so,\n    };\n  }\n\n  getEndPoint() {\n    return {\n      node: this.ec,\n      offset: this.eo,\n    };\n  }\n\n  /**\n   * select update visible range\n   */\n  select() {\n    const nativeRng = this.nativeRange();\n    if (env.isW3CRangeSupport) {\n      const selection = document.getSelection();\n      if (selection.rangeCount > 0) {\n        selection.removeAllRanges();\n      }\n      selection.addRange(nativeRng);\n    } else {\n      nativeRng.select();\n    }\n\n    return this;\n  }\n\n  /**\n   * Moves the scrollbar to start container(sc) of current range\n   *\n   * @return {WrappedRange}\n   */\n  scrollIntoView(container) {\n    const height = $(container).height();\n    if (container.scrollTop + height < this.sc.offsetTop) {\n      container.scrollTop += Math.abs(container.scrollTop + height - this.sc.offsetTop);\n    }\n\n    return this;\n  }\n\n  /**\n   * @return {WrappedRange}\n   */\n  normalize() {\n    /**\n     * @param {BoundaryPoint} point\n     * @param {Boolean} isLeftToRight - true: prefer to choose right node\n     *                                - false: prefer to choose left node\n     * @return {BoundaryPoint}\n     */\n    const getVisiblePoint = function(point, isLeftToRight) {\n      if (!point) {\n        return point;\n      }\n\n      // Just use the given point [XXX:Adhoc]\n      //  - case 01. if the point is on the middle of the node\n      //  - case 02. if the point is on the right edge and prefer to choose left node\n      //  - case 03. if the point is on the left edge and prefer to choose right node\n      //  - case 04. if the point is on the right edge and prefer to choose right node but the node is void\n      //  - case 05. if the point is on the left edge and prefer to choose left node but the node is void\n      //  - case 06. if the point is on the block node and there is no children\n      if (dom.isVisiblePoint(point)) {\n        if (!dom.isEdgePoint(point) ||\n            (dom.isRightEdgePoint(point) && !isLeftToRight) ||\n            (dom.isLeftEdgePoint(point) && isLeftToRight) ||\n            (dom.isRightEdgePoint(point) && isLeftToRight && dom.isVoid(point.node.nextSibling)) ||\n            (dom.isLeftEdgePoint(point) && !isLeftToRight && dom.isVoid(point.node.previousSibling)) ||\n            (dom.isBlock(point.node) && dom.isEmpty(point.node))) {\n          return point;\n        }\n      }\n\n      // point on block's edge\n      const block = dom.ancestor(point.node, dom.isBlock);\n      let hasRightNode = false;\n\n      if (!hasRightNode) {\n        const prevPoint = dom.prevPoint(point) || { node: null };\n        hasRightNode = (dom.isLeftEdgePointOf(point, block) || dom.isVoid(prevPoint.node)) && !isLeftToRight;\n      }\n\n      let hasLeftNode = false;\n      if (!hasLeftNode) {\n        const nextPoint = dom.nextPoint(point) || { node: null };\n        hasLeftNode = (dom.isRightEdgePointOf(point, block) || dom.isVoid(nextPoint.node)) && isLeftToRight;\n      }\n\n      if (hasRightNode || hasLeftNode) {\n        // returns point already on visible point\n        if (dom.isVisiblePoint(point)) {\n          return point;\n        }\n        // reverse direction\n        isLeftToRight = !isLeftToRight;\n      }\n\n      const nextPoint = isLeftToRight ? dom.nextPointUntil(dom.nextPoint(point), dom.isVisiblePoint)\n        : dom.prevPointUntil(dom.prevPoint(point), dom.isVisiblePoint);\n      return nextPoint || point;\n    };\n\n    const endPoint = getVisiblePoint(this.getEndPoint(), false);\n    const startPoint = this.isCollapsed() ? endPoint : getVisiblePoint(this.getStartPoint(), true);\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns matched nodes on range\n   *\n   * @param {Function} [pred] - predicate function\n   * @param {Object} [options]\n   * @param {Boolean} [options.includeAncestor]\n   * @param {Boolean} [options.fullyContains]\n   * @return {Node[]}\n   */\n  nodes(pred, options) {\n    pred = pred || func.ok;\n\n    const includeAncestor = options && options.includeAncestor;\n    const fullyContains = options && options.fullyContains;\n\n    // TODO compare points and sort\n    const startPoint = this.getStartPoint();\n    const endPoint = this.getEndPoint();\n\n    const nodes = [];\n    const leftEdgeNodes = [];\n\n    dom.walkPoint(startPoint, endPoint, function(point) {\n      if (dom.isEditable(point.node)) {\n        return;\n      }\n\n      let node;\n      if (fullyContains) {\n        if (dom.isLeftEdgePoint(point)) {\n          leftEdgeNodes.push(point.node);\n        }\n        if (dom.isRightEdgePoint(point) && lists.contains(leftEdgeNodes, point.node)) {\n          node = point.node;\n        }\n      } else if (includeAncestor) {\n        node = dom.ancestor(point.node, pred);\n      } else {\n        node = point.node;\n      }\n\n      if (node && pred(node)) {\n        nodes.push(node);\n      }\n    }, true);\n\n    return lists.unique(nodes);\n  }\n\n  /**\n   * returns commonAncestor of range\n   * @return {Element} - commonAncestor\n   */\n  commonAncestor() {\n    return dom.commonAncestor(this.sc, this.ec);\n  }\n\n  /**\n   * returns expanded range by pred\n   *\n   * @param {Function} pred - predicate function\n   * @return {WrappedRange}\n   */\n  expand(pred) {\n    const startAncestor = dom.ancestor(this.sc, pred);\n    const endAncestor = dom.ancestor(this.ec, pred);\n\n    if (!startAncestor && !endAncestor) {\n      return new WrappedRange(this.sc, this.so, this.ec, this.eo);\n    }\n\n    const boundaryPoints = this.getPoints();\n\n    if (startAncestor) {\n      boundaryPoints.sc = startAncestor;\n      boundaryPoints.so = 0;\n    }\n\n    if (endAncestor) {\n      boundaryPoints.ec = endAncestor;\n      boundaryPoints.eo = dom.nodeLength(endAncestor);\n    }\n\n    return new WrappedRange(\n      boundaryPoints.sc,\n      boundaryPoints.so,\n      boundaryPoints.ec,\n      boundaryPoints.eo\n    );\n  }\n\n  /**\n   * @param {Boolean} isCollapseToStart\n   * @return {WrappedRange}\n   */\n  collapse(isCollapseToStart) {\n    if (isCollapseToStart) {\n      return new WrappedRange(this.sc, this.so, this.sc, this.so);\n    } else {\n      return new WrappedRange(this.ec, this.eo, this.ec, this.eo);\n    }\n  }\n\n  /**\n   * splitText on range\n   */\n  splitText() {\n    const isSameContainer = this.sc === this.ec;\n    const boundaryPoints = this.getPoints();\n\n    if (dom.isText(this.ec) && !dom.isEdgePoint(this.getEndPoint())) {\n      this.ec.splitText(this.eo);\n    }\n\n    if (dom.isText(this.sc) && !dom.isEdgePoint(this.getStartPoint())) {\n      boundaryPoints.sc = this.sc.splitText(this.so);\n      boundaryPoints.so = 0;\n\n      if (isSameContainer) {\n        boundaryPoints.ec = boundaryPoints.sc;\n        boundaryPoints.eo = this.eo - this.so;\n      }\n    }\n\n    return new WrappedRange(\n      boundaryPoints.sc,\n      boundaryPoints.so,\n      boundaryPoints.ec,\n      boundaryPoints.eo\n    );\n  }\n\n  /**\n   * delete contents on range\n   * @return {WrappedRange}\n   */\n  deleteContents() {\n    if (this.isCollapsed()) {\n      return this;\n    }\n\n    const rng = this.splitText();\n    const nodes = rng.nodes(null, {\n      fullyContains: true,\n    });\n\n    // find new cursor point\n    const point = dom.prevPointUntil(rng.getStartPoint(), function(point) {\n      return !lists.contains(nodes, point.node);\n    });\n\n    const emptyParents = [];\n    $.each(nodes, function(idx, node) {\n      // find empty parents\n      const parent = node.parentNode;\n      if (point.node !== parent && dom.nodeLength(parent) === 1) {\n        emptyParents.push(parent);\n      }\n      dom.remove(node, false);\n    });\n\n    // remove empty parents\n    $.each(emptyParents, function(idx, node) {\n      dom.remove(node, false);\n    });\n\n    return new WrappedRange(\n      point.node,\n      point.offset,\n      point.node,\n      point.offset\n    ).normalize();\n  }\n\n  /**\n   * makeIsOn: return isOn(pred) function\n   */\n  makeIsOn(pred) {\n    return function() {\n      const ancestor = dom.ancestor(this.sc, pred);\n      return !!ancestor && (ancestor === dom.ancestor(this.ec, pred));\n    };\n  }\n\n  /**\n   * @param {Function} pred\n   * @return {Boolean}\n   */\n  isLeftEdgeOf(pred) {\n    if (!dom.isLeftEdgePoint(this.getStartPoint())) {\n      return false;\n    }\n\n    const node = dom.ancestor(this.sc, pred);\n    return node && dom.isLeftEdgeOf(this.sc, node);\n  }\n\n  /**\n   * returns whether range was collapsed or not\n   */\n  isCollapsed() {\n    return this.sc === this.ec && this.so === this.eo;\n  }\n\n  /**\n   * wrap inline nodes which children of body with paragraph\n   *\n   * @return {WrappedRange}\n   */\n  wrapBodyInlineWithPara() {\n    if (dom.isBodyContainer(this.sc) && dom.isEmpty(this.sc)) {\n      this.sc.innerHTML = dom.emptyPara;\n      return new WrappedRange(this.sc.firstChild, 0, this.sc.firstChild, 0);\n    }\n\n    /**\n     * [workaround] firefox often create range on not visible point. so normalize here.\n     *  - firefox: |<p>text</p>|\n     *  - chrome: <p>|text|</p>\n     */\n    const rng = this.normalize();\n    if (dom.isParaInline(this.sc) || dom.isPara(this.sc)) {\n      return rng;\n    }\n\n    // find inline top ancestor\n    let topAncestor;\n    if (dom.isInline(rng.sc)) {\n      const ancestors = dom.listAncestor(rng.sc, func.not(dom.isInline));\n      topAncestor = lists.last(ancestors);\n      if (!dom.isInline(topAncestor)) {\n        topAncestor = ancestors[ancestors.length - 2] || rng.sc.childNodes[rng.so];\n      }\n    } else {\n      topAncestor = rng.sc.childNodes[rng.so > 0 ? rng.so - 1 : 0];\n    }\n\n    if (topAncestor) {\n      // siblings not in paragraph\n      let inlineSiblings = dom.listPrev(topAncestor, dom.isParaInline).reverse();\n      inlineSiblings = inlineSiblings.concat(dom.listNext(topAncestor.nextSibling, dom.isParaInline));\n\n      // wrap with paragraph\n      if (inlineSiblings.length) {\n        const para = dom.wrap(lists.head(inlineSiblings), 'p');\n        dom.appendChildNodes(para, lists.tail(inlineSiblings));\n      }\n    }\n\n    return this.normalize();\n  }\n\n  /**\n   * insert node at current cursor\n   *\n   * @param {Node} node\n   * @return {Node}\n   */\n  insertNode(node) {\n    let rng = this;\n\n    if (dom.isText(node) || dom.isInline(node)) {\n      rng = this.wrapBodyInlineWithPara().deleteContents();\n    }\n\n    const info = dom.splitPoint(rng.getStartPoint(), dom.isInline(node));\n    if (info.rightNode) {\n      info.rightNode.parentNode.insertBefore(node, info.rightNode);\n      if (dom.isEmpty(info.rightNode) && dom.isPara(node)) {\n        info.rightNode.parentNode.removeChild(info.rightNode);\n      }\n    } else {\n      info.container.appendChild(node);\n    }\n\n    return node;\n  }\n\n  /**\n   * insert html at current cursor\n   */\n  pasteHTML(markup) {\n    markup = $.trim(markup);\n\n    const contentsContainer = $('<div></div>').html(markup)[0];\n    let childNodes = lists.from(contentsContainer.childNodes);\n\n    // const rng = this.wrapBodyInlineWithPara().deleteContents();\n    const rng = this;\n    let reversed = false;\n\n    if (rng.so >= 0) {\n      childNodes = childNodes.reverse();\n      reversed = true;\n    }\n\n    childNodes = childNodes.map(function(childNode) {\n      return rng.insertNode(childNode);\n    });\n\n    if (reversed) {\n      childNodes = childNodes.reverse();\n    }\n    return childNodes;\n  }\n\n  /**\n   * returns text in range\n   *\n   * @return {String}\n   */\n  toString() {\n    const nativeRng = this.nativeRange();\n    return env.isW3CRangeSupport ? nativeRng.toString() : nativeRng.text;\n  }\n\n  /**\n   * returns range for word before cursor\n   *\n   * @param {Boolean} [findAfter] - find after cursor, default: false\n   * @return {WrappedRange}\n   */\n  getWordRange(findAfter) {\n    let endPoint = this.getEndPoint();\n\n    if (!dom.isCharPoint(endPoint)) {\n      return this;\n    }\n\n    const startPoint = dom.prevPointUntil(endPoint, function(point) {\n      return !dom.isCharPoint(point);\n    });\n\n    if (findAfter) {\n      endPoint = dom.nextPointUntil(endPoint, function(point) {\n        return !dom.isCharPoint(point);\n      });\n    }\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns range for words before cursor\n   *\n   * @param {Boolean} [findAfter] - find after cursor, default: false\n   * @return {WrappedRange}\n   */\n  getWordsRange(findAfter) {\n    var endPoint = this.getEndPoint();\n\n    var isNotTextPoint = function(point) {\n      return !dom.isCharPoint(point) && !dom.isSpacePoint(point);\n    };\n\n    if (isNotTextPoint(endPoint)) {\n      return this;\n    }\n\n    var startPoint = dom.prevPointUntil(endPoint, isNotTextPoint);\n\n    if (findAfter) {\n      endPoint = dom.nextPointUntil(endPoint, isNotTextPoint);\n    }\n\n    return new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * returns range for words before cursor that match with a Regex\n   *\n   * example:\n   *  range: 'hi @Peter Pan'\n   *  regex: '/@[a-z ]+/i'\n   *  return range: '@Peter Pan'\n   *\n   * @param {RegExp} [regex]\n   * @return {WrappedRange|null}\n   */\n  getWordsMatchRange(regex) {\n    var endPoint = this.getEndPoint();\n\n    var startPoint = dom.prevPointUntil(endPoint, function(point) {\n      if (!dom.isCharPoint(point) && !dom.isSpacePoint(point)) {\n        return true;\n      }\n      var rng = new WrappedRange(\n        point.node,\n        point.offset,\n        endPoint.node,\n        endPoint.offset\n      );\n      var result = regex.exec(rng.toString());\n      return result && result.index === 0;\n    });\n\n    var rng = new WrappedRange(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n\n    var text = rng.toString();\n    var result = regex.exec(text);\n\n    if (result && result[0].length === text.length) {\n      return rng;\n    } else {\n      return null;\n    }\n  }\n\n  /**\n   * create offsetPath bookmark\n   *\n   * @param {Node} editable\n   */\n  bookmark(editable) {\n    return {\n      s: {\n        path: dom.makeOffsetPath(editable, this.sc),\n        offset: this.so,\n      },\n      e: {\n        path: dom.makeOffsetPath(editable, this.ec),\n        offset: this.eo,\n      },\n    };\n  }\n\n  /**\n   * create offsetPath bookmark base on paragraph\n   *\n   * @param {Node[]} paras\n   */\n  paraBookmark(paras) {\n    return {\n      s: {\n        path: lists.tail(dom.makeOffsetPath(lists.head(paras), this.sc)),\n        offset: this.so,\n      },\n      e: {\n        path: lists.tail(dom.makeOffsetPath(lists.last(paras), this.ec)),\n        offset: this.eo,\n      },\n    };\n  }\n\n  /**\n   * getClientRects\n   * @return {Rect[]}\n   */\n  getClientRects() {\n    const nativeRng = this.nativeRange();\n    return nativeRng.getClientRects();\n  }\n}\n\n/**\n * Data structure\n *  * BoundaryPoint: a point of dom tree\n *  * BoundaryPoints: two boundaryPoints corresponding to the start and the end of the Range\n *\n * See to http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position\n */\nexport default {\n  /**\n   * create Range Object From arguments or Browser Selection\n   *\n   * @param {Node} sc - start container\n   * @param {Number} so - start offset\n   * @param {Node} ec - end container\n   * @param {Number} eo - end offset\n   * @return {WrappedRange}\n   */\n  create: function(sc, so, ec, eo) {\n    if (arguments.length === 4) {\n      return new WrappedRange(sc, so, ec, eo);\n    } else if (arguments.length === 2) { // collapsed\n      ec = sc;\n      eo = so;\n      return new WrappedRange(sc, so, ec, eo);\n    } else {\n      let wrappedRange = this.createFromSelection();\n\n      if (!wrappedRange && arguments.length === 1) {\n        let bodyElement = arguments[0];\n        if (dom.isEditable(bodyElement)) {\n          bodyElement = bodyElement.lastChild;\n        }\n        return this.createFromBodyElement(bodyElement, dom.emptyPara === arguments[0].innerHTML);\n      }\n      return wrappedRange;\n    }\n  },\n\n  createFromBodyElement: function(bodyElement, isCollapseToStart = false) {\n    var wrappedRange = this.createFromNode(bodyElement);\n    return wrappedRange.collapse(isCollapseToStart);\n  },\n\n  createFromSelection: function() {\n    let sc, so, ec, eo;\n    if (env.isW3CRangeSupport) {\n      const selection = document.getSelection();\n      if (!selection || selection.rangeCount === 0) {\n        return null;\n      } else if (dom.isBody(selection.anchorNode)) {\n        // Firefox: returns entire body as range on initialization.\n        // We won't never need it.\n        return null;\n      }\n\n      const nativeRng = selection.getRangeAt(0);\n      sc = nativeRng.startContainer;\n      so = nativeRng.startOffset;\n      ec = nativeRng.endContainer;\n      eo = nativeRng.endOffset;\n    } else { // IE8: TextRange\n      const textRange = document.selection.createRange();\n      const textRangeEnd = textRange.duplicate();\n      textRangeEnd.collapse(false);\n      const textRangeStart = textRange;\n      textRangeStart.collapse(true);\n\n      let startPoint = textRangeToPoint(textRangeStart, true);\n      let endPoint = textRangeToPoint(textRangeEnd, false);\n\n      // same visible point case: range was collapsed.\n      if (dom.isText(startPoint.node) && dom.isLeftEdgePoint(startPoint) &&\n        dom.isTextNode(endPoint.node) && dom.isRightEdgePoint(endPoint) &&\n        endPoint.node.nextSibling === startPoint.node) {\n        startPoint = endPoint;\n      }\n\n      sc = startPoint.cont;\n      so = startPoint.offset;\n      ec = endPoint.cont;\n      eo = endPoint.offset;\n    }\n\n    return new WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from node\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNode: function(node) {\n    let sc = node;\n    let so = 0;\n    let ec = node;\n    let eo = dom.nodeLength(ec);\n\n    // browsers can't target a picture or void node\n    if (dom.isVoid(sc)) {\n      so = dom.listPrev(sc).length - 1;\n      sc = sc.parentNode;\n    }\n    if (dom.isBR(ec)) {\n      eo = dom.listPrev(ec).length - 1;\n      ec = ec.parentNode;\n    } else if (dom.isVoid(ec)) {\n      eo = dom.listPrev(ec).length;\n      ec = ec.parentNode;\n    }\n\n    return this.create(sc, so, ec, eo);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeBefore: function(node) {\n    return this.createFromNode(node).collapse(true);\n  },\n\n  /**\n   * create WrappedRange from node after position\n   *\n   * @param {Node} node\n   * @return {WrappedRange}\n   */\n  createFromNodeAfter: function(node) {\n    return this.createFromNode(node).collapse();\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from bookmark\n   *\n   * @param {Node} editable\n   * @param {Object} bookmark\n   * @return {WrappedRange}\n   */\n  createFromBookmark: function(editable, bookmark) {\n    const sc = dom.fromOffsetPath(editable, bookmark.s.path);\n    const so = bookmark.s.offset;\n    const ec = dom.fromOffsetPath(editable, bookmark.e.path);\n    const eo = bookmark.e.offset;\n    return new WrappedRange(sc, so, ec, eo);\n  },\n\n  /**\n   * @method\n   *\n   * create WrappedRange from paraBookmark\n   *\n   * @param {Object} bookmark\n   * @param {Node[]} paras\n   * @return {WrappedRange}\n   */\n  createFromParaBookmark: function(bookmark, paras) {\n    const so = bookmark.s.offset;\n    const eo = bookmark.e.offset;\n    const sc = dom.fromOffsetPath(lists.head(paras), bookmark.s.path);\n    const ec = dom.fromOffsetPath(lists.last(paras), bookmark.e.path);\n\n    return new WrappedRange(sc, so, ec, eo);\n  },\n};\n","import lists from './lists';\nimport func from './func';\n\nconst KEY_MAP = {\n  'BACKSPACE': 8,\n  'TAB': 9,\n  'ENTER': 13,\n  'ESCAPE': 27,\n  'SPACE': 32,\n  'DELETE': 46,\n\n  // Arrow\n  'LEFT': 37,\n  'UP': 38,\n  'RIGHT': 39,\n  'DOWN': 40,\n\n  // Number: 0-9\n  'NUM0': 48,\n  'NUM1': 49,\n  'NUM2': 50,\n  'NUM3': 51,\n  'NUM4': 52,\n  'NUM5': 53,\n  'NUM6': 54,\n  'NUM7': 55,\n  'NUM8': 56,\n\n  // Alphabet: a-z\n  'B': 66,\n  'E': 69,\n  'I': 73,\n  'J': 74,\n  'K': 75,\n  'L': 76,\n  'R': 82,\n  'S': 83,\n  'U': 85,\n  'V': 86,\n  'Y': 89,\n  'Z': 90,\n\n  'SLASH': 191,\n  'LEFTBRACKET': 219,\n  'BACKSLASH': 220,\n  'RIGHTBRACKET': 221,\n\n  // Navigation\n  'HOME': 36,\n  'END': 35,\n  'PAGEUP': 33,\n  'PAGEDOWN': 34,\n};\n\n/**\n * @class core.key\n *\n * Object for keycodes.\n *\n * @singleton\n * @alternateClassName key\n */\nexport default {\n  /**\n   * @method isEdit\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isEdit: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.BACKSPACE,\n      KEY_MAP.TAB,\n      KEY_MAP.ENTER,\n      KEY_MAP.SPACE,\n      KEY_MAP.DELETE,\n    ], keyCode);\n  },\n  /**\n   * @method isMove\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isMove: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.LEFT,\n      KEY_MAP.UP,\n      KEY_MAP.RIGHT,\n      KEY_MAP.DOWN,\n    ], keyCode);\n  },\n  /**\n   * @method isNavigation\n   *\n   * @param {Number} keyCode\n   * @return {Boolean}\n   */\n  isNavigation: (keyCode) => {\n    return lists.contains([\n      KEY_MAP.HOME,\n      KEY_MAP.END,\n      KEY_MAP.PAGEUP,\n      KEY_MAP.PAGEDOWN,\n    ], keyCode);\n  },\n  /**\n   * @property {Object} nameFromCode\n   * @property {String} nameFromCode.8 \"BACKSPACE\"\n   */\n  nameFromCode: func.invertObject(KEY_MAP),\n  code: KEY_MAP,\n};\n","import $ from 'jquery';\n\n/**\n * @method readFileAsDataURL\n *\n * read contents of file as representing URL\n *\n * @param {File} file\n * @return {Promise} - then: dataUrl\n */\nexport function readFileAsDataURL(file) {\n  return $.Deferred((deferred) => {\n    $.extend(new FileReader(), {\n      onload: (e) => {\n        const dataURL = e.target.result;\n        deferred.resolve(dataURL);\n      },\n      onerror: (err) => {\n        deferred.reject(err);\n      },\n    }).readAsDataURL(file);\n  }).promise();\n}\n\n/**\n * @method createImage\n *\n * create `<image>` from url string\n *\n * @param {String} url\n * @return {Promise} - then: $image\n */\nexport function createImage(url) {\n  return $.Deferred((deferred) => {\n    const $img = $('<img>');\n\n    $img.one('load', () => {\n      $img.off('error abort');\n      deferred.resolve($img);\n    }).one('error abort', () => {\n      $img.off('load').detach();\n      deferred.reject($img);\n    }).css({\n      display: 'none',\n    }).appendTo(document.body).attr('src', url);\n  }).promise();\n}\n","import range from '../core/range';\n\nexport default class History {\n  constructor(context) {\n    this.stack = [];\n    this.stackOffset = -1;\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n    this.editable = this.$editable[0];\n  }\n\n  makeSnapshot() {\n    const rng = range.create(this.editable);\n    const emptyBookmark = { s: { path: [], offset: 0 }, e: { path: [], offset: 0 } };\n\n    return {\n      contents: this.$editable.html(),\n      bookmark: ((rng && rng.isOnEditable()) ? rng.bookmark(this.editable) : emptyBookmark),\n    };\n  }\n\n  applySnapshot(snapshot) {\n    if (snapshot.contents !== null) {\n      this.$editable.html(snapshot.contents);\n    }\n    if (snapshot.bookmark !== null) {\n      range.createFromBookmark(this.editable, snapshot.bookmark).select();\n    }\n  }\n\n  /**\n  * @method rewind\n  * Rewinds the history stack back to the first snapshot taken.\n  * Leaves the stack intact, so that \"Redo\" can still be used.\n  */\n  rewind() {\n    // Create snap shot if not yet recorded\n    if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n      this.recordUndo();\n    }\n\n    // Return to the first available snapshot.\n    this.stackOffset = 0;\n\n    // Apply that snapshot.\n    this.applySnapshot(this.stack[this.stackOffset]);\n  }\n\n  /**\n  *  @method commit\n  *  Resets history stack, but keeps current editor's content.\n  */\n  commit() {\n    // Clear the stack.\n    this.stack = [];\n\n    // Restore stackOffset to its original value.\n    this.stackOffset = -1;\n\n    // Record our first snapshot (of nothing).\n    this.recordUndo();\n  }\n\n  /**\n  * @method reset\n  * Resets the history stack completely; reverting to an empty editor.\n  */\n  reset() {\n    // Clear the stack.\n    this.stack = [];\n\n    // Restore stackOffset to its original value.\n    this.stackOffset = -1;\n\n    // Clear the editable area.\n    this.$editable.html('');\n\n    // Record our first snapshot (of nothing).\n    this.recordUndo();\n  }\n\n  /**\n   * undo\n   */\n  undo() {\n    // Create snap shot if not yet recorded\n    if (this.$editable.html() !== this.stack[this.stackOffset].contents) {\n      this.recordUndo();\n    }\n\n    if (this.stackOffset > 0) {\n      this.stackOffset--;\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n  }\n\n  /**\n   * redo\n   */\n  redo() {\n    if (this.stack.length - 1 > this.stackOffset) {\n      this.stackOffset++;\n      this.applySnapshot(this.stack[this.stackOffset]);\n    }\n  }\n\n  /**\n   * recorded undo\n   */\n  recordUndo() {\n    this.stackOffset++;\n\n    // Wash out stack after stackOffset\n    if (this.stack.length > this.stackOffset) {\n      this.stack = this.stack.slice(0, this.stackOffset);\n    }\n\n    // Create new snapshot and push it to the end\n    this.stack.push(this.makeSnapshot());\n\n    // If the stack size reachs to the limit, then slice it\n    if (this.stack.length > this.context.options.historyLimit) {\n      this.stack.shift();\n      this.stackOffset -= 1;\n    }\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class Style {\n  /**\n   * @method jQueryCSS\n   *\n   * [workaround] for old jQuery\n   * passing an array of style properties to .css()\n   * will result in an object of property-value pairs.\n   * (compability with version < 1.9)\n   *\n   * @private\n   * @param  {jQuery} $obj\n   * @param  {Array} propertyNames - An array of one or more CSS properties.\n   * @return {Object}\n   */\n  jQueryCSS($obj, propertyNames) {\n    if (env.jqueryVersion < 1.9) {\n      const result = {};\n      $.each(propertyNames, (idx, propertyName) => {\n        result[propertyName] = $obj.css(propertyName);\n      });\n      return result;\n    }\n    return $obj.css(propertyNames);\n  }\n\n  /**\n   * returns style object from node\n   *\n   * @param {jQuery} $node\n   * @return {Object}\n   */\n  fromNode($node) {\n    const properties = ['font-family', 'font-size', 'text-align', 'list-style-type', 'line-height'];\n    const styleInfo = this.jQueryCSS($node, properties) || {};\n\n    const fontSize = $node[0].style.fontSize || styleInfo['font-size'];\n\n    styleInfo['font-size'] = parseInt(fontSize, 10);\n    styleInfo['font-size-unit'] = fontSize.match(/[a-z%]+$/);\n\n    return styleInfo;\n  }\n\n  /**\n   * paragraph level style\n   *\n   * @param {WrappedRange} rng\n   * @param {Object} styleInfo\n   */\n  stylePara(rng, styleInfo) {\n    $.each(rng.nodes(dom.isPara, {\n      includeAncestor: true,\n    }), (idx, para) => {\n      $(para).css(styleInfo);\n    });\n  }\n\n  /**\n   * insert and returns styleNodes on range.\n   *\n   * @param {WrappedRange} rng\n   * @param {Object} [options] - options for styleNodes\n   * @param {String} [options.nodeName] - default: `SPAN`\n   * @param {Boolean} [options.expandClosestSibling] - default: `false`\n   * @param {Boolean} [options.onlyPartialContains] - default: `false`\n   * @return {Node[]}\n   */\n  styleNodes(rng, options) {\n    rng = rng.splitText();\n\n    const nodeName = (options && options.nodeName) || 'SPAN';\n    const expandClosestSibling = !!(options && options.expandClosestSibling);\n    const onlyPartialContains = !!(options && options.onlyPartialContains);\n\n    if (rng.isCollapsed()) {\n      return [rng.insertNode(dom.create(nodeName))];\n    }\n\n    let pred = dom.makePredByNodeName(nodeName);\n    const nodes = rng.nodes(dom.isText, {\n      fullyContains: true,\n    }).map((text) => {\n      return dom.singleChildAncestor(text, pred) || dom.wrap(text, nodeName);\n    });\n\n    if (expandClosestSibling) {\n      if (onlyPartialContains) {\n        const nodesInRange = rng.nodes();\n        // compose with partial contains predication\n        pred = func.and(pred, (node) => {\n          return lists.contains(nodesInRange, node);\n        });\n      }\n\n      return nodes.map((node) => {\n        const siblings = dom.withClosestSiblings(node, pred);\n        const head = lists.head(siblings);\n        const tails = lists.tail(siblings);\n        $.each(tails, (idx, elem) => {\n          dom.appendChildNodes(head, elem.childNodes);\n          dom.remove(elem);\n        });\n        return lists.head(siblings);\n      });\n    } else {\n      return nodes;\n    }\n  }\n\n  /**\n   * get current style on cursor\n   *\n   * @param {WrappedRange} rng\n   * @return {Object} - object contains style properties.\n   */\n  current(rng) {\n    const $cont = $(!dom.isElement(rng.sc) ? rng.sc.parentNode : rng.sc);\n    let styleInfo = this.fromNode($cont);\n\n    // document.queryCommandState for toggle state\n    // [workaround] prevent Firefox nsresult: \"0x80004005 (NS_ERROR_FAILURE)\"\n    try {\n      styleInfo = $.extend(styleInfo, {\n        'font-bold': document.queryCommandState('bold') ? 'bold' : 'normal',\n        'font-italic': document.queryCommandState('italic') ? 'italic' : 'normal',\n        'font-underline': document.queryCommandState('underline') ? 'underline' : 'normal',\n        'font-subscript': document.queryCommandState('subscript') ? 'subscript' : 'normal',\n        'font-superscript': document.queryCommandState('superscript') ? 'superscript' : 'normal',\n        'font-strikethrough': document.queryCommandState('strikethrough') ? 'strikethrough' : 'normal',\n        'font-family': document.queryCommandValue('fontname') || styleInfo['font-family'],\n      });\n    } catch (e) {\n      // eslint-disable-next-line\n    }\n\n    // list-style-type to list-style(unordered, ordered)\n    if (!rng.isOnList()) {\n      styleInfo['list-style'] = 'none';\n    } else {\n      const orderedTypes = ['circle', 'disc', 'disc-leading-zero', 'square'];\n      const isUnordered = orderedTypes.indexOf(styleInfo['list-style-type']) > -1;\n      styleInfo['list-style'] = isUnordered ? 'unordered' : 'ordered';\n    }\n\n    const para = dom.ancestor(rng.sc, dom.isPara);\n    if (para && para.style['line-height']) {\n      styleInfo['line-height'] = para.style.lineHeight;\n    } else {\n      const lineHeight = parseInt(styleInfo['line-height'], 10) / parseInt(styleInfo['font-size'], 10);\n      styleInfo['line-height'] = lineHeight.toFixed(1);\n    }\n\n    styleInfo.anchor = rng.isOnAnchor() && dom.ancestor(rng.sc, dom.isAnchor);\n    styleInfo.ancestors = dom.listAncestor(rng.sc, dom.isEditable);\n    styleInfo.range = rng;\n\n    return styleInfo;\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport func from '../core/func';\nimport dom from '../core/dom';\nimport range from '../core/range';\n\nexport default class Bullet {\n  /**\n   * toggle ordered list\n   */\n  insertOrderedList(editable) {\n    this.toggleList('OL', editable);\n  }\n\n  /**\n   * toggle unordered list\n   */\n  insertUnorderedList(editable) {\n    this.toggleList('UL', editable);\n  }\n\n  /**\n   * indent\n   */\n  indent(editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      if (dom.isLi(head)) {\n        const previousList = this.findList(head.previousSibling);\n        if (previousList) {\n          paras\n            .map(para => previousList.appendChild(para));\n        } else {\n          this.wrapList(paras, head.parentNode.nodeName);\n          paras\n            .map((para) => para.parentNode)\n            .map((para) => this.appendToPrevious(para));\n        }\n      } else {\n        $.each(paras, (idx, para) => {\n          $(para).css('marginLeft', (idx, val) => {\n            return (parseInt(val, 10) || 0) + 25;\n          });\n        });\n      }\n    });\n\n    rng.select();\n  }\n\n  /**\n   * outdent\n   */\n  outdent(editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    const paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      if (dom.isLi(head)) {\n        this.releaseList([paras]);\n      } else {\n        $.each(paras, (idx, para) => {\n          $(para).css('marginLeft', (idx, val) => {\n            val = (parseInt(val, 10) || 0);\n            return val > 25 ? val - 25 : '';\n          });\n        });\n      }\n    });\n\n    rng.select();\n  }\n\n  /**\n   * toggle list\n   *\n   * @param {String} listName - OL or UL\n   */\n  toggleList(listName, editable) {\n    const rng = range.create(editable).wrapBodyInlineWithPara();\n\n    let paras = rng.nodes(dom.isPara, { includeAncestor: true });\n    const bookmark = rng.paraBookmark(paras);\n    const clustereds = lists.clusterBy(paras, func.peq2('parentNode'));\n\n    // paragraph to list\n    if (lists.find(paras, dom.isPurePara)) {\n      let wrappedParas = [];\n      $.each(clustereds, (idx, paras) => {\n        wrappedParas = wrappedParas.concat(this.wrapList(paras, listName));\n      });\n      paras = wrappedParas;\n    // list to paragraph or change list style\n    } else {\n      const diffLists = rng.nodes(dom.isList, {\n        includeAncestor: true,\n      }).filter((listNode) => {\n        return !$.nodeName(listNode, listName);\n      });\n\n      if (diffLists.length) {\n        $.each(diffLists, (idx, listNode) => {\n          dom.replace(listNode, listName);\n        });\n      } else {\n        paras = this.releaseList(clustereds, true);\n      }\n    }\n\n    range.createFromParaBookmark(bookmark, paras).select();\n  }\n\n  /**\n   * @param {Node[]} paras\n   * @param {String} listName\n   * @return {Node[]}\n   */\n  wrapList(paras, listName) {\n    const head = lists.head(paras);\n    const last = lists.last(paras);\n\n    const prevList = dom.isList(head.previousSibling) && head.previousSibling;\n    const nextList = dom.isList(last.nextSibling) && last.nextSibling;\n\n    const listNode = prevList || dom.insertAfter(dom.create(listName || 'UL'), last);\n\n    // P to LI\n    paras = paras.map((para) => {\n      return dom.isPurePara(para) ? dom.replace(para, 'LI') : para;\n    });\n\n    // append to list(<ul>, <ol>)\n    dom.appendChildNodes(listNode, paras);\n\n    if (nextList) {\n      dom.appendChildNodes(listNode, lists.from(nextList.childNodes));\n      dom.remove(nextList);\n    }\n\n    return paras;\n  }\n\n  /**\n   * @method releaseList\n   *\n   * @param {Array[]} clustereds\n   * @param {Boolean} isEscapseToBody\n   * @return {Node[]}\n   */\n  releaseList(clustereds, isEscapseToBody) {\n    let releasedParas = [];\n\n    $.each(clustereds, (idx, paras) => {\n      const head = lists.head(paras);\n      const last = lists.last(paras);\n\n      const headList = isEscapseToBody ? dom.lastAncestor(head, dom.isList) : head.parentNode;\n      const parentItem = headList.parentNode;\n\n      if (headList.parentNode.nodeName === 'LI') {\n        paras.map(para => {\n          const newList = this.findNextSiblings(para);\n\n          if (parentItem.nextSibling) {\n            parentItem.parentNode.insertBefore(\n              para,\n              parentItem.nextSibling\n            );\n          } else {\n            parentItem.parentNode.appendChild(para);\n          }\n\n          if (newList.length) {\n            this.wrapList(newList, headList.nodeName);\n            para.appendChild(newList[0].parentNode);\n          }\n        });\n\n        if (headList.children.length === 0) {\n          parentItem.removeChild(headList);\n        }\n\n        if (parentItem.childNodes.length === 0) {\n          parentItem.parentNode.removeChild(parentItem);\n        }\n      } else {\n        const lastList = headList.childNodes.length > 1 ? dom.splitTree(headList, {\n          node: last.parentNode,\n          offset: dom.position(last) + 1,\n        }, {\n          isSkipPaddingBlankHTML: true,\n        }) : null;\n\n        const middleList = dom.splitTree(headList, {\n          node: head.parentNode,\n          offset: dom.position(head),\n        }, {\n          isSkipPaddingBlankHTML: true,\n        });\n\n        paras = isEscapseToBody ? dom.listDescendant(middleList, dom.isLi)\n          : lists.from(middleList.childNodes).filter(dom.isLi);\n\n        // LI to P\n        if (isEscapseToBody || !dom.isList(headList.parentNode)) {\n          paras = paras.map((para) => {\n            return dom.replace(para, 'P');\n          });\n        }\n\n        $.each(lists.from(paras).reverse(), (idx, para) => {\n          dom.insertAfter(para, headList);\n        });\n\n        // remove empty lists\n        const rootLists = lists.compact([headList, middleList, lastList]);\n        $.each(rootLists, (idx, rootList) => {\n          const listNodes = [rootList].concat(dom.listDescendant(rootList, dom.isList));\n          $.each(listNodes.reverse(), (idx, listNode) => {\n            if (!dom.nodeLength(listNode)) {\n              dom.remove(listNode, true);\n            }\n          });\n        });\n      }\n\n      releasedParas = releasedParas.concat(paras);\n    });\n\n    return releasedParas;\n  }\n\n  /**\n   * @method appendToPrevious\n   *\n   * Appends list to previous list item, if\n   * none exist it wraps the list in a new list item.\n   *\n   * @param {HTMLNode} ListItem\n   * @return {HTMLNode}\n   */\n  appendToPrevious(node) {\n    return node.previousSibling\n      ? dom.appendChildNodes(node.previousSibling, [node])\n      : this.wrapList([node], 'LI');\n  }\n\n  /**\n   * @method findList\n   *\n   * Finds an existing list in list item\n   *\n   * @param {HTMLNode} ListItem\n   * @return {Array[]}\n   */\n  findList(node) {\n    return node\n      ? lists.find(node.children, child => ['OL', 'UL'].indexOf(child.nodeName) > -1)\n      : null;\n  }\n\n  /**\n   * @method findNextSiblings\n   *\n   * Finds all list item siblings that follow it\n   *\n   * @param {HTMLNode} ListItem\n   * @return {HTMLNode}\n   */\n  findNextSiblings(node) {\n    const siblings = [];\n    while (node.nextSibling) {\n      siblings.push(node.nextSibling);\n      node = node.nextSibling;\n    }\n    return siblings;\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport Bullet from '../editing/Bullet';\n\n/**\n * @class editing.Typing\n *\n * Typing\n *\n */\nexport default class Typing {\n  constructor(context) {\n    // a Bullet instance to toggle lists off\n    this.bullet = new Bullet();\n    this.options = context.options;\n  }\n\n  /**\n   * insert tab\n   *\n   * @param {WrappedRange} rng\n   * @param {Number} tabsize\n   */\n  insertTab(rng, tabsize) {\n    const tab = dom.createText(new Array(tabsize + 1).join(dom.NBSP_CHAR));\n    rng = rng.deleteContents();\n    rng.insertNode(tab, true);\n\n    rng = range.create(tab, tabsize);\n    rng.select();\n  }\n\n  /**\n   * insert paragraph\n   *\n   * @param {jQuery} $editable\n   * @param {WrappedRange} rng Can be used in unit tests to \"mock\" the range\n   *\n   * blockquoteBreakingLevel\n   *   0 - No break, the new paragraph remains inside the quote\n   *   1 - Break the first blockquote in the ancestors list\n   *   2 - Break all blockquotes, so that the new paragraph is not quoted (this is the default)\n   */\n  insertParagraph(editable, rng) {\n    rng = rng || range.create(editable);\n\n    // deleteContents on range.\n    rng = rng.deleteContents();\n\n    // Wrap range if it needs to be wrapped by paragraph\n    rng = rng.wrapBodyInlineWithPara();\n\n    // finding paragraph\n    const splitRoot = dom.ancestor(rng.sc, dom.isPara);\n\n    let nextPara;\n    // on paragraph: split paragraph\n    if (splitRoot) {\n      // if it is an empty line with li\n      if (dom.isLi(splitRoot) && (dom.isEmpty(splitRoot) || dom.deepestChildIsEmpty(splitRoot))) {\n        // toggle UL/OL and escape\n        this.bullet.toggleList(splitRoot.parentNode.nodeName);\n        return;\n      } else {\n        let blockquote = null;\n        if (this.options.blockquoteBreakingLevel === 1) {\n          blockquote = dom.ancestor(splitRoot, dom.isBlockquote);\n        } else if (this.options.blockquoteBreakingLevel === 2) {\n          blockquote = dom.lastAncestor(splitRoot, dom.isBlockquote);\n        }\n\n        if (blockquote) {\n          // We're inside a blockquote and options ask us to break it\n          nextPara = $(dom.emptyPara)[0];\n          // If the split is right before a <br>, remove it so that there's no \"empty line\"\n          // after the split in the new blockquote created\n          if (dom.isRightEdgePoint(rng.getStartPoint()) && dom.isBR(rng.sc.nextSibling)) {\n            $(rng.sc.nextSibling).remove();\n          }\n          const split = dom.splitTree(blockquote, rng.getStartPoint(), { isDiscardEmptySplits: true });\n          if (split) {\n            split.parentNode.insertBefore(nextPara, split);\n          } else {\n            dom.insertAfter(nextPara, blockquote); // There's no split if we were at the end of the blockquote\n          }\n        } else {\n          nextPara = dom.splitTree(splitRoot, rng.getStartPoint());\n\n          // not a blockquote, just insert the paragraph\n          let emptyAnchors = dom.listDescendant(splitRoot, dom.isEmptyAnchor);\n          emptyAnchors = emptyAnchors.concat(dom.listDescendant(nextPara, dom.isEmptyAnchor));\n\n          $.each(emptyAnchors, (idx, anchor) => {\n            dom.remove(anchor);\n          });\n\n          // replace empty heading, pre or custom-made styleTag with P tag\n          if ((dom.isHeading(nextPara) || dom.isPre(nextPara) || dom.isCustomStyleTag(nextPara)) && dom.isEmpty(nextPara)) {\n            nextPara = dom.replace(nextPara, 'p');\n          }\n        }\n      }\n    // no paragraph: insert empty paragraph\n    } else {\n      const next = rng.sc.childNodes[rng.so];\n      nextPara = $(dom.emptyPara)[0];\n      if (next) {\n        rng.sc.insertBefore(nextPara, next);\n      } else {\n        rng.sc.appendChild(nextPara);\n      }\n    }\n\n    range.create(nextPara, 0).normalize().select().scrollIntoView(editable);\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport lists from '../core/lists';\n\n/**\n * @class Create a virtual table to create what actions to do in change.\n * @param {object} startPoint Cell selected to apply change.\n * @param {enum} where  Where change will be applied Row or Col. Use enum: TableResultAction.where\n * @param {enum} action Action to be applied. Use enum: TableResultAction.requestAction\n * @param {object} domTable Dom element of table to make changes.\n */\nconst TableResultAction = function(startPoint, where, action, domTable) {\n  const _startPoint = { 'colPos': 0, 'rowPos': 0 };\n  const _virtualTable = [];\n  const _actionCellList = [];\n\n  /// ///////////////////////////////////////////\n  // Private functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Set the startPoint of action.\n   */\n  function setStartPoint() {\n    if (!startPoint || !startPoint.tagName || (startPoint.tagName.toLowerCase() !== 'td' && startPoint.tagName.toLowerCase() !== 'th')) {\n      // Impossible to identify start Cell point\n      return;\n    }\n    _startPoint.colPos = startPoint.cellIndex;\n    if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n      // Impossible to identify start Row point\n      return;\n    }\n    _startPoint.rowPos = startPoint.parentElement.rowIndex;\n  }\n\n  /**\n   * Define virtual table position info object.\n   *\n   * @param {int} rowIndex Index position in line of virtual table.\n   * @param {int} cellIndex Index position in column of virtual table.\n   * @param {object} baseRow Row affected by this position.\n   * @param {object} baseCell Cell affected by this position.\n   * @param {bool} isSpan Inform if it is an span cell/row.\n   */\n  function setVirtualTablePosition(rowIndex, cellIndex, baseRow, baseCell, isRowSpan, isColSpan, isVirtualCell) {\n    const objPosition = {\n      'baseRow': baseRow,\n      'baseCell': baseCell,\n      'isRowSpan': isRowSpan,\n      'isColSpan': isColSpan,\n      'isVirtual': isVirtualCell,\n    };\n    if (!_virtualTable[rowIndex]) {\n      _virtualTable[rowIndex] = [];\n    }\n    _virtualTable[rowIndex][cellIndex] = objPosition;\n  }\n\n  /**\n   * Create action cell object.\n   *\n   * @param {object} virtualTableCellObj Object of specific position on virtual table.\n   * @param {enum} resultAction Action to be applied in that item.\n   */\n  function getActionCell(virtualTableCellObj, resultAction, virtualRowPosition, virtualColPosition) {\n    return {\n      'baseCell': virtualTableCellObj.baseCell,\n      'action': resultAction,\n      'virtualTable': {\n        'rowIndex': virtualRowPosition,\n        'cellIndex': virtualColPosition,\n      },\n    };\n  }\n\n  /**\n   * Recover free index of row to append Cell.\n   *\n   * @param {int} rowIndex Index of row to find free space.\n   * @param {int} cellIndex Index of cell to find free space in table.\n   */\n  function recoverCellIndex(rowIndex, cellIndex) {\n    if (!_virtualTable[rowIndex]) {\n      return cellIndex;\n    }\n    if (!_virtualTable[rowIndex][cellIndex]) {\n      return cellIndex;\n    }\n\n    let newCellIndex = cellIndex;\n    while (_virtualTable[rowIndex][newCellIndex]) {\n      newCellIndex++;\n      if (!_virtualTable[rowIndex][newCellIndex]) {\n        return newCellIndex;\n      }\n    }\n  }\n\n  /**\n   * Recover info about row and cell and add information to virtual table.\n   *\n   * @param {object} row Row to recover information.\n   * @param {object} cell Cell to recover information.\n   */\n  function addCellInfoToVirtual(row, cell) {\n    const cellIndex = recoverCellIndex(row.rowIndex, cell.cellIndex);\n    const cellHasColspan = (cell.colSpan > 1);\n    const cellHasRowspan = (cell.rowSpan > 1);\n    const isThisSelectedCell = (row.rowIndex === _startPoint.rowPos && cell.cellIndex === _startPoint.colPos);\n    setVirtualTablePosition(row.rowIndex, cellIndex, row, cell, cellHasRowspan, cellHasColspan, false);\n\n    // Add span rows to virtual Table.\n    const rowspanNumber = cell.attributes.rowSpan ? parseInt(cell.attributes.rowSpan.value, 10) : 0;\n    if (rowspanNumber > 1) {\n      for (let rp = 1; rp < rowspanNumber; rp++) {\n        const rowspanIndex = row.rowIndex + rp;\n        adjustStartPoint(rowspanIndex, cellIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(rowspanIndex, cellIndex, row, cell, true, cellHasColspan, true);\n      }\n    }\n\n    // Add span cols to virtual table.\n    const colspanNumber = cell.attributes.colSpan ? parseInt(cell.attributes.colSpan.value, 10) : 0;\n    if (colspanNumber > 1) {\n      for (let cp = 1; cp < colspanNumber; cp++) {\n        const cellspanIndex = recoverCellIndex(row.rowIndex, (cellIndex + cp));\n        adjustStartPoint(row.rowIndex, cellspanIndex, cell, isThisSelectedCell);\n        setVirtualTablePosition(row.rowIndex, cellspanIndex, row, cell, cellHasRowspan, true, true);\n      }\n    }\n  }\n\n  /**\n   * Process validation and adjust of start point if needed\n   *\n   * @param {int} rowIndex\n   * @param {int} cellIndex\n   * @param {object} cell\n   * @param {bool} isSelectedCell\n   */\n  function adjustStartPoint(rowIndex, cellIndex, cell, isSelectedCell) {\n    if (rowIndex === _startPoint.rowPos && _startPoint.colPos >= cell.cellIndex && cell.cellIndex <= cellIndex && !isSelectedCell) {\n      _startPoint.colPos++;\n    }\n  }\n\n  /**\n   * Create virtual table of cells with all cells, including span cells.\n   */\n  function createVirtualTable() {\n    const rows = domTable.rows;\n    for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n      const cells = rows[rowIndex].cells;\n      for (let cellIndex = 0; cellIndex < cells.length; cellIndex++) {\n        addCellInfoToVirtual(rows[rowIndex], cells[cellIndex]);\n      }\n    }\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getDeleteResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (!cell.isVirtual && cell.isRowSpan) {\n          return TableResultAction.resultAction.AddCell;\n        } else if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SubtractSpanCount;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.RemoveCell;\n  }\n\n  /**\n   * Get action to be applied on the cell.\n   *\n   * @param {object} cell virtual table cell to apply action\n   */\n  function getAddResultActionToCell(cell) {\n    switch (where) {\n      case TableResultAction.where.Column:\n        if (cell.isColSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isRowSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n      case TableResultAction.where.Row:\n        if (cell.isRowSpan) {\n          return TableResultAction.resultAction.SumSpanCount;\n        } else if (cell.isColSpan && cell.isVirtual) {\n          return TableResultAction.resultAction.Ignore;\n        }\n        break;\n    }\n    return TableResultAction.resultAction.AddCell;\n  }\n\n  function init() {\n    setStartPoint();\n    createVirtualTable();\n  }\n\n  /// ///////////////////////////////////////////\n  // Public functions\n  /// ///////////////////////////////////////////\n\n  /**\n   * Recover array os what to do in table.\n   */\n  this.getActionList = function() {\n    const fixedRow = (where === TableResultAction.where.Row) ? _startPoint.rowPos : -1;\n    const fixedCol = (where === TableResultAction.where.Column) ? _startPoint.colPos : -1;\n\n    let actualPosition = 0;\n    let canContinue = true;\n    while (canContinue) {\n      const rowPosition = (fixedRow >= 0) ? fixedRow : actualPosition;\n      const colPosition = (fixedCol >= 0) ? fixedCol : actualPosition;\n      const row = _virtualTable[rowPosition];\n      if (!row) {\n        canContinue = false;\n        return _actionCellList;\n      }\n      const cell = row[colPosition];\n      if (!cell) {\n        canContinue = false;\n        return _actionCellList;\n      }\n\n      // Define action to be applied in this cell\n      let resultAction = TableResultAction.resultAction.Ignore;\n      switch (action) {\n        case TableResultAction.requestAction.Add:\n          resultAction = getAddResultActionToCell(cell);\n          break;\n        case TableResultAction.requestAction.Delete:\n          resultAction = getDeleteResultActionToCell(cell);\n          break;\n      }\n      _actionCellList.push(getActionCell(cell, resultAction, rowPosition, colPosition));\n      actualPosition++;\n    }\n\n    return _actionCellList;\n  };\n\n  init();\n};\n/**\n*\n* Where action occours enum.\n*/\nTableResultAction.where = { 'Row': 0, 'Column': 1 };\n/**\n*\n* Requested action to apply enum.\n*/\nTableResultAction.requestAction = { 'Add': 0, 'Delete': 1 };\n/**\n*\n* Result action to be executed enum.\n*/\nTableResultAction.resultAction = { 'Ignore': 0, 'SubtractSpanCount': 1, 'RemoveCell': 2, 'AddCell': 3, 'SumSpanCount': 4 };\n\n/**\n *\n * @class editing.Table\n *\n * Table\n *\n */\nexport default class Table {\n  /**\n   * handle tab key\n   *\n   * @param {WrappedRange} rng\n   * @param {Boolean} isShift\n   */\n  tab(rng, isShift) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const table = dom.ancestor(cell, dom.isTable);\n    const cells = dom.listDescendant(table, dom.isCell);\n\n    const nextCell = lists[isShift ? 'prev' : 'next'](cells, cell);\n    if (nextCell) {\n      range.create(nextCell, 0).select();\n    }\n  }\n\n  /**\n   * Add a new row\n   *\n   * @param {WrappedRange} rng\n   * @param {String} position (top/bottom)\n   * @return {Node}\n   */\n  addRow(rng, position) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n\n    const currentTr = $(cell).closest('tr');\n    const trAttributes = this.recoverAttributes(currentTr);\n    const html = $('<tr' + trAttributes + '></tr>');\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n      TableResultAction.requestAction.Add, $(currentTr).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let idCell = 0; idCell < actions.length; idCell++) {\n      const currentCell = actions[idCell];\n      const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n      switch (currentCell.action) {\n        case TableResultAction.resultAction.AddCell:\n          html.append('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          break;\n        case TableResultAction.resultAction.SumSpanCount:\n          {\n            if (position === 'top') {\n              const baseCellTr = currentCell.baseCell.parent;\n              const isTopFromRowSpan = (!baseCellTr ? 0 : currentCell.baseCell.closest('tr').rowIndex) <= currentTr[0].rowIndex;\n              if (isTopFromRowSpan) {\n                const newTd = $('<div></div>').append($('<td' + tdAttributes + '>' + dom.blank + '</td>').removeAttr('rowspan')).html();\n                html.append(newTd);\n                break;\n              }\n            }\n            let rowspanNumber = parseInt(currentCell.baseCell.rowSpan, 10);\n            rowspanNumber++;\n            currentCell.baseCell.setAttribute('rowSpan', rowspanNumber);\n          }\n          break;\n      }\n    }\n\n    if (position === 'top') {\n      currentTr.before(html);\n    } else {\n      const cellHasRowspan = (cell.rowSpan > 1);\n      if (cellHasRowspan) {\n        const lastTrIndex = currentTr[0].rowIndex + (cell.rowSpan - 2);\n        $($(currentTr).parent().find('tr')[lastTrIndex]).after($(html));\n        return;\n      }\n      currentTr.after(html);\n    }\n  }\n\n  /**\n   * Add a new col\n   *\n   * @param {WrappedRange} rng\n   * @param {String} position (left/right)\n   * @return {Node}\n   */\n  addCol(rng, position) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const rowsGroup = $(row).siblings();\n    rowsGroup.push(row);\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n      TableResultAction.requestAction.Add, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      const currentCell = actions[actionIndex];\n      const tdAttributes = this.recoverAttributes(currentCell.baseCell);\n      switch (currentCell.action) {\n        case TableResultAction.resultAction.AddCell:\n          if (position === 'right') {\n            $(currentCell.baseCell).after('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          } else {\n            $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          }\n          break;\n        case TableResultAction.resultAction.SumSpanCount:\n          if (position === 'right') {\n            let colspanNumber = parseInt(currentCell.baseCell.colSpan, 10);\n            colspanNumber++;\n            currentCell.baseCell.setAttribute('colSpan', colspanNumber);\n          } else {\n            $(currentCell.baseCell).before('<td' + tdAttributes + '>' + dom.blank + '</td>');\n          }\n          break;\n      }\n    }\n  }\n\n  /*\n  * Copy attributes from element.\n  *\n  * @param {object} Element to recover attributes.\n  * @return {string} Copied string elements.\n  */\n  recoverAttributes(el) {\n    let resultStr = '';\n\n    if (!el) {\n      return resultStr;\n    }\n\n    const attrList = el.attributes || [];\n\n    for (let i = 0; i < attrList.length; i++) {\n      if (attrList[i].name.toLowerCase() === 'id') {\n        continue;\n      }\n\n      if (attrList[i].specified) {\n        resultStr += ' ' + attrList[i].name + '=\\'' + attrList[i].value + '\\'';\n      }\n    }\n\n    return resultStr;\n  }\n\n  /**\n   * Delete current row\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteRow(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const cellPos = row.children('td, th').index($(cell));\n    const rowPos = row[0].rowIndex;\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Row,\n      TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      if (!actions[actionIndex]) {\n        continue;\n      }\n\n      const baseCell = actions[actionIndex].baseCell;\n      const virtualPosition = actions[actionIndex].virtualTable;\n      const hasRowspan = (baseCell.rowSpan && baseCell.rowSpan > 1);\n      let rowspanNumber = (hasRowspan) ? parseInt(baseCell.rowSpan, 10) : 0;\n      switch (actions[actionIndex].action) {\n        case TableResultAction.resultAction.Ignore:\n          continue;\n        case TableResultAction.resultAction.AddCell:\n          {\n            const nextRow = row.next('tr')[0];\n            if (!nextRow) { continue; }\n            const cloneRow = row[0].cells[cellPos];\n            if (hasRowspan) {\n              if (rowspanNumber > 2) {\n                rowspanNumber--;\n                nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                nextRow.cells[cellPos].setAttribute('rowSpan', rowspanNumber);\n                nextRow.cells[cellPos].innerHTML = '';\n              } else if (rowspanNumber === 2) {\n                nextRow.insertBefore(cloneRow, nextRow.cells[cellPos]);\n                nextRow.cells[cellPos].removeAttribute('rowSpan');\n                nextRow.cells[cellPos].innerHTML = '';\n              }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.SubtractSpanCount:\n          if (hasRowspan) {\n            if (rowspanNumber > 2) {\n              rowspanNumber--;\n              baseCell.setAttribute('rowSpan', rowspanNumber);\n              if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n            } else if (rowspanNumber === 2) {\n              baseCell.removeAttribute('rowSpan');\n              if (virtualPosition.rowIndex !== rowPos && baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.RemoveCell:\n          // Do not need remove cell because row will be deleted.\n          continue;\n      }\n    }\n    row.remove();\n  }\n\n  /**\n   * Delete current col\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteCol(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    const row = $(cell).closest('tr');\n    const cellPos = row.children('td, th').index($(cell));\n\n    const vTable = new TableResultAction(cell, TableResultAction.where.Column,\n      TableResultAction.requestAction.Delete, $(row).closest('table')[0]);\n    const actions = vTable.getActionList();\n\n    for (let actionIndex = 0; actionIndex < actions.length; actionIndex++) {\n      if (!actions[actionIndex]) {\n        continue;\n      }\n      switch (actions[actionIndex].action) {\n        case TableResultAction.resultAction.Ignore:\n          continue;\n        case TableResultAction.resultAction.SubtractSpanCount:\n          {\n            const baseCell = actions[actionIndex].baseCell;\n            const hasColspan = (baseCell.colSpan && baseCell.colSpan > 1);\n            if (hasColspan) {\n              let colspanNumber = (baseCell.colSpan) ? parseInt(baseCell.colSpan, 10) : 0;\n              if (colspanNumber > 2) {\n                colspanNumber--;\n                baseCell.setAttribute('colSpan', colspanNumber);\n                if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n              } else if (colspanNumber === 2) {\n                baseCell.removeAttribute('colSpan');\n                if (baseCell.cellIndex === cellPos) { baseCell.innerHTML = ''; }\n              }\n            }\n          }\n          continue;\n        case TableResultAction.resultAction.RemoveCell:\n          dom.remove(actions[actionIndex].baseCell, true);\n          continue;\n      }\n    }\n  }\n\n  /**\n   * create empty table element\n   *\n   * @param {Number} rowCount\n   * @param {Number} colCount\n   * @return {Node}\n   */\n  createTable(colCount, rowCount, options) {\n    const tds = [];\n    let tdHTML;\n    for (let idxCol = 0; idxCol < colCount; idxCol++) {\n      tds.push('<td>' + dom.blank + '</td>');\n    }\n    tdHTML = tds.join('');\n\n    const trs = [];\n    let trHTML;\n    for (let idxRow = 0; idxRow < rowCount; idxRow++) {\n      trs.push('<tr>' + tdHTML + '</tr>');\n    }\n    trHTML = trs.join('');\n    const $table = $('<table>' + trHTML + '</table>');\n    if (options && options.tableClassName) {\n      $table.addClass(options.tableClassName);\n    }\n\n    return $table[0];\n  }\n\n  /**\n   * Delete current table\n   *\n   * @param {WrappedRange} rng\n   * @return {Node}\n   */\n  deleteTable(rng) {\n    const cell = dom.ancestor(rng.commonAncestor(), dom.isCell);\n    $(cell).closest('table').remove();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport { readFileAsDataURL, createImage } from '../core/async';\nimport History from '../editing/History';\nimport Style from '../editing/Style';\nimport Typing from '../editing/Typing';\nimport Table from '../editing/Table';\nimport Bullet from '../editing/Bullet';\n\nconst KEY_BOGUS = 'bogus';\n\n/**\n * @class Editor\n */\nexport default class Editor {\n  constructor(context) {\n    this.context = context;\n\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    this.editable = this.$editable[0];\n    this.lastRange = null;\n    this.snapshot = null;\n\n    this.style = new Style();\n    this.table = new Table();\n    this.typing = new Typing(context);\n    this.bullet = new Bullet();\n    this.history = new History(context);\n\n    this.context.memo('help.escape', this.lang.help.escape);\n    this.context.memo('help.undo', this.lang.help.undo);\n    this.context.memo('help.redo', this.lang.help.redo);\n    this.context.memo('help.tab', this.lang.help.tab);\n    this.context.memo('help.untab', this.lang.help.untab);\n    this.context.memo('help.insertParagraph', this.lang.help.insertParagraph);\n    this.context.memo('help.insertOrderedList', this.lang.help.insertOrderedList);\n    this.context.memo('help.insertUnorderedList', this.lang.help.insertUnorderedList);\n    this.context.memo('help.indent', this.lang.help.indent);\n    this.context.memo('help.outdent', this.lang.help.outdent);\n    this.context.memo('help.formatPara', this.lang.help.formatPara);\n    this.context.memo('help.insertHorizontalRule', this.lang.help.insertHorizontalRule);\n    this.context.memo('help.fontName', this.lang.help.fontName);\n\n    // native commands(with execCommand), generate function for execCommand\n    const commands = [\n      'bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript',\n      'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull',\n      'formatBlock', 'removeFormat', 'backColor',\n    ];\n\n    for (let idx = 0, len = commands.length; idx < len; idx++) {\n      this[commands[idx]] = ((sCmd) => {\n        return (value) => {\n          this.beforeCommand();\n          document.execCommand(sCmd, false, value);\n          this.afterCommand(true);\n        };\n      })(commands[idx]);\n      this.context.memo('help.' + commands[idx], this.lang.help[commands[idx]]);\n    }\n\n    this.fontName = this.wrapCommand((value) => {\n      return this.fontStyling('font-family', env.validFontName(value));\n    });\n\n    this.fontSize = this.wrapCommand((value) => {\n      const unit = this.currentStyle()['font-size-unit'];\n      return this.fontStyling('font-size', value + unit);\n    });\n\n    this.fontSizeUnit = this.wrapCommand((value) => {\n      const size = this.currentStyle()['font-size'];\n      return this.fontStyling('font-size', size + value);\n    });\n\n    for (let idx = 1; idx <= 6; idx++) {\n      this['formatH' + idx] = ((idx) => {\n        return () => {\n          this.formatBlock('H' + idx);\n        };\n      })(idx);\n      this.context.memo('help.formatH' + idx, this.lang.help['formatH' + idx]);\n    }\n\n    this.insertParagraph = this.wrapCommand(() => {\n      this.typing.insertParagraph(this.editable);\n    });\n\n    this.insertOrderedList = this.wrapCommand(() => {\n      this.bullet.insertOrderedList(this.editable);\n    });\n\n    this.insertUnorderedList = this.wrapCommand(() => {\n      this.bullet.insertUnorderedList(this.editable);\n    });\n\n    this.indent = this.wrapCommand(() => {\n      this.bullet.indent(this.editable);\n    });\n\n    this.outdent = this.wrapCommand(() => {\n      this.bullet.outdent(this.editable);\n    });\n\n    /**\n     * insertNode\n     * insert node\n     * @param {Node} node\n     */\n    this.insertNode = this.wrapCommand((node) => {\n      if (this.isLimited($(node).text().length)) {\n        return;\n      }\n      const rng = this.getLastRange();\n      rng.insertNode(node);\n      this.setLastRange(range.createFromNodeAfter(node).select());\n    });\n\n    /**\n     * insert text\n     * @param {String} text\n     */\n    this.insertText = this.wrapCommand((text) => {\n      if (this.isLimited(text.length)) {\n        return;\n      }\n      const rng = this.getLastRange();\n      const textNode = rng.insertNode(dom.createText(text));\n      this.setLastRange(range.create(textNode, dom.nodeLength(textNode)).select());\n    });\n\n    /**\n     * paste HTML\n     * @param {String} markup\n     */\n    this.pasteHTML = this.wrapCommand((markup) => {\n      if (this.isLimited(markup.length)) {\n        return;\n      }\n      markup = this.context.invoke('codeview.purify', markup);\n      const contents = this.getLastRange().pasteHTML(markup);\n      this.setLastRange(range.createFromNodeAfter(lists.last(contents)).select());\n    });\n\n    /**\n     * formatBlock\n     *\n     * @param {String} tagName\n     */\n    this.formatBlock = this.wrapCommand((tagName, $target) => {\n      const onApplyCustomStyle = this.options.callbacks.onApplyCustomStyle;\n      if (onApplyCustomStyle) {\n        onApplyCustomStyle.call(this, $target, this.context, this.onFormatBlock);\n      } else {\n        this.onFormatBlock(tagName, $target);\n      }\n    });\n\n    /**\n     * insert horizontal rule\n     */\n    this.insertHorizontalRule = this.wrapCommand(() => {\n      const hrNode = this.getLastRange().insertNode(dom.create('HR'));\n      if (hrNode.nextSibling) {\n        this.setLastRange(range.create(hrNode.nextSibling, 0).normalize().select());\n      }\n    });\n\n    /**\n     * lineHeight\n     * @param {String} value\n     */\n    this.lineHeight = this.wrapCommand((value) => {\n      this.style.stylePara(this.getLastRange(), {\n        lineHeight: value,\n      });\n    });\n\n    /**\n     * create link (command)\n     *\n     * @param {Object} linkInfo\n     */\n    this.createLink = this.wrapCommand((linkInfo) => {\n      let linkUrl = linkInfo.url;\n      const linkText = linkInfo.text;\n      const isNewWindow = linkInfo.isNewWindow;\n      const checkProtocol = linkInfo.checkProtocol;\n      let rng = linkInfo.range || this.getLastRange();\n      const additionalTextLength = linkText.length - rng.toString().length;\n      if (additionalTextLength > 0 && this.isLimited(additionalTextLength)) {\n        return;\n      }\n      const isTextChanged = rng.toString() !== linkText;\n\n      // handle spaced urls from input\n      if (typeof linkUrl === 'string') {\n        linkUrl = linkUrl.trim();\n      }\n\n      if (this.options.onCreateLink) {\n        linkUrl = this.options.onCreateLink(linkUrl);\n      } else if (checkProtocol) {\n        // if url doesn't have any protocol and not even a relative or a label, use http:// as default\n        linkUrl = /^([A-Za-z][A-Za-z0-9+-.]*\\:|#|\\/)/.test(linkUrl)\n          ? linkUrl : this.options.defaultProtocol + linkUrl;\n      }\n\n      let anchors = [];\n      if (isTextChanged) {\n        rng = rng.deleteContents();\n        const anchor = rng.insertNode($('<A>' + linkText + '</A>')[0]);\n        anchors.push(anchor);\n      } else {\n        anchors = this.style.styleNodes(rng, {\n          nodeName: 'A',\n          expandClosestSibling: true,\n          onlyPartialContains: true,\n        });\n      }\n\n      $.each(anchors, (idx, anchor) => {\n        $(anchor).attr('href', linkUrl);\n        if (isNewWindow) {\n          $(anchor).attr('target', '_blank');\n        } else {\n          $(anchor).removeAttr('target');\n        }\n      });\n\n      this.setLastRange(\n        this.createRangeFromList(anchors).select()\n      );\n    });\n\n    /**\n     * setting color\n     *\n     * @param {Object} sObjColor  color code\n     * @param {String} sObjColor.foreColor foreground color\n     * @param {String} sObjColor.backColor background color\n     */\n    this.color = this.wrapCommand((colorInfo) => {\n      const foreColor = colorInfo.foreColor;\n      const backColor = colorInfo.backColor;\n\n      if (foreColor) { document.execCommand('foreColor', false, foreColor); }\n      if (backColor) { document.execCommand('backColor', false, backColor); }\n    });\n\n    /**\n     * Set foreground color\n     *\n     * @param {String} colorCode foreground color code\n     */\n    this.foreColor = this.wrapCommand((colorInfo) => {\n      document.execCommand('foreColor', false, colorInfo);\n    });\n\n    /**\n     * insert Table\n     *\n     * @param {String} dimension of table (ex : \"5x5\")\n     */\n    this.insertTable = this.wrapCommand((dim) => {\n      const dimension = dim.split('x');\n\n      const rng = this.getLastRange().deleteContents();\n      rng.insertNode(this.table.createTable(dimension[0], dimension[1], this.options));\n    });\n\n    /**\n     * remove media object and Figure Elements if media object is img with Figure.\n     */\n    this.removeMedia = this.wrapCommand(() => {\n      let $target = $(this.restoreTarget()).parent();\n      if ($target.closest('figure').length) {\n        $target.closest('figure').remove();\n      } else {\n        $target = $(this.restoreTarget()).detach();\n      }\n      this.context.triggerEvent('media.delete', $target, this.$editable);\n    });\n\n    /**\n     * float me\n     *\n     * @param {String} value\n     */\n    this.floatMe = this.wrapCommand((value) => {\n      const $target = $(this.restoreTarget());\n      $target.toggleClass('note-float-left', value === 'left');\n      $target.toggleClass('note-float-right', value === 'right');\n      $target.css('float', (value === 'none' ? '' : value));\n    });\n\n    /**\n     * resize overlay element\n     * @param {String} value\n     */\n    this.resize = this.wrapCommand((value) => {\n      const $target = $(this.restoreTarget());\n      value = parseFloat(value);\n      if (value === 0) {\n        $target.css('width', '');\n      } else {\n        $target.css({\n          width: value * 100 + '%',\n          height: '',\n        });\n      }\n    });\n  }\n\n  initialize() {\n    // bind custom events\n    this.$editable.on('keydown', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        this.context.triggerEvent('enter', event);\n      }\n      this.context.triggerEvent('keydown', event);\n\n      // keep a snapshot to limit text on input event\n      this.snapshot = this.history.makeSnapshot();\n      this.hasKeyShortCut = false;\n      if (!event.isDefaultPrevented()) {\n        if (this.options.shortcuts) {\n          this.hasKeyShortCut = this.handleKeyMap(event);\n        } else {\n          this.preventDefaultEditableShortCuts(event);\n        }\n      }\n      if (this.isLimited(1, event)) {\n        const lastRange = this.getLastRange();\n        if (lastRange.eo - lastRange.so === 0) {\n          return false;\n        }\n      }\n      this.setLastRange();\n\n      // record undo in the key event except keyMap.\n      if (this.options.recordEveryKeystroke) {\n        if (this.hasKeyShortCut === false) {\n          this.history.recordUndo();\n        }\n      }\n    }).on('keyup', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('keyup', event);\n    }).on('focus', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('focus', event);\n    }).on('blur', (event) => {\n      this.context.triggerEvent('blur', event);\n    }).on('mousedown', (event) => {\n      this.context.triggerEvent('mousedown', event);\n    }).on('mouseup', (event) => {\n      this.setLastRange();\n      this.history.recordUndo();\n      this.context.triggerEvent('mouseup', event);\n    }).on('scroll', (event) => {\n      this.context.triggerEvent('scroll', event);\n    }).on('paste', (event) => {\n      this.setLastRange();\n      this.context.triggerEvent('paste', event);\n    }).on('input', () => {\n      // To limit composition characters (e.g. Korean)\n      if (this.isLimited(0) && this.snapshot) {\n        this.history.applySnapshot(this.snapshot);\n      }\n    });\n\n    this.$editable.attr('spellcheck', this.options.spellCheck);\n\n    this.$editable.attr('autocorrect', this.options.spellCheck);\n\n    if (this.options.disableGrammar) {\n      this.$editable.attr('data-gramm', false);\n    }\n\n    // init content before set event\n    this.$editable.html(dom.html(this.$note) || dom.emptyPara);\n\n    this.$editable.on(env.inputEventName, func.debounce(() => {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }, 10));\n\n    this.$editable.on('focusin', (event) => {\n      this.context.triggerEvent('focusin', event);\n    }).on('focusout', (event) => {\n      this.context.triggerEvent('focusout', event);\n    });\n\n    if (this.options.airMode) {\n      if (this.options.overrideContextMenu) {\n        this.$editor.on('contextmenu', (event) => {\n          this.context.triggerEvent('contextmenu', event);\n          return false;\n        });\n      }\n    } else {\n      if (this.options.width) {\n        this.$editor.outerWidth(this.options.width);\n      }\n      if (this.options.height) {\n        this.$editable.outerHeight(this.options.height);\n      }\n      if (this.options.maxHeight) {\n        this.$editable.css('max-height', this.options.maxHeight);\n      }\n      if (this.options.minHeight) {\n        this.$editable.css('min-height', this.options.minHeight);\n      }\n    }\n\n    this.history.recordUndo();\n    this.setLastRange();\n  }\n\n  destroy() {\n    this.$editable.off();\n  }\n\n  handleKeyMap(event) {\n    const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n    const keys = [];\n\n    if (event.metaKey) { keys.push('CMD'); }\n    if (event.ctrlKey && !event.altKey) { keys.push('CTRL'); }\n    if (event.shiftKey) { keys.push('SHIFT'); }\n\n    const keyName = key.nameFromCode[event.keyCode];\n    if (keyName) {\n      keys.push(keyName);\n    }\n\n    const eventName = keyMap[keys.join('+')];\n\n    if (keyName === 'TAB' && !this.options.tabDisable) {\n      this.afterCommand();\n    } else if (eventName) {\n      if (this.context.invoke(eventName) !== false) {\n        event.preventDefault();\n        // if keyMap action was invoked\n        return true;\n      }\n    } else if (key.isEdit(event.keyCode)) {\n      this.afterCommand();\n    }\n    return false;\n  }\n\n  preventDefaultEditableShortCuts(event) {\n    // B(Bold, 66) / I(Italic, 73) / U(Underline, 85)\n    if ((event.ctrlKey || event.metaKey) &&\n      lists.contains([66, 73, 85], event.keyCode)) {\n      event.preventDefault();\n    }\n  }\n\n  isLimited(pad, event) {\n    pad = pad || 0;\n\n    if (typeof event !== 'undefined') {\n      if (key.isMove(event.keyCode) ||\n          key.isNavigation(event.keyCode) ||\n          (event.ctrlKey || event.metaKey) ||\n          lists.contains([key.code.BACKSPACE, key.code.DELETE], event.keyCode)) {\n        return false;\n      }\n    }\n\n    if (this.options.maxTextLength > 0) {\n      if ((this.$editable.text().length + pad) > this.options.maxTextLength) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * create range\n   * @return {WrappedRange}\n   */\n  createRange() {\n    this.focus();\n    this.setLastRange();\n    return this.getLastRange();\n  }\n\n  /**\n   * create a new range from the list of elements\n   *\n   * @param {list} dom element list\n   * @return {WrappedRange}\n   */\n  createRangeFromList(lst) {\n    const startRange = range.createFromNodeBefore(lists.head(lst));\n    const startPoint = startRange.getStartPoint();\n    const endRange = range.createFromNodeAfter(lists.last(lst));\n    const endPoint = endRange.getEndPoint();\n\n    return range.create(\n      startPoint.node,\n      startPoint.offset,\n      endPoint.node,\n      endPoint.offset\n    );\n  }\n\n  /**\n   * set the last range\n   *\n   * if given rng is exist, set rng as the last range\n   * or create a new range at the end of the document\n   *\n   * @param {WrappedRange} rng\n   */\n  setLastRange(rng) {\n    if (rng) {\n      this.lastRange = rng;\n    } else {\n      this.lastRange = range.create(this.editable);\n\n      if ($(this.lastRange.sc).closest('.note-editable').length === 0) {\n        this.lastRange = range.createFromBodyElement(this.editable);\n      }\n    }\n  }\n\n  /**\n   * get the last range\n   *\n   * if there is a saved last range, return it\n   * or create a new range and return it\n   *\n   * @return {WrappedRange}\n   */\n  getLastRange() {\n    if (!this.lastRange) {\n      this.setLastRange();\n    }\n    return this.lastRange;\n  }\n\n  /**\n   * saveRange\n   *\n   * save current range\n   *\n   * @param {Boolean} [thenCollapse=false]\n   */\n  saveRange(thenCollapse) {\n    if (thenCollapse) {\n      this.getLastRange().collapse().select();\n    }\n  }\n\n  /**\n   * restoreRange\n   *\n   * restore lately range\n   */\n  restoreRange() {\n    if (this.lastRange) {\n      this.lastRange.select();\n      this.focus();\n    }\n  }\n\n  saveTarget(node) {\n    this.$editable.data('target', node);\n  }\n\n  clearTarget() {\n    this.$editable.removeData('target');\n  }\n\n  restoreTarget() {\n    return this.$editable.data('target');\n  }\n\n  /**\n   * currentStyle\n   *\n   * current style\n   * @return {Object|Boolean} unfocus\n   */\n  currentStyle() {\n    let rng = range.create();\n    if (rng) {\n      rng = rng.normalize();\n    }\n    return rng ? this.style.current(rng) : this.style.fromNode(this.$editable);\n  }\n\n  /**\n   * style from node\n   *\n   * @param {jQuery} $node\n   * @return {Object}\n   */\n  styleFromNode($node) {\n    return this.style.fromNode($node);\n  }\n\n  /**\n   * undo\n   */\n  undo() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.undo();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /*\n  * commit\n  */\n  commit() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.commit();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /**\n   * redo\n   */\n  redo() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n    this.history.redo();\n    this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n  }\n\n  /**\n   * before command\n   */\n  beforeCommand() {\n    this.context.triggerEvent('before.command', this.$editable.html());\n\n    // Set styleWithCSS before run a command\n    document.execCommand('styleWithCSS', false, this.options.styleWithCSS);\n\n    // keep focus on editable before command execution\n    this.focus();\n  }\n\n  /**\n   * after command\n   * @param {Boolean} isPreventTrigger\n   */\n  afterCommand(isPreventTrigger) {\n    this.normalizeContent();\n    this.history.recordUndo();\n    if (!isPreventTrigger) {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n  }\n\n  /**\n   * handle tab key\n   */\n  tab() {\n    const rng = this.getLastRange();\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.table.tab(rng);\n    } else {\n      if (this.options.tabSize === 0) {\n        return false;\n      }\n\n      if (!this.isLimited(this.options.tabSize)) {\n        this.beforeCommand();\n        this.typing.insertTab(rng, this.options.tabSize);\n        this.afterCommand();\n      }\n    }\n  }\n\n  /**\n   * handle shift+tab key\n   */\n  untab() {\n    const rng = this.getLastRange();\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.table.tab(rng, true);\n    } else {\n      if (this.options.tabSize === 0) {\n        return false;\n      }\n    }\n  }\n\n  /**\n   * run given function between beforeCommand and afterCommand\n   */\n  wrapCommand(fn) {\n    return function() {\n      this.beforeCommand();\n      fn.apply(this, arguments);\n      this.afterCommand();\n    };\n  }\n\n  /**\n   * insert image\n   *\n   * @param {String} src\n   * @param {String|Function} param\n   * @return {Promise}\n   */\n  insertImage(src, param) {\n    return createImage(src, param).then(($image) => {\n      this.beforeCommand();\n\n      if (typeof param === 'function') {\n        param($image);\n      } else {\n        if (typeof param === 'string') {\n          $image.attr('data-filename', param);\n        }\n        $image.css('width', Math.min(this.$editable.width(), $image.width()));\n      }\n\n      $image.show();\n      this.getLastRange().insertNode($image[0]);\n      this.setLastRange(range.createFromNodeAfter($image[0]).select());\n      this.afterCommand();\n    }).fail((e) => {\n      this.context.triggerEvent('image.upload.error', e);\n    });\n  }\n\n  /**\n   * insertImages\n   * @param {File[]} files\n   */\n  insertImagesAsDataURL(files) {\n    $.each(files, (idx, file) => {\n      const filename = file.name;\n      if (this.options.maximumImageFileSize && this.options.maximumImageFileSize < file.size) {\n        this.context.triggerEvent('image.upload.error', this.lang.image.maximumFileSizeError);\n      } else {\n        readFileAsDataURL(file).then((dataURL) => {\n          return this.insertImage(dataURL, filename);\n        }).fail(() => {\n          this.context.triggerEvent('image.upload.error');\n        });\n      }\n    });\n  }\n\n  /**\n   * insertImagesOrCallback\n   * @param {File[]} files\n   */\n  insertImagesOrCallback(files) {\n    const callbacks = this.options.callbacks;\n    // If onImageUpload set,\n    if (callbacks.onImageUpload) {\n      this.context.triggerEvent('image.upload', files);\n      // else insert Image as dataURL\n    } else {\n      this.insertImagesAsDataURL(files);\n    }\n  }\n\n  /**\n   * return selected plain text\n   * @return {String} text\n   */\n  getSelectedText() {\n    let rng = this.getLastRange();\n\n    // if range on anchor, expand range with anchor\n    if (rng.isOnAnchor()) {\n      rng = range.createFromNode(dom.ancestor(rng.sc, dom.isAnchor));\n    }\n\n    return rng.toString();\n  }\n\n  onFormatBlock(tagName, $target) {\n    // [workaround] for MSIE, IE need `<`\n    document.execCommand('FormatBlock', false, env.isMSIE ? '<' + tagName + '>' : tagName);\n\n    // support custom class\n    if ($target && $target.length) {\n      // find the exact element has given tagName\n      if ($target[0].tagName.toUpperCase() !== tagName.toUpperCase()) {\n        $target = $target.find(tagName);\n      }\n\n      if ($target && $target.length) {\n        const className = $target[0].className || '';\n        if (className) {\n          const currentRange = this.createRange();\n\n          const $parent = $([currentRange.sc, currentRange.ec]).closest(tagName);\n          $parent.addClass(className);\n        }\n      }\n    }\n  }\n\n  formatPara() {\n    this.formatBlock('P');\n  }\n\n  fontStyling(target, value) {\n    const rng = this.getLastRange();\n\n    if (rng !== '') {\n      const spans = this.style.styleNodes(rng);\n      this.$editor.find('.note-status-output').html('');\n      $(spans).css(target, value);\n\n      // [workaround] added styled bogus span for style\n      //  - also bogus character needed for cursor position\n      if (rng.isCollapsed()) {\n        const firstSpan = lists.head(spans);\n        if (firstSpan && !dom.nodeLength(firstSpan)) {\n          firstSpan.innerHTML = dom.ZERO_WIDTH_NBSP_CHAR;\n          range.createFromNode(firstSpan.firstChild).select();\n          this.setLastRange();\n          this.$editable.data(KEY_BOGUS, firstSpan);\n        }\n      } else {\n        this.setLastRange(\n          this.createRangeFromList(spans).select()\n        );\n      }\n    } else {\n      const noteStatusOutput = $.now();\n      this.$editor.find('.note-status-output').html('<div id=\"note-status-output-' + noteStatusOutput + '\" class=\"alert alert-info\">' + this.lang.output.noSelection + '</div>');\n      setTimeout(function() { $('#note-status-output-' + noteStatusOutput).remove(); }, 5000);\n    }\n  }\n\n  /**\n   * unlink\n   *\n   * @type command\n   */\n  unlink() {\n    let rng = this.getLastRange();\n    if (rng.isOnAnchor()) {\n      const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n      rng = range.createFromNode(anchor);\n      rng.select();\n      this.setLastRange();\n\n      this.beforeCommand();\n      document.execCommand('unlink');\n      this.afterCommand();\n    }\n  }\n\n  /**\n   * returns link info\n   *\n   * @return {Object}\n   * @return {WrappedRange} return.range\n   * @return {String} return.text\n   * @return {Boolean} [return.isNewWindow=true]\n   * @return {String} [return.url=\"\"]\n   */\n  getLinkInfo() {\n    const rng = this.getLastRange().expand(dom.isAnchor);\n    // Get the first anchor on range(for edit).\n    const $anchor = $(lists.head(rng.nodes(dom.isAnchor)));\n    const linkInfo = {\n      range: rng,\n      text: rng.toString(),\n      url: $anchor.length ? $anchor.attr('href') : '',\n    };\n\n    // When anchor exists,\n    if ($anchor.length) {\n      // Set isNewWindow by checking its target.\n      linkInfo.isNewWindow = $anchor.attr('target') === '_blank';\n    }\n\n    return linkInfo;\n  }\n\n  addRow(position) {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.addRow(rng, position);\n      this.afterCommand();\n    }\n  }\n\n  addCol(position) {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.addCol(rng, position);\n      this.afterCommand();\n    }\n  }\n\n  deleteRow() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteRow(rng);\n      this.afterCommand();\n    }\n  }\n\n  deleteCol() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteCol(rng);\n      this.afterCommand();\n    }\n  }\n\n  deleteTable() {\n    const rng = this.getLastRange(this.$editable);\n    if (rng.isCollapsed() && rng.isOnCell()) {\n      this.beforeCommand();\n      this.table.deleteTable(rng);\n      this.afterCommand();\n    }\n  }\n\n  /**\n   * @param {Position} pos\n   * @param {jQuery} $target - target element\n   * @param {Boolean} [bKeepRatio] - keep ratio\n   */\n  resizeTo(pos, $target, bKeepRatio) {\n    let imageSize;\n    if (bKeepRatio) {\n      const newRatio = pos.y / pos.x;\n      const ratio = $target.data('ratio');\n      imageSize = {\n        width: ratio > newRatio ? pos.x : pos.y / ratio,\n        height: ratio > newRatio ? pos.x * ratio : pos.y,\n      };\n    } else {\n      imageSize = {\n        width: pos.x,\n        height: pos.y,\n      };\n    }\n\n    $target.css(imageSize);\n  }\n\n  /**\n   * returns whether editable area has focus or not.\n   */\n  hasFocus() {\n    return this.$editable.is(':focus');\n  }\n\n  /**\n   * set focus\n   */\n  focus() {\n    // [workaround] Screen will move when page is scolled in IE.\n    //  - do focus when not focused\n    if (!this.hasFocus()) {\n      this.$editable.focus();\n    }\n  }\n\n  /**\n   * returns whether contents is empty or not.\n   * @return {Boolean}\n   */\n  isEmpty() {\n    return dom.isEmpty(this.$editable[0]) || dom.emptyPara === this.$editable.html();\n  }\n\n  /**\n   * Removes all contents and restores the editable instance to an _emptyPara_.\n   */\n  empty() {\n    this.context.invoke('code', dom.emptyPara);\n  }\n\n  /**\n   * normalize content\n   */\n  normalizeContent() {\n    this.$editable[0].normalize();\n  }\n}\n","import lists from '../core/lists';\n\nexport default class Clipboard {\n  constructor(context) {\n    this.context = context;\n    this.$editable = context.layoutInfo.editable;\n  }\n\n  initialize() {\n    this.$editable.on('paste', this.pasteByEvent.bind(this));\n  }\n\n  /**\n   * paste by clipboard event\n   *\n   * @param {Event} event\n   */\n  pasteByEvent(event) {\n    const clipboardData = event.originalEvent.clipboardData;\n\n    if (clipboardData && clipboardData.items && clipboardData.items.length) {\n      const item = clipboardData.items.length > 1 ? clipboardData.items[1] : lists.head(clipboardData.items);\n      if (item.kind === 'file' && item.type.indexOf('image/') !== -1) {\n        // paste img file\n        this.context.invoke('editor.insertImagesOrCallback', [item.getAsFile()]);\n        event.preventDefault();\n      } else if (item.kind === 'string') {\n        // paste text with maxTextLength check\n        if (this.context.invoke('editor.isLimited', clipboardData.getData('Text').length)) {\n          event.preventDefault();\n        }\n      }\n    } else if (window.clipboardData) {\n      // for IE\n      let text = window.clipboardData.getData('text');\n      if (this.context.invoke('editor.isLimited', text.length)) {\n        event.preventDefault();\n      }\n    }\n    // Call editor.afterCommand after proceeding default event handler\n    setTimeout(() => {\n      this.context.invoke('editor.afterCommand');\n    }, 10);\n  }\n}\n","import $ from 'jquery';\n\nexport default class Dropzone {\n  constructor(context) {\n    this.context = context;\n    this.$eventListener = $(document);\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.documentEventHandlers = {};\n\n    this.$dropzone = $([\n      '<div class=\"note-dropzone\">',\n        '<div class=\"note-dropzone-message\"></div>',\n      '</div>',\n    ].join('')).prependTo(this.$editor);\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  initialize() {\n    if (this.options.disableDragAndDrop) {\n      // prevent default drop event\n      this.documentEventHandlers.onDrop = (e) => {\n        e.preventDefault();\n      };\n      // do not consider outside of dropzone\n      this.$eventListener = this.$dropzone;\n      this.$eventListener.on('drop', this.documentEventHandlers.onDrop);\n    } else {\n      this.attachDragAndDropEvent();\n    }\n  }\n\n  /**\n   * attach Drag and Drop Events\n   */\n  attachDragAndDropEvent() {\n    let collection = $();\n    const $dropzoneMessage = this.$dropzone.find('.note-dropzone-message');\n\n    this.documentEventHandlers.onDragenter = (e) => {\n      const isCodeview = this.context.invoke('codeview.isActivated');\n      const hasEditorSize = this.$editor.width() > 0 && this.$editor.height() > 0;\n      if (!isCodeview && !collection.length && hasEditorSize) {\n        this.$editor.addClass('dragover');\n        this.$dropzone.width(this.$editor.width());\n        this.$dropzone.height(this.$editor.height());\n        $dropzoneMessage.text(this.lang.image.dragImageHere);\n      }\n      collection = collection.add(e.target);\n    };\n\n    this.documentEventHandlers.onDragleave = (e) => {\n      collection = collection.not(e.target);\n\n      // If nodeName is BODY, then just make it over (fix for IE)\n      if (!collection.length || e.target.nodeName === 'BODY') {\n        collection = $();\n        this.$editor.removeClass('dragover');\n      }\n    };\n\n    this.documentEventHandlers.onDrop = () => {\n      collection = $();\n      this.$editor.removeClass('dragover');\n    };\n\n    // show dropzone on dragenter when dragging a object to document\n    // -but only if the editor is visible, i.e. has a positive width and height\n    this.$eventListener.on('dragenter', this.documentEventHandlers.onDragenter)\n      .on('dragleave', this.documentEventHandlers.onDragleave)\n      .on('drop', this.documentEventHandlers.onDrop);\n\n    // change dropzone's message on hover.\n    this.$dropzone.on('dragenter', () => {\n      this.$dropzone.addClass('hover');\n      $dropzoneMessage.text(this.lang.image.dropImage);\n    }).on('dragleave', () => {\n      this.$dropzone.removeClass('hover');\n      $dropzoneMessage.text(this.lang.image.dragImageHere);\n    });\n\n    // attach dropImage\n    this.$dropzone.on('drop', (event) => {\n      const dataTransfer = event.originalEvent.dataTransfer;\n\n      // stop the browser from opening the dropped content\n      event.preventDefault();\n\n      if (dataTransfer && dataTransfer.files && dataTransfer.files.length) {\n        this.$editable.focus();\n        this.context.invoke('editor.insertImagesOrCallback', dataTransfer.files);\n      } else {\n        $.each(dataTransfer.types, (idx, type) => {\n          // skip moz-specific types\n          if (type.toLowerCase().indexOf('_moz_') > -1) {\n            return;\n          }\n          const content = dataTransfer.getData(type);\n\n          if (type.toLowerCase().indexOf('text') > -1) {\n            this.context.invoke('editor.pasteHTML', content);\n          } else {\n            $(content).each((idx, item) => {\n              this.context.invoke('editor.insertNode', item);\n            });\n          }\n        });\n      }\n    }).on('dragover', false); // prevent default dragover event\n  }\n\n  destroy() {\n    Object.keys(this.documentEventHandlers).forEach((key) => {\n      this.$eventListener.off(key.substr(2).toLowerCase(), this.documentEventHandlers[key]);\n    });\n    this.documentEventHandlers = {};\n  }\n}\n","import dom from '../core/dom';\nimport key from '../core/key';\n\n/**\n * @class Codeview\n */\nexport default class CodeView {\n  constructor(context) {\n    this.context = context;\n    this.$editor = context.layoutInfo.editor;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n    this.options = context.options;\n    this.CodeMirrorConstructor = window.CodeMirror;\n\n    if (this.options.codemirror.CodeMirrorConstructor) {\n      this.CodeMirrorConstructor = this.options.codemirror.CodeMirrorConstructor;\n    }\n  }\n\n  sync(html) {\n    const isCodeview = this.isActivated();\n    const CodeMirror = this.CodeMirrorConstructor;\n\n    if (isCodeview) {\n      if (html) {\n        if (CodeMirror) {\n          this.$codable.data('cmEditor').getDoc().setValue(html);\n        } else {\n          this.$codable.val(html);\n        }\n      } else {\n        if (CodeMirror) {\n          this.$codable.data('cmEditor').save();\n        }\n      }\n    }\n  }\n\n  initialize() {\n    this.$codable.on('keyup', (event) => {\n      if (event.keyCode === key.code.ESCAPE) {\n        this.deactivate();\n      }\n    });\n  }\n\n  /**\n   * @return {Boolean}\n   */\n  isActivated() {\n    return this.$editor.hasClass('codeview');\n  }\n\n  /**\n   * toggle codeview\n   */\n  toggle() {\n    if (this.isActivated()) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n    this.context.triggerEvent('codeview.toggled');\n  }\n\n  /**\n   * purify input value\n   * @param value\n   * @returns {*}\n   */\n  purify(value) {\n    if (this.options.codeviewFilter) {\n      // filter code view regex\n      value = value.replace(this.options.codeviewFilterRegex, '');\n      // allow specific iframe tag\n      if (this.options.codeviewIframeFilter) {\n        const whitelist = this.options.codeviewIframeWhitelistSrc.concat(this.options.codeviewIframeWhitelistSrcBase);\n        value = value.replace(/(<iframe.*?>.*?(?:<\\/iframe>)?)/gi, function(tag) {\n          // remove if src attribute is duplicated\n          if (/<.+src(?==?('|\"|\\s)?)[\\s\\S]+src(?=('|\"|\\s)?)[^>]*?>/i.test(tag)) {\n            return '';\n          }\n          for (const src of whitelist) {\n            // pass if src is trusted\n            if ((new RegExp('src=\"(https?:)?\\/\\/' + src.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&') + '\\/(.+)\"')).test(tag)) {\n              return tag;\n            }\n          }\n          return '';\n        });\n      }\n    }\n    return value;\n  }\n\n  /**\n   * activate code view\n   */\n  activate() {\n    const CodeMirror = this.CodeMirrorConstructor;\n    this.$codable.val(dom.html(this.$editable, this.options.prettifyHtml));\n    this.$codable.height(this.$editable.height());\n\n    this.context.invoke('toolbar.updateCodeview', true);\n    this.context.invoke('airPopover.updateCodeview', true);\n\n    this.$editor.addClass('codeview');\n    this.$codable.focus();\n\n    // activate CodeMirror as codable\n    if (CodeMirror) {\n      const cmEditor = CodeMirror.fromTextArea(this.$codable[0], this.options.codemirror);\n\n      // CodeMirror TernServer\n      if (this.options.codemirror.tern) {\n        const server = new CodeMirror.TernServer(this.options.codemirror.tern);\n        cmEditor.ternServer = server;\n        cmEditor.on('cursorActivity', (cm) => {\n          server.updateArgHints(cm);\n        });\n      }\n\n      cmEditor.on('blur', (event) => {\n        this.context.triggerEvent('blur.codeview', cmEditor.getValue(), event);\n      });\n      cmEditor.on('change', () => {\n        this.context.triggerEvent('change.codeview', cmEditor.getValue(), cmEditor);\n      });\n\n      // CodeMirror hasn't Padding.\n      cmEditor.setSize(null, this.$editable.outerHeight());\n      this.$codable.data('cmEditor', cmEditor);\n    } else {\n      this.$codable.on('blur', (event) => {\n        this.context.triggerEvent('blur.codeview', this.$codable.val(), event);\n      });\n      this.$codable.on('input', () => {\n        this.context.triggerEvent('change.codeview', this.$codable.val(), this.$codable);\n      });\n    }\n  }\n\n  /**\n   * deactivate code view\n   */\n  deactivate() {\n    const CodeMirror = this.CodeMirrorConstructor;\n    // deactivate CodeMirror as codable\n    if (CodeMirror) {\n      const cmEditor = this.$codable.data('cmEditor');\n      this.$codable.val(cmEditor.getValue());\n      cmEditor.toTextArea();\n    }\n\n    const value = this.purify(dom.value(this.$codable, this.options.prettifyHtml) || dom.emptyPara);\n    const isChange = this.$editable.html() !== value;\n\n    this.$editable.html(value);\n    this.$editable.height(this.options.height ? this.$codable.height() : 'auto');\n    this.$editor.removeClass('codeview');\n\n    if (isChange) {\n      this.context.triggerEvent('change', this.$editable.html(), this.$editable);\n    }\n\n    this.$editable.focus();\n\n    this.context.invoke('toolbar.updateCodeview', false);\n    this.context.invoke('airPopover.updateCodeview', false);\n  }\n\n  destroy() {\n    if (this.isActivated()) {\n      this.deactivate();\n    }\n  }\n}\n","import $ from 'jquery';\nconst EDITABLE_PADDING = 24;\n\nexport default class Statusbar {\n  constructor(context) {\n    this.$document = $(document);\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n  }\n\n  initialize() {\n    if (this.options.airMode || this.options.disableResizeEditor) {\n      this.destroy();\n      return;\n    }\n\n    this.$statusbar.on('mousedown', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      const editableTop = this.$editable.offset().top - this.$document.scrollTop();\n      const onMouseMove = (event) => {\n        let height = event.clientY - (editableTop + EDITABLE_PADDING);\n\n        height = (this.options.minheight > 0) ? Math.max(height, this.options.minheight) : height;\n        height = (this.options.maxHeight > 0) ? Math.min(height, this.options.maxHeight) : height;\n\n        this.$editable.height(height);\n      };\n\n      this.$document.on('mousemove', onMouseMove).one('mouseup', () => {\n        this.$document.off('mousemove', onMouseMove);\n      });\n    });\n  }\n\n  destroy() {\n    this.$statusbar.off();\n    this.$statusbar.addClass('locked');\n  }\n}\n","import $ from 'jquery';\n\nexport default class Fullscreen {\n  constructor(context) {\n    this.context = context;\n\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$codable = context.layoutInfo.codable;\n\n    this.$window = $(window);\n    this.$scrollbar = $('html, body');\n\n    this.onResize = () => {\n      this.resizeTo({\n        h: this.$window.height() - this.$toolbar.outerHeight(),\n      });\n    };\n  }\n\n  resizeTo(size) {\n    this.$editable.css('height', size.h);\n    this.$codable.css('height', size.h);\n    if (this.$codable.data('cmeditor')) {\n      this.$codable.data('cmeditor').setsize(null, size.h);\n    }\n  }\n\n  /**\n   * toggle fullscreen\n   */\n  toggle() {\n    this.$editor.toggleClass('fullscreen');\n    if (this.isFullscreen()) {\n      this.$editable.data('orgHeight', this.$editable.css('height'));\n      this.$editable.data('orgMaxHeight', this.$editable.css('maxHeight'));\n      this.$editable.css('maxHeight', '');\n      this.$window.on('resize', this.onResize).trigger('resize');\n      this.$scrollbar.css('overflow', 'hidden');\n    } else {\n      this.$window.off('resize', this.onResize);\n      this.resizeTo({ h: this.$editable.data('orgHeight') });\n      this.$editable.css('maxHeight', this.$editable.css('orgMaxHeight'));\n      this.$scrollbar.css('overflow', 'visible');\n    }\n\n    this.context.invoke('toolbar.updateFullscreen', this.isFullscreen());\n  }\n\n  isFullscreen() {\n    return this.$editor.hasClass('fullscreen');\n  }\n}\n","import $ from 'jquery';\nimport dom from '../core/dom';\n\nexport default class Handle {\n  constructor(context) {\n    this.context = context;\n    this.$document = $(document);\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    this.events = {\n      'summernote.mousedown': (we, e) => {\n        if (this.update(e.target, e)) {\n          e.preventDefault();\n        }\n      },\n      'summernote.keyup summernote.scroll summernote.change summernote.dialog.shown': () => {\n        this.update();\n      },\n      'summernote.disable summernote.blur': () => {\n        this.hide();\n      },\n      'summernote.codeview.toggled': () => {\n        this.update();\n      },\n    };\n  }\n\n  initialize() {\n    this.$handle = $([\n      '<div class=\"note-handle\">',\n        '<div class=\"note-control-selection\">',\n          '<div class=\"note-control-selection-bg\"></div>',\n          '<div class=\"note-control-holder note-control-nw\"></div>',\n          '<div class=\"note-control-holder note-control-ne\"></div>',\n          '<div class=\"note-control-holder note-control-sw\"></div>',\n          '<div class=\"',\n            (this.options.disableResizeImage ? 'note-control-holder' : 'note-control-sizing'),\n          ' note-control-se\"></div>',\n          (this.options.disableResizeImage ? '' : '<div class=\"note-control-selection-info\"></div>'),\n        '</div>',\n      '</div>',\n    ].join('')).prependTo(this.$editingArea);\n\n    this.$handle.on('mousedown', (event) => {\n      if (dom.isControlSizing(event.target)) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        const $target = this.$handle.find('.note-control-selection').data('target');\n        const posStart = $target.offset();\n        const scrollTop = this.$document.scrollTop();\n\n        const onMouseMove = (event) => {\n          this.context.invoke('editor.resizeTo', {\n            x: event.clientX - posStart.left,\n            y: event.clientY - (posStart.top - scrollTop),\n          }, $target, !event.shiftKey);\n\n          this.update($target[0], event);\n        };\n\n        this.$document\n          .on('mousemove', onMouseMove)\n          .one('mouseup', (e) => {\n            e.preventDefault();\n            this.$document.off('mousemove', onMouseMove);\n            this.context.invoke('editor.afterCommand');\n          });\n\n        if (!$target.data('ratio')) { // original ratio.\n          $target.data('ratio', $target.height() / $target.width());\n        }\n      }\n    });\n\n    // Listen for scrolling on the handle overlay.\n    this.$handle.on('wheel', (e) => {\n      e.preventDefault();\n      this.update();\n    });\n  }\n\n  destroy() {\n    this.$handle.remove();\n  }\n\n  update(target, event) {\n    if (this.context.isDisabled()) {\n      return false;\n    }\n\n    const isImage = dom.isImg(target);\n    const $selection = this.$handle.find('.note-control-selection');\n\n    this.context.invoke('imagePopover.update', target, event);\n\n    if (isImage) {\n      const $image = $(target);\n      const position = $image.position();\n      const pos = {\n        left: position.left + parseInt($image.css('marginLeft'), 10),\n        top: position.top + parseInt($image.css('marginTop'), 10),\n      };\n\n      // exclude margin\n      const imageSize = {\n        w: $image.outerWidth(false),\n        h: $image.outerHeight(false),\n      };\n\n      $selection.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n        width: imageSize.w,\n        height: imageSize.h,\n      }).data('target', $image); // save current image element.\n\n      const origImageObj = new Image();\n      origImageObj.src = $image.attr('src');\n\n      const sizingText = imageSize.w + 'x' + imageSize.h + ' (' + this.lang.image.original + ': ' + origImageObj.width + 'x' + origImageObj.height + ')';\n      $selection.find('.note-control-selection-info').text(sizingText);\n      this.context.invoke('editor.saveTarget', target);\n    } else {\n      this.hide();\n    }\n\n    return isImage;\n  }\n\n  /**\n   * hide\n   *\n   * @param {jQuery} $handle\n   */\n  hide() {\n    this.context.invoke('editor.clearTarget');\n    this.$handle.children().hide();\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport key from '../core/key';\n\nconst defaultScheme = 'http://';\nconst linkPattern = /^([A-Za-z][A-Za-z0-9+-.]*\\:[\\/]{2}|tel:|mailto:[A-Z0-9._%+-]+@)?(www\\.)?(.+)$/i;\n\nexport default class AutoLink {\n  constructor(context) {\n    this.context = context;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup': (we, e) => {\n        if (!e.isDefaultPrevented()) {\n          this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': (we, e) => {\n        this.handleKeydown(e);\n      },\n    };\n  }\n\n  initialize() {\n    this.lastWordRange = null;\n  }\n\n  destroy() {\n    this.lastWordRange = null;\n  }\n\n  replace() {\n    if (!this.lastWordRange) {\n      return;\n    }\n\n    const keyword = this.lastWordRange.toString();\n    const match = keyword.match(linkPattern);\n\n    if (match && (match[1] || match[2])) {\n      const link = match[1] ? keyword : defaultScheme + keyword;\n      const urlText = this.options.showDomainOnlyForAutolink ?\n        keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\\.)?/i, '').split('/')[0]\n        : keyword;\n      const node = $('<a />').html(urlText).attr('href', link)[0];\n      if (this.context.options.linkTargetBlank) {\n        $(node).attr('target', '_blank');\n      }\n\n      this.lastWordRange.insertNode(node);\n      this.lastWordRange = null;\n      this.context.invoke('editor.focus');\n    }\n  }\n\n  handleKeydown(e) {\n    if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n      const wordRange = this.context.invoke('editor.createRange').getWordRange();\n      this.lastWordRange = wordRange;\n    }\n  }\n\n  handleKeyup(e) {\n    if (lists.contains([key.code.ENTER, key.code.SPACE], e.keyCode)) {\n      this.replace();\n    }\n  }\n}\n","import dom from '../core/dom';\n\n/**\n * textarea auto sync.\n */\nexport default class AutoSync {\n  constructor(context) {\n    this.$note = context.layoutInfo.note;\n    this.events = {\n      'summernote.change': () => {\n        this.$note.val(context.invoke('code'));\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return dom.isTextarea(this.$note[0]);\n  }\n}\n","import lists from '../core/lists';\nimport dom from '../core/dom';\nimport key from '../core/key';\n\nexport default class AutoReplace {\n  constructor(context) {\n    this.context = context;\n    this.options = context.options.replace || {};\n\n    this.keys = [key.code.ENTER, key.code.SPACE, key.code.PERIOD, key.code.COMMA, key.code.SEMICOLON, key.code.SLASH];\n    this.previousKeydownCode = null;\n\n    this.events = {\n      'summernote.keyup': (we, e) => {\n        if (!e.isDefaultPrevented()) {\n          this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': (we, e) => {\n        this.handleKeydown(e);\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !!this.options.match;\n  }\n\n  initialize() {\n    this.lastWord = null;\n  }\n\n  destroy() {\n    this.lastWord = null;\n  }\n\n  replace() {\n    if (!this.lastWord) {\n      return;\n    }\n\n    const self = this;\n    const keyword = this.lastWord.toString();\n    this.options.match(keyword, function(match) {\n      if (match) {\n        let node = '';\n\n        if (typeof match === 'string') {\n          node = dom.createText(match);\n        } else if (match instanceof jQuery) {\n          node = match[0];\n        } else if (match instanceof Node) {\n          node = match;\n        }\n\n        if (!node) return;\n        self.lastWord.insertNode(node);\n        self.lastWord = null;\n        self.context.invoke('editor.focus');\n      }\n    });\n  }\n\n  handleKeydown(e) {\n    // this forces it to remember the last whole word, even if multiple termination keys are pressed\n    // before the previous key is let go.\n    if (this.previousKeydownCode && lists.contains(this.keys, this.previousKeydownCode)) {\n      this.previousKeydownCode = e.keyCode;\n      return;\n    }\n\n    if (lists.contains(this.keys, e.keyCode)) {\n      const wordRange = this.context.invoke('editor.createRange').getWordRange();\n      this.lastWord = wordRange;\n    }\n    this.previousKeydownCode = e.keyCode;\n  }\n\n  handleKeyup(e) {\n    if (lists.contains(this.keys, e.keyCode)) {\n      this.replace();\n    }\n  }\n}\n","import $ from 'jquery';\nexport default class Placeholder {\n  constructor(context) {\n    this.context = context;\n\n    this.$editingArea = context.layoutInfo.editingArea;\n    this.options = context.options;\n\n    if (this.options.inheritPlaceholder === true) {\n      // get placeholder value from the original element\n      this.options.placeholder = this.context.$note.attr('placeholder') || this.options.placeholder;\n    }\n\n    this.events = {\n      'summernote.init summernote.change': () => {\n        this.update();\n      },\n      'summernote.codeview.toggled': () => {\n        this.update();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !!this.options.placeholder;\n  }\n\n  initialize() {\n    this.$placeholder = $('<div class=\"note-placeholder\">');\n    this.$placeholder.on('click', () => {\n      this.context.invoke('focus');\n    }).html(this.options.placeholder).prependTo(this.$editingArea);\n\n    this.update();\n  }\n\n  destroy() {\n    this.$placeholder.remove();\n  }\n\n  update() {\n    const isShow = !this.context.invoke('codeview.isActivated') && this.context.invoke('editor.isEmpty');\n    this.$placeholder.toggle(isShow);\n  }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport env from '../core/env';\n\nexport default class Buttons {\n  constructor(context) {\n    this.ui = $.summernote.ui;\n    this.context = context;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n    this.invertedKeyMap = func.invertObject(\n      this.options.keyMap[env.isMac ? 'mac' : 'pc']\n    );\n  }\n\n  representShortcut(editorMethod) {\n    let shortcut = this.invertedKeyMap[editorMethod];\n    if (!this.options.shortcuts || !shortcut) {\n      return '';\n    }\n\n    if (env.isMac) {\n      shortcut = shortcut.replace('CMD', '⌘').replace('SHIFT', '⇧');\n    }\n\n    shortcut = shortcut.replace('BACKSLASH', '\\\\')\n      .replace('SLASH', '/')\n      .replace('LEFTBRACKET', '[')\n      .replace('RIGHTBRACKET', ']');\n\n    return ' (' + shortcut + ')';\n  }\n\n  button(o) {\n    if (!this.options.tooltip && o.tooltip) {\n      delete o.tooltip;\n    }\n    o.container = this.options.container;\n    return this.ui.button(o);\n  }\n\n  initialize() {\n    this.addToolbarButtons();\n    this.addImagePopoverButtons();\n    this.addLinkPopoverButtons();\n    this.addTablePopoverButtons();\n    this.fontInstalledMap = {};\n  }\n\n  destroy() {\n    delete this.fontInstalledMap;\n  }\n\n  isFontInstalled(name) {\n    if (!Object.prototype.hasOwnProperty.call(this.fontInstalledMap, name)) {\n      this.fontInstalledMap[name] = env.isFontInstalled(name) ||\n        lists.contains(this.options.fontNamesIgnoreCheck, name);\n    }\n    return this.fontInstalledMap[name];\n  }\n\n  isFontDeservedToAdd(name) {\n    name = name.toLowerCase();\n    return (name !== '' && this.isFontInstalled(name) && env.genericFontFamilies.indexOf(name) === -1);\n  }\n\n  colorPalette(className, tooltip, backColor, foreColor) {\n    return this.ui.buttonGroup({\n      className: 'note-color ' + className,\n      children: [\n        this.button({\n          className: 'note-current-color-button',\n          contents: this.ui.icon(this.options.icons.font + ' note-recent-color'),\n          tooltip: tooltip,\n          click: (e) => {\n            const $button = $(e.currentTarget);\n            if (backColor && foreColor) {\n              this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n                foreColor: $button.attr('data-foreColor'),\n              });\n            } else if (backColor) {\n              this.context.invoke('editor.color', {\n                backColor: $button.attr('data-backColor'),\n              });\n            } else if (foreColor) {\n              this.context.invoke('editor.color', {\n                foreColor: $button.attr('data-foreColor'),\n              });\n            }\n          },\n          callback: ($button) => {\n            const $recentColor = $button.find('.note-recent-color');\n            if (backColor) {\n              $recentColor.css('background-color', this.options.colorButton.backColor);\n              $button.attr('data-backColor', this.options.colorButton.backColor);\n            }\n            if (foreColor) {\n              $recentColor.css('color', this.options.colorButton.foreColor);\n              $button.attr('data-foreColor', this.options.colorButton.foreColor);\n            } else {\n              $recentColor.css('color', 'transparent');\n            }\n          },\n        }),\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('', this.options),\n          tooltip: this.lang.color.more,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          items: (backColor ? [\n            '<div class=\"note-palette\">',\n              '<div class=\"note-palette-title\">' + this.lang.color.background + '</div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"backColor\" data-value=\"transparent\">',\n                  this.lang.color.transparent,\n                '</button>',\n              '</div>',\n              '<div class=\"note-holder\" data-event=\"backColor\"><!-- back colors --></div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"backColorPicker\">',\n                  this.lang.color.cpSelect,\n                '</button>',\n                '<input type=\"color\" id=\"backColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.backColor + '\" data-event=\"backColorPalette\">',\n              '</div>',\n              '<div class=\"note-holder-custom\" id=\"backColorPalette\" data-event=\"backColor\"></div>',\n            '</div>',\n          ].join('') : '') +\n          (foreColor ? [\n            '<div class=\"note-palette\">',\n              '<div class=\"note-palette-title\">' + this.lang.color.foreground + '</div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-reset btn btn-light btn-default\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n                  this.lang.color.resetToDefault,\n                '</button>',\n              '</div>',\n              '<div class=\"note-holder\" data-event=\"foreColor\"><!-- fore colors --></div>',\n              '<div>',\n                '<button type=\"button\" class=\"note-color-select btn btn-light btn-default\" data-event=\"openPalette\" data-value=\"foreColorPicker\">',\n                  this.lang.color.cpSelect,\n                '</button>',\n                '<input type=\"color\" id=\"foreColorPicker\" class=\"note-btn note-color-select-btn\" value=\"' + this.options.colorButton.foreColor + '\" data-event=\"foreColorPalette\">',\n              '</div>', // Fix missing Div, Commented to find easily if it's wrong\n              '<div class=\"note-holder-custom\" id=\"foreColorPalette\" data-event=\"foreColor\"></div>',\n            '</div>',\n          ].join('') : ''),\n          callback: ($dropdown) => {\n            $dropdown.find('.note-holder').each((idx, item) => {\n              const $holder = $(item);\n              $holder.append(this.ui.palette({\n                colors: this.options.colors,\n                colorsName: this.options.colorsName,\n                eventName: $holder.data('event'),\n                container: this.options.container,\n                tooltip: this.options.tooltip,\n              }).render());\n            });\n            /* TODO: do we have to record recent custom colors within cookies? */\n            var customColors = [\n              ['#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF', '#FFFFFF'],\n            ];\n            $dropdown.find('.note-holder-custom').each((idx, item) => {\n              const $holder = $(item);\n              $holder.append(this.ui.palette({\n                colors: customColors,\n                colorsName: customColors,\n                eventName: $holder.data('event'),\n                container: this.options.container,\n                tooltip: this.options.tooltip,\n              }).render());\n            });\n            $dropdown.find('input[type=color]').each((idx, item) => {\n              $(item).change(function() {\n                const $chip = $dropdown.find('#' + $(this).data('event')).find('.note-color-btn').first();\n                const color = this.value.toUpperCase();\n                $chip.css('background-color', color)\n                  .attr('aria-label', color)\n                  .attr('data-value', color)\n                  .attr('data-original-title', color);\n                $chip.click();\n              });\n            });\n          },\n          click: (event) => {\n            event.stopPropagation();\n\n            const $parent = $('.' + className).find('.note-dropdown-menu');\n            const $button = $(event.target);\n            const eventName = $button.data('event');\n            const value = $button.attr('data-value');\n\n            if (eventName === 'openPalette') {\n              const $picker = $parent.find('#' + value);\n              const $palette = $($parent.find('#' + $picker.data('event')).find('.note-color-row')[0]);\n\n              // Shift palette chips\n              const $chip = $palette.find('.note-color-btn').last().detach();\n\n              // Set chip attributes\n              const color = $picker.val();\n              $chip.css('background-color', color)\n                .attr('aria-label', color)\n                .attr('data-value', color)\n                .attr('data-original-title', color);\n              $palette.prepend($chip);\n              $picker.click();\n            } else {\n              if (lists.contains(['backColor', 'foreColor'], eventName)) {\n                const key = eventName === 'backColor' ? 'background-color' : 'color';\n                const $color = $button.closest('.note-color').find('.note-recent-color');\n                const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n                $color.css(key, value);\n                $currentButton.attr('data-' + eventName, value);\n              }\n              this.context.invoke('editor.' + eventName, value);\n            }\n          },\n        }),\n      ],\n    }).render();\n  }\n\n  addToolbarButtons() {\n    this.context.memo('button.style', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(\n            this.ui.icon(this.options.icons.magic), this.options\n          ),\n          tooltip: this.lang.style.style,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          className: 'dropdown-style',\n          items: this.options.styleTags,\n          title: this.lang.style.style,\n          template: (item) => {\n            // TBD: need to be simplified\n            if (typeof item === 'string') {\n              item = {\n                tag: item,\n                title: (Object.prototype.hasOwnProperty.call(this.lang.style, item) ? this.lang.style[item] : item),\n              };\n            }\n\n            const tag = item.tag;\n            const title = item.title;\n            const style = item.style ? ' style=\"' + item.style + '\" ' : '';\n            const className = item.className ? ' class=\"' + item.className + '\"' : '';\n\n            return '<' + tag + style + className + '>' + title + '</' + tag + '>';\n          },\n          click: this.context.createInvokeHandler('editor.formatBlock'),\n        }),\n      ]).render();\n    });\n\n    for (let styleIdx = 0, styleLen = this.options.styleTags.length; styleIdx < styleLen; styleIdx++) {\n      const item = this.options.styleTags[styleIdx];\n\n      this.context.memo('button.style.' + item, () => {\n        return this.button({\n          className: 'note-btn-style-' + item,\n          contents: '<div data-value=\"' + item + '\">' + item.toUpperCase() + '</div>',\n          tooltip: this.lang.style[item],\n          click: this.context.createInvokeHandler('editor.formatBlock'),\n        }).render();\n      });\n    }\n\n    this.context.memo('button.bold', () => {\n      return this.button({\n        className: 'note-btn-bold',\n        contents: this.ui.icon(this.options.icons.bold),\n        tooltip: this.lang.font.bold + this.representShortcut('bold'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.bold'),\n      }).render();\n    });\n\n    this.context.memo('button.italic', () => {\n      return this.button({\n        className: 'note-btn-italic',\n        contents: this.ui.icon(this.options.icons.italic),\n        tooltip: this.lang.font.italic + this.representShortcut('italic'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.italic'),\n      }).render();\n    });\n\n    this.context.memo('button.underline', () => {\n      return this.button({\n        className: 'note-btn-underline',\n        contents: this.ui.icon(this.options.icons.underline),\n        tooltip: this.lang.font.underline + this.representShortcut('underline'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.underline'),\n      }).render();\n    });\n\n    this.context.memo('button.clear', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.eraser),\n        tooltip: this.lang.font.clear + this.representShortcut('removeFormat'),\n        click: this.context.createInvokeHandler('editor.removeFormat'),\n      }).render();\n    });\n\n    this.context.memo('button.strikethrough', () => {\n      return this.button({\n        className: 'note-btn-strikethrough',\n        contents: this.ui.icon(this.options.icons.strikethrough),\n        tooltip: this.lang.font.strikethrough + this.representShortcut('strikethrough'),\n        click: this.context.createInvokeHandlerAndUpdateState('editor.strikethrough'),\n      }).render();\n    });\n\n    this.context.memo('button.superscript', () => {\n      return this.button({\n        className: 'note-btn-superscript',\n        contents: this.ui.icon(this.options.icons.superscript),\n        tooltip: this.lang.font.superscript,\n        click: this.context.createInvokeHandlerAndUpdateState('editor.superscript'),\n      }).render();\n    });\n\n    this.context.memo('button.subscript', () => {\n      return this.button({\n        className: 'note-btn-subscript',\n        contents: this.ui.icon(this.options.icons.subscript),\n        tooltip: this.lang.font.subscript,\n        click: this.context.createInvokeHandlerAndUpdateState('editor.subscript'),\n      }).render();\n    });\n\n    this.context.memo('button.fontname', () => {\n      const styleInfo = this.context.invoke('editor.currentStyle');\n\n      if (this.options.addDefaultFonts) {\n        // Add 'default' fonts into the fontnames array if not exist\n        $.each(styleInfo['font-family'].split(','), (idx, fontname) => {\n          fontname = fontname.trim().replace(/['\"]+/g, '');\n          if (this.isFontDeservedToAdd(fontname)) {\n            if (this.options.fontNames.indexOf(fontname) === -1) {\n              this.options.fontNames.push(fontname);\n            }\n          }\n        });\n      }\n\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(\n            '<span class=\"note-current-fontname\"></span>', this.options\n          ),\n          tooltip: this.lang.font.name,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontname',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontNames.filter(this.isFontInstalled.bind(this)),\n          title: this.lang.font.name,\n          template: (item) => {\n            return '<span style=\"font-family: ' + env.validFontName(item) + '\">' + item + '</span>';\n          },\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontName'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.fontsize', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsize\"></span>', this.options),\n          tooltip: this.lang.font.size,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontsize',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontSizes,\n          title: this.lang.font.size,\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontSize'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.fontsizeunit', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents('<span class=\"note-current-fontsizeunit\"></span>', this.options),\n          tooltip: this.lang.font.sizeunit,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          className: 'dropdown-fontsizeunit',\n          checkClassName: this.options.icons.menuCheck,\n          items: this.options.fontSizeUnits,\n          title: this.lang.font.sizeunit,\n          click: this.context.createInvokeHandlerAndUpdateState('editor.fontSizeUnit'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.color', () => {\n      return this.colorPalette('note-color-all', this.lang.color.recent, true, true);\n    });\n\n    this.context.memo('button.forecolor', () => {\n      return this.colorPalette('note-color-fore', this.lang.color.foreground, false, true);\n    });\n\n    this.context.memo('button.backcolor', () => {\n      return this.colorPalette('note-color-back', this.lang.color.background, true, false);\n    });\n\n    this.context.memo('button.ul', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.unorderedlist),\n        tooltip: this.lang.lists.unordered + this.representShortcut('insertUnorderedList'),\n        click: this.context.createInvokeHandler('editor.insertUnorderedList'),\n      }).render();\n    });\n\n    this.context.memo('button.ol', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.orderedlist),\n        tooltip: this.lang.lists.ordered + this.representShortcut('insertOrderedList'),\n        click: this.context.createInvokeHandler('editor.insertOrderedList'),\n      }).render();\n    });\n\n    const justifyLeft = this.button({\n      contents: this.ui.icon(this.options.icons.alignLeft),\n      tooltip: this.lang.paragraph.left + this.representShortcut('justifyLeft'),\n      click: this.context.createInvokeHandler('editor.justifyLeft'),\n    });\n\n    const justifyCenter = this.button({\n      contents: this.ui.icon(this.options.icons.alignCenter),\n      tooltip: this.lang.paragraph.center + this.representShortcut('justifyCenter'),\n      click: this.context.createInvokeHandler('editor.justifyCenter'),\n    });\n\n    const justifyRight = this.button({\n      contents: this.ui.icon(this.options.icons.alignRight),\n      tooltip: this.lang.paragraph.right + this.representShortcut('justifyRight'),\n      click: this.context.createInvokeHandler('editor.justifyRight'),\n    });\n\n    const justifyFull = this.button({\n      contents: this.ui.icon(this.options.icons.alignJustify),\n      tooltip: this.lang.paragraph.justify + this.representShortcut('justifyFull'),\n      click: this.context.createInvokeHandler('editor.justifyFull'),\n    });\n\n    const outdent = this.button({\n      contents: this.ui.icon(this.options.icons.outdent),\n      tooltip: this.lang.paragraph.outdent + this.representShortcut('outdent'),\n      click: this.context.createInvokeHandler('editor.outdent'),\n    });\n\n    const indent = this.button({\n      contents: this.ui.icon(this.options.icons.indent),\n      tooltip: this.lang.paragraph.indent + this.representShortcut('indent'),\n      click: this.context.createInvokeHandler('editor.indent'),\n    });\n\n    this.context.memo('button.justifyLeft', func.invoke(justifyLeft, 'render'));\n    this.context.memo('button.justifyCenter', func.invoke(justifyCenter, 'render'));\n    this.context.memo('button.justifyRight', func.invoke(justifyRight, 'render'));\n    this.context.memo('button.justifyFull', func.invoke(justifyFull, 'render'));\n    this.context.memo('button.outdent', func.invoke(outdent, 'render'));\n    this.context.memo('button.indent', func.invoke(indent, 'render'));\n\n    this.context.memo('button.paragraph', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.alignLeft), this.options),\n          tooltip: this.lang.paragraph.paragraph,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown([\n          this.ui.buttonGroup({\n            className: 'note-align',\n            children: [justifyLeft, justifyCenter, justifyRight, justifyFull],\n          }),\n          this.ui.buttonGroup({\n            className: 'note-list',\n            children: [outdent, indent],\n          }),\n        ]),\n      ]).render();\n    });\n\n    this.context.memo('button.height', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.textHeight), this.options),\n          tooltip: this.lang.font.height,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdownCheck({\n          items: this.options.lineHeights,\n          checkClassName: this.options.icons.menuCheck,\n          className: 'dropdown-line-height',\n          title: this.lang.font.height,\n          click: this.context.createInvokeHandler('editor.lineHeight'),\n        }),\n      ]).render();\n    });\n\n    this.context.memo('button.table', () => {\n      return this.ui.buttonGroup([\n        this.button({\n          className: 'dropdown-toggle',\n          contents: this.ui.dropdownButtonContents(this.ui.icon(this.options.icons.table), this.options),\n          tooltip: this.lang.table.table,\n          data: {\n            toggle: 'dropdown',\n          },\n        }),\n        this.ui.dropdown({\n          title: this.lang.table.table,\n          className: 'note-table',\n          items: [\n            '<div class=\"note-dimension-picker\">',\n              '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>',\n              '<div class=\"note-dimension-picker-highlighted\"></div>',\n              '<div class=\"note-dimension-picker-unhighlighted\"></div>',\n            '</div>',\n            '<div class=\"note-dimension-display\">1 x 1</div>',\n          ].join(''),\n        }),\n      ], {\n        callback: ($node) => {\n          const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n          $catcher.css({\n            width: this.options.insertTableMaxSize.col + 'em',\n            height: this.options.insertTableMaxSize.row + 'em',\n          }).mousedown(this.context.createInvokeHandler('editor.insertTable'))\n            .on('mousemove', this.tableMoveHandler.bind(this));\n        },\n      }).render();\n    });\n\n    this.context.memo('button.link', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.link),\n        tooltip: this.lang.link.link + this.representShortcut('linkDialog.show'),\n        click: this.context.createInvokeHandler('linkDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.picture', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.picture),\n        tooltip: this.lang.image.image,\n        click: this.context.createInvokeHandler('imageDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.video', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.video),\n        tooltip: this.lang.video.video,\n        click: this.context.createInvokeHandler('videoDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.hr', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.minus),\n        tooltip: this.lang.hr.insert + this.representShortcut('insertHorizontalRule'),\n        click: this.context.createInvokeHandler('editor.insertHorizontalRule'),\n      }).render();\n    });\n\n    this.context.memo('button.fullscreen', () => {\n      return this.button({\n        className: 'btn-fullscreen note-codeview-keep',\n        contents: this.ui.icon(this.options.icons.arrowsAlt),\n        tooltip: this.lang.options.fullscreen,\n        click: this.context.createInvokeHandler('fullscreen.toggle'),\n      }).render();\n    });\n\n    this.context.memo('button.codeview', () => {\n      return this.button({\n        className: 'btn-codeview note-codeview-keep',\n        contents: this.ui.icon(this.options.icons.code),\n        tooltip: this.lang.options.codeview,\n        click: this.context.createInvokeHandler('codeview.toggle'),\n      }).render();\n    });\n\n    this.context.memo('button.redo', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.redo),\n        tooltip: this.lang.history.redo + this.representShortcut('redo'),\n        click: this.context.createInvokeHandler('editor.redo'),\n      }).render();\n    });\n\n    this.context.memo('button.undo', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.undo),\n        tooltip: this.lang.history.undo + this.representShortcut('undo'),\n        click: this.context.createInvokeHandler('editor.undo'),\n      }).render();\n    });\n\n    this.context.memo('button.help', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.question),\n        tooltip: this.lang.options.help,\n        click: this.context.createInvokeHandler('helpDialog.show'),\n      }).render();\n    });\n  }\n\n  /**\n   * image: [\n   *   ['imageResize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n   *   ['float', ['floatLeft', 'floatRight', 'floatNone']],\n   *   ['remove', ['removeMedia']],\n   * ],\n   */\n  addImagePopoverButtons() {\n    // Image Size Buttons\n    this.context.memo('button.resizeFull', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">100%</span>',\n        tooltip: this.lang.image.resizeFull,\n        click: this.context.createInvokeHandler('editor.resize', '1'),\n      }).render();\n    });\n    this.context.memo('button.resizeHalf', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">50%</span>',\n        tooltip: this.lang.image.resizeHalf,\n        click: this.context.createInvokeHandler('editor.resize', '0.5'),\n      }).render();\n    });\n    this.context.memo('button.resizeQuarter', () => {\n      return this.button({\n        contents: '<span class=\"note-fontsize-10\">25%</span>',\n        tooltip: this.lang.image.resizeQuarter,\n        click: this.context.createInvokeHandler('editor.resize', '0.25'),\n      }).render();\n    });\n    this.context.memo('button.resizeNone', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.rollback),\n        tooltip: this.lang.image.resizeNone,\n        click: this.context.createInvokeHandler('editor.resize', '0'),\n      }).render();\n    });\n\n    // Float Buttons\n    this.context.memo('button.floatLeft', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.floatLeft),\n        tooltip: this.lang.image.floatLeft,\n        click: this.context.createInvokeHandler('editor.floatMe', 'left'),\n      }).render();\n    });\n\n    this.context.memo('button.floatRight', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.floatRight),\n        tooltip: this.lang.image.floatRight,\n        click: this.context.createInvokeHandler('editor.floatMe', 'right'),\n      }).render();\n    });\n\n    this.context.memo('button.floatNone', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.rollback),\n        tooltip: this.lang.image.floatNone,\n        click: this.context.createInvokeHandler('editor.floatMe', 'none'),\n      }).render();\n    });\n\n    // Remove Buttons\n    this.context.memo('button.removeMedia', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.trash),\n        tooltip: this.lang.image.remove,\n        click: this.context.createInvokeHandler('editor.removeMedia'),\n      }).render();\n    });\n  }\n\n  addLinkPopoverButtons() {\n    this.context.memo('button.linkDialogShow', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.link),\n        tooltip: this.lang.link.edit,\n        click: this.context.createInvokeHandler('linkDialog.show'),\n      }).render();\n    });\n\n    this.context.memo('button.unlink', () => {\n      return this.button({\n        contents: this.ui.icon(this.options.icons.unlink),\n        tooltip: this.lang.link.unlink,\n        click: this.context.createInvokeHandler('editor.unlink'),\n      }).render();\n    });\n  }\n\n  /**\n   * table : [\n   *  ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n   *  ['delete', ['deleteRow', 'deleteCol', 'deleteTable']]\n   * ],\n   */\n  addTablePopoverButtons() {\n    this.context.memo('button.addRowUp', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowAbove),\n        tooltip: this.lang.table.addRowAbove,\n        click: this.context.createInvokeHandler('editor.addRow', 'top'),\n      }).render();\n    });\n    this.context.memo('button.addRowDown', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowBelow),\n        tooltip: this.lang.table.addRowBelow,\n        click: this.context.createInvokeHandler('editor.addRow', 'bottom'),\n      }).render();\n    });\n    this.context.memo('button.addColLeft', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colBefore),\n        tooltip: this.lang.table.addColLeft,\n        click: this.context.createInvokeHandler('editor.addCol', 'left'),\n      }).render();\n    });\n    this.context.memo('button.addColRight', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colAfter),\n        tooltip: this.lang.table.addColRight,\n        click: this.context.createInvokeHandler('editor.addCol', 'right'),\n      }).render();\n    });\n    this.context.memo('button.deleteRow', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.rowRemove),\n        tooltip: this.lang.table.delRow,\n        click: this.context.createInvokeHandler('editor.deleteRow'),\n      }).render();\n    });\n    this.context.memo('button.deleteCol', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.colRemove),\n        tooltip: this.lang.table.delCol,\n        click: this.context.createInvokeHandler('editor.deleteCol'),\n      }).render();\n    });\n    this.context.memo('button.deleteTable', () => {\n      return this.button({\n        className: 'btn-md',\n        contents: this.ui.icon(this.options.icons.trash),\n        tooltip: this.lang.table.delTable,\n        click: this.context.createInvokeHandler('editor.deleteTable'),\n      }).render();\n    });\n  }\n\n  build($container, groups) {\n    for (let groupIdx = 0, groupLen = groups.length; groupIdx < groupLen; groupIdx++) {\n      const group = groups[groupIdx];\n      const groupName = Array.isArray(group) ? group[0] : group;\n      const buttons = Array.isArray(group) ? ((group.length === 1) ? [group[0]] : group[1]) : [group];\n\n      const $group = this.ui.buttonGroup({\n        className: 'note-' + groupName,\n      }).render();\n\n      for (let idx = 0, len = buttons.length; idx < len; idx++) {\n        const btn = this.context.memo('button.' + buttons[idx]);\n        if (btn) {\n          $group.append(typeof btn === 'function' ? btn(this.context) : btn);\n        }\n      }\n      $group.appendTo($container);\n    }\n  }\n\n  /**\n   * @param {jQuery} [$container]\n   */\n  updateCurrentStyle($container) {\n    const $cont = $container || this.$toolbar;\n\n    const styleInfo = this.context.invoke('editor.currentStyle');\n    this.updateBtnStates($cont, {\n      '.note-btn-bold': () => {\n        return styleInfo['font-bold'] === 'bold';\n      },\n      '.note-btn-italic': () => {\n        return styleInfo['font-italic'] === 'italic';\n      },\n      '.note-btn-underline': () => {\n        return styleInfo['font-underline'] === 'underline';\n      },\n      '.note-btn-subscript': () => {\n        return styleInfo['font-subscript'] === 'subscript';\n      },\n      '.note-btn-superscript': () => {\n        return styleInfo['font-superscript'] === 'superscript';\n      },\n      '.note-btn-strikethrough': () => {\n        return styleInfo['font-strikethrough'] === 'strikethrough';\n      },\n    });\n\n    if (styleInfo['font-family']) {\n      const fontNames = styleInfo['font-family'].split(',').map((name) => {\n        return name.replace(/[\\'\\\"]/g, '')\n          .replace(/\\s+$/, '')\n          .replace(/^\\s+/, '');\n      });\n      const fontName = lists.find(fontNames, this.isFontInstalled.bind(this));\n\n      $cont.find('.dropdown-fontname a').each((idx, item) => {\n        const $item = $(item);\n        // always compare string to avoid creating another func.\n        const isChecked = ($item.data('value') + '') === (fontName + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontname').text(fontName).css('font-family', fontName);\n    }\n\n    if (styleInfo['font-size']) {\n      const fontSize = styleInfo['font-size'];\n      $cont.find('.dropdown-fontsize a').each((idx, item) => {\n        const $item = $(item);\n        // always compare with string to avoid creating another func.\n        const isChecked = ($item.data('value') + '') === (fontSize + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontsize').text(fontSize);\n\n      const fontSizeUnit = styleInfo['font-size-unit'];\n      $cont.find('.dropdown-fontsizeunit a').each((idx, item) => {\n        const $item = $(item);\n        const isChecked = ($item.data('value') + '') === (fontSizeUnit + '');\n        $item.toggleClass('checked', isChecked);\n      });\n      $cont.find('.note-current-fontsizeunit').text(fontSizeUnit);\n    }\n\n    if (styleInfo['line-height']) {\n      const lineHeight = styleInfo['line-height'];\n      $cont.find('.dropdown-line-height li a').each((idx, item) => {\n        // always compare with string to avoid creating another func.\n        const isChecked = ($(item).data('value') + '') === (lineHeight + '');\n        this.className = isChecked ? 'checked' : '';\n      });\n    }\n  }\n\n  updateBtnStates($container, infos) {\n    $.each(infos, (selector, pred) => {\n      this.ui.toggleBtnActive($container.find(selector), pred());\n    });\n  }\n\n  tableMoveHandler(event) {\n    const PX_PER_EM = 18;\n    const $picker = $(event.target.parentNode); // target is mousecatcher\n    const $dimensionDisplay = $picker.next();\n    const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n    const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n    const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n    let posOffset;\n    // HTML5 with jQuery - e.offsetX is undefined in Firefox\n    if (event.offsetX === undefined) {\n      const posCatcher = $(event.target).offset();\n      posOffset = {\n        x: event.pageX - posCatcher.left,\n        y: event.pageY - posCatcher.top,\n      };\n    } else {\n      posOffset = {\n        x: event.offsetX,\n        y: event.offsetY,\n      };\n    }\n\n    const dim = {\n      c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n      r: Math.ceil(posOffset.y / PX_PER_EM) || 1,\n    };\n\n    $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n    $catcher.data('value', dim.c + 'x' + dim.r);\n\n    if (dim.c > 3 && dim.c < this.options.insertTableMaxSize.col) {\n      $unhighlighted.css({ width: dim.c + 1 + 'em' });\n    }\n\n    if (dim.r > 3 && dim.r < this.options.insertTableMaxSize.row) {\n      $unhighlighted.css({ height: dim.r + 1 + 'em' });\n    }\n\n    $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n  }\n}\n","import $ from 'jquery';\nexport default class Toolbar {\n  constructor(context) {\n    this.context = context;\n\n    this.$window = $(window);\n    this.$document = $(document);\n\n    this.ui = $.summernote.ui;\n    this.$note = context.layoutInfo.note;\n    this.$editor = context.layoutInfo.editor;\n    this.$toolbar = context.layoutInfo.toolbar;\n    this.$editable = context.layoutInfo.editable;\n    this.$statusbar = context.layoutInfo.statusbar;\n    this.options = context.options;\n\n    this.isFollowing = false;\n    this.followScroll = this.followScroll.bind(this);\n  }\n\n  shouldInitialize() {\n    return !this.options.airMode;\n  }\n\n  initialize() {\n    this.options.toolbar = this.options.toolbar || [];\n\n    if (!this.options.toolbar.length) {\n      this.$toolbar.hide();\n    } else {\n      this.context.invoke('buttons.build', this.$toolbar, this.options.toolbar);\n    }\n\n    if (this.options.toolbarContainer) {\n      this.$toolbar.appendTo(this.options.toolbarContainer);\n    }\n\n    this.changeContainer(false);\n\n    this.$note.on('summernote.keyup summernote.mouseup summernote.change', () => {\n      this.context.invoke('buttons.updateCurrentStyle');\n    });\n\n    this.context.invoke('buttons.updateCurrentStyle');\n    if (this.options.followingToolbar) {\n      this.$window.on('scroll resize', this.followScroll);\n    }\n  }\n\n  destroy() {\n    this.$toolbar.children().remove();\n\n    if (this.options.followingToolbar) {\n      this.$window.off('scroll resize', this.followScroll);\n    }\n  }\n\n  followScroll() {\n    if (this.$editor.hasClass('fullscreen')) {\n      return false;\n    }\n\n    const editorHeight = this.$editor.outerHeight();\n    const editorWidth = this.$editor.width();\n    const toolbarHeight = this.$toolbar.height();\n    const statusbarHeight = this.$statusbar.height();\n\n    // check if the web app is currently using another static bar\n    let otherBarHeight = 0;\n    if (this.options.otherStaticBar) {\n      otherBarHeight = $(this.options.otherStaticBar).outerHeight();\n    }\n\n    const currentOffset = this.$document.scrollTop();\n    const editorOffsetTop = this.$editor.offset().top;\n    const editorOffsetBottom = editorOffsetTop + editorHeight;\n    const activateOffset = editorOffsetTop - otherBarHeight;\n    const deactivateOffsetBottom = editorOffsetBottom - otherBarHeight - toolbarHeight - statusbarHeight;\n\n    if (!this.isFollowing &&\n      (currentOffset > activateOffset) && (currentOffset < deactivateOffsetBottom - toolbarHeight)) {\n      this.isFollowing = true;\n      this.$editable.css({\n        marginTop: this.$toolbar.outerHeight(),\n      });\n      this.$toolbar.css({\n        position: 'fixed',\n        top: otherBarHeight,\n        width: editorWidth,\n        zIndex: 1000,\n      });\n    } else if (this.isFollowing &&\n      ((currentOffset < activateOffset) || (currentOffset > deactivateOffsetBottom))) {\n      this.isFollowing = false;\n      this.$toolbar.css({\n        position: 'relative',\n        top: 0,\n        width: '100%',\n        zIndex: 'auto',\n      });\n      this.$editable.css({\n        marginTop: '',\n      });\n    }\n  }\n\n  changeContainer(isFullscreen) {\n    if (isFullscreen) {\n      this.$toolbar.prependTo(this.$editor);\n    } else {\n      if (this.options.toolbarContainer) {\n        this.$toolbar.appendTo(this.options.toolbarContainer);\n      }\n    }\n    if (this.options.followingToolbar) {\n      this.followScroll();\n    }\n  }\n\n  updateFullscreen(isFullscreen) {\n    this.ui.toggleBtnActive(this.$toolbar.find('.btn-fullscreen'), isFullscreen);\n\n    this.changeContainer(isFullscreen);\n  }\n\n  updateCodeview(isCodeview) {\n    this.ui.toggleBtnActive(this.$toolbar.find('.btn-codeview'), isCodeview);\n    if (isCodeview) {\n      this.deactivate();\n    } else {\n      this.activate();\n    }\n  }\n\n  activate(isIncludeCodeview) {\n    let $btn = this.$toolbar.find('button');\n    if (!isIncludeCodeview) {\n      $btn = $btn.not('.note-codeview-keep');\n    }\n    this.ui.toggleBtn($btn, true);\n  }\n\n  deactivate(isIncludeCodeview) {\n    let $btn = this.$toolbar.find('button');\n    if (!isIncludeCodeview) {\n      $btn = $btn.not('.note-codeview-keep');\n    }\n    this.ui.toggleBtn($btn, false);\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\nimport func from '../core/func';\n\nexport default class LinkDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n\n    context.memo('help.linkDialog.show', this.options.langInfo.help['linkDialog.show']);\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group\">',\n        `<label for=\"note-dialog-link-txt-${this.options.id}\" class=\"note-form-label\">${this.lang.link.textToDisplay}</label>`,\n        `<input id=\"note-dialog-link-txt-${this.options.id}\" class=\"note-link-text form-control note-form-control note-input\" type=\"text\"/>`,\n      '</div>',\n      '<div class=\"form-group note-form-group\">',\n        `<label for=\"note-dialog-link-url-${this.options.id}\" class=\"note-form-label\">${this.lang.link.url}</label>`,\n        `<input id=\"note-dialog-link-url-${this.options.id}\" class=\"note-link-url form-control note-form-control note-input\" type=\"text\" value=\"http://\"/>`,\n      '</div>',\n      !this.options.disableLinkTarget\n        ? $('<div/>').append(this.ui.checkbox({\n          className: 'sn-checkbox-open-in-new-window',\n          text: this.lang.link.openInNewWindow,\n          checked: true,\n        }).render()).html()\n        : '',\n      $('<div/>').append(this.ui.checkbox({\n        className: 'sn-checkbox-use-protocol',\n        text: this.lang.link.useProtocol,\n        checked: true,\n      }).render()).html(),\n    ].join('');\n\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-link-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.link.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      className: 'link-dialog',\n      title: this.lang.link.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  /**\n   * toggle update button\n   */\n  toggleLinkBtn($linkBtn, $linkText, $linkUrl) {\n    this.ui.toggleBtn($linkBtn, $linkText.val() && $linkUrl.val());\n  }\n\n  /**\n   * Show link dialog and set event handlers on dialog controls.\n   *\n   * @param {Object} linkInfo\n   * @return {Promise}\n   */\n  showLinkDialog(linkInfo) {\n    return $.Deferred((deferred) => {\n      const $linkText = this.$dialog.find('.note-link-text');\n      const $linkUrl = this.$dialog.find('.note-link-url');\n      const $linkBtn = this.$dialog.find('.note-link-btn');\n      const $openInNewWindow = this.$dialog\n        .find('.sn-checkbox-open-in-new-window input[type=checkbox]');\n      const $useProtocol = this.$dialog\n        .find('.sn-checkbox-use-protocol input[type=checkbox]');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        // If no url was given and given text is valid URL then copy that into URL Field\n        if (!linkInfo.url && func.isValidUrl(linkInfo.text)) {\n          linkInfo.url = linkInfo.text;\n        }\n\n        $linkText.on('input paste propertychange', () => {\n          // If linktext was modified by input events,\n          // cloning text from linkUrl will be stopped.\n          linkInfo.text = $linkText.val();\n          this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        }).val(linkInfo.text);\n\n        $linkUrl.on('input paste propertychange', () => {\n          // Display same text on `Text to display` as default\n          // when linktext has no text\n          if (!linkInfo.text) {\n            $linkText.val($linkUrl.val());\n          }\n          this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        }).val(linkInfo.url);\n\n        if (!env.isSupportTouch) {\n          $linkUrl.trigger('focus');\n        }\n\n        this.toggleLinkBtn($linkBtn, $linkText, $linkUrl);\n        this.bindEnterKey($linkUrl, $linkBtn);\n        this.bindEnterKey($linkText, $linkBtn);\n\n        const isNewWindowChecked = linkInfo.isNewWindow !== undefined\n          ? linkInfo.isNewWindow : this.context.options.linkTargetBlank;\n\n        $openInNewWindow.prop('checked', isNewWindowChecked);\n\n        const useProtocolChecked = linkInfo.url\n          ? false : this.context.options.useProtocol;\n\n        $useProtocol.prop('checked', useProtocolChecked);\n\n        $linkBtn.one('click', (event) => {\n          event.preventDefault();\n\n          deferred.resolve({\n            range: linkInfo.range,\n            url: $linkUrl.val(),\n            text: $linkText.val(),\n            isNewWindow: $openInNewWindow.is(':checked'),\n            checkProtocol: $useProtocol.is(':checked'),\n          });\n          this.ui.hideDialog(this.$dialog);\n        });\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        // detach events\n        $linkText.off();\n        $linkUrl.off();\n        $linkBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    }).promise();\n  }\n\n  /**\n   * @param {Object} layoutInfo\n   */\n  show() {\n    const linkInfo = this.context.invoke('editor.getLinkInfo');\n\n    this.context.invoke('editor.saveRange');\n    this.showLinkDialog(linkInfo).then((linkInfo) => {\n      this.context.invoke('editor.restoreRange');\n      this.context.invoke('editor.createLink', linkInfo);\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class LinkPopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.keyup summernote.mouseup summernote.change summernote.scroll': () => {\n        this.update();\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': () => {\n        this.hide();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.link);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-link-popover',\n      callback: ($node) => {\n        const $content = $node.find('.popover-content,.note-popover-content');\n        $content.prepend('<span><a target=\"_blank\"></a>&nbsp;</span>');\n      },\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.link);\n\n    this.$popover.on('mousedown', (e) => { e.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update() {\n    // Prevent focusing on editable when invoke('code') is executed\n    if (!this.context.invoke('editor.hasFocus')) {\n      this.hide();\n      return;\n    }\n\n    const rng = this.context.invoke('editor.getLastRange');\n    if (rng.isCollapsed() && rng.isOnAnchor()) {\n      const anchor = dom.ancestor(rng.sc, dom.isAnchor);\n      const href = $(anchor).attr('href');\n      this.$popover.find('a').attr('href', href).text(href);\n\n      const pos = dom.posFromPlaceholder(anchor);\n      const containerOffset = $(this.options.container).offset();\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class ImageDialog {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    let imageLimitation = '';\n    if (this.options.maximumImageFileSize) {\n      const unit = Math.floor(Math.log(this.options.maximumImageFileSize) / Math.log(1024));\n      const readableSize = (this.options.maximumImageFileSize / Math.pow(1024, unit)).toFixed(2) * 1 +\n                         ' ' + ' KMGTP'[unit] + 'B';\n      imageLimitation = `<small>${this.lang.image.maximumFileSize + ' : ' + readableSize}</small>`;\n    }\n\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group note-group-select-from-files\">',\n        '<label for=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.selectFromFiles + '</label>',\n        '<input id=\"note-dialog-image-file-' + this.options.id + '\" class=\"note-image-input form-control-file note-form-control note-input\" ',\n        ' type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>',\n        imageLimitation,\n      '</div>',\n      '<div class=\"form-group note-group-image-url\">',\n        '<label for=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-form-label\">' + this.lang.image.url + '</label>',\n        '<input id=\"note-dialog-image-url-' + this.options.id + '\" class=\"note-image-url form-control note-form-control note-input\" type=\"text\"/>',\n      '</div>',\n    ].join('');\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-image-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.image.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.image.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  show() {\n    this.context.invoke('editor.saveRange');\n    this.showImageDialog().then((data) => {\n      // [workaround] hide dialog before restore range for IE range focus\n      this.ui.hideDialog(this.$dialog);\n      this.context.invoke('editor.restoreRange');\n\n      if (typeof data === 'string') { // image url\n        // If onImageLinkInsert set,\n        if (this.options.callbacks.onImageLinkInsert) {\n          this.context.triggerEvent('image.link.insert', data);\n        } else {\n          this.context.invoke('editor.insertImage', data);\n        }\n      } else { // array of files\n        this.context.invoke('editor.insertImagesOrCallback', data);\n      }\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n\n  /**\n   * show image dialog\n   *\n   * @param {jQuery} $dialog\n   * @return {Promise}\n   */\n  showImageDialog() {\n    return $.Deferred((deferred) => {\n      const $imageInput = this.$dialog.find('.note-image-input');\n      const $imageUrl = this.$dialog.find('.note-image-url');\n      const $imageBtn = this.$dialog.find('.note-image-btn');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        // Cloning imageInput to clear element.\n        $imageInput.replaceWith($imageInput.clone().on('change', (event) => {\n          deferred.resolve(event.target.files || event.target.value);\n        }).val(''));\n\n        $imageUrl.on('input paste propertychange', () => {\n          this.ui.toggleBtn($imageBtn, $imageUrl.val());\n        }).val('');\n\n        if (!env.isSupportTouch) {\n          $imageUrl.trigger('focus');\n        }\n\n        $imageBtn.click((event) => {\n          event.preventDefault();\n          deferred.resolve($imageUrl.val());\n        });\n\n        this.bindEnterKey($imageUrl, $imageBtn);\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        $imageInput.off();\n        $imageUrl.off();\n        $imageBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\n/**\n * Image popover module\n *  mouse events that show/hide popover will be handled by Handle.js.\n *  Handle.js will receive the events and invoke 'imagePopover.update'.\n */\nexport default class ImagePopover {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n\n    this.editable = context.layoutInfo.editable[0];\n    this.options = context.options;\n\n    this.events = {\n      'summernote.disable summernote.blur': () => {\n        this.hide();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.image);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-image-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n    this.context.invoke('buttons.build', $content, this.options.popover.image);\n\n    this.$popover.on('mousedown', (e) => { e.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(target, event) {\n    if (dom.isImg(target)) {\n      const position = $(target).offset();\n      const containerOffset = $(this.options.container).offset();\n      let pos = {};\n      if (this.options.popatmouse) {\n        pos.left = event.pageX - 20;\n        pos.top = event.pageY;\n      } else {\n        pos = position;\n      }\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\n\nexport default class TablePopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n    this.events = {\n      'summernote.mousedown': (we, e) => {\n        this.update(e.target);\n      },\n      'summernote.keyup summernote.scroll summernote.change': () => {\n        this.update();\n      },\n      'summernote.disable summernote.blur': () => {\n        this.hide();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return !lists.isEmpty(this.options.popover.table);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-table-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content,.note-popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.table);\n\n    // [workaround] Disable Firefox's default table editor\n    if (env.isFF) {\n      document.execCommand('enableInlineTableEditing', false, false);\n    }\n\n    this.$popover.on('mousedown', (e) => { e.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(target) {\n    if (this.context.isDisabled()) {\n      return false;\n    }\n\n    const isCell = dom.isCell(target);\n\n    if (isCell) {\n      const pos = dom.posFromPlaceholder(target);\n      const containerOffset = $(this.options.container).offset();\n      pos.top -= containerOffset.top;\n      pos.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: pos.left,\n        top: pos.top,\n      });\n    } else {\n      this.hide();\n    }\n\n    return isCell;\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\nimport key from '../core/key';\n\nexport default class VideoDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<div class=\"form-group note-form-group row-fluid\">',\n        `<label for=\"note-dialog-video-url-${this.options.id}\" class=\"note-form-label\">${this.lang.video.url} <small class=\"text-muted\">${this.lang.video.providers}</small></label>`,\n        `<input id=\"note-dialog-video-url-${this.options.id}\" class=\"note-video-url form-control note-form-control note-input\" type=\"text\"/>`,\n      '</div>',\n    ].join('');\n    const buttonClass = 'btn btn-primary note-btn note-btn-primary note-video-btn';\n    const footer = `<input type=\"button\" href=\"#\" class=\"${buttonClass}\" value=\"${this.lang.video.insert}\" disabled>`;\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.video.insert,\n      fade: this.options.dialogsFade,\n      body: body,\n      footer: footer,\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  bindEnterKey($input, $btn) {\n    $input.on('keypress', (event) => {\n      if (event.keyCode === key.code.ENTER) {\n        event.preventDefault();\n        $btn.trigger('click');\n      }\n    });\n  }\n\n  createVideoNode(url) {\n    // video url patterns(youtube, instagram, vimeo, dailymotion, youku, mp4, ogg, webm)\n    const ytRegExp = /\\/\\/(?:(?:www|m)\\.)?(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))([\\w|-]{11})(?:(?:[\\?&]t=)(\\S+))?$/;\n    const ytRegExpForStart = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s)?$/;\n    const ytMatch = url.match(ytRegExp);\n\n    const igRegExp = /(?:www\\.|\\/\\/)instagram\\.com\\/p\\/(.[a-zA-Z0-9_-]*)/;\n    const igMatch = url.match(igRegExp);\n\n    const vRegExp = /\\/\\/vine\\.co\\/v\\/([a-zA-Z0-9]+)/;\n    const vMatch = url.match(vRegExp);\n\n    const vimRegExp = /\\/\\/(player\\.)?vimeo\\.com\\/([a-z]*\\/)*(\\d+)[?]?.*/;\n    const vimMatch = url.match(vimRegExp);\n\n    const dmRegExp = /.+dailymotion.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n    const dmMatch = url.match(dmRegExp);\n\n    const youkuRegExp = /\\/\\/v\\.youku\\.com\\/v_show\\/id_(\\w+)=*\\.html/;\n    const youkuMatch = url.match(youkuRegExp);\n\n    const qqRegExp = /\\/\\/v\\.qq\\.com.*?vid=(.+)/;\n    const qqMatch = url.match(qqRegExp);\n\n    const qqRegExp2 = /\\/\\/v\\.qq\\.com\\/x?\\/?(page|cover).*?\\/([^\\/]+)\\.html\\??.*/;\n    const qqMatch2 = url.match(qqRegExp2);\n\n    const mp4RegExp = /^.+.(mp4|m4v)$/;\n    const mp4Match = url.match(mp4RegExp);\n\n    const oggRegExp = /^.+.(ogg|ogv)$/;\n    const oggMatch = url.match(oggRegExp);\n\n    const webmRegExp = /^.+.(webm)$/;\n    const webmMatch = url.match(webmRegExp);\n\n    const fbRegExp = /(?:www\\.|\\/\\/)facebook\\.com\\/([^\\/]+)\\/videos\\/([0-9]+)/;\n    const fbMatch = url.match(fbRegExp);\n\n    let $video;\n    if (ytMatch && ytMatch[1].length === 11) {\n      const youtubeId = ytMatch[1];\n      var start = 0;\n      if (typeof ytMatch[2] !== 'undefined') {\n        const ytMatchForStart = ytMatch[2].match(ytRegExpForStart);\n        if (ytMatchForStart) {\n          for (var n = [3600, 60, 1], i = 0, r = n.length; i < r; i++) {\n            start += (typeof ytMatchForStart[i + 1] !== 'undefined' ? n[i] * parseInt(ytMatchForStart[i + 1], 10) : 0);\n          }\n        }\n      }\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', '//www.youtube.com/embed/' + youtubeId + (start > 0 ? '?start=' + start : ''))\n        .attr('width', '640').attr('height', '360');\n    } else if (igMatch && igMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', 'https://instagram.com/p/' + igMatch[1] + '/embed/')\n        .attr('width', '612').attr('height', '710')\n        .attr('scrolling', 'no')\n        .attr('allowtransparency', 'true');\n    } else if (vMatch && vMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', vMatch[0] + '/embed/simple')\n        .attr('width', '600').attr('height', '600')\n        .attr('class', 'vine-embed');\n    } else if (vimMatch && vimMatch[3].length) {\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('src', '//player.vimeo.com/video/' + vimMatch[3])\n        .attr('width', '640').attr('height', '360');\n    } else if (dmMatch && dmMatch[2].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', '//www.dailymotion.com/embed/video/' + dmMatch[2])\n        .attr('width', '640').attr('height', '360');\n    } else if (youkuMatch && youkuMatch[1].length) {\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('height', '498')\n        .attr('width', '510')\n        .attr('src', '//player.youku.com/embed/' + youkuMatch[1]);\n    } else if ((qqMatch && qqMatch[1].length) || (qqMatch2 && qqMatch2[2].length)) {\n      const vid = ((qqMatch && qqMatch[1].length) ? qqMatch[1] : qqMatch2[2]);\n      $video = $('<iframe webkitallowfullscreen mozallowfullscreen allowfullscreen>')\n        .attr('frameborder', 0)\n        .attr('height', '310')\n        .attr('width', '500')\n        .attr('src', 'https://v.qq.com/txp/iframe/player.html?vid=' + vid + '&amp;auto=0');\n    } else if (mp4Match || oggMatch || webmMatch) {\n      $video = $('<video controls>')\n        .attr('src', url)\n        .attr('width', '640').attr('height', '360');\n    } else if (fbMatch && fbMatch[0].length) {\n      $video = $('<iframe>')\n        .attr('frameborder', 0)\n        .attr('src', 'https://www.facebook.com/plugins/video.php?href=' + encodeURIComponent(fbMatch[0]) + '&show_text=0&width=560')\n        .attr('width', '560').attr('height', '301')\n        .attr('scrolling', 'no')\n        .attr('allowtransparency', 'true');\n    } else {\n      // this is not a known video link. Now what, Cat? Now what?\n      return false;\n    }\n\n    $video.addClass('note-video-clip');\n\n    return $video[0];\n  }\n\n  show() {\n    const text = this.context.invoke('editor.getSelectedText');\n    this.context.invoke('editor.saveRange');\n    this.showVideoDialog(text).then((url) => {\n      // [workaround] hide dialog before restore range for IE range focus\n      this.ui.hideDialog(this.$dialog);\n      this.context.invoke('editor.restoreRange');\n\n      // build node\n      const $node = this.createVideoNode(url);\n\n      if ($node) {\n        // insert video node\n        this.context.invoke('editor.insertNode', $node);\n      }\n    }).fail(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n\n  /**\n   * show video dialog\n   *\n   * @param {jQuery} $dialog\n   * @return {Promise}\n   */\n  showVideoDialog(/* text */) {\n    return $.Deferred((deferred) => {\n      const $videoUrl = this.$dialog.find('.note-video-url');\n      const $videoBtn = this.$dialog.find('.note-video-btn');\n\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n\n        $videoUrl.on('input paste propertychange', () => {\n          this.ui.toggleBtn($videoBtn, $videoUrl.val());\n        });\n\n        if (!env.isSupportTouch) {\n          $videoUrl.trigger('focus');\n        }\n\n        $videoBtn.click((event) => {\n          event.preventDefault();\n          deferred.resolve($videoUrl.val());\n        });\n\n        this.bindEnterKey($videoUrl, $videoBtn);\n      });\n\n      this.ui.onDialogHidden(this.$dialog, () => {\n        $videoUrl.off();\n        $videoBtn.off();\n\n        if (deferred.state() === 'pending') {\n          deferred.reject();\n        }\n      });\n\n      this.ui.showDialog(this.$dialog);\n    });\n  }\n}\n","import $ from 'jquery';\nimport env from '../core/env';\n\nexport default class HelpDialog {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$body = $(document.body);\n    this.$editor = context.layoutInfo.editor;\n    this.options = context.options;\n    this.lang = this.options.langInfo;\n  }\n\n  initialize() {\n    const $container = this.options.dialogsInBody ? this.$body : this.options.container;\n    const body = [\n      '<p class=\"text-center\">',\n        '<a href=\"http://summernote.org/\" target=\"_blank\">Summernote @@VERSION@@</a> · ',\n        '<a href=\"https://github.com/summernote/summernote\" target=\"_blank\">Project</a> · ',\n        '<a href=\"https://github.com/summernote/summernote/issues\" target=\"_blank\">Issues</a>',\n      '</p>',\n    ].join('');\n\n    this.$dialog = this.ui.dialog({\n      title: this.lang.options.help,\n      fade: this.options.dialogsFade,\n      body: this.createShortcutList(),\n      footer: body,\n      callback: ($node) => {\n        $node.find('.modal-body,.note-modal-body').css({\n          'max-height': 300,\n          'overflow': 'scroll',\n        });\n      },\n    }).render().appendTo($container);\n  }\n\n  destroy() {\n    this.ui.hideDialog(this.$dialog);\n    this.$dialog.remove();\n  }\n\n  createShortcutList() {\n    const keyMap = this.options.keyMap[env.isMac ? 'mac' : 'pc'];\n    return Object.keys(keyMap).map((key) => {\n      const command = keyMap[key];\n      const $row = $('<div><div class=\"help-list-item\"></div></div>');\n      $row.append($('<label><kbd>' + key + '</kdb></label>').css({\n        'width': 180,\n        'margin-right': 10,\n      })).append($('<span/>').html(this.context.memo('help.' + command) || command));\n      return $row.html();\n    }).join('');\n  }\n\n  /**\n   * show help dialog\n   *\n   * @return {Promise}\n   */\n  showHelpDialog() {\n    return $.Deferred((deferred) => {\n      this.ui.onDialogShown(this.$dialog, () => {\n        this.context.triggerEvent('dialog.shown');\n        deferred.resolve();\n      });\n      this.ui.showDialog(this.$dialog);\n    }).promise();\n  }\n\n  show() {\n    this.context.invoke('editor.saveRange');\n    this.showHelpDialog().then(() => {\n      this.context.invoke('editor.restoreRange');\n    });\n  }\n}\n","import $ from 'jquery';\nimport lists from '../core/lists';\n\nconst AIRMODE_POPOVER_X_OFFSET = -5;\nconst AIRMODE_POPOVER_Y_OFFSET = 5;\n\nexport default class AirPopover {\n  constructor(context) {\n    this.context = context;\n    this.ui = $.summernote.ui;\n    this.options = context.options;\n\n    this.hidable = true;\n    this.onContextmenu = false;\n    this.pageX = null;\n    this.pageY = null;\n\n    this.events = {\n      'summernote.contextmenu': (e) => {\n        if (this.options.editing) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.onContextmenu = true;\n          this.update(true);\n        }\n      },\n      'summernote.mousedown': (we, e) => {\n        this.pageX = e.pageX;\n        this.pageY = e.pageY;\n      },\n      'summernote.keyup summernote.mouseup summernote.scroll': (we, e) => {\n        if (this.options.editing && !this.onContextmenu) {\n          this.pageX = e.pageX;\n          this.pageY = e.pageY;\n          this.update();\n        }\n        this.onContextmenu = false;\n      },\n      'summernote.disable summernote.change summernote.dialog.shown summernote.blur': () => {\n        this.hide();\n      },\n      'summernote.focusout': () => {\n        if (!this.$popover.is(':active,:focus')) {\n          this.hide();\n        }\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return this.options.airMode && !lists.isEmpty(this.options.popover.air);\n  }\n\n  initialize() {\n    this.$popover = this.ui.popover({\n      className: 'note-air-popover',\n    }).render().appendTo(this.options.container);\n    const $content = this.$popover.find('.popover-content');\n\n    this.context.invoke('buttons.build', $content, this.options.popover.air);\n\n    // disable hiding this popover preemptively by 'summernote.blur' event.\n    this.$popover.on('mousedown', () => { this.hidable = false; });\n    // (re-)enable hiding after 'summernote.blur' has been handled (aka. ignored).\n    this.$popover.on('mouseup', () => { this.hidable = true; });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  update(forcelyOpen) {\n    const styleInfo = this.context.invoke('editor.currentStyle');\n    if (styleInfo.range && (!styleInfo.range.isCollapsed() || forcelyOpen)) {\n      let rect = {\n        left: this.pageX,\n        top: this.pageY,\n      };\n\n      const containerOffset = $(this.options.container).offset();\n      rect.top -= containerOffset.top;\n      rect.left -= containerOffset.left;\n\n      this.$popover.css({\n        display: 'block',\n        left: Math.max(rect.left, 0) + AIRMODE_POPOVER_X_OFFSET,\n        top: rect.top + AIRMODE_POPOVER_Y_OFFSET,\n      });\n      this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n    } else {\n      this.hide();\n    }\n  }\n\n  updateCodeview(isCodeview) {\n    this.ui.toggleBtnActive(this.$popover.find('.btn-codeview'), isCodeview);\n    if (isCodeview) {\n      this.hide();\n    } \n  }\n\n  hide() {\n    if (this.hidable) {\n      this.$popover.hide();\n    }\n  }\n}\n","import $ from 'jquery';\nimport func from '../core/func';\nimport lists from '../core/lists';\nimport dom from '../core/dom';\nimport range from '../core/range';\nimport key from '../core/key';\n\nconst POPOVER_DIST = 5;\n\nexport default class HintPopover {\n  constructor(context) {\n    this.context = context;\n\n    this.ui = $.summernote.ui;\n    this.$editable = context.layoutInfo.editable;\n    this.options = context.options;\n    this.hint = this.options.hint || [];\n    this.direction = this.options.hintDirection || 'bottom';\n    this.hints = Array.isArray(this.hint) ? this.hint : [this.hint];\n\n    this.events = {\n      'summernote.keyup': (we, e) => {\n        if (!e.isDefaultPrevented()) {\n          this.handleKeyup(e);\n        }\n      },\n      'summernote.keydown': (we, e) => {\n        this.handleKeydown(e);\n      },\n      'summernote.disable summernote.dialog.shown summernote.blur': () => {\n        this.hide();\n      },\n    };\n  }\n\n  shouldInitialize() {\n    return this.hints.length > 0;\n  }\n\n  initialize() {\n    this.lastWordRange = null;\n    this.matchingWord = null;\n    this.$popover = this.ui.popover({\n      className: 'note-hint-popover',\n      hideArrow: true,\n      direction: '',\n    }).render().appendTo(this.options.container);\n\n    this.$popover.hide();\n    this.$content = this.$popover.find('.popover-content,.note-popover-content');\n    this.$content.on('click', '.note-hint-item', (e) => {\n      this.$content.find('.active').removeClass('active');\n      $(e.currentTarget).addClass('active');\n      this.replace();\n    });\n\n    this.$popover.on('mousedown', (e) => { e.preventDefault(); });\n  }\n\n  destroy() {\n    this.$popover.remove();\n  }\n\n  selectItem($item) {\n    this.$content.find('.active').removeClass('active');\n    $item.addClass('active');\n\n    this.$content[0].scrollTop = $item[0].offsetTop - (this.$content.innerHeight() / 2);\n  }\n\n  moveDown() {\n    const $current = this.$content.find('.note-hint-item.active');\n    const $next = $current.next();\n\n    if ($next.length) {\n      this.selectItem($next);\n    } else {\n      let $nextGroup = $current.parent().next();\n\n      if (!$nextGroup.length) {\n        $nextGroup = this.$content.find('.note-hint-group').first();\n      }\n\n      this.selectItem($nextGroup.find('.note-hint-item').first());\n    }\n  }\n\n  moveUp() {\n    const $current = this.$content.find('.note-hint-item.active');\n    const $prev = $current.prev();\n\n    if ($prev.length) {\n      this.selectItem($prev);\n    } else {\n      let $prevGroup = $current.parent().prev();\n\n      if (!$prevGroup.length) {\n        $prevGroup = this.$content.find('.note-hint-group').last();\n      }\n\n      this.selectItem($prevGroup.find('.note-hint-item').last());\n    }\n  }\n\n  replace() {\n    const $item = this.$content.find('.note-hint-item.active');\n\n    if ($item.length) {\n      var node = this.nodeFromItem($item);\n      // If matchingWord length = 0 -> capture OK / open hint / but as mention capture \"\" (\\w*)\n      if (this.matchingWord !== null && this.matchingWord.length === 0) {\n        this.lastWordRange.so = this.lastWordRange.eo;\n      // Else si > 0 and normal case -> adjust range \"before\" for correct position of insertion\n      } else if (this.matchingWord !== null && this.matchingWord.length > 0 && !this.lastWordRange.isCollapsed()) {\n        let rangeCompute = this.lastWordRange.eo - this.lastWordRange.so - this.matchingWord.length;\n        if (rangeCompute > 0) {\n          this.lastWordRange.so += rangeCompute;\n        }\n      }\n      this.lastWordRange.insertNode(node);\n\n      if (this.options.hintSelect === 'next') {\n        var blank = document.createTextNode('');\n        $(node).after(blank);\n        range.createFromNodeBefore(blank).select();\n      } else {\n        range.createFromNodeAfter(node).select();\n      }\n\n      this.lastWordRange = null;\n      this.hide();\n      this.context.invoke('editor.focus');\n    }\n  }\n\n  nodeFromItem($item) {\n    const hint = this.hints[$item.data('index')];\n    const item = $item.data('item');\n    let node = hint.content ? hint.content(item) : item;\n    if (typeof node === 'string') {\n      node = dom.createText(node);\n    }\n    return node;\n  }\n\n  createItemTemplates(hintIdx, items) {\n    const hint = this.hints[hintIdx];\n    return items.map((item /*, idx */) => {\n      const $item = $('<div class=\"note-hint-item\"/>');\n      $item.append(hint.template ? hint.template(item) : item + '');\n      $item.data({\n        'index': hintIdx,\n        'item': item,\n      });\n      return $item;\n    });\n  }\n\n  handleKeydown(e) {\n    if (!this.$popover.is(':visible')) {\n      return;\n    }\n\n    if (e.keyCode === key.code.ENTER) {\n      e.preventDefault();\n      this.replace();\n    } else if (e.keyCode === key.code.UP) {\n      e.preventDefault();\n      this.moveUp();\n    } else if (e.keyCode === key.code.DOWN) {\n      e.preventDefault();\n      this.moveDown();\n    }\n  }\n\n  searchKeyword(index, keyword, callback) {\n    const hint = this.hints[index];\n    if (hint && hint.match.test(keyword) && hint.search) {\n      const matches = hint.match.exec(keyword);\n      this.matchingWord = matches[0];\n      hint.search(matches[1], callback);\n    } else {\n      callback();\n    }\n  }\n\n  createGroup(idx, keyword) {\n    const $group = $('<div class=\"note-hint-group note-hint-group-' + idx + '\"></div>');\n    this.searchKeyword(idx, keyword, (items) => {\n      items = items || [];\n      if (items.length) {\n        $group.html(this.createItemTemplates(idx, items));\n        this.show();\n      }\n    });\n\n    return $group;\n  }\n\n  handleKeyup(e) {\n    if (!lists.contains([key.code.ENTER, key.code.UP, key.code.DOWN], e.keyCode)) {\n      let range = this.context.invoke('editor.getLastRange');\n      let wordRange, keyword;\n      if (this.options.hintMode === 'words') {\n        wordRange = range.getWordsRange(range);\n        keyword = wordRange.toString();\n\n        this.hints.forEach((hint) => {\n          if (hint.match.test(keyword)) {\n            wordRange = range.getWordsMatchRange(hint.match);\n            return false;\n          }\n        });\n\n        if (!wordRange) {\n          this.hide();\n          return;\n        }\n\n        keyword = wordRange.toString();\n      } else {\n        wordRange = range.getWordRange();\n        keyword = wordRange.toString();\n      }\n\n      if (this.hints.length && keyword) {\n        this.$content.empty();\n\n        const bnd = func.rect2bnd(lists.last(wordRange.getClientRects()));\n        const containerOffset = $(this.options.container).offset();\n        if (bnd) {\n          bnd.top -= containerOffset.top;\n          bnd.left -= containerOffset.left;\n\n          this.$popover.hide();\n          this.lastWordRange = wordRange;\n          this.hints.forEach((hint, idx) => {\n            if (hint.match.test(keyword)) {\n              this.createGroup(idx, keyword).appendTo(this.$content);\n            }\n          });\n          // select first .note-hint-item\n          this.$content.find('.note-hint-item:first').addClass('active');\n\n          // set position for popover after group is created\n          if (this.direction === 'top') {\n            this.$popover.css({\n              left: bnd.left,\n              top: bnd.top - this.$popover.outerHeight() - POPOVER_DIST,\n            });\n          } else {\n            this.$popover.css({\n              left: bnd.left,\n              top: bnd.top + bnd.height + POPOVER_DIST,\n            });\n          }\n        }\n      } else {\n        this.hide();\n      }\n    }\n  }\n\n  show() {\n    this.$popover.show();\n  }\n\n  hide() {\n    this.$popover.hide();\n  }\n}\n","import $ from 'jquery';\nimport './summernote-en-US';\nimport '../summernote';\nimport dom from './core/dom';\nimport range from './core/range';\nimport lists from './core/lists';\nimport Editor from './module/Editor';\nimport Clipboard from './module/Clipboard';\nimport Dropzone from './module/Dropzone';\nimport Codeview from './module/Codeview';\nimport Statusbar from './module/Statusbar';\nimport Fullscreen from './module/Fullscreen';\nimport Handle from './module/Handle';\nimport AutoLink from './module/AutoLink';\nimport AutoSync from './module/AutoSync';\nimport AutoReplace from './module/AutoReplace';\nimport Placeholder from './module/Placeholder';\nimport Buttons from './module/Buttons';\nimport Toolbar from './module/Toolbar';\nimport LinkDialog from './module/LinkDialog';\nimport LinkPopover from './module/LinkPopover';\nimport ImageDialog from './module/ImageDialog';\nimport ImagePopover from './module/ImagePopover';\nimport TablePopover from './module/TablePopover';\nimport VideoDialog from './module/VideoDialog';\nimport HelpDialog from './module/HelpDialog';\nimport AirPopover from './module/AirPopover';\nimport HintPopover from './module/HintPopover';\n\n$.summernote = $.extend($.summernote, {\n  version: '@@VERSION@@',\n  plugins: {},\n\n  dom: dom,\n  range: range,\n  lists: lists,\n\n  options: {\n    langInfo: $.summernote.lang['en-US'],\n    editing: true,\n    modules: {\n      'editor': Editor,\n      'clipboard': Clipboard,\n      'dropzone': Dropzone,\n      'codeview': Codeview,\n      'statusbar': Statusbar,\n      'fullscreen': Fullscreen,\n      'handle': Handle,\n      // FIXME: HintPopover must be front of autolink\n      //  - Script error about range when Enter key is pressed on hint popover\n      'hintPopover': HintPopover,\n      'autoLink': AutoLink,\n      'autoSync': AutoSync,\n      'autoReplace': AutoReplace,\n      'placeholder': Placeholder,\n      'buttons': Buttons,\n      'toolbar': Toolbar,\n      'linkDialog': LinkDialog,\n      'linkPopover': LinkPopover,\n      'imageDialog': ImageDialog,\n      'imagePopover': ImagePopover,\n      'tablePopover': TablePopover,\n      'videoDialog': VideoDialog,\n      'helpDialog': HelpDialog,\n      'airPopover': AirPopover,\n    },\n\n    buttons: {},\n\n    lang: 'en-US',\n\n    followingToolbar: false,\n    toolbarPosition: 'top',\n    otherStaticBar: '',\n\n    // toolbar\n    codeviewKeepButton: false,\n    toolbar: [\n      ['style', ['style']],\n      ['font', ['bold', 'underline', 'clear']],\n      ['fontname', ['fontname']],\n      ['color', ['color']],\n      ['para', ['ul', 'ol', 'paragraph']],\n      ['table', ['table']],\n      ['insert', ['link', 'picture', 'video']],\n      ['view', ['fullscreen', 'codeview', 'help']],\n    ],\n\n    // popover\n    popatmouse: true,\n    popover: {\n      image: [\n        ['resize', ['resizeFull', 'resizeHalf', 'resizeQuarter', 'resizeNone']],\n        ['float', ['floatLeft', 'floatRight', 'floatNone']],\n        ['remove', ['removeMedia']],\n      ],\n      link: [\n        ['link', ['linkDialogShow', 'unlink']],\n      ],\n      table: [\n        ['add', ['addRowDown', 'addRowUp', 'addColLeft', 'addColRight']],\n        ['delete', ['deleteRow', 'deleteCol', 'deleteTable']],\n      ],\n      air: [\n        ['color', ['color']],\n        ['font', ['bold', 'underline', 'clear']],\n        ['para', ['ul', 'paragraph']],\n        ['table', ['table']],\n        ['insert', ['link', 'picture']],\n        ['view', ['fullscreen', 'codeview']],\n      ],\n    },\n\n    // air mode: inline editor\n    airMode: false,\n    overrideContextMenu: false, // TBD\n\n    width: null,\n    height: null,\n    linkTargetBlank: true,\n    useProtocol: true,\n    defaultProtocol: 'http://',\n\n    focus: false,\n    tabDisabled: false,\n    tabSize: 4,\n    styleWithCSS: false,\n    shortcuts: true,\n    textareaAutoSync: true,\n    tooltip: 'auto',\n    container: null,\n    maxTextLength: 0,\n    blockquoteBreakingLevel: 2,\n    spellCheck: true,\n    disableGrammar: false,\n    placeholder: null,\n    inheritPlaceholder: false,\n    // TODO: need to be documented\n    recordEveryKeystroke: false,\n    historyLimit: 200,\n\n    // TODO: need to be documented\n    showDomainOnlyForAutolink: false,\n\n    // TODO: need to be documented\n    hintMode: 'word',\n    hintSelect: 'after',\n    hintDirection: 'bottom',\n\n    styleTags: ['p', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n\n    fontNames: [\n      'Arial', 'Arial Black', 'Comic Sans MS', 'Courier New',\n      'Helvetica Neue', 'Helvetica', 'Impact', 'Lucida Grande',\n      'Tahoma', 'Times New Roman', 'Verdana',\n    ],\n    fontNamesIgnoreCheck: [],\n    addDefaultFonts: true,\n\n    fontSizes: ['8', '9', '10', '11', '12', '14', '18', '24', '36'],\n\n    fontSizeUnits: ['px', 'pt'],\n\n    // pallete colors(n x n)\n    colors: [\n      ['#000000', '#424242', '#636363', '#9C9C94', '#CEC6CE', '#EFEFEF', '#F7F7F7', '#FFFFFF'],\n      ['#FF0000', '#FF9C00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#9C00FF', '#FF00FF'],\n      ['#F7C6CE', '#FFE7CE', '#FFEFC6', '#D6EFD6', '#CEDEE7', '#CEE7F7', '#D6D6E7', '#E7D6DE'],\n      ['#E79C9C', '#FFC69C', '#FFE79C', '#B5D6A5', '#A5C6CE', '#9CC6EF', '#B5A5D6', '#D6A5BD'],\n      ['#E76363', '#F7AD6B', '#FFD663', '#94BD7B', '#73A5AD', '#6BADDE', '#8C7BC6', '#C67BA5'],\n      ['#CE0000', '#E79439', '#EFC631', '#6BA54A', '#4A7B8C', '#3984C6', '#634AA5', '#A54A7B'],\n      ['#9C0000', '#B56308', '#BD9400', '#397B21', '#104A5A', '#085294', '#311873', '#731842'],\n      ['#630000', '#7B3900', '#846300', '#295218', '#083139', '#003163', '#21104A', '#4A1031'],\n    ],\n\n    // http://chir.ag/projects/name-that-color/\n    colorsName: [\n      ['Black', 'Tundora', 'Dove Gray', 'Star Dust', 'Pale Slate', 'Gallery', 'Alabaster', 'White'],\n      ['Red', 'Orange Peel', 'Yellow', 'Green', 'Cyan', 'Blue', 'Electric Violet', 'Magenta'],\n      ['Azalea', 'Karry', 'Egg White', 'Zanah', 'Botticelli', 'Tropical Blue', 'Mischka', 'Twilight'],\n      ['Tonys Pink', 'Peach Orange', 'Cream Brulee', 'Sprout', 'Casper', 'Perano', 'Cold Purple', 'Careys Pink'],\n      ['Mandy', 'Rajah', 'Dandelion', 'Olivine', 'Gulf Stream', 'Viking', 'Blue Marguerite', 'Puce'],\n      ['Guardsman Red', 'Fire Bush', 'Golden Dream', 'Chelsea Cucumber', 'Smalt Blue', 'Boston Blue', 'Butterfly Bush', 'Cadillac'],\n      ['Sangria', 'Mai Tai', 'Buddha Gold', 'Forest Green', 'Eden', 'Venice Blue', 'Meteorite', 'Claret'],\n      ['Rosewood', 'Cinnamon', 'Olive', 'Parsley', 'Tiber', 'Midnight Blue', 'Valentino', 'Loulou'],\n    ],\n\n    colorButton: {\n      foreColor: '#000000',\n      backColor: '#FFFF00',\n    },\n\n    lineHeights: ['1.0', '1.2', '1.4', '1.5', '1.6', '1.8', '2.0', '3.0'],\n\n    tableClassName: 'table table-bordered',\n\n    insertTableMaxSize: {\n      col: 10,\n      row: 10,\n    },\n\n    // By default, dialogs are attached in container.\n    dialogsInBody: false,\n    dialogsFade: false,\n\n    maximumImageFileSize: null,\n\n    callbacks: {\n      onBeforeCommand: null,\n      onBlur: null,\n      onBlurCodeview: null,\n      onChange: null,\n      onChangeCodeview: null,\n      onDialogShown: null,\n      onEnter: null,\n      onFocus: null,\n      onImageLinkInsert: null,\n      onImageUpload: null,\n      onImageUploadError: null,\n      onInit: null,\n      onKeydown: null,\n      onKeyup: null,\n      onMousedown: null,\n      onMouseup: null,\n      onPaste: null,\n      onScroll: null,\n    },\n\n    codemirror: {\n      mode: 'text/html',\n      htmlMode: true,\n      lineNumbers: true,\n    },\n\n    codeviewFilter: false,\n    codeviewFilterRegex: /<\\/*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|ilayer|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|t(?:itle|extarea)|xml)[^>]*?>/gi,\n    codeviewIframeFilter: true,\n    codeviewIframeWhitelistSrc: [],\n    codeviewIframeWhitelistSrcBase: [\n      'www.youtube.com',\n      'www.youtube-nocookie.com',\n      'www.facebook.com',\n      'vine.co',\n      'instagram.com',\n      'player.vimeo.com',\n      'www.dailymotion.com',\n      'player.youku.com',\n      'v.qq.com',\n    ],\n\n    keyMap: {\n      pc: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CTRL+Z': 'undo',\n        'CTRL+Y': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CTRL+B': 'bold',\n        'CTRL+I': 'italic',\n        'CTRL+U': 'underline',\n        'CTRL+SHIFT+S': 'strikethrough',\n        'CTRL+BACKSLASH': 'removeFormat',\n        'CTRL+SHIFT+L': 'justifyLeft',\n        'CTRL+SHIFT+E': 'justifyCenter',\n        'CTRL+SHIFT+R': 'justifyRight',\n        'CTRL+SHIFT+J': 'justifyFull',\n        'CTRL+SHIFT+NUM7': 'insertUnorderedList',\n        'CTRL+SHIFT+NUM8': 'insertOrderedList',\n        'CTRL+LEFTBRACKET': 'outdent',\n        'CTRL+RIGHTBRACKET': 'indent',\n        'CTRL+NUM0': 'formatPara',\n        'CTRL+NUM1': 'formatH1',\n        'CTRL+NUM2': 'formatH2',\n        'CTRL+NUM3': 'formatH3',\n        'CTRL+NUM4': 'formatH4',\n        'CTRL+NUM5': 'formatH5',\n        'CTRL+NUM6': 'formatH6',\n        'CTRL+ENTER': 'insertHorizontalRule',\n        'CTRL+K': 'linkDialog.show',\n      },\n\n      mac: {\n        'ESC': 'escape',\n        'ENTER': 'insertParagraph',\n        'CMD+Z': 'undo',\n        'CMD+SHIFT+Z': 'redo',\n        'TAB': 'tab',\n        'SHIFT+TAB': 'untab',\n        'CMD+B': 'bold',\n        'CMD+I': 'italic',\n        'CMD+U': 'underline',\n        'CMD+SHIFT+S': 'strikethrough',\n        'CMD+BACKSLASH': 'removeFormat',\n        'CMD+SHIFT+L': 'justifyLeft',\n        'CMD+SHIFT+E': 'justifyCenter',\n        'CMD+SHIFT+R': 'justifyRight',\n        'CMD+SHIFT+J': 'justifyFull',\n        'CMD+SHIFT+NUM7': 'insertUnorderedList',\n        'CMD+SHIFT+NUM8': 'insertOrderedList',\n        'CMD+LEFTBRACKET': 'outdent',\n        'CMD+RIGHTBRACKET': 'indent',\n        'CMD+NUM0': 'formatPara',\n        'CMD+NUM1': 'formatH1',\n        'CMD+NUM2': 'formatH2',\n        'CMD+NUM3': 'formatH3',\n        'CMD+NUM4': 'formatH4',\n        'CMD+NUM5': 'formatH5',\n        'CMD+NUM6': 'formatH6',\n        'CMD+ENTER': 'insertHorizontalRule',\n        'CMD+K': 'linkDialog.show',\n      },\n    },\n    icons: {\n      'align': 'note-icon-align',\n      'alignCenter': 'note-icon-align-center',\n      'alignJustify': 'note-icon-align-justify',\n      'alignLeft': 'note-icon-align-left',\n      'alignRight': 'note-icon-align-right',\n      'rowBelow': 'note-icon-row-below',\n      'colBefore': 'note-icon-col-before',\n      'colAfter': 'note-icon-col-after',\n      'rowAbove': 'note-icon-row-above',\n      'rowRemove': 'note-icon-row-remove',\n      'colRemove': 'note-icon-col-remove',\n      'indent': 'note-icon-align-indent',\n      'outdent': 'note-icon-align-outdent',\n      'arrowsAlt': 'note-icon-arrows-alt',\n      'bold': 'note-icon-bold',\n      'caret': 'note-icon-caret',\n      'circle': 'note-icon-circle',\n      'close': 'note-icon-close',\n      'code': 'note-icon-code',\n      'eraser': 'note-icon-eraser',\n      'floatLeft': 'note-icon-float-left',\n      'floatRight': 'note-icon-float-right',\n      'font': 'note-icon-font',\n      'frame': 'note-icon-frame',\n      'italic': 'note-icon-italic',\n      'link': 'note-icon-link',\n      'unlink': 'note-icon-chain-broken',\n      'magic': 'note-icon-magic',\n      'menuCheck': 'note-icon-menu-check',\n      'minus': 'note-icon-minus',\n      'orderedlist': 'note-icon-orderedlist',\n      'pencil': 'note-icon-pencil',\n      'picture': 'note-icon-picture',\n      'question': 'note-icon-question',\n      'redo': 'note-icon-redo',\n      'rollback': 'note-icon-rollback',\n      'square': 'note-icon-square',\n      'strikethrough': 'note-icon-strikethrough',\n      'subscript': 'note-icon-subscript',\n      'superscript': 'note-icon-superscript',\n      'table': 'note-icon-table',\n      'textHeight': 'note-icon-text-height',\n      'trash': 'note-icon-trash',\n      'underline': 'note-icon-underline',\n      'undo': 'note-icon-undo',\n      'unorderedlist': 'note-icon-unorderedlist',\n      'video': 'note-icon-video',\n    },\n  },\n});\n","import $ from 'jquery';\n\nclass TooltipUI {\n  constructor($node, options) {\n    this.$node = $node;\n    this.options = $.extend({}, {\n      title: '',\n      target: options.container,\n      trigger: 'hover focus',\n      placement: 'bottom',\n    }, options);\n\n    // create tooltip node\n    this.$tooltip = $([\n      '<div class=\"note-tooltip\">',\n        '<div class=\"note-tooltip-arrow\"></div>',\n        '<div class=\"note-tooltip-content\"></div>',\n      '</div>',\n    ].join(''));\n\n    // define event\n    if (this.options.trigger !== 'manual') {\n      const showCallback = this.show.bind(this);\n      const hideCallback = this.hide.bind(this);\n      const toggleCallback = this.toggle.bind(this);\n\n      this.options.trigger.split(' ').forEach(function(eventName) {\n        if (eventName === 'hover') {\n          $node.off('mouseenter mouseleave');\n          $node.on('mouseenter', showCallback).on('mouseleave', hideCallback);\n        } else if (eventName === 'click') {\n          $node.on('click', toggleCallback);\n        } else if (eventName === 'focus') {\n          $node.on('focus', showCallback).on('blur', hideCallback);\n        }\n      });\n    }\n  }\n\n  show() {\n    const $node = this.$node;\n    const offset = $node.offset();\n    const targetOffset = $(this.options.target).offset();\n    offset.top -= targetOffset.top;\n    offset.left -= targetOffset.left;\n\n    const $tooltip = this.$tooltip;\n    const title = this.options.title || $node.attr('title') || $node.data('title');\n    const placement = this.options.placement || $node.data('placement');\n\n    $tooltip.addClass(placement);\n    $tooltip.find('.note-tooltip-content').text(title);\n    $tooltip.appendTo(this.options.target);\n\n    const nodeWidth = $node.outerWidth();\n    const nodeHeight = $node.outerHeight();\n    const tooltipWidth = $tooltip.outerWidth();\n    const tooltipHeight = $tooltip.outerHeight();\n\n    if (placement === 'bottom') {\n      $tooltip.css({\n        top: offset.top + nodeHeight,\n        left: offset.left + (nodeWidth / 2 - tooltipWidth / 2),\n      });\n    } else if (placement === 'top') {\n      $tooltip.css({\n        top: offset.top - tooltipHeight,\n        left: offset.left + (nodeWidth / 2 - tooltipWidth / 2),\n      });\n    } else if (placement === 'left') {\n      $tooltip.css({\n        top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n        left: offset.left - tooltipWidth,\n      });\n    } else if (placement === 'right') {\n      $tooltip.css({\n        top: offset.top + (nodeHeight / 2 - tooltipHeight / 2),\n        left: offset.left + nodeWidth,\n      });\n    }\n\n    $tooltip.addClass('in');\n  }\n\n  hide() {\n    this.$tooltip.removeClass('in');\n    setTimeout(() => {\n      this.$tooltip.remove();\n    }, 200);\n  }\n\n  toggle() {\n    if (this.$tooltip.hasClass('in')) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n}\n\nexport default TooltipUI;\n","import $ from 'jquery';\n\nclass DropdownUI {\n  constructor($node, options) {\n    this.$button = $node;\n    this.options = $.extend({}, {\n      target: options.container,\n    }, options);\n    this.setEvent();\n  }\n\n  setEvent() {\n    this.$button.on('click', (e) => {\n      this.toggle();\n      e.stopImmediatePropagation();\n    });\n  }\n\n  clear() {\n    var $parent = $('.note-btn-group.open');\n    $parent.find('.note-btn.active').removeClass('active');\n    $parent.removeClass('open');\n  }\n\n  show() {\n    this.$button.addClass('active');\n    this.$button.parent().addClass('open');\n\n    var $dropdown = this.$button.next();\n    var offset = $dropdown.offset();\n    var width = $dropdown.outerWidth();\n    var windowWidth = $(window).width();\n    var targetMarginRight = parseFloat($(this.options.target).css('margin-right'));\n\n    if (offset.left + width > windowWidth - targetMarginRight) {\n      $dropdown.css('margin-left', windowWidth - targetMarginRight - (offset.left + width));\n    } else {\n      $dropdown.css('margin-left', '');\n    }\n  }\n\n  hide() {\n    this.$button.removeClass('active');\n    this.$button.parent().removeClass('open');\n  }\n\n  toggle() {\n    var isOpened = this.$button.parent().hasClass('open');\n\n    this.clear();\n\n    if (isOpened) {\n      this.hide();\n    } else {\n      this.show();\n    }\n  }\n}\n\n$(document).on('click', function(e) {\n  if (!$(e.target).closest('.note-btn-group').length) {\n    $('.note-btn-group.open').removeClass('open');\n    $('.note-btn-group .note-btn.active').removeClass('active');\n  }\n});\n\n$(document).on('click.note-dropdown-menu', function(e) {\n  $(e.target).closest('.note-dropdown-menu').parent().removeClass('open');\n  $(e.target).closest('.note-dropdown-menu').parent().find('.note-btn.active').removeClass('active');\n});\n\nexport default DropdownUI;\n","import $ from 'jquery';\n\nclass ModalUI {\n  constructor($node /*, options */) {\n    this.$modal = $node;\n    this.$backdrop = $('<div class=\"note-modal-backdrop\"/>');\n  }\n\n  show() {\n    this.$backdrop.appendTo(document.body).show();\n    this.$modal.addClass('open').show();\n    this.$modal.trigger('note.modal.show');\n    this.$modal.off('click', '.close').on('click', '.close', this.hide.bind(this));\n    this.$modal.on('keydown', (event) => {\n      if (event.which === 27) {\n        event.preventDefault();\n        this.hide();\n      }\n    });\n  }\n\n  hide() {\n    this.$modal.removeClass('open').hide();\n    this.$backdrop.hide();\n    this.$modal.trigger('note.modal.hide');\n    this.$modal.off('keydown');\n  }\n}\n\nexport default ModalUI;\n","import $ from 'jquery';\nimport renderer from '../base/renderer';\nimport TooltipUI from './ui/TooltipUI';\nimport DropdownUI from './ui/DropdownUI';\nimport ModalUI from './ui/ModalUI';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame\"/>');\nconst toolbar = renderer.create('<div class=\"note-toolbar\" role=\"toolbar\"/>');\nconst editingArea = renderer.create('<div class=\"note-editing-area\"/>');\nconst codable = renderer.create('<textarea class=\"note-codable\" aria-multiline=\"true\"/>');\nconst editable = renderer.create('<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst statusbar = renderer.create([\n  '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>',\n  '<div class=\"note-statusbar\" role=\"status\">',\n    '<div class=\"note-resizebar\" aria-label=\"resize\">',\n      '<div class=\"note-icon-bar\"></div>',\n      '<div class=\"note-icon-bar\"></div>',\n      '<div class=\"note-icon-bar\"></div>',\n    '</div>',\n  '</div>',\n].join(''));\n\nconst airEditor = renderer.create('<div class=\"note-editor note-airframe\"/>');\nconst airEditable = renderer.create([\n  '<div class=\"note-editable\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"></div>',\n  '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"></output>',\n].join(''));\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group\">');\nconst button = renderer.create('<button type=\"button\" class=\"note-btn\" tabindex=\"-1\">', function($node, options) {\n  // set button type\n  if (options && options.tooltip) {\n    $node.attr({\n      'aria-label': options.tooltip,\n    });\n    $node.data('_lite_tooltip', new TooltipUI($node, {\n      title: options.tooltip,\n      container: options.container,\n    })).on('click', (e) => {\n      $(e.currentTarget).data('_lite_tooltip').hide();\n    });\n  }\n  if (options.contents) {\n    $node.html(options.contents);\n  }\n\n  if (options && options.data && options.data.toggle === 'dropdown') {\n    $node.data('_lite_dropdown', new DropdownUI($node, {\n      container: options.container,\n    }));\n  }\n\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nconst dropdown = renderer.create('<div class=\"note-dropdown-menu\" role=\"list\">', function($node, options) {\n  const markup = Array.isArray(options.items) ? options.items.map(function(item) {\n    const value = (typeof item === 'string') ? item : (item.value || '');\n    const content = options.template ? options.template(item) : item;\n    const $temp = $('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + value + '\"></a>');\n\n    $temp.html(content).data('item', item);\n\n    return $temp;\n  }) : options.items;\n\n  $node.html(markup).attr({ 'aria-label': options.title });\n\n  $node.on('click', '> .note-dropdown-item', function(e) {\n    const $a = $(this);\n\n    const item = $a.data('item');\n    const value = $a.data('value');\n\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nconst dropdownCheck = renderer.create('<div class=\"note-dropdown-menu note-check\" role=\"list\">', function($node, options) {\n  const markup = Array.isArray(options.items) ? options.items.map(function(item) {\n    const value = (typeof item === 'string') ? item : (item.value || '');\n    const content = options.template ? options.template(item) : item;\n\n    const $temp = $('<a class=\"note-dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\"></a>');\n    $temp.html([icon(options.checkClassName), ' ', content]).data('item', item);\n    return $temp;\n  }) : options.items;\n\n  $node.html(markup).attr({ 'aria-label': options.title });\n\n  $node.on('click', '> .note-dropdown-item', function(e) {\n    const $a = $(this);\n\n    const item = $a.data('item');\n    const value = $a.data('value');\n\n    if (item.click) {\n      item.click($a);\n    } else if (options.itemClick) {\n      options.itemClick(e, item, value);\n    }\n  });\n  if (options && options.codeviewKeepButton) {\n    $node.addClass('note-codeview-keep');\n  }\n});\n\nconst dropdownButtonContents = function(contents, options) {\n  return contents + ' ' + icon(options.icons.caret, 'span');\n};\n\nconst dropdownButton = function(opt, callback) {\n  return buttonGroup([\n    button({\n      className: 'dropdown-toggle',\n      contents: opt.title + ' ' + icon('note-icon-caret'),\n      tooltip: opt.tooltip,\n      data: {\n        toggle: 'dropdown',\n      },\n    }),\n    dropdown({\n      className: opt.className,\n      items: opt.items,\n      template: opt.template,\n      itemClick: opt.itemClick,\n    }),\n  ], { callback: callback }).render();\n};\n\nconst dropdownCheckButton = function(opt, callback) {\n  return buttonGroup([\n    button({\n      className: 'dropdown-toggle',\n      contents: opt.title + ' ' + icon('note-icon-caret'),\n      tooltip: opt.tooltip,\n      data: {\n        toggle: 'dropdown',\n      },\n    }),\n    dropdownCheck({\n      className: opt.className,\n      checkClassName: opt.checkClassName,\n      items: opt.items,\n      template: opt.template,\n      itemClick: opt.itemClick,\n    }),\n  ], { callback: callback }).render();\n};\n\nconst paragraphDropdownButton = function(opt) {\n  return buttonGroup([\n    button({\n      className: 'dropdown-toggle',\n      contents: opt.title + ' ' + icon('note-icon-caret'),\n      tooltip: opt.tooltip,\n      data: {\n        toggle: 'dropdown',\n      },\n    }),\n    dropdown([\n      buttonGroup({\n        className: 'note-align',\n        children: opt.items[0],\n      }),\n      buttonGroup({\n        className: 'note-list',\n        children: opt.items[1],\n      }),\n    ]),\n  ]).render();\n};\n\nconst tableMoveHandler = function(event, col, row) {\n  const PX_PER_EM = 18;\n  const $picker = $(event.target.parentNode); // target is mousecatcher\n  const $dimensionDisplay = $picker.next();\n  const $catcher = $picker.find('.note-dimension-picker-mousecatcher');\n  const $highlighted = $picker.find('.note-dimension-picker-highlighted');\n  const $unhighlighted = $picker.find('.note-dimension-picker-unhighlighted');\n\n  let posOffset;\n  // HTML5 with jQuery - e.offsetX is undefined in Firefox\n  if (event.offsetX === undefined) {\n    const posCatcher = $(event.target).offset();\n    posOffset = {\n      x: event.pageX - posCatcher.left,\n      y: event.pageY - posCatcher.top,\n    };\n  } else {\n    posOffset = {\n      x: event.offsetX,\n      y: event.offsetY,\n    };\n  }\n\n  const dim = {\n    c: Math.ceil(posOffset.x / PX_PER_EM) || 1,\n    r: Math.ceil(posOffset.y / PX_PER_EM) || 1,\n  };\n\n  $highlighted.css({ width: dim.c + 'em', height: dim.r + 'em' });\n  $catcher.data('value', dim.c + 'x' + dim.r);\n\n  if (dim.c > 3 && dim.c < col) {\n    $unhighlighted.css({ width: dim.c + 1 + 'em' });\n  }\n\n  if (dim.r > 3 && dim.r < row) {\n    $unhighlighted.css({ height: dim.r + 1 + 'em' });\n  }\n\n  $dimensionDisplay.html(dim.c + ' x ' + dim.r);\n};\n\nconst tableDropdownButton = function(opt) {\n  return buttonGroup([\n    button({\n      className: 'dropdown-toggle',\n      contents: opt.title + ' ' + icon('note-icon-caret'),\n      tooltip: opt.tooltip,\n      data: {\n        toggle: 'dropdown',\n      },\n    }),\n    dropdown({\n      className: 'note-table',\n      items: [\n        '<div class=\"note-dimension-picker\">',\n          '<div class=\"note-dimension-picker-mousecatcher\" data-event=\"insertTable\" data-value=\"1x1\"></div>',\n          '<div class=\"note-dimension-picker-highlighted\"></div>',\n          '<div class=\"note-dimension-picker-unhighlighted\"></div>',\n        '</div>',\n        '<div class=\"note-dimension-display\">1 x 1</div>',\n      ].join(''),\n    }),\n  ], {\n    callback: function($node) {\n      const $catcher = $node.find('.note-dimension-picker-mousecatcher');\n      $catcher.css({\n        width: opt.col + 'em',\n        height: opt.row + 'em',\n      })\n        .mousedown(opt.itemClick)\n        .mousemove(function(e) {\n          tableMoveHandler(e, opt.col, opt.row);\n        });\n    },\n  }).render();\n};\n\nconst palette = renderer.create('<div class=\"note-color-palette\"/>', function($node, options) {\n  const contents = [];\n  for (let row = 0, rowSize = options.colors.length; row < rowSize; row++) {\n    const eventName = options.eventName;\n    const colors = options.colors[row];\n    const colorsName = options.colorsName[row];\n    const buttons = [];\n    for (let col = 0, colSize = colors.length; col < colSize; col++) {\n      const color = colors[col];\n      const colorName = colorsName[col];\n      buttons.push([\n        '<button type=\"button\" class=\"note-btn note-color-btn\"',\n        'style=\"background-color:', color, '\" ',\n        'data-event=\"', eventName, '\" ',\n        'data-value=\"', color, '\" ',\n        'data-title=\"', colorName, '\" ',\n        'aria-label=\"', colorName, '\" ',\n        'data-toggle=\"button\" tabindex=\"-1\"></button>',\n      ].join(''));\n    }\n    contents.push('<div class=\"note-color-row\">' + buttons.join('') + '</div>');\n  }\n  $node.html(contents.join(''));\n\n  $node.find('.note-color-btn').each(function() {\n    $(this).data('_lite_tooltip', new TooltipUI($(this), {\n      container: options.container,\n    }));\n  });\n});\n\nconst colorDropdownButton = function(opt, type) {\n  return buttonGroup({\n    className: 'note-color',\n    children: [\n      button({\n        className: 'note-current-color-button',\n        contents: opt.title,\n        tooltip: opt.lang.color.recent,\n        click: opt.currentClick,\n        callback: function($button) {\n          const $recentColor = $button.find('.note-recent-color');\n\n          if (type !== 'foreColor') {\n            $recentColor.css('background-color', '#FFFF00');\n            $button.attr('data-backColor', '#FFFF00');\n          }\n        },\n      }),\n      button({\n        className: 'dropdown-toggle',\n        contents: icon('note-icon-caret'),\n        tooltip: opt.lang.color.more,\n        data: {\n          toggle: 'dropdown',\n        },\n      }),\n      dropdown({\n        items: [\n          '<div>',\n            '<div class=\"note-btn-group btn-background-color\">',\n              '<div class=\"note-palette-title\">' + opt.lang.color.background + '</div>',\n            '<div>',\n            '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"backColor\" data-value=\"transparent\">',\n              opt.lang.color.transparent,\n            '</button>',\n          '</div>',\n          '<div class=\"note-holder\" data-event=\"backColor\"></div>',\n            '<div class=\"btn-sm\">',\n              '<input type=\"color\" id=\"html5bcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">',\n              '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"backColor\" data-value=\"cpbackColor\">',\n                opt.lang.color.cpSelect,\n              '</button>',\n            '</div>',\n          '</div>',\n          '<div class=\"note-btn-group btn-foreground-color\">',\n            '<div class=\"note-palette-title\">' + opt.lang.color.foreground + '</div>',\n            '<div>',\n              '<button type=\"button\" class=\"note-color-reset note-btn note-btn-block\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n                opt.lang.color.resetToDefault,\n              '</button>',\n            '</div>',\n            '<div class=\"note-holder\" data-event=\"foreColor\"></div>',\n              '<div class=\"btn-sm\">',\n                '<input type=\"color\" id=\"html5fcp\" class=\"note-btn btn-default\" value=\"#21104A\" style=\"width:100%;\" data-value=\"cp\">',\n                '<button type=\"button\" class=\"note-color-reset btn\" data-event=\"foreColor\" data-value=\"cpforeColor\">',\n                  opt.lang.color.cpSelect,\n                '</button>',\n              '</div>',\n            '</div>',\n          '</div>',\n        ].join(''),\n        callback: function($dropdown) {\n          $dropdown.find('.note-holder').each(function() {\n            const $holder = $(this);\n            $holder.append(palette({\n              colors: opt.colors,\n              eventName: $holder.data('event'),\n            }).render());\n          });\n\n          if (type === 'fore') {\n            $dropdown.find('.btn-background-color').hide();\n            $dropdown.css({ 'min-width': '210px' });\n          } else if (type === 'back') {\n            $dropdown.find('.btn-foreground-color').hide();\n            $dropdown.css({ 'min-width': '210px' });\n          }\n        },\n        click: function(event) {\n          const $button = $(event.target);\n          const eventName = $button.data('event');\n          let value = $button.data('value');\n          const foreinput = document.getElementById('html5fcp').value;\n          const backinput = document.getElementById('html5bcp').value;\n          if (value === 'cp') {\n            event.stopPropagation();\n          } else if (value === 'cpbackColor') {\n            value = backinput;\n          } else if (value === 'cpforeColor') {\n            value = foreinput;\n          }\n\n          if (eventName && value) {\n            const key = eventName === 'backColor' ? 'background-color' : 'color';\n            const $color = $button.closest('.note-color').find('.note-recent-color');\n            const $currentButton = $button.closest('.note-color').find('.note-current-color-button');\n\n            $color.css(key, value);\n            $currentButton.attr('data-' + eventName, value);\n\n            if (type === 'fore') {\n              opt.itemClick('foreColor', value);\n            } else if (type === 'back') {\n              opt.itemClick('backColor', value);\n            } else {\n              opt.itemClick(eventName, value);\n            }\n          }\n        },\n      }),\n    ],\n  }).render();\n};\n\nconst dialog = renderer.create('<div class=\"note-modal\" aria-hidden=\"false\" tabindex=\"-1\" role=\"dialog\"/>', function($node, options) {\n  if (options.fade) {\n    $node.addClass('fade');\n  }\n  $node.attr({\n    'aria-label': options.title,\n  });\n  $node.html([\n    '<div class=\"note-modal-content\">',\n      (options.title ? '<div class=\"note-modal-header\"><button type=\"button\" class=\"close\" aria-label=\"Close\" aria-hidden=\"true\"><i class=\"note-icon-close\"></i></button><h4 class=\"note-modal-title\">' + options.title + '</h4></div>' : ''),\n      '<div class=\"note-modal-body\">' + options.body + '</div>',\n      (options.footer ? '<div class=\"note-modal-footer\">' + options.footer + '</div>' : ''),\n    '</div>',\n  ].join(''));\n\n  $node.data('modal', new ModalUI($node, options));\n});\n\nconst videoDialog = function(opt) {\n  const body = '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-video-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.video.url + ' <small class=\"text-muted\">' + opt.lang.video.providers + '</small></label>' +\n    '<input id=\"note-dialog-video-url-' + opt.id + '\" class=\"note-video-url note-input\" type=\"text\"/>' +\n  '</div>';\n  const footer = [\n    '<button type=\"button\" href=\"#\" class=\"note-btn note-btn-primary note-video-btn disabled\" disabled>',\n      opt.lang.video.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    title: opt.lang.video.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst imageDialog = function(opt) {\n  const body = '<div class=\"note-form-group note-group-select-from-files\">' +\n    '<label for=\"note-dialog-image-file-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.selectFromFiles + '</label>' +\n    '<input id=\"note-dialog-image-file-' + opt.id + '\" class=\"note-note-image-input note-input\" type=\"file\" name=\"files\" accept=\"image/*\" multiple=\"multiple\"/>' +\n    opt.imageLimitation +\n  '</div>' +\n  '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-image-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.image.url + '</label>' +\n    '<input id=\"note-dialog-image-url-' + opt.id + '\" class=\"note-image-url note-input\" type=\"text\"/>' +\n  '</div>';\n  const footer = [\n    '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-btn-large note-image-btn disabled\" disabled>',\n      opt.lang.image.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    title: opt.lang.image.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst linkDialog = function(opt) {\n  const body = '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.textToDisplay + '</label>' +\n    '<input id=\"note-dialog-link-txt-' + opt.id + '\" class=\"note-link-text note-input\" type=\"text\"/>' +\n  '</div>' +\n  '<div class=\"note-form-group\">' +\n    '<label for=\"note-dialog-link-url-' + opt.id + '\" class=\"note-form-label\">' + opt.lang.link.url + '</label>' +\n    '<input id=\"note-dialog-link-url-' + opt.id + '\" class=\"note-link-url note-input\" type=\"text\" value=\"http://\"/>' +\n  '</div>' +\n  (!opt.disableLinkTarget ? '<div class=\"checkbox\"><label for=\"note-dialog-link-nw-' + opt.id + '\"><input id=\"note-dialog-link-nw-' + opt.id + '\" type=\"checkbox\" checked> ' + opt.lang.link.openInNewWindow + '</label></div>' : '') +\n  '<div class=\"checkbox\"><label for=\"note-dialog-link-up-' + opt.id + '\"><input id=\"note-dialog-link-up-' + opt.id + '\" type=\"checkbox\" checked> ' + opt.lang.link.useProtocol + '</label></div>';\n  const footer = [\n    '<button href=\"#\" type=\"button\" class=\"note-btn note-btn-primary note-link-btn disabled\" disabled>',\n      opt.lang.link.insert,\n    '</button>',\n  ].join('');\n\n  return dialog({\n    className: 'link-dialog',\n    title: opt.lang.link.insert,\n    fade: opt.fade,\n    body: body,\n    footer: footer,\n  }).render();\n};\n\nconst popover = renderer.create([\n  '<div class=\"note-popover bottom\">',\n    '<div class=\"note-popover-arrow\"></div>',\n    '<div class=\"popover-content note-children-container\"></div>',\n  '</div>',\n].join(''), function($node, options) {\n  const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n  $node.addClass(direction).hide();\n\n  if (options.hideArrow) {\n    $node.find('.note-popover-arrow').hide();\n  }\n});\n\nconst checkbox = renderer.create('<div class=\"checkbox\"></div>', function($node, options) {\n  $node.html([\n    '<label' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>',\n      '<input role=\"checkbox\" type=\"checkbox\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''),\n      (options.checked ? ' checked' : ''),\n      ' aria-checked=\"' + (options.checked ? 'true' : 'false') + '\"/>',\n      (options.text ? options.text : ''),\n    '</label>',\n  ].join(''));\n});\n\nconst icon = function(iconClassName, tagName) {\n  tagName = tagName || 'i';\n  return '<' + tagName + ' class=\"' + iconClassName + '\"/>';\n};\n\nconst ui = function(editorOptions) {\n  return {\n    editor: editor,\n    toolbar: toolbar,\n    editingArea: editingArea,\n    codable: codable,\n    editable: editable,\n    statusbar: statusbar,\n    airEditor: airEditor,\n    airEditable: airEditable,\n    buttonGroup: buttonGroup,\n    button: button,\n    dropdown: dropdown,\n    dropdownCheck: dropdownCheck,\n    dropdownButton: dropdownButton,\n    dropdownButtonContents: dropdownButtonContents,\n    dropdownCheckButton: dropdownCheckButton,\n    paragraphDropdownButton: paragraphDropdownButton,\n    tableDropdownButton: tableDropdownButton,\n    colorDropdownButton: colorDropdownButton,\n    palette: palette,\n    dialog: dialog,\n    videoDialog: videoDialog,\n    imageDialog: imageDialog,\n    linkDialog: linkDialog,\n    popover: popover,\n    checkbox: checkbox,\n    icon: icon,\n    options: editorOptions,\n\n    toggleBtn: function($btn, isEnable) {\n      $btn.toggleClass('disabled', !isEnable);\n      $btn.attr('disabled', !isEnable);\n    },\n\n    toggleBtnActive: function($btn, isActive) {\n      $btn.toggleClass('active', isActive);\n    },\n\n    check: function($dom, value) {\n      $dom.find('.checked').removeClass('checked');\n      $dom.find('[data-value=\"' + value + '\"]').addClass('checked');\n    },\n\n    onDialogShown: function($dialog, handler) {\n      $dialog.one('note.modal.show', handler);\n    },\n\n    onDialogHidden: function($dialog, handler) {\n      $dialog.one('note.modal.hide', handler);\n    },\n\n    showDialog: function($dialog) {\n      $dialog.data('modal').show();\n    },\n\n    hideDialog: function($dialog) {\n      $dialog.data('modal').hide();\n    },\n\n    /**\n     * get popover content area\n     *\n     * @param $popover\n     * @returns {*}\n     */\n    getPopoverContent: function($popover) {\n      return $popover.find('.note-popover-content');\n    },\n\n    /**\n     * get dialog's body area\n     *\n     * @param $dialog\n     * @returns {*}\n     */\n    getDialogBody: function($dialog) {\n      return $dialog.find('.note-modal-body');\n    },\n\n    createLayout: function($note) {\n      const $editor = (editorOptions.airMode ? airEditor([\n        editingArea([\n          codable(),\n          airEditable(),\n        ]),\n      ]) : (editorOptions.toolbarPosition === 'bottom'\n        ? editor([\n          editingArea([\n            codable(),\n            editable(),\n          ]),\n          toolbar(),\n          statusbar(),\n        ])\n        : editor([\n          toolbar(),\n          editingArea([\n            codable(),\n            editable(),\n          ]),\n          statusbar(),\n        ])\n      )).render();\n\n      $editor.insertAfter($note);\n\n      return {\n        note: $note,\n        editor: $editor,\n        toolbar: $editor.find('.note-toolbar'),\n        editingArea: $editor.find('.note-editing-area'),\n        editable: $editor.find('.note-editable'),\n        codable: $editor.find('.note-codable'),\n        statusbar: $editor.find('.note-statusbar'),\n      };\n    },\n\n    removeLayout: function($note, layoutInfo) {\n      $note.html(layoutInfo.editable.html());\n      layoutInfo.editor.remove();\n      $note.off('summernote'); // remove summernote custom event\n      $note.show();\n    },\n  };\n};\n\nexport default ui;\n","import $ from 'jquery';\nimport ui from './ui';\nimport '../base/settings.js';\n\nimport '../../styles/summernote-lite.scss';\n\n$.summernote = $.extend($.summernote, {\n  ui_template: ui,\n  interface: 'lite',\n});\n","// extracted by mini-css-extract-plugin"],"sourceRoot":""}