summernote-bs4.js.map 523 KB

1
  1. {"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/styles/summernote-bs4.scss","webpack:///./src/js/bs4/ui.js","webpack:///./src/js/bs4/settings.js"],"names":["Renderer","constructor","markup","children","options","callback","render","$parent","$node","$","contents","html","className","addClass","data","each","k","v","attr","click","on","$container","find","forEach","child","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","hasCodeMirror","window","CodeMirror","isSupportTouch","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","hasOwnProperty","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","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","Object","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","_destroy","removeData","removeLayout","disabled","isDisabled","code","dom","disable","now","editor","buttons","plugins","module","initializeModule","removeModule","removeMemo","triggerEvent","isActivated","undefined","codable","editable","enable","editing","callbacks","trigger","shouldInitialize","ModuleClass","withoutIntialize","createInvokeHandlerAndUpdateState","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","nativeRange","w3cRange","setStart","setEnd","Math","min","getPoints","getStartPoint","getEndPoint","nativeRng","selection","getSelection","rangeCount","removeAllRanges","addRange","scrollIntoView","offsetTop","abs","normalize","getVisiblePoint","isLeftToRight","block","hasRightNode","hasLeftNode","isCollapsed","includeAncestor","fullyContains","leftEdgeNodes","expand","startAncestor","endAncestor","boundaryPoints","isSameContainer","deleteContents","rng","emptyParents","wrapBodyInlineWithPara","inlineSiblings","concat","para","insertNode","pasteHTML","contentsContainer","toString","getWordRange","findAfter","getWordsRange","isNotTextPoint","getWordsMatchRange","regex","index","bookmark","s","path","e","paraBookmark","paras","getClientRects","wrappedRange","createFromSelection","bodyElement","lastChild","createFromBodyElement","createFromNode","anchorNode","getRangeAt","startContainer","startOffset","endContainer","endOffset","textRangeEnd","isTextNode","createFromNodeBefore","createFromNodeAfter","createFromBookmark","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","$editable","stack","stackOffset","makeSnapshot","range","emptyBookmark","applySnapshot","snapshot","rewind","recordUndo","commit","Style","jQueryCSS","$obj","propertyNames","propertyName","fromNode","properties","styleInfo","fontSize","parseInt","stylePara","styleNodes","expandClosestSibling","onlyPartialContains","nodesInRange","tails","elem","$cont","queryCommandState","queryCommandValue","orderedTypes","isUnordered","lineHeight","toFixed","anchor","Bullet","insertOrderedList","toggleList","insertUnorderedList","clustereds","previousList","findList","wrapList","appendToPrevious","releaseList","listName","wrappedParas","diffLists","listNode","prevList","nextList","isEscapseToBody","releasedParas","headList","parentItem","newList","findNextSiblings","lastList","middleList","rootLists","rootList","listNodes","Typing","bullet","insertTab","tabsize","tab","insertParagraph","nextPara","blockquoteBreakingLevel","emptyAnchors","TableResultAction","where","domTable","_startPoint","_virtualTable","_actionCellList","setStartPoint","tagName","console","error","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","addRow","currentTr","trAttributes","recoverAttributes","vTable","actions","idCell","currentCell","tdAttributes","baseCellTr","isTopFromRowSpan","newTd","removeAttr","setAttribute","before","lastTrIndex","after","addCol","rowsGroup","actionIndex","resultStr","attrList","specified","deleteRow","cellPos","virtualPosition","virtualTable","hasRowspan","nextRow","cloneRow","removeAttribute","deleteCol","hasColspan","createTable","colCount","rowCount","tds","tdHTML","idxCol","trs","trHTML","idxRow","$table","tableClassName","deleteTable","KEY_BOGUS","Editor","$editor","lastRange","typing","untab","formatPara","insertHorizontalRule","commands","sCmd","beforeCommand","execCommand","afterCommand","wrapCommand","fontStyling","unit","currentStyle","fontSizeUnit","formatBlock","isLimited","getLastRange","setLastRange","insertText","textNode","onApplyCustomStyle","call","onFormatBlock","hrNode","createLink","linkInfo","linkUrl","linkText","isNewWindow","checkProtocol","additionalTextLength","isTextChanged","onCreateLink","defaultProtocol","anchors","startRange","endRange","colorInfo","foreColor","backColor","insertTable","dim","dimension","removeMedia","restoreTarget","floatMe","toggleClass","resize","isDefaultPrevented","handleKeyMap","preventDefaultEditableShortCuts","spellCheck","disableGrammar","airMode","outerWidth","maxHeight","minHeight","keyMap","metaKey","ctrlKey","altKey","shiftKey","keyName","eventName","tabDisable","pad","maxTextLength","saveRange","thenCollapse","restoreRange","saveTarget","clearTarget","styleFromNode","isPreventTrigger","normalizeContent","tabSize","insertImage","src","param","then","$image","show","insertImagesAsDataURL","files","filename","maximumImageFileSize","insertImagesOrCallback","onImageUpload","getSelectedText","currentRange","spans","firstSpan","noteStatusOutput","getLinkInfo","$anchor","resizeTo","bKeepRatio","imageSize","newRatio","y","x","ratio","hasFocus","is","empty","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","sync","save","toggle","deactivate","activate","purify","codeviewFilter","codeviewFilterRegex","codeviewIframeFilter","whitelist","codeviewIframeWhitelistSrc","codeviewIframeWhitelistSrcBase","tag","RegExp","prettifyHtml","cmEditor","fromTextArea","codemirror","tern","server","TernServer","ternServer","cm","updateArgHints","getValue","setSize","toTextArea","isChange","EDITABLE_PADDING","Statusbar","$statusbar","statusbar","disableResizeEditor","stopPropagation","editableTop","onMouseMove","clientY","minheight","max","Fullscreen","$toolbar","toolbar","$window","$scrollbar","onResize","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","linkTargetBlank","wordRange","AutoSync","AutoReplace","PERIOD","COMMA","SEMICOLON","SLASH","previousKeydownCode","lastWord","jQuery","Node","Placeholder","inheritPlaceholder","isShow","Buttons","invertedKeyMap","representShortcut","editorMethod","button","o","addToolbarButtons","addImagePopoverButtons","addLinkPopoverButtons","addTablePopoverButtons","fontInstalledMap","fontNamesIgnoreCheck","isFontDeservedToAdd","colorPalette","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","eraser","addDefaultFonts","fontname","fontNames","dropdownCheck","checkClassName","menuCheck","fontSizes","fontSizeUnits","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","build","groups","groupIdx","groupLen","group","groupName","$group","btn","updateCurrentStyle","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","zIndex","marginTop","updateFullscreen","updateCodeview","isIncludeCodeview","$btn","toggleBtn","LinkDialog","$body","dialogsInBody","disableLinkTarget","checkbox","checked","buttonClass","footer","$dialog","dialog","fade","dialogsFade","hideDialog","bindEnterKey","$input","toggleLinkBtn","$linkBtn","$linkText","$linkUrl","showLinkDialog","$openInNewWindow","$useProtocol","onDialogShown","isNewWindowChecked","prop","useProtocolChecked","onDialogHidden","state","showDialog","LinkPopover","popover","$popover","$content","href","containerOffset","ImageDialog","imageLimitation","floor","log","readableSize","pow","showImageDialog","onImageLinkInsert","$imageInput","$imageUrl","$imageBtn","replaceWith","ImagePopover","popatmouse","TablePopover","VideoDialog","createVideoNode","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","$videoUrl","$videoBtn","HelpDialog","createShortcutList","command","$row","showHelpDialog","AIR_MODE_POPOVER_X_OFFSET","AirPopover","hidable","air","bnd","POPOVER_DIST","HintPopover","hint","direction","hintDirection","hints","matchingWord","hideArrow","selectItem","innerHeight","moveDown","$current","$next","$nextGroup","moveUp","$prev","$prevGroup","nodeFromItem","rangeCompute","hintSelect","createItemTemplates","hintIdx","searchKeyword","search","createGroup","hintMode","version","Codeview","toolbarPosition","tabDisabled","styleWithSpan","textareaAutoSync","onBeforeCommand","onBlur","onBlurCodeview","onChange","onChangeCodeview","onEnter","onFocus","onImageUploadError","onInit","onKeydown","onKeyup","onMousedown","onMouseup","onPaste","onScroll","mode","htmlMode","lineNumbers","pc","mac","renderer","airEditor","airEditable","option","dataValue","dataOption","iconClassName","editorOptions","rowSize","colSize","colorName","placement","isEnable","isActive","modal","interface"],"mappings":"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","file":"summernote-bs4.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 = 52);\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 'insertParagraph': 'Insert Paragraph',\n 'undo': 'Undoes the last command',\n 'redo': 'Redoes 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\nlet hasCodeMirror = !!window.CodeMirror;\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 hasCodeMirror,\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 (obj.hasOwnProperty(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 (isEmpty(point.node)) {\n return null;\n }\n\n if (nodeLength(point.node) === point.offset) {\n if (isEditable(point.node)) {\n return null;\n }\n\n node = point.node.parentNode;\n offset = position(point.node) + 1;\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 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 = nextPoint(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 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.layoutInfo.codable.val(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.sc.data && this.so > this.sc.data.length ? 0 : this.so);\n w3cRange.setEnd(this.ec, this.sc.data ? Math.min(this.eo, this.sc.data.length) : 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 } 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\n if (rng.so >= 0) {\n childNodes = childNodes.reverse();\n }\n childNodes = childNodes.map(function(childNode) {\n return rng.insertNode(childNode);\n });\n if (rng.so > 0) {\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 '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($editable) {\n this.stack = [];\n this.stackOffset = -1;\n this.$editable = $editable;\n this.editable = $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}\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\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 // toogle 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 console.error('Impossible to identify start Cell point.', startPoint);\n return;\n }\n _startPoint.colPos = startPoint.cellIndex;\n if (!startPoint.parentElement || !startPoint.parentElement.tagName || startPoint.parentElement.tagName.toLowerCase() !== 'tr') {\n console.error('Impossible to identify start Row point.', startPoint);\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 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 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 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 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 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 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(this.$editable);\n\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 const startRange = range.createFromNodeBefore(lists.head(anchors));\n const startPoint = startRange.getStartPoint();\n const endRange = range.createFromNodeAfter(lists.last(anchors));\n const endPoint = endRange.getEndPoint();\n\n this.setLastRange(\n range.create(\n startPoint.node,\n startPoint.offset,\n endPoint.node,\n endPoint.offset\n ).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('styleWithCSS', false, true);\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\n if (!event.isDefaultPrevented()) {\n if (this.options.shortcuts) {\n 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 }).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', (event) => {\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.$editor.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.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 }\n } else if (key.isEdit(event.keyCode)) {\n this.afterCommand();\n }\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 * create range\n * @return {WrappedRange}\n */\n createRange() {\n this.focus();\n this.setLastRange();\n return this.getLastRange();\n }\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 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 // 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.createFromNodeAfter(firstSpan.firstChild).select();\n this.setLastRange();\n this.$editable.data(KEY_BOGUS, firstSpan);\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 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\n this.context.invoke('editor.afterCommand');\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 } else {\n this.context.invoke('editor.afterCommand');\n }\n }\n }\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\"/>',\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 env from '../core/env';\nimport dom from '../core/dom';\n\nlet CodeMirror;\nif (env.hasCodeMirror) {\n CodeMirror = window.CodeMirror;\n}\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 }\n\n sync() {\n const isCodeview = this.isActivated();\n if (isCodeview && env.hasCodeMirror) {\n this.$codable.data('cmEditor').save();\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 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.$editor.addClass('codeview');\n this.$codable.focus();\n\n // activate CodeMirror as codable\n if (env.hasCodeMirror) {\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', (event) => {\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', (event) => {\n this.context.triggerEvent('change.codeview', this.$codable.val(), this.$codable);\n });\n }\n }\n\n /**\n * deactivate code view\n */\n deactivate() {\n // deactivate CodeMirror as codable\n if (env.hasCodeMirror) {\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 }\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.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 = keyword.replace(/^(?:https?:\\/\\/)?(?:tel?:?)?(?:mailto?:?)?(?:www\\.)?/i, '').split('/')[0];\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 (!this.fontInstalledMap.hasOwnProperty(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\" data-event=\"backColor\" data-value=\"inherit\">',\n this.lang.color.transparent,\n '</button>',\n '</div>',\n '<div class=\"note-holder\" data-event=\"backColor\"/>',\n '<div>',\n '<button type=\"button\" class=\"note-color-select btn\" 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\"/>',\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\" data-event=\"removeFormat\" data-value=\"foreColor\">',\n this.lang.color.resetToDefault,\n '</button>',\n '</div>',\n '<div class=\"note-holder\" data-event=\"foreColor\"/>',\n '<div>',\n '<button type=\"button\" class=\"note-color-select btn\" 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\"/>',\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('.show');\n const $button = $(event.target);\n const eventName = $button.data('event');\n let 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 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 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 if (typeof item === 'string') {\n item = { tag: item, title: (this.lang.style.hasOwnProperty(item) ? this.lang.style[item] : item) };\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\"/>', 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\"/>', 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\"/>', 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\"/>',\n '<div class=\"note-dimension-picker-highlighted\"/>',\n '<div class=\"note-dimension-picker-unhighlighted\"/>',\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',\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',\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.$toolbar.css({\n position: 'fixed',\n top: otherBarHeight,\n width: editorWidth,\n zIndex: 1000,\n });\n this.$editable.css({\n marginTop: this.$toolbar.height() + 5,\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('.btn-codeview').not('.btn-fullscreen');\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('.btn-codeview').not('.btn-fullscreen');\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).html(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\\.)?(?: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/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 image 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>');\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 func from '../core/func';\nimport lists from '../core/lists';\n\nconst AIR_MODE_POPOVER_X_OFFSET = 20;\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\n this.events = {\n 'summernote.keyup summernote.mouseup summernote.scroll': () => {\n if (this.options.editing) {\n this.update();\n }\n },\n 'summernote.disable summernote.change summernote.dialog.shown summernote.blur': () => {\n this.hide();\n },\n 'summernote.focusout': (we, e) => {\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() {\n const styleInfo = this.context.invoke('editor.currentStyle');\n if (styleInfo.range && !styleInfo.range.isCollapsed()) {\n const rect = lists.last(styleInfo.range.getClientRects());\n if (rect) {\n const bnd = func.rect2bnd(rect);\n\n this.$popover.css({\n display: 'block',\n left: Math.max(bnd.left + bnd.width / 2, 0) - AIR_MODE_POPOVER_X_OFFSET,\n top: bnd.top + bnd.height,\n });\n this.context.invoke('buttons.updateCurrentStyle', this.$popover);\n }\n } else {\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 + '\"/>');\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 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\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 styleWithSpan: true,\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\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 '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 '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","// extracted by mini-css-extract-plugin","import $ from 'jquery';\nimport renderer from '../base/renderer';\n\nconst editor = renderer.create('<div class=\"note-editor note-frame card\"/>');\nconst toolbar = renderer.create('<div class=\"note-toolbar card-header\" role=\"toolbar\"></div>');\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 card-block\" contentEditable=\"true\" role=\"textbox\" aria-multiline=\"true\"/>');\nconst statusbar = renderer.create([\n '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"/>',\n '<div class=\"note-statusbar\" role=\"status\">',\n '<output class=\"note-status-output\" aria-live=\"polite\"></output>',\n '<div class=\"note-resizebar\" aria-label=\"Resize\">',\n '<div class=\"note-icon-bar\"/>',\n '<div class=\"note-icon-bar\"/>',\n '<div class=\"note-icon-bar\"/>',\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\"/>',\n '<output class=\"note-status-output\" role=\"status\" aria-live=\"polite\"/>',\n].join(''));\n\nconst buttonGroup = renderer.create('<div class=\"note-btn-group btn-group\">');\n\nconst dropdown = renderer.create('<div class=\"note-dropdown-menu 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 option = (typeof item === 'object') ? item.option : undefined;\n\n const dataValue = 'data-value=\"' + value + '\"';\n const dataOption = (option !== undefined) ? ' data-option=\"' + option + '\"' : '';\n return '<a class=\"dropdown-item\" href=\"#\" ' + (dataValue + dataOption) + ' role=\"listitem\" aria-label=\"' + value + '\">' + content + '</a>';\n }).join('') : options.items;\n\n $node.html(markup).attr({ 'aria-label': options.title });\n});\n\nconst dropdownButtonContents = function(contents) {\n return contents;\n};\n\nconst dropdownCheck = renderer.create('<div class=\"note-dropdown-menu 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 return '<a class=\"dropdown-item\" href=\"#\" data-value=\"' + value + '\" role=\"listitem\" aria-label=\"' + item + '\">' + icon(options.checkClassName) + ' ' + content + '</a>';\n }).join('') : options.items;\n $node.html(markup).attr({ 'aria-label': options.title });\n});\n\nconst dialog = renderer.create('<div class=\"modal 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=\"modal-dialog\">',\n '<div class=\"modal-content\">',\n (options.title ? '<div class=\"modal-header\">' +\n '<h4 class=\"modal-title\">' + options.title + '</h4>' +\n '<button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\" aria-hidden=\"true\">&times;</button>' +\n '</div>' : ''),\n '<div class=\"modal-body\">' + options.body + '</div>',\n (options.footer ? '<div class=\"modal-footer\">' + options.footer + '</div>' : ''),\n '</div>',\n '</div>',\n ].join(''));\n});\n\nconst popover = renderer.create([\n '<div class=\"note-popover popover in\">',\n '<div class=\"arrow\"/>',\n '<div class=\"popover-content note-children-container\"/>',\n '</div>',\n].join(''), function($node, options) {\n const direction = typeof options.direction !== 'undefined' ? options.direction : 'bottom';\n\n $node.addClass(direction);\n\n if (options.hideArrow) {\n $node.find('.arrow').hide();\n }\n});\n\nconst checkbox = renderer.create('<div class=\"form-check\"></div>', function($node, options) {\n $node.html([\n '<label class=\"form-check-label\"' + (options.id ? ' for=\"note-' + options.id + '\"' : '') + '>',\n '<input type=\"checkbox\" class=\"form-check-input\"' + (options.id ? ' id=\"note-' + options.id + '\"' : ''),\n (options.checked ? ' checked' : ''),\n ' aria-label=\"' + (options.text ? options.text : '') + '\"',\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 dropdown: dropdown,\n dropdownButtonContents: dropdownButtonContents,\n dropdownCheck: dropdownCheck,\n dialog: dialog,\n popover: popover,\n icon: icon,\n checkbox: checkbox,\n options: editorOptions,\n\n palette: function($node, options) {\n return 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-color-btn\"',\n 'style=\"background-color:', color, '\" ',\n 'data-event=\"', eventName, '\" ',\n 'data-value=\"', color, '\" ',\n '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 if (options.tooltip) {\n $node.find('.note-color-btn').tooltip({\n container: options.container || editorOptions.container,\n trigger: 'hover',\n placement: 'bottom',\n });\n }\n })($node, options);\n },\n\n button: function($node, options) {\n return renderer.create('<button type=\"button\" class=\"note-btn btn btn-light btn-sm\" tabindex=\"-1\">', function($node, options) {\n if (options && options.tooltip) {\n $node.attr({\n title: options.tooltip,\n 'aria-label': options.tooltip,\n }).tooltip({\n container: options.container || editorOptions.container,\n trigger: 'hover',\n placement: 'bottom',\n }).on('click', (e) => {\n $(e.currentTarget).tooltip('hide');\n });\n }\n })($node, options);\n },\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 onDialogShown: function($dialog, handler) {\n $dialog.one('shown.bs.modal', handler);\n },\n\n onDialogHidden: function($dialog, handler) {\n $dialog.one('hidden.bs.modal', handler);\n },\n\n showDialog: function($dialog) {\n $dialog.modal('show');\n },\n\n hideDialog: function($dialog) {\n $dialog.modal('hide');\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.show();\n },\n };\n};\n\nexport default ui;\n","import $ from 'jquery';\nimport ui from './ui';\nimport '../base/settings.js';\n\nimport '../../styles/summernote-bs4.scss';\n\n$.summernote = $.extend($.summernote, {\n ui_template: ui,\n interface: 'bs4',\n});\n\n$.summernote.options.styleTags = [\n 'p',\n { title: 'Blockquote', tag: 'blockquote', className: 'blockquote', value: 'blockquote' },\n 'pre', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n];\n"],"sourceRoot":""}