This repository has been archived by the owner on Apr 22, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
/
quill.min.js.map
1 lines (1 loc) · 503 KB
/
quill.min.js.map
1
{"version":3,"sources":["webpack://Quill/webpack/universalModuleDefinition","webpack://Quill/webpack/bootstrap","webpack://Quill/./node_modules/parchment/src/scope.ts","webpack://Quill/./node_modules/parchment/src/collection/linked-list.ts","webpack://Quill/./node_modules/parchment/src/error.ts","webpack://Quill/./node_modules/parchment/src/registry.ts","webpack://Quill/./node_modules/parchment/src/blot/abstract/shadow.ts","webpack://Quill/./node_modules/parchment/src/blot/abstract/parent.ts","webpack://Quill/./node_modules/parchment/src/blot/abstract/container.ts","webpack://Quill/./node_modules/parchment/src/blot/abstract/leaf.ts","webpack://Quill/./node_modules/parchment/src/attributor/attributor.ts","webpack://Quill/./node_modules/parchment/src/attributor/class.ts","webpack://Quill/./node_modules/parchment/src/attributor/style.ts","webpack://Quill/./node_modules/parchment/src/attributor/store.ts","webpack://Quill/./node_modules/parchment/src/blot/inline.ts","webpack://Quill/./node_modules/parchment/src/blot/block.ts","webpack://Quill/./node_modules/parchment/src/blot/embed.ts","webpack://Quill/./node_modules/parchment/src/blot/scroll.ts","webpack://Quill/./node_modules/parchment/src/blot/text.ts","webpack://Quill/./node_modules/quill-delta/dist/Delta.js","webpack://Quill/./node_modules/extend/index.js","webpack://Quill/./blots/block.js","webpack://Quill/./core/quill.js","webpack://Quill/./blots/inline.js","webpack://Quill/./blots/text.js","webpack://Quill/./core/module.js","webpack://Quill/./core/emitter.js","webpack://Quill/./blots/break.js","webpack://Quill/./core/logger.js","webpack://Quill/./node_modules/deep-equal/index.js","webpack://Quill/./blots/container.js","webpack://Quill/./core/selection.js","webpack://Quill/./blots/cursor.js","webpack://Quill/./formats/link.js","webpack://Quill/./ui/picker.js","webpack://Quill/./node_modules/clone/clone.js","webpack://Quill/./formats/color.js","webpack://Quill/./formats/code.js","webpack://Quill/./ui/icons.js","webpack://Quill/./node_modules/quill-delta/dist/Op.js","webpack://Quill/./core/instances.js","webpack://Quill/./core/theme.js","webpack://Quill/./blots/embed.js","webpack://Quill/./modules/clipboard.js","webpack://Quill/./formats/align.js","webpack://Quill/./formats/background.js","webpack://Quill/./formats/direction.js","webpack://Quill/./formats/font.js","webpack://Quill/./formats/size.js","webpack://Quill/./formats/bold.js","webpack://Quill/./ui/color-picker.js","webpack://Quill/./ui/icon-picker.js","webpack://Quill/./ui/tooltip.js","webpack://Quill/./themes/base.js","webpack://Quill/./quill.js","webpack://Quill/./core.js","webpack://Quill/./node_modules/deep-equal/lib/keys.js","webpack://Quill/./node_modules/deep-equal/lib/is_arguments.js","webpack://Quill/./node_modules/quill-delta/node_modules/fast-diff/diff.js","webpack://Quill/./node_modules/quill-delta/dist/AttributeMap.js","webpack://Quill/./node_modules/quill-delta/dist/Iterator.js","webpack://Quill/./core/editor.js","webpack://Quill/./node_modules/eventemitter3/index.js","webpack://Quill/./blots/scroll.js","webpack://Quill/./modules/history.js","webpack://Quill/./modules/keyboard.js","webpack://Quill/./modules/uploader.js","webpack://Quill/./formats/indent.js","webpack://Quill/./formats/blockquote.js","webpack://Quill/./formats/header.js","webpack://Quill/./formats/list.js","webpack://Quill/./formats/italic.js","webpack://Quill/./formats/script.js","webpack://Quill/./formats/strike.js","webpack://Quill/./formats/underline.js","webpack://Quill/./formats/formula.js","webpack://Quill/./formats/image.js","webpack://Quill/./formats/video.js","webpack://Quill/./modules/syntax.js","webpack://Quill/./modules/table.js","webpack://Quill/./formats/table.js","webpack://Quill/./modules/toolbar.js","webpack://Quill/./assets/icons/align-left.svg","webpack://Quill/./assets/icons/align-center.svg","webpack://Quill/./assets/icons/align-right.svg","webpack://Quill/./assets/icons/align-justify.svg","webpack://Quill/./assets/icons/background.svg","webpack://Quill/./assets/icons/blockquote.svg","webpack://Quill/./assets/icons/bold.svg","webpack://Quill/./assets/icons/clean.svg","webpack://Quill/./assets/icons/code.svg","webpack://Quill/./assets/icons/color.svg","webpack://Quill/./assets/icons/direction-ltr.svg","webpack://Quill/./assets/icons/direction-rtl.svg","webpack://Quill/./assets/icons/formula.svg","webpack://Quill/./assets/icons/header.svg","webpack://Quill/./assets/icons/header-2.svg","webpack://Quill/./assets/icons/italic.svg","webpack://Quill/./assets/icons/image.svg","webpack://Quill/./assets/icons/indent.svg","webpack://Quill/./assets/icons/outdent.svg","webpack://Quill/./assets/icons/link.svg","webpack://Quill/./assets/icons/list-bullet.svg","webpack://Quill/./assets/icons/list-check.svg","webpack://Quill/./assets/icons/list-ordered.svg","webpack://Quill/./assets/icons/subscript.svg","webpack://Quill/./assets/icons/superscript.svg","webpack://Quill/./assets/icons/strike.svg","webpack://Quill/./assets/icons/table.svg","webpack://Quill/./assets/icons/underline.svg","webpack://Quill/./assets/icons/video.svg","webpack://Quill/./assets/icons/dropdown.svg","webpack://Quill/./themes/bubble.js","webpack://Quill/./themes/snow.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Scope","src_scope","linked_list","[object Object]","this","head","tail","length","nodes","insertBefore","append","apply","slice","index","next","iterator","cur","node","refNode","remove","prev","target","contains","curNode","ret","inclusive","callback","startNode","offset","find","curIndex","curLength","Math","min","reduce","memo","push","ParchmentError","Error","message","super","constructor","registry_Registry","attributes","classes","tags","types","bubble","blots","has","parentNode","scroll","input","match","query","blotClass","blot","Node","nodeType","TEXT_NODE","set","domNode","scope","ANY","Text","text","LEVEL","BLOCK","block","INLINE","inline","HTMLElement","getAttribute","split","some","tagName","TYPE","definitions","map","register","definition","blotName","attrName","keyName","className","Array","isArray","toUpperCase","forEach","tag","WeakMap","shadow_ShadowBlot","parseInt","toString","document","createElement","indexOf","classList","add","statics","cloneNode","parent","removeChild","delete","isolate","BLOT","wrap","ATTRIBUTE","format","def","ref","undefined","children","_context","requiredContainer","detach","replacement","_force","_mutations","wrapper","appendChild","shadow","parent_ParentBlot","uiNode","build","other","attach","child","uiClass","setAttribute","firstChild","from","childNodes","filter","reverse","makeAttachedBlot","err","forEachAt","childLength","deleteAt","criteria","descendant","Number","MAX_VALUE","descendants","lengthLeft","childIndex","concat","done","allowedChildren","BLOCK_BLOT","splitAfter","unwrap","formatAt","insertAt","childBlot","refBlot","refDomNode","nextSibling","targetParent","context","optimize","enforceAllowedChildren","defaultChild","position","path","moveChildren","replaceWith","force","after","clone","_length","mutations","addedNodes","removedNodes","mutation","type","body","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","sort","a","b","DOCUMENT_POSITION_FOLLOWING","e","replaceChild","abstract_parent","container_ContainerBlot","checkMerge","container","leaf_LeafBlot","_domNode","_inclusive","INLINE_BLOT","leaf","attributor_Attributor","item","options","attributeBit","whitelist","canAdd","_node","replace","removeAttribute","class_match","prefix","attributor_class","join","camelize","parts","rest","part","style","trim","store","attribute","keys","styles","attr","copy","inline_InlineBlot","toLowerCase","formats","values","obj1","obj2","prop","isEqual","update","move","block_BlockBlot","blot_embed","_scroll","OBSERVER_CONFIG","characterData","characterDataOldValue","childList","subtree","MAX_OPTIMIZE_ITERATIONS","scroll_ScrollBlot","registry","observer","MutationObserver","observe","disconnect","mutationsMap","records","takeRecords","pop","mark","markParent","remaining","previousSibling","grandChild","blot_scroll","text_TextBlot","createTextNode","data","splitText","blot_text","__importDefault","mod","default","deep_equal_1","extend_1","fast_diff_1","AttributeMap_1","Op_1","NULL_CHARACTER","String","fromCharCode","Delta","ops","insert","arg","newOp","retain","lastOp","unshift","splice","chop","predicate","partition","passed","failed","op","initialValue","changeLength","elem","start","end","Infinity","iter","hasNext","nextOp","compose","thisIter","otherIter","firstOther","peek","firstLeft","peekType","peekLength","delta","length_1","thisOp","otherOp","diff","cursor","strings","retDelta","diffResult","component","opLength","INSERT","DELETE","EQUAL","eachLine","newline","line","transform","priority","transformPosition","length_2","length_3","nextType","Op","AttributeMap","hasOwn","toStr","gOPD","getOwnPropertyDescriptor","arr","isPlainObject","obj","hasOwnConstructor","hasIsPrototypeOf","setProperty","configurable","newValue","writable","getProperty","extend","src","copyIsArray","arguments","deep","_parchment","NEWLINE_LENGTH","Block","BlockBlot","cache","blockDelta","lines","shift","lineIndex","Break","Inline","EmbedBlot","TextBlot","BlockEmbed","AttributorStore","_extend2","BLOCK_ATTRIBUTE","endsWith","LeafBlot","bubbleFormats","Parchment","_selection","debug","_logger2","globalRegistry","Registry","ParentBlot","Quill","limit","logger","level","instances","imports","error","overwrite","warn","startsWith","expandConfig","html","innerHTML","addContainer","addEventListener","preventDefault","scrollingContainer","emitter","Emitter","ScrollBlot","editor","Editor","selection","Selection","theme","keyboard","addModule","clipboard","history","uploader","init","on","events","EDITOR_CHANGE","TEXT_CHANGE","toggle","isBlank","SCROLL_UPDATE","source","oldRange","lastRange","_selection$getRange","getRange","newRange","_slicedToArray","selectionInfo","modify","contents","convert","setContents","clear","placeholder","readOnly","disable","allowReadOnlyEdits","blur","setRange","deleteText","_overload","overload","_overload2","enable","editReadOnly","modifier","enabled","focus","scrollTop","scrollIntoView","sources","API","range","getSelection","change","formatLine","formatText","setSelection","SILENT","_overload3","_overload4","_overload5","_overload6","getBounds","bounds","containerBounds","getBoundingClientRect","bottom","top","height","left","right","width","getContents","getLength","_overload7","_overload8","getFormat","getIndex","getLeaf","getLine","getLines","getModule","getSemanticHTML","_overload9","_overload10","getHTML","getText","_overload11","_overload12","hasFocus","insertEmbed","embed","insertText","_overload13","_overload14","isEnabled","off","args","once","removeFormat","_overload15","_overload16","deleted","applied","applyDelta","_overload17","_overload18","Range","max","setText","USER","updateContents","userConfig","DEFAULTS","import","Theme","themeConfig","config","moduleConfig","moduleClass","toolbar","querySelector","oldDelta","shiftRange","emit","_map","pos","_map2","_map3","_map4","version","parchment","core/module","Module","core/theme","InlineBlot","self","selfIndex","order","otherIndex","compare","escapeText","&","<",">","\"","'","quill","eventName","querySelectorAll","handleDOM","EventEmitter","listeners","log","event","handler","listenDOM","SCROLL_BEFORE_UPDATE","SCROLL_BLOT_MOUNT","SCROLL_BLOT_UNMOUNT","SCROLL_OPTIMIZE","SELECTION_CHANGE","levels","method","console","namespace","newLevel","pSlice","objectKeys","isArguments","deepEqual","actual","expected","opts","Date","getTime","strict","isUndefinedOrNull","isBuffer","ka","kb","objEquiv","x","ContainerBlot","composing","mouseDown","savedRange","handleComposition","handleDragging","setTimeout","native","getNativeRange","textNode","setNativeRange","ignored","_context$range","startOffset","endNode","endOffset","batchStart","batchEnd","restore","nativeRange","collapsed","scrollLength","_scroll$leaf","_scroll$leaf2","_leaf$position","_leaf$position2","createRange","setStart","_scroll$leaf3","_scroll$leaf4","_leaf$position3","_leaf$position4","setEnd","rect","side","rangeCount","getRangeAt","normalizeNative","info","normalized","normalizedToRange","activeElement","positions","indexes","_position","startContainer","endContainer","lastChild","rangeToNative","_scroll$leaf5","_scroll$leaf6","leafOffset","_leaf$position5","_leaf$position6","_scroll$line","first","last","_scroll$line3","scrollBounds","removeAllRanges","addRange","_getRange","_getRange2","_deepEqual2","_clone2","Cursor","CONTENTS","savedLength","prevTextBlot","prevTextLength","nextTextBlot","nextText","newText","mergedTextBlot","newTextNode","remapOffset","Link","sanitize","url","PROTOCOL_WHITELIST","SANITIZED_URL","protocols","anchor","href","protocol","optionsCounter","toggleAriaAttribute","element","select","buildPicker","display","label","togglePicker","escape","buildItem","option","tabIndex","hasAttribute","textContent","selectItem","buildLabel","DropdownIcon","buildOptions","id","selected","close","trigger","selectedIndex","dispatchEvent","Event","isActive","_instanceof","nativeMap","nativeSet","nativePromise","Map","_","Set","Promise","circular","depth","includeNonEnumerable","allParents","allChildren","useBuffer","Buffer","_clone","proto","resolve","reject","then","__isArray","__isRegExp","RegExp","__getRegExpFlags","lastIndex","__isDate","allocUnsafe","getPrototypeOf","keyChild","valueChild","entryChild","attrs","getOwnPropertySymbols","symbols","symbol","descriptor","allPropertyNames","getOwnPropertyNames","propertyName","__objToStr","re","flags","global","ignoreCase","multiline","clonePrototype","ColorAttributor","StyleAttributor","ColorClass","ClassAttributor","ColorStyle","_text","CodeBlockContainer","Container","innerText","CodeBlock","Code","TAB","align","","alignLeftIcon","center","alignCenterIcon","alignRightIcon","justify","alignJustifyIcon","background","backgroundIcon","blockquote","blockquoteIcon","bold","boldIcon","clean","cleanIcon","code","codeIcon","code-block","color","colorIcon","direction","directionLeftToRightIcon","rtl","directionRightToLeftIcon","formula","formulaIcon","header","1","headerIcon","2","header2Icon","italic","italicIcon","image","imageIcon","indent","+1","indentIcon","-1","outdentIcon","link","linkIcon","list","bullet","listBulletIcon","check","listCheckIcon","ordered","listOrderedIcon","script","sub","subscriptIcon","superscriptIcon","strike","strikeIcon","table","tableIcon","underline","underlineIcon","video","videoIcon","Iterator_1","ModuleClass","themes","GUARD_TEXT","contentNode","childNode","leftGuard","rightGuard","prevLength","_align","_background","_color","_direction","_font","_size","CLIPBOARD_CONFIG","matchText","matchNewline","deltaEndsWith","ELEMENT_NODE","matchBlot","matchAttributor","fontStyle","fontWeight","applyFormat","parseFloat","textIndent","includes","language","row","matchAlias","ATTRIBUTE_ATTRIBUTORS","AlignAttribute","DirectionAttribute","STYLE_ATTRIBUTORS","AlignStyle","BackgroundStyle","DirectionStyle","FontStyle","SizeStyle","Clipboard","onCaptureCopy","onCapturePaste","matchers","selector","matcher","addMatcher","DOMParser","parseFromString","nodeMatches","_prepareMatching","prepareMatching","_prepareMatching2","elementMatchers","textMatchers","traverse","dangerouslyPasteHTML","paste","isCut","defaultPrevented","_quill$selection$getR","_onCopy","onCopy","clipboardData","setData","getData","files","upload","onPaste","pastedDelta","pair","_pair","newDelta","endText","isLine","preNodes","childrenDelta","reducedDelta","Attributor","isPre","replacer","collapse","replaced","AlignClass","BackgroundClass","DirectionClass","FontClass","SizeClass","Bold","Picker","backgroundColor","colorLabel","stroke","fill","icons","defaultItem","boundsContainer","TEMPLATE","marginTop","hide","reference","offsetWidth","rootBounds","verticalShift","show","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","listener","tooltip","textbox","pickers","picker","removeEventListener","extendToolbar","buildButtons","buttons","button","buildPickers","selects","fillSelect","IconPicker","ColorPicker","handlers","edit","fileInput","mimetypes","click","defaultValue","BaseTooltip","Tooltip","listen","save","cancel","preview","restoreFocus","linkRange","extractVideoUrl","_code","attributors/attribute/direction","attributors/class/align","attributors/class/background","attributors/class/color","attributors/class/direction","attributors/class/font","attributors/class/size","attributors/style/align","attributors/style/background","attributors/style/color","attributors/style/direction","attributors/style/font","attributors/style/size","formats/align","formats/direction","formats/indent","Indent","formats/background","formats/color","formats/font","formats/size","formats/blockquote","Blockquote","formats/code-block","formats/header","Header","formats/list","List","formats/bold","formats/code","InlineCode","formats/italic","Italic","formats/link","formats/script","Script","formats/strike","Strike","formats/underline","Underline","formats/formula","Formula","formats/image","Image","formats/video","Video","modules/syntax","Syntax","modules/table","Table","modules/toolbar","Toolbar","themes/bubble","BubbleTheme","themes/snow","SnowTheme","ui/icons","Icons","ui/picker","ui/icon-picker","ui/color-picker","ui/tooltip","_block","blots/block","blots/block/embed","blots/break","blots/container","blots/cursor","blots/embed","Embed","blots/inline","blots/scroll","Scroll","blots/text","modules/clipboard","modules/history","History","modules/keyboard","Keyboard","modules/uploader","Uploader","shim","supportsArgumentsClass","supported","unsupported","propertyIsEnumerable","DIFF_DELETE","DIFF_INSERT","DIFF_EQUAL","diff_main","text1","text2","cursor_pos","_fix_unicode","editdiff","oldText","oldLength","newLength","oldCursor","oldBefore","oldAfter","maybeNewCursor","newCursor","newBefore","newAfter","prefixLength","oldPrefix","newPrefix","oldMiddle","newMiddle","make_edit_splice","suffixLength","oldSuffix","newSuffix","find_cursor_edit_diff","commonlength","diff_commonPrefix","commonprefix","substring","diff_commonSuffix","commonsuffix","diffs","longtext","shorttext","hm","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","floor","j","best_common","text1_a","text1_b","text2_a","text2_b","hm1","ceil","hm2","mid_common","diff_halfMatch_","diffs_a","diffs_b","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","k1","k1_offset","y1","x1","charAt","k2_offset","x2","diff_bisectSplit_","k2","y2","diff_bisect_","diff_compute_","diff_cleanupMerge","fix_unicode","pointer","count_delete","count_insert","text_delete","text_insert","previous_equality","ends_with_pair_start","stray","k","starts_with_pair_end","changes","y","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","is_surrogate_pair_start","charCodeAt","pointerend","is_surrogate_pair_end","charCode","str","before","tuples","remove_empty_tuples","keepNull","Iterator","retOp","substr","_quillDelta","ASCII","convertListHTML","items","lastIndent","_getListType","getListType","endTag","_items","_toArray","_items$","_getListType3","_getListType4","convertHTML","_getListType5","isRoot","_blot$domNode","outerHTML","_outerHTML$split","_outerHTML$split2","combineFormats","combined","merged","amount","getDelta","consumeNextNewline","normalizedDelta","normalizeDelta","_scroll$line2","_line$descendant","leaves","formatsArr","_scroll$line4","lineOffset","_scroll$line5","_scroll$line6","suffix","textBlot","oldValue","CursorBlot","relativeSelectionInfo","Events","addListener","fn","TypeError","evt","_events","_eventsCount","clearEvent","__proto__","eventNames","names","ee","listenerCount","a1","a2","a3","a4","a5","len","removeListener","removeAllListeners","prefixed","batch","emitMount","emitUnmount","_line","_line2","_line3","blotIndex","blotLength","lastRecorded","ignoreChange","userOnly","record","addBinding","shortKey","undo","shiftKey","redo","test","navigator","platform","dest","stack","getLastChangeIndex","cutoff","changeDelta","undoDelta","guessUndoDelta","timestamp","now","delay","maxStack","deleteLength","changeIndex","endsWithNewlineChange","SHORTKEY","binding","which","bindings","handleEnter","metaKey","ctrlKey","altKey","userAgent","handleBackspace","handleDelete","handleDeleteRange","keyBinding","normalize","singleBinding","matches","_quill$getLine","_quill$getLine2","_quill$getLeaf","_quill$getLeaf2","leafStart","offsetStart","_ref","_ref2","leafEnd","offsetEnd","prefixText","suffixText","curContext","empty","every","_quill$getLine11","_quill$getLine13","curFormats","prevFormats","nextLength","_quill$getLine15","_quill$getLine17","nextFormats","firstFormats","lastFormats","lineFormats","makeCodeBlockHandler","makeEmbedArrowHandler","_quill$getLeaf3","makeFormatHandler","makeTableArrowHandler","up","cell","targetRow","targetCell","targetLine","outdent","outdent backspace","indent code-block","outdent code-block","remove tab","tab","blockquote empty enter","list empty enter","checklist enter","_quill$getLine3","_quill$getLine4","header enter","_quill$getLine5","_quill$getLine6","table backspace","table delete","table enter","_module$getTable","getTable","_module$getTable2","tableSide","table tab","list autofill","_quill$getLine7","_quill$getLine8","code exit","_quill$getLine9","_quill$getLine10","numLines","embed left","embed left shift","embed right","embed right shift","table down","table up","caretRangeFromPoint","clientX","clientY","caretPositionFromPoint","offsetNode","dataTransfer","uploads","file","promises","reader","FileReader","onload","result","readAsDataURL","all","images","IndentClass","ListContainer","ListItem","ui","ownerDocument","listEventHandler","attachUI","katex","render","throwOnError","errorColor","_link","ATTRIBUTES","execCommand","_clipboard","TokenAttributor","CodeToken","SyntaxCodeBlock","SyntaxCodeBlockContainer","forceNext","highlight","forced","cachedText","BreakBlot","hljs","highlightBlot","initListener","initTimer","languages","timer","clearTimeout","interval","nodeText","_table","TableCell","TableRow","TableBody","TableContainer","listenBalanceCells","balanceTables","balanceCells","deleteColumn","_getTable","_getTable2","cellOffset","deleteRow","_getTable3","deleteTable","_getTable5","insertColumn","_getTable7","_getTable8","column","rowOffset","insertColumnLeft","insertColumnRight","insertRow","_getTable9","_getTable10","insertRowAbove","insertRowBelow","insertTable","rows","columns","tableId","old","thisHead","thisTail","nextHead","nextTail","childFormats","maxColumns","cells","at","_descendant","_descendant3","_descendant5","random","addControls","controls","addHandler","_quill$selection$getR3","prompt","addButton","groups","group","control","addSelect","_base","TOOLBAR_CONFIG","BubbleTooltip","lastLine","indexBounds","arrow","marginLeft","SnowTooltip","_quill$scroll$descend","LinkBlot","_quill$scroll$descend2"],"mappings":"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","file":"quill.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(window, function() {\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 = 36);\n","enum Scope {\n TYPE = (1 << 2) - 1, // 0011 Lower two bits\n LEVEL = ((1 << 2) - 1) << 2, // 1100 Higher two bits\n\n ATTRIBUTE = (1 << 0) | LEVEL, // 1101\n BLOT = (1 << 1) | LEVEL, // 1110\n INLINE = (1 << 2) | TYPE, // 0111\n BLOCK = (1 << 3) | TYPE, // 1011\n\n BLOCK_BLOT = BLOCK & BLOT, // 1010\n INLINE_BLOT = INLINE & BLOT, // 0110\n BLOCK_ATTRIBUTE = BLOCK & ATTRIBUTE, // 1001\n INLINE_ATTRIBUTE = INLINE & ATTRIBUTE, // 0101\n\n ANY = TYPE | LEVEL,\n}\n\nexport default Scope;\n","import LinkedNode from './linked-node';\n\nclass LinkedList<T extends LinkedNode> {\n public head: T | null;\n public tail: T | null;\n public length: number;\n\n constructor() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n public append(...nodes: T[]): void {\n this.insertBefore(nodes[0], null);\n if (nodes.length > 1) {\n this.append.apply(this, nodes.slice(1));\n }\n }\n\n public at(index: number): T | null {\n const next = this.iterator();\n let cur = next();\n while (cur && index > 0) {\n index -= 1;\n cur = next();\n }\n return cur;\n }\n\n public contains(node: T): boolean {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n if (cur === node) {\n return true;\n }\n cur = next();\n }\n return false;\n }\n\n public indexOf(node: T): number {\n const next = this.iterator();\n let cur = next();\n let index = 0;\n while (cur) {\n if (cur === node) {\n return index;\n }\n index += 1;\n cur = next();\n }\n return -1;\n }\n\n public insertBefore(node: T | null, refNode: T | null): void {\n if (node == null) {\n return;\n }\n this.remove(node);\n node.next = refNode;\n if (refNode != null) {\n node.prev = refNode.prev;\n if (refNode.prev != null) {\n refNode.prev.next = node;\n }\n refNode.prev = node;\n if (refNode === this.head) {\n this.head = node;\n }\n } else if (this.tail != null) {\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n } else {\n node.prev = null;\n this.head = this.tail = node;\n }\n this.length += 1;\n }\n\n public offset(target: T): number {\n let index = 0;\n let cur = this.head;\n while (cur != null) {\n if (cur === target) {\n return index;\n }\n index += cur.length();\n cur = cur.next as T;\n }\n return -1;\n }\n\n public remove(node: T): void {\n if (!this.contains(node)) {\n return;\n }\n if (node.prev != null) {\n node.prev.next = node.next;\n }\n if (node.next != null) {\n node.next.prev = node.prev;\n }\n if (node === this.head) {\n this.head = node.next as T;\n }\n if (node === this.tail) {\n this.tail = node.prev as T;\n }\n this.length -= 1;\n }\n\n public iterator(curNode: T | null = this.head): () => T | null {\n // TODO use yield when we can\n return (): T | null => {\n const ret = curNode;\n if (curNode != null) {\n curNode = curNode.next as T;\n }\n return ret;\n };\n }\n\n public find(index: number, inclusive: boolean = false): [T | null, number] {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n const length = cur.length();\n if (\n index < length ||\n (inclusive &&\n index === length &&\n (cur.next == null || cur.next.length() !== 0))\n ) {\n return [cur, index];\n }\n index -= length;\n cur = next();\n }\n return [null, 0];\n }\n\n public forEach(callback: (cur: T) => void): void {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n callback(cur);\n cur = next();\n }\n }\n\n public forEachAt(\n index: number,\n length: number,\n callback: (cur: T, offset: number, length: number) => void,\n ): void {\n if (length <= 0) {\n return;\n }\n const [startNode, offset] = this.find(index);\n let curIndex = index - offset;\n const next = this.iterator(startNode);\n let cur = next();\n while (cur && curIndex < index + length) {\n const curLength = cur.length();\n if (index > curIndex) {\n callback(\n cur,\n index - curIndex,\n Math.min(length, curIndex + curLength - index),\n );\n } else {\n callback(cur, 0, Math.min(curLength, index + length - curIndex));\n }\n curIndex += curLength;\n cur = next();\n }\n }\n\n public map(callback: (cur: T) => any): any[] {\n return this.reduce((memo: T[], cur: T) => {\n memo.push(callback(cur));\n return memo;\n }, []);\n }\n\n public reduce<M>(callback: (memo: M, cur: T) => M, memo: M): M {\n const next = this.iterator();\n let cur = next();\n while (cur) {\n memo = callback(memo, cur);\n cur = next();\n }\n return memo;\n }\n}\n\nexport default LinkedList;\n","export default class ParchmentError extends Error {\n public message: string;\n public name: string;\n public stack!: string;\n\n constructor(message: string) {\n message = '[Parchment] ' + message;\n super(message);\n this.message = message;\n this.name = this.constructor.name;\n }\n}\n","import Attributor from './attributor/attributor';\nimport { Blot, BlotConstructor, Root } from './blot/abstract/blot';\nimport ParchmentError from './error';\nimport Scope from './scope';\n\nexport interface RegistryInterface {\n create(sroll: Root, input: Node | string | Scope, value?: any): Blot;\n query(\n query: string | Node | Scope,\n scope: Scope,\n ): Attributor | BlotConstructor | null;\n register(...definitions: any[]): any;\n}\n\nexport default class Registry implements RegistryInterface {\n public static blots = new WeakMap<Node, Blot>();\n\n public static find(node: Node | null, bubble: boolean = false): Blot | null {\n if (node == null) {\n return null;\n }\n if (this.blots.has(node)) {\n return this.blots.get(node) || null;\n }\n if (bubble) {\n return this.find(node.parentNode, bubble);\n }\n return null;\n }\n\n private attributes: { [key: string]: Attributor } = {};\n private classes: { [key: string]: BlotConstructor } = {};\n private tags: { [key: string]: BlotConstructor } = {};\n private types: { [key: string]: Attributor | BlotConstructor } = {};\n\n public create(scroll: Root, input: Node | string | Scope, value?: any): Blot {\n const match = this.query(input);\n if (match == null) {\n throw new ParchmentError(`Unable to create ${input} blot`);\n }\n const blotClass = match as BlotConstructor;\n const node =\n // @ts-ignore\n input instanceof Node || input.nodeType === Node.TEXT_NODE\n ? input\n : blotClass.create(value);\n\n const blot = new blotClass(scroll, node as Node, value);\n Registry.blots.set(blot.domNode, blot);\n return blot;\n }\n\n public find(node: Node | null, bubble: boolean = false): Blot | null {\n return Registry.find(node, bubble);\n }\n\n public query(\n query: string | Node | Scope,\n scope: Scope = Scope.ANY,\n ): Attributor | BlotConstructor | null {\n let match;\n if (typeof query === 'string') {\n match = this.types[query] || this.attributes[query];\n // @ts-ignore\n } else if (query instanceof Text || query.nodeType === Node.TEXT_NODE) {\n match = this.types.text;\n } else if (typeof query === 'number') {\n if (query & Scope.LEVEL & Scope.BLOCK) {\n match = this.types.block;\n } else if (query & Scope.LEVEL & Scope.INLINE) {\n match = this.types.inline;\n }\n } else if (query instanceof HTMLElement) {\n const names = (query.getAttribute('class') || '').split(/\\s+/);\n names.some(name => {\n match = this.classes[name];\n if (match) {\n return true;\n }\n return false;\n });\n match = match || this.tags[query.tagName];\n }\n if (match == null) {\n return null;\n }\n // @ts-ignore\n if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope) {\n return match;\n }\n return null;\n }\n\n public register(...definitions: any[]): any {\n if (definitions.length > 1) {\n return definitions.map(d => {\n return this.register(d);\n });\n }\n const definition = definitions[0];\n if (\n typeof definition.blotName !== 'string' &&\n typeof definition.attrName !== 'string'\n ) {\n throw new ParchmentError('Invalid definition');\n } else if (definition.blotName === 'abstract') {\n throw new ParchmentError('Cannot register abstract class');\n }\n this.types[definition.blotName || definition.attrName] = definition;\n if (typeof definition.keyName === 'string') {\n this.attributes[definition.keyName] = definition;\n } else {\n if (definition.className != null) {\n this.classes[definition.className] = definition;\n }\n if (definition.tagName != null) {\n if (Array.isArray(definition.tagName)) {\n definition.tagName = definition.tagName.map((tagName: string) => {\n return tagName.toUpperCase();\n });\n } else {\n definition.tagName = definition.tagName.toUpperCase();\n }\n const tagNames = Array.isArray(definition.tagName)\n ? definition.tagName\n : [definition.tagName];\n tagNames.forEach((tag: string) => {\n if (this.tags[tag] == null || definition.className == null) {\n this.tags[tag] = definition;\n }\n });\n }\n }\n return definition;\n }\n}\n","import ParchmentError from '../../error';\nimport Registry from '../../registry';\nimport Scope from '../../scope';\nimport { Blot, BlotConstructor, Formattable, Parent, Root } from './blot';\n\nclass ShadowBlot implements Blot {\n public static blotName = 'abstract';\n public static className: string;\n public static requiredContainer: BlotConstructor;\n public static scope: Scope;\n public static tagName: string;\n\n public static create(value: any): Node {\n if (this.tagName == null) {\n throw new ParchmentError('Blot definition missing tagName');\n }\n let node;\n if (Array.isArray(this.tagName)) {\n if (typeof value === 'string') {\n value = value.toUpperCase();\n if (parseInt(value, 10).toString() === value) {\n value = parseInt(value, 10);\n }\n }\n if (typeof value === 'number') {\n node = document.createElement(this.tagName[value - 1]);\n } else if (this.tagName.indexOf(value) > -1) {\n node = document.createElement(value);\n } else {\n node = document.createElement(this.tagName[0]);\n }\n } else {\n node = document.createElement(this.tagName);\n }\n if (this.className) {\n node.classList.add(this.className);\n }\n return node;\n }\n\n public prev: Blot | null;\n public next: Blot | null;\n // @ts-ignore\n public parent: Parent;\n\n // Hack for accessing inherited static methods\n get statics(): any {\n return this.constructor;\n }\n constructor(public scroll: Root, public domNode: Node) {\n Registry.blots.set(domNode, this);\n this.prev = null;\n this.next = null;\n }\n\n public attach(): void {\n // Nothing to do\n }\n\n public clone(): Blot {\n const domNode = this.domNode.cloneNode(false);\n return this.scroll.create(domNode);\n }\n\n public detach() {\n if (this.parent != null) {\n this.parent.removeChild(this);\n }\n Registry.blots.delete(this.domNode);\n }\n\n public deleteAt(index: number, length: number): void {\n const blot = this.isolate(index, length);\n blot.remove();\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n const blot = this.isolate(index, length);\n if (this.scroll.query(name, Scope.BLOT) != null && value) {\n blot.wrap(name, value);\n } else if (this.scroll.query(name, Scope.ATTRIBUTE) != null) {\n const parent = this.scroll.create(this.statics.scope) as Parent &\n Formattable;\n blot.wrap(parent);\n parent.format(name, value);\n }\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n const blot =\n def == null\n ? this.scroll.create('text', value)\n : this.scroll.create(value, def);\n const ref = this.split(index);\n this.parent.insertBefore(blot, ref || undefined);\n }\n\n public isolate(index: number, length: number): Blot {\n const target = this.split(index);\n if (target == null) {\n throw new Error('Attempt to isolate at end');\n }\n target.split(length);\n return target;\n }\n\n public length(): number {\n return 1;\n }\n\n public offset(root: Blot = this.parent): number {\n if (this.parent == null || this === root) {\n return 0;\n }\n return this.parent.children.offset(this) + this.parent.offset(root);\n }\n\n public optimize(_context: { [key: string]: any }): void {\n if (\n this.statics.requiredContainer &&\n !(this.parent instanceof this.statics.requiredContainer)\n ) {\n this.wrap(this.statics.requiredContainer.blotName);\n }\n }\n\n public remove(): void {\n if (this.domNode.parentNode != null) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n this.detach();\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement =\n typeof name === 'string' ? this.scroll.create(name, value) : name;\n if (this.parent != null) {\n this.parent.insertBefore(replacement, this.next || undefined);\n this.remove();\n }\n return replacement;\n }\n\n public split(index: number, _force?: boolean): Blot | null {\n return index === 0 ? this : this.next;\n }\n\n public update(\n _mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n // Nothing to do by default\n }\n\n public wrap(name: string | Parent, value?: any): Parent {\n const wrapper =\n typeof name === 'string'\n ? (this.scroll.create(name, value) as Parent)\n : name;\n if (this.parent != null) {\n this.parent.insertBefore(wrapper, this.next || undefined);\n }\n if (typeof wrapper.appendChild !== 'function') {\n throw new ParchmentError(`Cannot wrap ${name}`);\n }\n wrapper.appendChild(this);\n return wrapper;\n }\n}\n\nexport default ShadowBlot;\n","import LinkedList from '../../collection/linked-list';\nimport ParchmentError from '../../error';\nimport Scope from '../../scope';\nimport { Blot, BlotConstructor, Parent, Root } from './blot';\nimport ShadowBlot from './shadow';\n\nclass ParentBlot extends ShadowBlot implements Parent {\n public static allowedChildren: BlotConstructor[] | null;\n public static defaultChild: BlotConstructor | null;\n public static uiClass: string = '';\n\n public children!: LinkedList<Blot>;\n public domNode!: HTMLElement;\n public uiNode: HTMLElement | null = null;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.build();\n }\n\n public appendChild(other: Blot): void {\n this.insertBefore(other);\n }\n\n public attach(): void {\n super.attach();\n this.children.forEach(child => {\n child.attach();\n });\n }\n\n public attachUI(node: HTMLElement) {\n if (this.uiNode != null) {\n this.uiNode.remove();\n }\n this.uiNode = node;\n if (ParentBlot.uiClass) {\n this.uiNode.classList.add(ParentBlot.uiClass);\n }\n this.uiNode.setAttribute('contenteditable', 'false');\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n\n public build(): void {\n this.children = new LinkedList<Blot>();\n // Need to be reversed for if DOM nodes already in order\n Array.from(this.domNode.childNodes)\n .filter((node: Node) => node !== this.uiNode)\n .reverse()\n .forEach((node: Node) => {\n try {\n const child = makeAttachedBlot(node, this.scroll);\n this.insertBefore(child, this.children.head || undefined);\n } catch (err) {\n if (err instanceof ParchmentError) {\n return;\n } else {\n throw err;\n }\n }\n });\n }\n\n public deleteAt(index: number, length: number): void {\n if (index === 0 && length === this.length()) {\n return this.remove();\n }\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.deleteAt(offset, childLength);\n });\n }\n\n public descendant(\n criteria: { new (): Blot },\n index: number,\n ): [Blot | null, number];\n public descendant(\n criteria: (blot: Blot) => boolean,\n index: number,\n ): [Blot | null, number];\n public descendant(criteria: any, index: number = 0): [Blot | null, number] {\n const [child, offset] = this.children.find(index);\n if (\n (criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)\n ) {\n return [child as any, offset];\n } else if (child instanceof ParentBlot) {\n return child.descendant(criteria, offset);\n } else {\n return [null, -1];\n }\n }\n\n public descendants(\n criteria: { new (): Blot },\n index: number,\n length: number,\n ): Blot[];\n public descendants(\n criteria: (blot: Blot) => boolean,\n index: number,\n length: number,\n ): Blot[];\n public descendants(\n criteria: any,\n index: number = 0,\n length: number = Number.MAX_VALUE,\n ): Blot[] {\n let descendants: Blot[] = [];\n let lengthLeft = length;\n this.children.forEachAt(\n index,\n length,\n (child: Blot, childIndex: number, childLength: number) => {\n if (\n (criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)\n ) {\n descendants.push(child);\n }\n if (child instanceof ParentBlot) {\n descendants = descendants.concat(\n child.descendants(criteria, childIndex, lengthLeft),\n );\n }\n lengthLeft -= childLength;\n },\n );\n return descendants;\n }\n\n public detach(): void {\n this.children.forEach(child => {\n child.detach();\n });\n super.detach();\n }\n\n public enforceAllowedChildren() {\n let done = false;\n this.children.forEach((child: Blot) => {\n if (done) {\n return;\n }\n const allowed = this.statics.allowedChildren.some(\n (def: BlotConstructor) => child instanceof def,\n );\n if (allowed) {\n return;\n }\n if (child.statics.scope === Scope.BLOCK_BLOT) {\n if (child.next != null) {\n this.splitAfter(child);\n }\n if (child.prev != null) {\n this.splitAfter(child.prev);\n }\n child.parent.unwrap();\n done = true;\n } else if (child instanceof ParentBlot) {\n child.unwrap();\n } else {\n child.remove();\n }\n });\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n this.children.forEachAt(index, length, (child, offset, childLength) => {\n child.formatAt(offset, childLength, name, value);\n });\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n const [child, offset] = this.children.find(index);\n if (child) {\n child.insertAt(offset, value, def);\n } else {\n const blot =\n def == null\n ? this.scroll.create('text', value)\n : this.scroll.create(value, def);\n this.appendChild(blot);\n }\n }\n\n public insertBefore(childBlot: Blot, refBlot?: Blot | null): void {\n if (childBlot.parent != null) {\n childBlot.parent.children.remove(childBlot);\n }\n let refDomNode: Node | null = null;\n this.children.insertBefore(childBlot, refBlot || null);\n if (refBlot != null) {\n refDomNode = refBlot.domNode;\n }\n if (\n this.domNode.parentNode !== childBlot.domNode ||\n this.domNode.nextSibling !== refDomNode\n ) {\n this.domNode.insertBefore(childBlot.domNode, refDomNode);\n }\n childBlot.parent = this;\n childBlot.attach();\n }\n\n public length(): number {\n return this.children.reduce((memo, child) => {\n return memo + child.length();\n }, 0);\n }\n\n public moveChildren(targetParent: Parent, refNode?: Blot): void {\n this.children.forEach(child => {\n targetParent.insertBefore(child, refNode);\n });\n }\n\n public optimize(context: { [key: string]: any }) {\n super.optimize(context);\n this.enforceAllowedChildren();\n if (this.uiNode != null && this.uiNode !== this.domNode.firstChild) {\n this.domNode.insertBefore(this.uiNode, this.domNode.firstChild);\n }\n if (this.children.length === 0) {\n if (this.statics.defaultChild != null) {\n const child = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(child);\n // TODO double check if necessary\n // child.optimize(context);\n } else {\n this.remove();\n }\n }\n }\n\n public path(\n index: number,\n inclusive: boolean = false,\n ): Array<[Blot, number]> {\n const [child, offset] = this.children.find(index, inclusive);\n const position: Array<[Blot, number]> = [[this, index]];\n if (child instanceof ParentBlot) {\n return position.concat(child.path(offset, inclusive));\n } else if (child != null) {\n position.push([child, offset]);\n }\n return position;\n }\n\n public removeChild(child: Blot): void {\n this.children.remove(child);\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement =\n typeof name === 'string' ? this.scroll.create(name, value) : name;\n if (replacement instanceof ParentBlot) {\n this.moveChildren(replacement);\n }\n return super.replaceWith(replacement);\n }\n\n public split(index: number, force: boolean = false): Blot | null {\n if (!force) {\n if (index === 0) {\n return this;\n }\n if (index === this.length()) {\n return this.next;\n }\n }\n const after = this.clone() as ParentBlot;\n if (this.parent) {\n this.parent.insertBefore(after, this.next || undefined);\n }\n this.children.forEachAt(index, this.length(), (child, offset, _length) => {\n const split = child.split(offset, force);\n if (split != null) {\n after.appendChild(split);\n }\n });\n return after;\n }\n\n public splitAfter(child: Blot): Parent {\n const after = this.clone() as ParentBlot;\n while (child.next != null) {\n after.appendChild(child.next);\n }\n if (this.parent) {\n this.parent.insertBefore(after, this.next || undefined);\n }\n return after;\n }\n\n public unwrap(): void {\n if (this.parent) {\n this.moveChildren(this.parent, this.next || undefined);\n }\n this.remove();\n }\n\n public update(\n mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n const addedNodes: Node[] = [];\n const removedNodes: Node[] = [];\n mutations.forEach(mutation => {\n if (mutation.target === this.domNode && mutation.type === 'childList') {\n addedNodes.push.apply(addedNodes, mutation.addedNodes);\n removedNodes.push.apply(removedNodes, mutation.removedNodes);\n }\n });\n removedNodes.forEach((node: Node) => {\n // Check node has actually been removed\n // One exception is Chrome does not immediately remove IFRAMEs\n // from DOM but MutationRecord is correct in its reported removal\n if (\n node.parentNode != null &&\n // @ts-ignore\n node.tagName !== 'IFRAME' &&\n document.body.compareDocumentPosition(node) &\n Node.DOCUMENT_POSITION_CONTAINED_BY\n ) {\n return;\n }\n const blot = this.scroll.find(node);\n if (blot == null) {\n return;\n }\n if (\n blot.domNode.parentNode == null ||\n blot.domNode.parentNode === this.domNode\n ) {\n blot.detach();\n }\n });\n addedNodes\n .filter(node => {\n return node.parentNode === this.domNode || node === this.uiNode;\n })\n .sort((a, b) => {\n if (a === b) {\n return 0;\n }\n if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n return -1;\n })\n .forEach(node => {\n let refBlot: Blot | null = null;\n if (node.nextSibling != null) {\n refBlot = this.scroll.find(node.nextSibling);\n }\n const blot = makeAttachedBlot(node, this.scroll);\n if (blot.next !== refBlot || blot.next == null) {\n if (blot.parent != null) {\n blot.parent.removeChild(this);\n }\n this.insertBefore(blot, refBlot || undefined);\n }\n });\n this.enforceAllowedChildren();\n }\n}\n\nfunction makeAttachedBlot(node: Node, scroll: Root): Blot {\n let blot = scroll.find(node);\n if (blot == null) {\n try {\n blot = scroll.create(node);\n } catch (e) {\n blot = scroll.create(Scope.INLINE) as Blot;\n Array.from(node.childNodes).forEach((child: Node) => {\n // @ts-ignore\n blot.domNode.appendChild(child);\n });\n if (node.parentNode) {\n node.parentNode.replaceChild(blot.domNode, node);\n }\n blot.attach();\n }\n }\n return blot as Blot;\n}\n\nexport default ParentBlot;\n","import Scope from '../../scope';\nimport BlockBlot from '../block';\nimport ParentBlot from './parent';\n\nclass ContainerBlot extends ParentBlot {\n public static blotName = 'container';\n public static scope = Scope.BLOCK_BLOT;\n public static tagName: string;\n\n public prev!: BlockBlot | ContainerBlot | null;\n public next!: BlockBlot | ContainerBlot | null;\n\n public checkMerge(): boolean {\n return (\n this.next !== null && this.next.statics.blotName === this.statics.blotName\n );\n }\n\n public deleteAt(index: number, length: number): void {\n super.deleteAt(index, length);\n this.enforceAllowedChildren();\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n super.formatAt(index, length, name, value);\n this.enforceAllowedChildren();\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n super.insertAt(index, value, def);\n this.enforceAllowedChildren();\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n if (this.children.length > 0 && this.next != null && this.checkMerge()) {\n this.next.moveChildren(this);\n this.next.remove();\n }\n }\n}\n\nexport default ContainerBlot;\n","import Scope from '../../scope';\nimport { Leaf } from './blot';\nimport ShadowBlot from './shadow';\n\nclass LeafBlot extends ShadowBlot implements Leaf {\n public static scope = Scope.INLINE_BLOT;\n\n public static value(_domNode: Node): any {\n return true;\n }\n\n public index(node: Node, offset: number): number {\n if (\n this.domNode === node ||\n this.domNode.compareDocumentPosition(node) &\n Node.DOCUMENT_POSITION_CONTAINED_BY\n ) {\n return Math.min(offset, 1);\n }\n return -1;\n }\n\n public position(index: number, _inclusive?: boolean): [Node, number] {\n const childNodes: Node[] = Array.from(this.parent.domNode.childNodes);\n let offset = childNodes.indexOf(this.domNode);\n if (index > 0) {\n offset += 1;\n }\n return [this.parent.domNode, offset];\n }\n\n public value(): any {\n return {\n [this.statics.blotName]: this.statics.value(this.domNode) || true,\n };\n }\n}\n\nexport default LeafBlot;\n","import Scope from '../scope';\n\nexport interface IAttributorOptions {\n scope?: Scope;\n whitelist?: string[];\n}\n\nexport default class Attributor {\n public static keys(node: HTMLElement): string[] {\n return Array.from(node.attributes).map((item: Attr) => item.name);\n }\n\n public attrName: string;\n public keyName: string;\n public scope: Scope;\n public whitelist: string[] | undefined;\n\n constructor(\n attrName: string,\n keyName: string,\n options: IAttributorOptions = {},\n ) {\n this.attrName = attrName;\n this.keyName = keyName;\n const attributeBit = Scope.TYPE & Scope.ATTRIBUTE;\n this.scope =\n options.scope != null\n ? // Ignore type bits, force attribute bit\n (options.scope & Scope.LEVEL) | attributeBit\n : Scope.ATTRIBUTE;\n if (options.whitelist != null) {\n this.whitelist = options.whitelist;\n }\n }\n\n public add(node: HTMLElement, value: string): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n node.setAttribute(this.keyName, value);\n return true;\n }\n\n public canAdd(_node: HTMLElement, value: any): boolean {\n if (this.whitelist == null) {\n return true;\n }\n if (typeof value === 'string') {\n return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n } else {\n return this.whitelist.indexOf(value) > -1;\n }\n }\n\n public remove(node: HTMLElement): void {\n node.removeAttribute(this.keyName);\n }\n\n public value(node: HTMLElement): string {\n const value = node.getAttribute(this.keyName);\n if (this.canAdd(node, value) && value) {\n return value;\n }\n return '';\n }\n}\n","import Attributor from './attributor';\n\nfunction match(node: HTMLElement, prefix: string): string[] {\n const className = node.getAttribute('class') || '';\n return className\n .split(/\\s+/)\n .filter(name => name.indexOf(`${prefix}-`) === 0);\n}\n\nclass ClassAttributor extends Attributor {\n public static keys(node: HTMLElement): string[] {\n return (node.getAttribute('class') || '').split(/\\s+/).map(name =>\n name\n .split('-')\n .slice(0, -1)\n .join('-'),\n );\n }\n\n public add(node: HTMLElement, value: string): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n this.remove(node);\n node.classList.add(`${this.keyName}-${value}`);\n return true;\n }\n\n public remove(node: HTMLElement): void {\n const matches = match(node, this.keyName);\n matches.forEach(name => {\n node.classList.remove(name);\n });\n if (node.classList.length === 0) {\n node.removeAttribute('class');\n }\n }\n\n public value(node: HTMLElement): string {\n const result = match(node, this.keyName)[0] || '';\n const value = result.slice(this.keyName.length + 1); // +1 for hyphen\n return this.canAdd(node, value) ? value : '';\n }\n}\n\nexport default ClassAttributor;\n","import Attributor from './attributor';\n\nfunction camelize(name: string): string {\n const parts = name.split('-');\n const rest = parts\n .slice(1)\n .map((part: string) => part[0].toUpperCase() + part.slice(1))\n .join('');\n return parts[0] + rest;\n}\n\nclass StyleAttributor extends Attributor {\n public static keys(node: Element): string[] {\n return (node.getAttribute('style') || '').split(';').map(value => {\n const arr = value.split(':');\n return arr[0].trim();\n });\n }\n\n public add(node: HTMLElement, value: string): boolean {\n if (!this.canAdd(node, value)) {\n return false;\n }\n // @ts-ignore\n node.style[camelize(this.keyName)] = value;\n return true;\n }\n\n public remove(node: HTMLElement): void {\n // @ts-ignore\n node.style[camelize(this.keyName)] = '';\n if (!node.getAttribute('style')) {\n node.removeAttribute('style');\n }\n }\n\n public value(node: HTMLElement): string {\n // @ts-ignore\n const value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : '';\n }\n}\n\nexport default StyleAttributor;\n","import { Formattable } from '../blot/abstract/blot';\nimport Registry from '../registry';\nimport Scope from '../scope';\nimport Attributor from './attributor';\nimport ClassAttributor from './class';\nimport StyleAttributor from './style';\n\nclass AttributorStore {\n private attributes: { [key: string]: Attributor } = {};\n private domNode: HTMLElement;\n\n constructor(domNode: HTMLElement) {\n this.domNode = domNode;\n this.build();\n }\n\n public attribute(attribute: Attributor, value: any): void {\n // verb\n if (value) {\n if (attribute.add(this.domNode, value)) {\n if (attribute.value(this.domNode) != null) {\n this.attributes[attribute.attrName] = attribute;\n } else {\n delete this.attributes[attribute.attrName];\n }\n }\n } else {\n attribute.remove(this.domNode);\n delete this.attributes[attribute.attrName];\n }\n }\n\n public build(): void {\n this.attributes = {};\n const blot = Registry.find(this.domNode);\n if (blot == null) {\n return;\n }\n const attributes = Attributor.keys(this.domNode);\n const classes = ClassAttributor.keys(this.domNode);\n const styles = StyleAttributor.keys(this.domNode);\n attributes\n .concat(classes)\n .concat(styles)\n .forEach(name => {\n const attr = blot.scroll.query(name, Scope.ATTRIBUTE);\n if (attr instanceof Attributor) {\n this.attributes[attr.attrName] = attr;\n }\n });\n }\n\n public copy(target: Formattable): void {\n Object.keys(this.attributes).forEach(key => {\n const value = this.attributes[key].value(this.domNode);\n target.format(key, value);\n });\n }\n\n public move(target: Formattable): void {\n this.copy(target);\n Object.keys(this.attributes).forEach(key => {\n this.attributes[key].remove(this.domNode);\n });\n this.attributes = {};\n }\n\n public values(): { [key: string]: any } {\n return Object.keys(this.attributes).reduce(\n (attributes: { [key: string]: any }, name: string) => {\n attributes[name] = this.attributes[name].value(this.domNode);\n return attributes;\n },\n {},\n );\n }\n}\n\nexport default AttributorStore;\n","import Attributor from '../attributor/attributor';\nimport AttributorStore from '../attributor/store';\nimport Scope from '../scope';\nimport {\n Blot,\n BlotConstructor,\n Formattable,\n Parent,\n Root,\n} from './abstract/blot';\nimport LeafBlot from './abstract/leaf';\nimport ParentBlot from './abstract/parent';\n\n// Shallow object comparison\nfunction isEqual(obj1: object, obj2: object): boolean {\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n return false;\n }\n // @ts-ignore\n for (const prop in obj1) {\n // @ts-ignore\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n return true;\n}\n\nclass InlineBlot extends ParentBlot implements Formattable {\n public static allowedChildren: BlotConstructor[] = [InlineBlot, LeafBlot];\n public static blotName = 'inline';\n public static scope = Scope.INLINE_BLOT;\n public static tagName = 'SPAN';\n\n public static formats(domNode: HTMLElement, scroll: Root): any {\n const match = scroll.query(InlineBlot.blotName);\n if (\n match != null &&\n domNode.tagName === (match as BlotConstructor).tagName\n ) {\n return undefined;\n } else if (typeof this.tagName === 'string') {\n return true;\n } else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n return undefined;\n }\n\n protected attributes: AttributorStore;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.attributes = new AttributorStore(this.domNode);\n }\n\n public format(name: string, value: any) {\n if (name === this.statics.blotName && !value) {\n this.children.forEach(child => {\n if (!(child instanceof InlineBlot)) {\n child = child.wrap(InlineBlot.blotName, true);\n }\n this.attributes.copy(child as InlineBlot);\n });\n this.unwrap();\n } else {\n const format = this.scroll.query(name, Scope.INLINE);\n if (format == null) {\n return;\n }\n if (format instanceof Attributor) {\n this.attributes.attribute(format, value);\n } else if (\n value &&\n (name !== this.statics.blotName || this.formats()[name] !== value)\n ) {\n this.replaceWith(name, value);\n }\n }\n }\n\n public formats(): { [index: string]: any } {\n const formats = this.attributes.values();\n const format = this.statics.formats(this.domNode, this.scroll);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (\n this.formats()[name] != null ||\n this.scroll.query(name, Scope.ATTRIBUTE)\n ) {\n const blot = this.isolate(index, length) as InlineBlot;\n blot.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n const formats = this.formats();\n if (Object.keys(formats).length === 0) {\n return this.unwrap(); // unformatted span\n }\n const next = this.next;\n if (\n next instanceof InlineBlot &&\n next.prev === this &&\n isEqual(formats, next.formats())\n ) {\n next.moveChildren(this);\n next.remove();\n }\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement = super.replaceWith(name, value) as InlineBlot;\n this.attributes.copy(replacement);\n return replacement;\n }\n\n public update(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void {\n super.update(mutations, context);\n const attributeChanged = mutations.some(\n mutation =>\n mutation.target === this.domNode && mutation.type === 'attributes',\n );\n if (attributeChanged) {\n this.attributes.build();\n }\n }\n\n public wrap(name: string | Parent, value?: any): Parent {\n const wrapper = super.wrap(name, value);\n if (wrapper instanceof InlineBlot) {\n this.attributes.move(wrapper);\n }\n return wrapper;\n }\n}\n\nexport default InlineBlot;\n","import Attributor from '../attributor/attributor';\nimport AttributorStore from '../attributor/store';\nimport Scope from '../scope';\nimport { Blot, BlotConstructor, Formattable, Root } from './abstract/blot';\nimport LeafBlot from './abstract/leaf';\nimport ParentBlot from './abstract/parent';\nimport InlineBlot from './inline';\n\nclass BlockBlot extends ParentBlot implements Formattable {\n public static blotName = 'block';\n public static scope = Scope.BLOCK_BLOT;\n public static tagName = 'P';\n public static allowedChildren: BlotConstructor[] = [\n InlineBlot,\n BlockBlot,\n LeafBlot,\n ];\n\n public static formats(domNode: HTMLElement, scroll: Root): any {\n const match = scroll.query(BlockBlot.blotName);\n if (\n match != null &&\n domNode.tagName === (match as BlotConstructor).tagName\n ) {\n return undefined;\n } else if (typeof this.tagName === 'string') {\n return true;\n } else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n }\n\n protected attributes: AttributorStore;\n\n constructor(scroll: Root, domNode: Node) {\n super(scroll, domNode);\n this.attributes = new AttributorStore(this.domNode);\n }\n\n public format(name: string, value: any) {\n const format = this.scroll.query(name, Scope.BLOCK);\n if (format == null) {\n return;\n } else if (format instanceof Attributor) {\n this.attributes.attribute(format, value);\n } else if (name === this.statics.blotName && !value) {\n this.replaceWith(BlockBlot.blotName);\n } else if (\n value &&\n (name !== this.statics.blotName || this.formats()[name] !== value)\n ) {\n this.replaceWith(name, value);\n }\n }\n\n public formats(): { [index: string]: any } {\n const formats = this.attributes.values();\n const format = this.statics.formats(this.domNode, this.scroll);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (this.scroll.query(name, Scope.BLOCK) != null) {\n this.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n if (def == null || this.scroll.query(value, Scope.INLINE) != null) {\n // Insert text or inline\n super.insertAt(index, value, def);\n } else {\n const after = this.split(index);\n if (after != null) {\n const blot = this.scroll.create(value, def);\n after.parent.insertBefore(blot, after);\n } else {\n throw new Error('Attempt to insertAt after block boundaries');\n }\n }\n }\n\n public replaceWith(name: string | Blot, value?: any): Blot {\n const replacement = super.replaceWith(name, value) as BlockBlot;\n this.attributes.copy(replacement);\n return replacement;\n }\n\n public update(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void {\n super.update(mutations, context);\n const attributeChanged = mutations.some(\n mutation =>\n mutation.target === this.domNode && mutation.type === 'attributes',\n );\n if (attributeChanged) {\n this.attributes.build();\n }\n }\n}\n\nexport default BlockBlot;\n","import { Formattable, Root } from './abstract/blot';\nimport LeafBlot from './abstract/leaf';\n\nclass EmbedBlot extends LeafBlot implements Formattable {\n public static formats(_domNode: HTMLElement, _scroll: Root): any {\n return undefined;\n }\n\n public format(name: string, value: any): void {\n // super.formatAt wraps, which is what we want in general,\n // but this allows subclasses to overwrite for formats\n // that just apply to particular embeds\n super.formatAt(0, this.length(), name, value);\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n if (index === 0 && length === this.length()) {\n this.format(name, value);\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n public formats(): { [index: string]: any } {\n return this.statics.formats(this.domNode, this.scroll);\n }\n}\n\nexport default EmbedBlot;\n","import Attributor from '../attributor/attributor';\nimport Registry from '../registry';\nimport Scope from '../scope';\nimport { Blot, BlotConstructor, Root } from './abstract/blot';\nimport ContainerBlot from './abstract/container';\nimport ParentBlot from './abstract/parent';\nimport BlockBlot from './block';\n\nconst OBSERVER_CONFIG = {\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n};\n\nconst MAX_OPTIMIZE_ITERATIONS = 100;\n\nclass ScrollBlot extends ParentBlot implements Root {\n public static blotName = 'scroll';\n public static defaultChild = BlockBlot;\n public static allowedChildren: BlotConstructor[] = [BlockBlot, ContainerBlot];\n public static scope = Scope.BLOCK_BLOT;\n public static tagName = 'DIV';\n\n public registry: Registry;\n public observer: MutationObserver;\n\n constructor(registry: Registry, node: HTMLDivElement) {\n // @ts-ignore\n super(null, node);\n this.registry = registry;\n this.scroll = this;\n this.build();\n this.observer = new MutationObserver((mutations: MutationRecord[]) => {\n this.update(mutations);\n });\n this.observer.observe(this.domNode, OBSERVER_CONFIG);\n this.attach();\n }\n\n public create(input: Node | string | Scope, value?: any): Blot {\n return this.registry.create(this, input, value);\n }\n\n public find(node: Node | null, bubble: boolean = false): Blot | null {\n return this.registry.find(node, bubble);\n }\n\n public query(\n query: string | Node | Scope,\n scope: Scope = Scope.ANY,\n ): Attributor | BlotConstructor | null {\n return this.registry.query(query, scope);\n }\n\n public register(...definitions: any[]): any {\n return this.registry.register(...definitions);\n }\n\n public build() {\n if (this.scroll == null) {\n return;\n }\n super.build();\n }\n\n public detach() {\n super.detach();\n this.observer.disconnect();\n }\n\n public deleteAt(index: number, length: number): void {\n this.update();\n if (index === 0 && length === this.length()) {\n this.children.forEach(child => {\n child.remove();\n });\n } else {\n super.deleteAt(index, length);\n }\n }\n\n public formatAt(\n index: number,\n length: number,\n name: string,\n value: any,\n ): void {\n this.update();\n super.formatAt(index, length, name, value);\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n this.update();\n super.insertAt(index, value, def);\n }\n\n public optimize(context: { [key: string]: any }): void;\n public optimize(\n mutations: MutationRecord[],\n context: { [key: string]: any },\n ): void;\n public optimize(mutations: any = [], context: any = {}): void {\n super.optimize(context);\n const mutationsMap = context.mutationsMap || new WeakMap();\n // We must modify mutations directly, cannot make copy and then modify\n let records = Array.from(this.observer.takeRecords());\n // Array.push currently seems to be implemented by a non-tail recursive function\n // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n while (records.length > 0) {\n mutations.push(records.pop());\n }\n const mark = (blot: Blot | null, markParent: boolean = true) => {\n if (blot == null || blot === this) {\n return;\n }\n if (blot.domNode.parentNode == null) {\n return;\n }\n if (!mutationsMap.has(blot.domNode)) {\n mutationsMap.set(blot.domNode, []);\n }\n if (markParent) {\n mark(blot.parent);\n }\n };\n const optimize = (blot: Blot) => {\n // Post-order traversal\n if (!mutationsMap.has(blot.domNode)) {\n return;\n }\n if (blot instanceof ParentBlot) {\n blot.children.forEach(optimize);\n }\n mutationsMap.delete(blot.domNode);\n blot.optimize(context);\n };\n let remaining = mutations;\n for (let i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS) {\n throw new Error('[Parchment] Maximum optimize iterations reached');\n }\n remaining.forEach((mutation: MutationRecord) => {\n const blot = this.find(mutation.target, true);\n if (blot == null) {\n return;\n }\n if (blot.domNode === mutation.target) {\n if (mutation.type === 'childList') {\n mark(this.find(mutation.previousSibling, false));\n Array.from(mutation.addedNodes).forEach((node: Node) => {\n const child = this.find(node, false);\n mark(child, false);\n if (child instanceof ParentBlot) {\n child.children.forEach((grandChild: Blot) => {\n mark(grandChild, false);\n });\n }\n });\n } else if (mutation.type === 'attributes') {\n mark(blot.prev);\n }\n }\n mark(blot);\n });\n this.children.forEach(optimize);\n remaining = Array.from(this.observer.takeRecords());\n records = remaining.slice();\n while (records.length > 0) {\n mutations.push(records.pop());\n }\n }\n }\n\n public update(\n mutations?: MutationRecord[],\n context: { [key: string]: any } = {},\n ): void {\n mutations = mutations || this.observer.takeRecords();\n const mutationsMap = new WeakMap();\n mutations\n .map((mutation: MutationRecord) => {\n const blot = Registry.find(mutation.target, true);\n if (blot == null) {\n return null;\n }\n if (mutationsMap.has(blot.domNode)) {\n mutationsMap.get(blot.domNode).push(mutation);\n return null;\n } else {\n mutationsMap.set(blot.domNode, [mutation]);\n return blot;\n }\n })\n .forEach((blot: Blot | null) => {\n if (blot != null && blot !== this && mutationsMap.has(blot.domNode)) {\n blot.update(mutationsMap.get(blot.domNode) || [], context);\n }\n });\n context.mutationsMap = mutationsMap;\n if (mutationsMap.has(this.domNode)) {\n super.update(mutationsMap.get(this.domNode), context);\n }\n this.optimize(mutations, context);\n }\n}\n\nexport default ScrollBlot;\n","import Scope from '../scope';\nimport { Blot, Leaf, Root } from './abstract/blot';\nimport LeafBlot from './abstract/leaf';\n\nclass TextBlot extends LeafBlot implements Leaf {\n public static blotName = 'text';\n public static scope = Scope.INLINE_BLOT;\n\n public static create(value: string): Text {\n return document.createTextNode(value);\n }\n\n public static value(domNode: Text): string {\n return domNode.data;\n }\n\n public domNode!: Text;\n protected text: string;\n\n constructor(scroll: Root, node: Node) {\n super(scroll, node);\n this.text = this.statics.value(this.domNode);\n }\n\n public deleteAt(index: number, length: number): void {\n this.domNode.data = this.text =\n this.text.slice(0, index) + this.text.slice(index + length);\n }\n\n public index(node: Node, offset: number): number {\n if (this.domNode === node) {\n return offset;\n }\n return -1;\n }\n\n public insertAt(index: number, value: string, def?: any): void {\n if (def == null) {\n this.text = this.text.slice(0, index) + value + this.text.slice(index);\n this.domNode.data = this.text;\n } else {\n super.insertAt(index, value, def);\n }\n }\n\n public length(): number {\n return this.text.length;\n }\n\n public optimize(context: { [key: string]: any }): void {\n super.optimize(context);\n this.text = this.statics.value(this.domNode);\n if (this.text.length === 0) {\n this.remove();\n } else if (this.next instanceof TextBlot && this.next.prev === this) {\n this.insertAt(this.length(), (this.next as TextBlot).value());\n this.next.remove();\n }\n }\n\n public position(index: number, _inclusive: boolean = false): [Node, number] {\n return [this.domNode, index];\n }\n\n public split(index: number, force: boolean = false): Blot | null {\n if (!force) {\n if (index === 0) {\n return this;\n }\n if (index === this.length()) {\n return this.next;\n }\n }\n const after = this.scroll.create(this.domNode.splitText(index));\n this.parent.insertBefore(after, this.next || undefined);\n this.text = this.statics.value(this.domNode);\n return after;\n }\n\n public update(\n mutations: MutationRecord[],\n _context: { [key: string]: any },\n ): void {\n if (\n mutations.some(mutation => {\n return (\n mutation.type === 'characterData' && mutation.target === this.domNode\n );\n })\n ) {\n this.text = this.statics.value(this.domNode);\n }\n }\n\n public value(): string {\n return this.text;\n }\n}\n\nexport default TextBlot;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nvar deep_equal_1 = __importDefault(require(\"deep-equal\"));\nvar extend_1 = __importDefault(require(\"extend\"));\nvar fast_diff_1 = __importDefault(require(\"fast-diff\"));\nvar AttributeMap_1 = __importDefault(require(\"./AttributeMap\"));\nvar Op_1 = __importDefault(require(\"./Op\"));\nvar NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\nvar Delta = /** @class */ (function () {\n function Delta(ops) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n }\n else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n }\n else {\n this.ops = [];\n }\n }\n Delta.prototype.insert = function (arg, attributes) {\n var newOp = {};\n if (typeof arg === 'string' && arg.length === 0) {\n return this;\n }\n newOp.insert = arg;\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n };\n Delta.prototype.delete = function (length) {\n if (length <= 0) {\n return this;\n }\n return this.push({ delete: length });\n };\n Delta.prototype.retain = function (length, attributes) {\n if (length <= 0) {\n return this;\n }\n var newOp = { retain: length };\n if (attributes != null &&\n typeof attributes === 'object' &&\n Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n };\n Delta.prototype.push = function (newOp) {\n var index = this.ops.length;\n var lastOp = this.ops[index - 1];\n newOp = extend_1.default(true, {}, newOp);\n if (typeof lastOp === 'object') {\n if (typeof newOp.delete === 'number' &&\n typeof lastOp.delete === 'number') {\n this.ops[index - 1] = { delete: lastOp.delete + newOp.delete };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp.delete === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (deep_equal_1.default(newOp.attributes, lastOp.attributes)) {\n if (typeof newOp.insert === 'string' &&\n typeof lastOp.insert === 'string') {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n else if (typeof newOp.retain === 'number' &&\n typeof lastOp.retain === 'number') {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') {\n this.ops[index - 1].attributes = newOp.attributes;\n }\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n }\n else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n };\n Delta.prototype.chop = function () {\n var lastOp = this.ops[this.ops.length - 1];\n if (lastOp && lastOp.retain && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n };\n Delta.prototype.filter = function (predicate) {\n return this.ops.filter(predicate);\n };\n Delta.prototype.forEach = function (predicate) {\n this.ops.forEach(predicate);\n };\n Delta.prototype.map = function (predicate) {\n return this.ops.map(predicate);\n };\n Delta.prototype.partition = function (predicate) {\n var passed = [];\n var failed = [];\n this.forEach(function (op) {\n var target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n };\n Delta.prototype.reduce = function (predicate, initialValue) {\n return this.ops.reduce(predicate, initialValue);\n };\n Delta.prototype.changeLength = function () {\n return this.reduce(function (length, elem) {\n if (elem.insert) {\n return length + Op_1.default.length(elem);\n }\n else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n };\n Delta.prototype.length = function () {\n return this.reduce(function (length, elem) {\n return length + Op_1.default.length(elem);\n }, 0);\n };\n Delta.prototype.slice = function (start, end) {\n if (start === void 0) { start = 0; }\n if (end === void 0) { end = Infinity; }\n var ops = [];\n var iter = Op_1.default.iterator(this.ops);\n var index = 0;\n while (index < end && iter.hasNext()) {\n var nextOp = void 0;\n if (index < start) {\n nextOp = iter.next(start - index);\n }\n else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += Op_1.default.length(nextOp);\n }\n return new Delta(ops);\n };\n Delta.prototype.compose = function (other) {\n var thisIter = Op_1.default.iterator(this.ops);\n var otherIter = Op_1.default.iterator(other.ops);\n var ops = [];\n var firstOther = otherIter.peek();\n if (firstOther != null &&\n typeof firstOther.retain === 'number' &&\n firstOther.attributes == null) {\n var firstLeft = firstOther.retain;\n while (thisIter.peekType() === 'insert' &&\n thisIter.peekLength() <= firstLeft) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n var delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n }\n else {\n var length_1 = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length_1);\n var otherOp = otherIter.next(length_1);\n if (typeof otherOp.retain === 'number') {\n var newOp = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain = length_1;\n }\n else {\n newOp.insert = thisOp.insert;\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n var attributes = AttributeMap_1.default.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n if (attributes) {\n newOp.attributes = attributes;\n }\n delta.push(newOp);\n // Optimization if rest of other is just retain\n if (!otherIter.hasNext() &&\n deep_equal_1.default(delta.ops[delta.ops.length - 1], newOp)) {\n var rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n }\n else if (typeof otherOp.delete === 'number' &&\n typeof thisOp.retain === 'number') {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n };\n Delta.prototype.concat = function (other) {\n var delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n };\n Delta.prototype.diff = function (other, cursor) {\n if (this.ops === other.ops) {\n return new Delta();\n }\n var strings = [this, other].map(function (delta) {\n return delta\n .map(function (op) {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n var prep = delta === other ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n })\n .join('');\n });\n var retDelta = new Delta();\n var diffResult = fast_diff_1.default(strings[0], strings[1], cursor);\n var thisIter = Op_1.default.iterator(this.ops);\n var otherIter = Op_1.default.iterator(other.ops);\n diffResult.forEach(function (component) {\n var length = component[1].length;\n while (length > 0) {\n var opLength = 0;\n switch (component[0]) {\n case fast_diff_1.default.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n retDelta.push(otherIter.next(opLength));\n break;\n case fast_diff_1.default.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n retDelta.delete(opLength);\n break;\n case fast_diff_1.default.EQUAL:\n opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n var thisOp = thisIter.next(opLength);\n var otherOp = otherIter.next(opLength);\n if (deep_equal_1.default(thisOp.insert, otherOp.insert)) {\n retDelta.retain(opLength, AttributeMap_1.default.diff(thisOp.attributes, otherOp.attributes));\n }\n else {\n retDelta.push(otherOp).delete(opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return retDelta.chop();\n };\n Delta.prototype.eachLine = function (predicate, newline) {\n if (newline === void 0) { newline = '\\n'; }\n var iter = Op_1.default.iterator(this.ops);\n var line = new Delta();\n var i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') {\n return;\n }\n var thisOp = iter.peek();\n var start = Op_1.default.length(thisOp) - iter.peekLength();\n var index = typeof thisOp.insert === 'string'\n ? thisOp.insert.indexOf(newline, start) - start\n : -1;\n if (index < 0) {\n line.push(iter.next());\n }\n else if (index > 0) {\n line.push(iter.next(index));\n }\n else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n };\n Delta.prototype.transform = function (arg, priority) {\n if (priority === void 0) { priority = false; }\n priority = !!priority;\n if (typeof arg === 'number') {\n return this.transformPosition(arg, priority);\n }\n var other = arg;\n var thisIter = Op_1.default.iterator(this.ops);\n var otherIter = Op_1.default.iterator(other.ops);\n var delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (thisIter.peekType() === 'insert' &&\n (priority || otherIter.peekType() !== 'insert')) {\n delta.retain(Op_1.default.length(thisIter.next()));\n }\n else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n }\n else {\n var length_2 = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length_2);\n var otherOp = otherIter.next(length_2);\n if (thisOp.delete) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n }\n else if (otherOp.delete) {\n delta.push(otherOp);\n }\n else {\n // We retain either their retain or insert\n delta.retain(length_2, AttributeMap_1.default.transform(thisOp.attributes, otherOp.attributes, priority));\n }\n }\n }\n return delta.chop();\n };\n Delta.prototype.transformPosition = function (index, priority) {\n if (priority === void 0) { priority = false; }\n priority = !!priority;\n var thisIter = Op_1.default.iterator(this.ops);\n var offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n var length_3 = thisIter.peekLength();\n var nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length_3, index - offset);\n continue;\n }\n else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length_3;\n }\n offset += length_3;\n }\n return index;\n };\n Delta.Op = Op_1.default;\n Delta.AttributeMap = AttributeMap_1.default;\n return Delta;\n}());\nmodule.exports = Delta;\n//# sourceMappingURL=Delta.js.map","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport {\n AttributorStore,\n BlockBlot,\n EmbedBlot,\n LeafBlot,\n Scope,\n} from 'parchment';\nimport Break from './break';\nimport Inline from './inline';\nimport TextBlot from './text';\n\nconst NEWLINE_LENGTH = 1;\n\nclass Block extends BlockBlot {\n constructor(scroll, domNode) {\n super(scroll, domNode);\n this.cache = {};\n }\n\n delta() {\n if (this.cache.delta == null) {\n this.cache.delta = blockDelta(this);\n }\n return this.cache.delta;\n }\n\n deleteAt(index, length) {\n super.deleteAt(index, length);\n this.cache = {};\n }\n\n formatAt(index, length, name, value) {\n if (length <= 0) return;\n if (this.scroll.query(name, Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n super.formatAt(\n index,\n Math.min(length, this.length() - index - 1),\n name,\n value,\n );\n }\n this.cache = {};\n }\n\n insertAt(index, value, def) {\n if (def != null) {\n super.insertAt(index, value, def);\n this.cache = {};\n return;\n }\n if (value.length === 0) return;\n const lines = value.split('\\n');\n const text = lines.shift();\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n super.insertAt(Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n let block = this;\n lines.reduce((lineIndex, line) => {\n block = block.split(lineIndex, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n\n insertBefore(blot, ref) {\n const { head } = this.children;\n super.insertBefore(blot, ref);\n if (head instanceof Break) {\n head.remove();\n }\n this.cache = {};\n }\n\n length() {\n if (this.cache.length == null) {\n this.cache.length = super.length() + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n\n moveChildren(target, ref) {\n super.moveChildren(target, ref);\n this.cache = {};\n }\n\n optimize(context) {\n super.optimize(context);\n this.cache = {};\n }\n\n path(index) {\n return super.path(index, true);\n }\n\n removeChild(child) {\n super.removeChild(child);\n this.cache = {};\n }\n\n split(index, force = false) {\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n const clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n }\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n const next = super.split(index, force);\n this.cache = {};\n return next;\n }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = Break;\nBlock.allowedChildren = [Break, Inline, EmbedBlot, TextBlot];\n\nclass BlockEmbed extends EmbedBlot {\n attach() {\n super.attach();\n this.attributes = new AttributorStore(this.domNode);\n }\n\n delta() {\n return new Delta().insert(\n this.value(),\n extend(this.formats(), this.attributes.values()),\n );\n }\n\n format(name, value) {\n const attribute = this.scroll.query(name, Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n this.attributes.attribute(attribute, value);\n }\n }\n\n formatAt(index, length, name, value) {\n this.format(name, value);\n }\n\n insertAt(index, value, def) {\n if (typeof value === 'string' && value.endsWith('\\n')) {\n const block = this.scroll.create(Block.blotName);\n this.parent.insertBefore(block, index === 0 ? this : this.next);\n block.insertAt(0, value.slice(0, -1));\n } else {\n super.insertAt(index, value, def);\n }\n }\n}\nBlockEmbed.scope = Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\nfunction blockDelta(blot) {\n return blot\n .descendants(LeafBlot)\n .reduce((delta, leaf) => {\n if (leaf.length() === 0) {\n return delta;\n }\n return delta.insert(leaf.value(), bubbleFormats(leaf));\n }, new Delta())\n .insert('\\n', bubbleFormats(blot));\n}\n\nfunction bubbleFormats(blot, formats = {}) {\n if (blot == null) return formats;\n if (typeof blot.formats === 'function') {\n formats = extend(formats, blot.formats());\n // exclude syntax highlighting from deltas and getFormat()\n delete formats['code-token'];\n }\n if (\n blot.parent == null ||\n blot.parent.statics.blotName === 'scroll' ||\n blot.parent.statics.scope !== blot.statics.scope\n ) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats);\n}\n\nexport { blockDelta, bubbleFormats, BlockEmbed, Block as default };\n","import Delta from 'quill-delta';\nimport * as Parchment from 'parchment';\nimport extend from 'extend';\nimport Editor from './editor';\nimport Emitter from './emitter';\nimport Module from './module';\nimport Selection, { Range } from './selection';\nimport instances from './instances';\nimport logger from './logger';\nimport Theme from './theme';\n\nconst debug = logger('quill');\n\nconst globalRegistry = new Parchment.Registry();\nParchment.ParentBlot.uiClass = 'ql-ui';\n\nclass Quill {\n static debug(limit) {\n if (limit === true) {\n limit = 'log';\n }\n logger.level(limit);\n }\n\n static find(node) {\n return instances.get(node) || globalRegistry.find(node);\n }\n\n static import(name) {\n if (this.imports[name] == null) {\n debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n }\n return this.imports[name];\n }\n\n static register(path, target, overwrite = false) {\n if (typeof path !== 'string') {\n const name = path.attrName || path.blotName;\n if (typeof name === 'string') {\n // register(Blot | Attributor, overwrite)\n this.register(`formats/${name}`, path, target);\n } else {\n Object.keys(path).forEach(key => {\n this.register(key, path[key], target);\n });\n }\n } else {\n if (this.imports[path] != null && !overwrite) {\n debug.warn(`Overwriting ${path} with`, target);\n }\n this.imports[path] = target;\n if (\n (path.startsWith('blots/') || path.startsWith('formats/')) &&\n target.blotName !== 'abstract'\n ) {\n globalRegistry.register(target);\n }\n if (typeof target.register === 'function') {\n target.register(globalRegistry);\n }\n }\n }\n\n constructor(container, options = {}) {\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n return debug.error('Invalid Quill container', container);\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n const html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n instances.set(this.container, this);\n this.root = this.addContainer('ql-editor');\n this.root.addEventListener('dragstart', e => {\n e.preventDefault();\n });\n this.root.classList.add('ql-blank');\n this.root.setAttribute('data-gramm', false);\n this.scrollingContainer = this.options.scrollingContainer || this.root;\n this.emitter = new Emitter();\n const ScrollBlot = this.options.registry.query(\n Parchment.ScrollBlot.blotName,\n );\n this.scroll = new ScrollBlot(this.options.registry, this.root, {\n emitter: this.emitter,\n });\n this.editor = new Editor(this.scroll);\n this.selection = new Selection(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options); // eslint-disable-line new-cap\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.uploader = this.theme.addModule('uploader');\n this.theme.init();\n this.emitter.on(Emitter.events.EDITOR_CHANGE, type => {\n if (type === Emitter.events.TEXT_CHANGE) {\n this.root.classList.toggle('ql-blank', this.editor.isBlank());\n }\n });\n this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n const oldRange = this.selection.lastRange;\n const [newRange] = this.selection.getRange();\n const selectionInfo =\n oldRange && newRange ? { oldRange, newRange } : undefined;\n modify.call(\n this,\n () => this.editor.update(null, mutations, selectionInfo),\n source,\n );\n });\n const contents = this.clipboard.convert({\n html: `${html}<p><br></p>`,\n text: '\\n',\n });\n this.setContents(contents);\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n this.allowReadOnlyEdits = false;\n }\n\n addContainer(container, refNode = null) {\n if (typeof container === 'string') {\n const className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n\n blur() {\n this.selection.setRange(null);\n }\n\n deleteText(index, length, source) {\n [index, length, , source] = overload(index, length, source);\n return modify.call(\n this,\n () => {\n return this.editor.deleteText(index, length);\n },\n source,\n index,\n -1 * length,\n );\n }\n\n disable() {\n this.enable(false);\n }\n\n editReadOnly(modifier) {\n this.allowReadOnlyEdits = true;\n const value = modifier();\n this.allowReadOnlyEdits = false;\n return value;\n }\n\n enable(enabled = true) {\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n\n focus() {\n const { scrollTop } = this.scrollingContainer;\n this.selection.focus();\n this.scrollingContainer.scrollTop = scrollTop;\n this.scrollIntoView();\n }\n\n format(name, value, source = Emitter.sources.API) {\n return modify.call(\n this,\n () => {\n const range = this.getSelection(true);\n let change = new Delta();\n if (range == null) return change;\n if (this.scroll.query(name, Parchment.Scope.BLOCK)) {\n change = this.editor.formatLine(range.index, range.length, {\n [name]: value,\n });\n } else if (range.length === 0) {\n this.selection.format(name, value);\n return change;\n } else {\n change = this.editor.formatText(range.index, range.length, {\n [name]: value,\n });\n }\n this.setSelection(range, Emitter.sources.SILENT);\n return change;\n },\n source,\n );\n }\n\n formatLine(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n index,\n length,\n name,\n value,\n source,\n );\n return modify.call(\n this,\n () => {\n return this.editor.formatLine(index, length, formats);\n },\n source,\n index,\n 0,\n );\n }\n\n formatText(index, length, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, length, formats, source] = overload(\n index,\n length,\n name,\n value,\n source,\n );\n return modify.call(\n this,\n () => {\n return this.editor.formatText(index, length, formats);\n },\n source,\n index,\n 0,\n );\n }\n\n getBounds(index, length = 0) {\n let bounds;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n const containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width,\n };\n }\n\n getContents(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getContents(index, length);\n }\n\n getFormat(index = this.getSelection(true), length = 0) {\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n }\n return this.editor.getFormat(index.index, index.length);\n }\n\n getIndex(blot) {\n return blot.offset(this.scroll);\n }\n\n getLength() {\n return this.scroll.length();\n }\n\n getLeaf(index) {\n return this.scroll.leaf(index);\n }\n\n getLine(index) {\n return this.scroll.line(index);\n }\n\n getLines(index = 0, length = Number.MAX_VALUE) {\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n }\n return this.scroll.lines(index, length);\n }\n\n getModule(name) {\n return this.theme.modules[name];\n }\n\n getSelection(focus = false) {\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n\n getSemanticHTML(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getHTML(index, length);\n }\n\n getText(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getText(index, length);\n }\n\n hasFocus() {\n return this.selection.hasFocus();\n }\n\n insertEmbed(index, embed, value, source = Quill.sources.API) {\n return modify.call(\n this,\n () => {\n return this.editor.insertEmbed(index, embed, value);\n },\n source,\n index,\n );\n }\n\n insertText(index, text, name, value, source) {\n let formats;\n // eslint-disable-next-line prefer-const\n [index, , formats, source] = overload(index, 0, name, value, source);\n return modify.call(\n this,\n () => {\n return this.editor.insertText(index, text, formats);\n },\n source,\n index,\n text.length,\n );\n }\n\n isEnabled() {\n return this.scroll.isEnabled();\n }\n\n off(...args) {\n return this.emitter.off(...args);\n }\n\n on(...args) {\n return this.emitter.on(...args);\n }\n\n once(...args) {\n return this.emitter.once(...args);\n }\n\n removeFormat(index, length, source) {\n [index, length, , source] = overload(index, length, source);\n return modify.call(\n this,\n () => {\n return this.editor.removeFormat(index, length);\n },\n source,\n index,\n );\n }\n\n scrollIntoView() {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n\n setContents(delta, source = Emitter.sources.API) {\n return modify.call(\n this,\n () => {\n delta = new Delta(delta);\n const length = this.getLength();\n const deleted = this.editor.deleteText(0, length);\n const applied = this.editor.applyDelta(delta);\n const lastOp = applied.ops[applied.ops.length - 1];\n if (\n lastOp != null &&\n typeof lastOp.insert === 'string' &&\n lastOp.insert[lastOp.insert.length - 1] === '\\n'\n ) {\n this.editor.deleteText(this.getLength() - 1, 1);\n applied.delete(1);\n }\n return deleted.compose(applied);\n },\n source,\n );\n }\n\n setSelection(index, length, source) {\n if (index == null) {\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n [index, length, , source] = overload(index, length, source);\n this.selection.setRange(new Range(Math.max(0, index), length), source);\n if (source !== Emitter.sources.SILENT) {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n }\n }\n\n setText(text, source = Emitter.sources.API) {\n const delta = new Delta().insert(text);\n return this.setContents(delta, source);\n }\n\n update(source = Emitter.sources.USER) {\n const change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n // TODO this is usually undefined\n return change;\n }\n\n updateContents(delta, source = Emitter.sources.API) {\n return modify.call(\n this,\n () => {\n delta = new Delta(delta);\n return this.editor.applyDelta(delta, source);\n },\n source,\n true,\n );\n }\n}\nQuill.DEFAULTS = {\n bounds: null,\n modules: {},\n placeholder: '',\n readOnly: false,\n registry: globalRegistry,\n scrollingContainer: null,\n theme: 'default',\n};\nQuill.events = Emitter.events;\nQuill.sources = Emitter.sources;\n// eslint-disable-next-line no-undef\nQuill.version = typeof QUILL_VERSION === 'undefined' ? 'dev' : QUILL_VERSION;\n\nQuill.imports = {\n delta: Delta,\n parchment: Parchment,\n 'core/module': Module,\n 'core/theme': Theme,\n};\n\nfunction expandConfig(container, userConfig) {\n userConfig = extend(\n true,\n {\n container,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true,\n uploader: true,\n },\n },\n userConfig,\n );\n if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n userConfig.theme = Theme;\n } else {\n userConfig.theme = Quill.import(`themes/${userConfig.theme}`);\n if (userConfig.theme == null) {\n throw new Error(\n `Invalid theme ${userConfig.theme}. Did you register it?`,\n );\n }\n }\n const themeConfig = extend(true, {}, userConfig.theme.DEFAULTS);\n [themeConfig, userConfig].forEach(config => {\n config.modules = config.modules || {};\n Object.keys(config.modules).forEach(module => {\n if (config.modules[module] === true) {\n config.modules[module] = {};\n }\n });\n });\n const moduleNames = Object.keys(themeConfig.modules).concat(\n Object.keys(userConfig.modules),\n );\n const moduleConfig = moduleNames.reduce((config, name) => {\n const moduleClass = Quill.import(`modules/${name}`);\n if (moduleClass == null) {\n debug.error(\n `Cannot load ${name} module. Are you sure you registered it?`,\n );\n } else {\n config[name] = moduleClass.DEFAULTS || {};\n }\n return config;\n }, {});\n // Special case toolbar shorthand\n if (\n userConfig.modules != null &&\n userConfig.modules.toolbar &&\n userConfig.modules.toolbar.constructor !== Object\n ) {\n userConfig.modules.toolbar = {\n container: userConfig.modules.toolbar,\n };\n }\n userConfig = extend(\n true,\n {},\n Quill.DEFAULTS,\n { modules: moduleConfig },\n themeConfig,\n userConfig,\n );\n ['bounds', 'container', 'scrollingContainer'].forEach(key => {\n if (typeof userConfig[key] === 'string') {\n userConfig[key] = document.querySelector(userConfig[key]);\n }\n });\n userConfig.modules = Object.keys(userConfig.modules).reduce(\n (config, name) => {\n if (userConfig.modules[name]) {\n config[name] = userConfig.modules[name];\n }\n return config;\n },\n {},\n );\n return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n if (\n !this.isEnabled() &&\n source === Emitter.sources.USER &&\n !this.allowReadOnlyEdits\n ) {\n return new Delta();\n }\n let range = index == null ? null : this.getSelection();\n const oldDelta = this.editor.delta;\n const change = modifier();\n if (range != null) {\n if (index === true) {\n index = range.index; // eslint-disable-line prefer-destructuring\n }\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, Emitter.sources.SILENT);\n }\n if (change.length() > 0) {\n const args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n return change;\n}\n\nfunction overload(index, length, name, value, source) {\n let formats = {};\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n source = value;\n value = name;\n name = length;\n length = index.length; // eslint-disable-line prefer-destructuring\n index = index.index; // eslint-disable-line prefer-destructuring\n } else {\n length = index.length; // eslint-disable-line prefer-destructuring\n index = index.index; // eslint-disable-line prefer-destructuring\n }\n } else if (typeof length !== 'number') {\n source = value;\n value = name;\n name = length;\n length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if (typeof name === 'object') {\n formats = name;\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n source = name;\n }\n }\n // Handle optional source\n source = source || Emitter.sources.API;\n return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n if (range == null) return null;\n let start;\n let end;\n if (index instanceof Delta) {\n [start, end] = [range.index, range.index + range.length].map(pos =>\n index.transformPosition(pos, source !== Emitter.sources.USER),\n );\n } else {\n [start, end] = [range.index, range.index + range.length].map(pos => {\n if (pos < index || (pos === index && source === Emitter.sources.USER))\n return pos;\n if (length >= 0) {\n return pos + length;\n }\n return Math.max(index, pos + length);\n });\n }\n return new Range(start, end - start);\n}\n\nexport { globalRegistry, expandConfig, overload, Quill as default };\n","import { EmbedBlot, InlineBlot, Scope } from 'parchment';\nimport Break from './break';\nimport Text from './text';\n\nclass Inline extends InlineBlot {\n static compare(self, other) {\n const selfIndex = Inline.order.indexOf(self);\n const otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n }\n if (self === other) {\n return 0;\n }\n if (self < other) {\n return -1;\n }\n return 1;\n }\n\n formatAt(index, length, name, value) {\n if (\n Inline.compare(this.statics.blotName, name) < 0 &&\n this.scroll.query(name, Scope.BLOT)\n ) {\n const blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n optimize(context) {\n super.optimize(context);\n if (\n this.parent instanceof Inline &&\n Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0\n ) {\n const parent = this.parent.isolate(this.offset(), this.length());\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n}\nInline.allowedChildren = [Inline, Break, EmbedBlot, Text];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = [\n 'cursor',\n 'inline', // Must be lower\n 'underline',\n 'strike',\n 'italic',\n 'bold',\n 'script',\n 'link',\n 'code', // Must be higher\n];\n\nexport default Inline;\n","import { TextBlot } from 'parchment';\n\nclass Text extends TextBlot {}\n\nfunction escapeText(text) {\n return text.replace(/[&<>\"']/g, s => {\n // https://lodash.com/docs#escape\n const entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n };\n return entityMap[s];\n });\n}\n\nexport { Text as default, escapeText };\n","class Module {\n constructor(quill, options = {}) {\n this.quill = quill;\n this.options = options;\n }\n}\nModule.DEFAULTS = {};\n\nexport default Module;\n","import EventEmitter from 'eventemitter3';\nimport instances from './instances';\nimport logger from './logger';\n\nconst debug = logger('quill:events');\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(eventName => {\n document.addEventListener(eventName, (...args) => {\n Array.from(document.querySelectorAll('.ql-container')).forEach(node => {\n const quill = instances.get(node);\n if (quill && quill.emitter) {\n quill.emitter.handleDOM(...args);\n }\n });\n });\n});\n\nclass Emitter extends EventEmitter {\n constructor() {\n super();\n this.listeners = {};\n this.on('error', debug.error);\n }\n\n emit(...args) {\n debug.log.call(debug, ...args);\n super.emit(...args);\n }\n\n handleDOM(event, ...args) {\n (this.listeners[event.type] || []).forEach(({ node, handler }) => {\n if (event.target === node || node.contains(event.target)) {\n handler(event, ...args);\n }\n });\n }\n\n listenDOM(eventName, node, handler) {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName].push({ node, handler });\n }\n}\n\nEmitter.events = {\n EDITOR_CHANGE: 'editor-change',\n SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n SCROLL_BLOT_MOUNT: 'scroll-blot-mount',\n SCROLL_BLOT_UNMOUNT: 'scroll-blot-unmount',\n SCROLL_OPTIMIZE: 'scroll-optimize',\n SCROLL_UPDATE: 'scroll-update',\n SELECTION_CHANGE: 'selection-change',\n TEXT_CHANGE: 'text-change',\n};\nEmitter.sources = {\n API: 'api',\n SILENT: 'silent',\n USER: 'user',\n};\n\nexport default Emitter;\n","import { EmbedBlot } from 'parchment';\n\nclass Break extends EmbedBlot {\n static value() {\n return undefined;\n }\n\n optimize() {\n if (this.prev || this.next) {\n this.remove();\n }\n }\n\n length() {\n return 0;\n }\n\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexport default Break;\n","const levels = ['error', 'warn', 'log', 'info'];\nlet level = 'warn';\n\nfunction debug(method, ...args) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args); // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce((logger, method) => {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n }, {});\n}\n\nnamespace.level = newLevel => {\n level = newLevel;\n};\ndebug.level = namespace.level;\n\nexport default namespace;\n","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n if (!opts) opts = {};\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n\n } else if (actual instanceof Date && expected instanceof Date) {\n return actual.getTime() === expected.getTime();\n\n // 7.3. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n return opts.strict ? actual === expected : actual == expected;\n\n // 7.4. For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else {\n return objEquiv(actual, expected, opts);\n }\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') return false;\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n var i, key;\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n return false;\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) return false;\n //~~~I've managed to break Object.keys through screwy arguments passing.\n // Converting to array solves the problem.\n if (isArguments(a)) {\n if (!isArguments(b)) {\n return false;\n }\n a = pSlice.call(a);\n b = pSlice.call(b);\n return deepEqual(a, b, opts);\n }\n if (isBuffer(a)) {\n if (!isBuffer(b)) {\n return false;\n }\n if (a.length !== b.length) return false;\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n try {\n var ka = objectKeys(a),\n kb = objectKeys(b);\n } catch (e) {//happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length != kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) return false;\n }\n return typeof a === typeof b;\n}\n","import { ContainerBlot } from 'parchment';\n\nclass Container extends ContainerBlot {}\n\nexport default Container;\n","import { LeafBlot, Scope } from 'parchment';\nimport clone from 'clone';\nimport equal from 'deep-equal';\nimport Emitter from './emitter';\nimport logger from './logger';\n\nconst debug = logger('quill:selection');\n\nclass Range {\n constructor(index, length = 0) {\n this.index = index;\n this.length = length;\n }\n}\n\nclass Selection {\n constructor(scroll, emitter) {\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n this.cursor = this.scroll.create('cursor', this);\n // savedRange is last non-null range\n this.savedRange = new Range(0, 0);\n this.lastRange = this.savedRange;\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, () => {\n if (!this.mouseDown && !this.composing) {\n setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n }\n });\n this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n if (!this.hasFocus()) return;\n const native = this.getNativeRange();\n if (native == null) return;\n if (native.start.node === this.cursor.textNode) return; // cursor.restore() will handle\n this.emitter.once(Emitter.events.SCROLL_UPDATE, () => {\n try {\n if (\n this.root.contains(native.start.node) &&\n this.root.contains(native.end.node)\n ) {\n this.setNativeRange(\n native.start.node,\n native.start.offset,\n native.end.node,\n native.end.offset,\n );\n }\n this.update(Emitter.sources.SILENT);\n } catch (ignored) {\n // ignore\n }\n });\n });\n this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n if (context.range) {\n const { startNode, startOffset, endNode, endOffset } = context.range;\n this.setNativeRange(startNode, startOffset, endNode, endOffset);\n this.update(Emitter.sources.SILENT);\n }\n });\n this.update(Emitter.sources.SILENT);\n }\n\n handleComposition() {\n this.root.addEventListener('compositionstart', () => {\n this.composing = true;\n this.scroll.batchStart();\n });\n this.root.addEventListener('compositionend', () => {\n this.scroll.batchEnd();\n this.composing = false;\n if (this.cursor.parent) {\n const range = this.cursor.restore();\n if (!range) return;\n setTimeout(() => {\n this.setNativeRange(\n range.startNode,\n range.startOffset,\n range.endNode,\n range.endOffset,\n );\n }, 1);\n }\n });\n }\n\n handleDragging() {\n this.emitter.listenDOM('mousedown', document.body, () => {\n this.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, () => {\n this.mouseDown = false;\n this.update(Emitter.sources.USER);\n });\n }\n\n focus() {\n if (this.hasFocus()) return;\n this.root.focus();\n this.setRange(this.savedRange);\n }\n\n format(format, value) {\n this.scroll.update();\n const nativeRange = this.getNativeRange();\n if (\n nativeRange == null ||\n !nativeRange.native.collapsed ||\n this.scroll.query(format, Scope.BLOCK)\n )\n return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n const blot = this.scroll.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof LeafBlot) {\n const after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n\n getBounds(index, length = 0) {\n const scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n let node;\n let [leaf, offset] = this.scroll.leaf(index);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n const range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n [leaf, offset] = this.scroll.leaf(index + length);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n }\n let side = 'left';\n let rect;\n if (node instanceof Text) {\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0,\n };\n }\n\n getNativeRange() {\n const selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n const nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n const range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n\n getRange() {\n const normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n const range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n\n hasFocus() {\n return (\n document.activeElement === this.root ||\n contains(this.root, document.activeElement)\n );\n }\n\n normalizedToRange(range) {\n const positions = [[range.start.node, range.start.offset]];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n const indexes = positions.map(position => {\n const [node, offset] = position;\n const blot = this.scroll.find(node, true);\n const index = blot.offset(this.scroll);\n if (offset === 0) {\n return index;\n }\n if (blot instanceof LeafBlot) {\n return index + blot.index(node, offset);\n }\n return index + blot.length();\n });\n const end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n const start = Math.min(end, ...indexes);\n return new Range(start, end - start);\n }\n\n normalizeNative(nativeRange) {\n if (\n !contains(this.root, nativeRange.startContainer) ||\n (!nativeRange.collapsed && !contains(this.root, nativeRange.endContainer))\n ) {\n return null;\n }\n const range = {\n start: {\n node: nativeRange.startContainer,\n offset: nativeRange.startOffset,\n },\n end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n native: nativeRange,\n };\n [range.start, range.end].forEach(position => {\n let { node, offset } = position;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n node = node.lastChild;\n if (node instanceof Text) {\n offset = node.data.length;\n } else if (node.childNodes.length > 0) {\n // Container case\n offset = node.childNodes.length;\n } else {\n // Embed case\n offset = node.childNodes.length + 1;\n }\n } else {\n break;\n }\n }\n position.node = node;\n position.offset = offset;\n });\n return range;\n }\n\n rangeToNative(range) {\n const indexes = range.collapsed\n ? [range.index]\n : [range.index, range.index + range.length];\n const args = [];\n const scrollLength = this.scroll.length();\n indexes.forEach((index, i) => {\n index = Math.min(scrollLength - 1, index);\n const [leaf, leafOffset] = this.scroll.leaf(index);\n const [node, offset] = leaf.position(leafOffset, i !== 0);\n args.push(node, offset);\n });\n if (args.length < 2) {\n return args.concat(args);\n }\n return args;\n }\n\n scrollIntoView(scrollingContainer) {\n const range = this.lastRange;\n if (range == null) return;\n const bounds = this.getBounds(range.index, range.length);\n if (bounds == null) return;\n const limit = this.scroll.length() - 1;\n const [first] = this.scroll.line(Math.min(range.index, limit));\n let last = first;\n if (range.length > 0) {\n [last] = this.scroll.line(Math.min(range.index + range.length, limit));\n }\n if (first == null || last == null) return;\n const scrollBounds = scrollingContainer.getBoundingClientRect();\n if (bounds.top < scrollBounds.top) {\n scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n } else if (bounds.bottom > scrollBounds.bottom) {\n scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n }\n }\n\n setNativeRange(\n startNode,\n startOffset,\n endNode = startNode,\n endOffset = startOffset,\n force = false,\n ) {\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (\n startNode != null &&\n (this.root.parentNode == null ||\n startNode.parentNode == null ||\n endNode.parentNode == null)\n ) {\n return;\n }\n const selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus();\n const { native } = this.getNativeRange() || {};\n if (\n native == null ||\n force ||\n startNode !== native.startContainer ||\n startOffset !== native.startOffset ||\n endNode !== native.endContainer ||\n endOffset !== native.endOffset\n ) {\n if (startNode.tagName === 'BR') {\n startOffset = Array.from(startNode.parentNode.childNodes).indexOf(\n startNode,\n );\n startNode = startNode.parentNode;\n }\n if (endNode.tagName === 'BR') {\n endOffset = Array.from(endNode.parentNode.childNodes).indexOf(\n endNode,\n );\n endNode = endNode.parentNode;\n }\n const range = document.createRange();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n }\n }\n\n setRange(range, force = false, source = Emitter.sources.API) {\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n const args = this.rangeToNative(range);\n this.setNativeRange(...args, force);\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n\n update(source = Emitter.sources.USER) {\n const oldRange = this.lastRange;\n const [lastRange, nativeRange] = this.getRange();\n this.lastRange = lastRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!equal(oldRange, this.lastRange)) {\n if (\n !this.composing &&\n nativeRange != null &&\n nativeRange.native.collapsed &&\n nativeRange.start.node !== this.cursor.textNode\n ) {\n const range = this.cursor.restore();\n if (range) {\n this.setNativeRange(\n range.startNode,\n range.startOffset,\n range.endNode,\n range.endOffset,\n );\n }\n }\n const args = [\n Emitter.events.SELECTION_CHANGE,\n clone(this.lastRange),\n clone(oldRange),\n source,\n ];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n }\n}\n\nfunction contains(parent, descendant) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode; // eslint-disable-line no-unused-expressions\n } catch (e) {\n return false;\n }\n return parent.contains(descendant);\n}\n\nexport { Range, Selection as default };\n","import { EmbedBlot, Scope } from 'parchment';\nimport TextBlot from './text';\n\nclass Cursor extends EmbedBlot {\n static value() {\n return undefined;\n }\n\n constructor(scroll, domNode, selection) {\n super(scroll, domNode);\n this.selection = selection;\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n this.savedLength = 0;\n }\n\n detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n\n format(name, value) {\n if (this.savedLength !== 0) {\n super.format(name, value);\n return;\n }\n let target = this;\n let index = 0;\n while (target != null && target.statics.scope !== Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this.savedLength = Cursor.CONTENTS.length;\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this.savedLength = 0;\n }\n }\n\n index(node, offset) {\n if (node === this.textNode) return 0;\n return super.index(node, offset);\n }\n\n length() {\n return this.savedLength;\n }\n\n position() {\n return [this.textNode, this.textNode.data.length];\n }\n\n remove() {\n super.remove();\n this.parent = null;\n }\n\n restore() {\n if (this.selection.composing || this.parent == null) return null;\n const range = this.selection.getNativeRange();\n // Link format will insert text outside of anchor tag\n while (\n this.domNode.lastChild != null &&\n this.domNode.lastChild !== this.textNode\n ) {\n this.domNode.parentNode.insertBefore(\n this.domNode.lastChild,\n this.domNode,\n );\n }\n\n const prevTextBlot = this.prev instanceof TextBlot ? this.prev : null;\n const prevTextLength = prevTextBlot ? prevTextBlot.length() : 0;\n const nextTextBlot = this.next instanceof TextBlot ? this.next : null;\n const nextText = nextTextBlot ? nextTextBlot.text : '';\n const { textNode } = this;\n // take text from inside this blot and reset it\n const newText = textNode.data.split(Cursor.CONTENTS).join('');\n textNode.data = Cursor.CONTENTS;\n\n // proactively merge TextBlots around cursor so that optimization\n // doesn't lose the cursor. the reason we are here in cursor.restore\n // could be that the user clicked in prevTextBlot or nextTextBlot, or\n // the user typed something.\n let mergedTextBlot;\n if (prevTextBlot) {\n mergedTextBlot = prevTextBlot;\n if (newText || nextTextBlot) {\n prevTextBlot.insertAt(prevTextBlot.length(), newText + nextText);\n if (nextTextBlot) {\n nextTextBlot.remove();\n }\n }\n } else if (nextTextBlot) {\n mergedTextBlot = nextTextBlot;\n nextTextBlot.insertAt(0, newText);\n } else {\n const newTextNode = document.createTextNode(newText);\n mergedTextBlot = this.scroll.create(newTextNode);\n this.parent.insertBefore(mergedTextBlot, this);\n }\n\n this.remove();\n if (range) {\n // calculate selection to restore\n const remapOffset = (node, offset) => {\n if (prevTextBlot && node === prevTextBlot.domNode) {\n return offset;\n }\n if (node === textNode) {\n return prevTextLength + offset - 1;\n }\n if (nextTextBlot && node === nextTextBlot.domNode) {\n return prevTextLength + newText.length + offset;\n }\n return null;\n };\n\n const start = remapOffset(range.start.node, range.start.offset);\n const end = remapOffset(range.end.node, range.end.offset);\n if (start !== null && end !== null) {\n return {\n startNode: mergedTextBlot.domNode,\n startOffset: start,\n endNode: mergedTextBlot.domNode,\n endOffset: end,\n };\n }\n }\n return null;\n }\n\n update(mutations, context) {\n if (\n mutations.some(mutation => {\n return (\n mutation.type === 'characterData' && mutation.target === this.textNode\n );\n })\n ) {\n const range = this.restore();\n if (range) context.range = range;\n }\n }\n\n value() {\n return '';\n }\n}\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\nexport default Cursor;\n","import Inline from '../blots/inline';\n\nclass Link extends Inline {\n static create(value) {\n const node = super.create(value);\n node.setAttribute('href', this.sanitize(value));\n node.setAttribute('target', '_blank');\n return node;\n }\n\n static formats(domNode) {\n return domNode.getAttribute('href');\n }\n\n static sanitize(url) {\n return sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n }\n\n format(name, value) {\n if (name !== this.statics.blotName || !value) {\n super.format(name, value);\n } else {\n this.domNode.setAttribute('href', this.constructor.sanitize(value));\n }\n }\n}\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction sanitize(url, protocols) {\n const anchor = document.createElement('a');\n anchor.href = url;\n const protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n return protocols.indexOf(protocol) > -1;\n}\n\nexport { Link as default, sanitize };\n","import DropdownIcon from '../assets/icons/dropdown.svg';\n\nlet optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n element.setAttribute(\n attribute,\n !(element.getAttribute(attribute) === 'true'),\n );\n}\n\nclass Picker {\n constructor(select) {\n this.select = select;\n this.container = document.createElement('span');\n this.buildPicker();\n this.select.style.display = 'none';\n this.select.parentNode.insertBefore(this.container, this.select);\n\n this.label.addEventListener('mousedown', () => {\n this.togglePicker();\n });\n this.label.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.togglePicker();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n this.select.addEventListener('change', this.update.bind(this));\n }\n\n togglePicker() {\n this.container.classList.toggle('ql-expanded');\n // Toggle aria-expanded and aria-hidden to make the picker accessible\n toggleAriaAttribute(this.label, 'aria-expanded');\n toggleAriaAttribute(this.options, 'aria-hidden');\n }\n\n buildItem(option) {\n const item = document.createElement('span');\n item.tabIndex = '0';\n item.setAttribute('role', 'button');\n item.classList.add('ql-picker-item');\n if (option.hasAttribute('value')) {\n item.setAttribute('data-value', option.getAttribute('value'));\n }\n if (option.textContent) {\n item.setAttribute('data-label', option.textContent);\n }\n item.addEventListener('click', () => {\n this.selectItem(item, true);\n });\n item.addEventListener('keydown', event => {\n switch (event.key) {\n case 'Enter':\n this.selectItem(item, true);\n event.preventDefault();\n break;\n case 'Escape':\n this.escape();\n event.preventDefault();\n break;\n default:\n }\n });\n\n return item;\n }\n\n buildLabel() {\n const label = document.createElement('span');\n label.classList.add('ql-picker-label');\n label.innerHTML = DropdownIcon;\n label.tabIndex = '0';\n label.setAttribute('role', 'button');\n label.setAttribute('aria-expanded', 'false');\n this.container.appendChild(label);\n return label;\n }\n\n buildOptions() {\n const options = document.createElement('span');\n options.classList.add('ql-picker-options');\n\n // Don't want screen readers to read this until options are visible\n options.setAttribute('aria-hidden', 'true');\n options.tabIndex = '-1';\n\n // Need a unique id for aria-controls\n options.id = `ql-picker-options-${optionsCounter}`;\n optionsCounter += 1;\n this.label.setAttribute('aria-controls', options.id);\n\n this.options = options;\n\n Array.from(this.select.options).forEach(option => {\n const item = this.buildItem(option);\n options.appendChild(item);\n if (option.selected === true) {\n this.selectItem(item);\n }\n });\n this.container.appendChild(options);\n }\n\n buildPicker() {\n Array.from(this.select.attributes).forEach(item => {\n this.container.setAttribute(item.name, item.value);\n });\n this.container.classList.add('ql-picker');\n this.label = this.buildLabel();\n this.buildOptions();\n }\n\n escape() {\n // Close menu and return focus to trigger label\n this.close();\n // Need setTimeout for accessibility to ensure that the browser executes\n // focus on the next process thread and after any DOM content changes\n setTimeout(() => this.label.focus(), 1);\n }\n\n close() {\n this.container.classList.remove('ql-expanded');\n this.label.setAttribute('aria-expanded', 'false');\n this.options.setAttribute('aria-hidden', 'true');\n }\n\n selectItem(item, trigger = false) {\n const selected = this.container.querySelector('.ql-selected');\n if (item === selected) return;\n if (selected != null) {\n selected.classList.remove('ql-selected');\n }\n if (item == null) return;\n item.classList.add('ql-selected');\n this.select.selectedIndex = Array.from(item.parentNode.children).indexOf(\n item,\n );\n if (item.hasAttribute('data-value')) {\n this.label.setAttribute('data-value', item.getAttribute('data-value'));\n } else {\n this.label.removeAttribute('data-value');\n }\n if (item.hasAttribute('data-label')) {\n this.label.setAttribute('data-label', item.getAttribute('data-label'));\n } else {\n this.label.removeAttribute('data-label');\n }\n if (trigger) {\n this.select.dispatchEvent(new Event('change'));\n this.close();\n }\n }\n\n update() {\n let option;\n if (this.select.selectedIndex > -1) {\n const item = this.container.querySelector('.ql-picker-options').children[\n this.select.selectedIndex\n ];\n option = this.select.options[this.select.selectedIndex];\n this.selectItem(item);\n } else {\n this.selectItem(null);\n }\n const isActive =\n option != null &&\n option !== this.select.querySelector('option[selected]');\n this.label.classList.toggle('ql-active', isActive);\n }\n}\n\nexport default Picker;\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nclass ColorAttributor extends StyleAttributor {\n value(domNode) {\n let value = super.value(domNode);\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n const hex = value\n .split(',')\n .map(component => `00${parseInt(component, 10).toString(16)}`.slice(-2))\n .join('');\n return `#${hex}`;\n }\n}\n\nconst ColorClass = new ClassAttributor('color', 'ql-color', {\n scope: Scope.INLINE,\n});\nconst ColorStyle = new ColorAttributor('color', 'color', {\n scope: Scope.INLINE,\n});\n\nexport { ColorAttributor, ColorClass, ColorStyle };\n","import Block from '../blots/block';\nimport Break from '../blots/break';\nimport Cursor from '../blots/cursor';\nimport Inline from '../blots/inline';\nimport TextBlot, { escapeText } from '../blots/text';\nimport Container from '../blots/container';\nimport Quill from '../core/quill';\n\nclass CodeBlockContainer extends Container {\n static create(value) {\n const domNode = super.create(value);\n domNode.setAttribute('spellcheck', false);\n return domNode;\n }\n\n html(index, length) {\n const text = this.children\n .map(child => child.domNode.innerText)\n .join('\\n')\n .slice(index, index + length);\n return `<pre>${escapeText(text)}</pre>`;\n }\n}\n\nclass CodeBlock extends Block {\n static register() {\n Quill.register(CodeBlockContainer);\n }\n}\n\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.className = 'ql-code-block';\nCodeBlock.tagName = 'DIV';\nCodeBlockContainer.blotName = 'code-block-container';\nCodeBlockContainer.className = 'ql-code-block-container';\nCodeBlockContainer.tagName = 'DIV';\n\nCodeBlockContainer.allowedChildren = [CodeBlock];\n\nCodeBlock.allowedChildren = [TextBlot, Break, Cursor];\nCodeBlock.requiredContainer = CodeBlockContainer;\nCodeBlock.TAB = ' ';\n\nexport { Code, CodeBlockContainer, CodeBlock as default };\n","import alignLeftIcon from '../assets/icons/align-left.svg';\nimport alignCenterIcon from '../assets/icons/align-center.svg';\nimport alignRightIcon from '../assets/icons/align-right.svg';\nimport alignJustifyIcon from '../assets/icons/align-justify.svg';\nimport backgroundIcon from '../assets/icons/background.svg';\nimport blockquoteIcon from '../assets/icons/blockquote.svg';\nimport boldIcon from '../assets/icons/bold.svg';\nimport cleanIcon from '../assets/icons/clean.svg';\nimport codeIcon from '../assets/icons/code.svg';\nimport colorIcon from '../assets/icons/color.svg';\nimport directionLeftToRightIcon from '../assets/icons/direction-ltr.svg';\nimport directionRightToLeftIcon from '../assets/icons/direction-rtl.svg';\nimport formulaIcon from '../assets/icons/formula.svg';\nimport headerIcon from '../assets/icons/header.svg';\nimport header2Icon from '../assets/icons/header-2.svg';\nimport italicIcon from '../assets/icons/italic.svg';\nimport imageIcon from '../assets/icons/image.svg';\nimport indentIcon from '../assets/icons/indent.svg';\nimport outdentIcon from '../assets/icons/outdent.svg';\nimport linkIcon from '../assets/icons/link.svg';\nimport listBulletIcon from '../assets/icons/list-bullet.svg';\nimport listCheckIcon from '../assets/icons/list-check.svg';\nimport listOrderedIcon from '../assets/icons/list-ordered.svg';\nimport subscriptIcon from '../assets/icons/subscript.svg';\nimport superscriptIcon from '../assets/icons/superscript.svg';\nimport strikeIcon from '../assets/icons/strike.svg';\nimport tableIcon from '../assets/icons/table.svg';\nimport underlineIcon from '../assets/icons/underline.svg';\nimport videoIcon from '../assets/icons/video.svg';\n\nmodule.exports = {\n align: {\n '': alignLeftIcon,\n center: alignCenterIcon,\n right: alignRightIcon,\n justify: alignJustifyIcon,\n },\n background: backgroundIcon,\n blockquote: blockquoteIcon,\n bold: boldIcon,\n clean: cleanIcon,\n code: codeIcon,\n 'code-block': codeIcon,\n color: colorIcon,\n direction: {\n '': directionLeftToRightIcon,\n rtl: directionRightToLeftIcon,\n },\n formula: formulaIcon,\n header: {\n '1': headerIcon,\n '2': header2Icon,\n },\n italic: italicIcon,\n image: imageIcon,\n indent: {\n '+1': indentIcon,\n '-1': outdentIcon,\n },\n link: linkIcon,\n list: {\n bullet: listBulletIcon,\n check: listCheckIcon,\n ordered: listOrderedIcon,\n },\n script: {\n sub: subscriptIcon,\n super: superscriptIcon,\n },\n strike: strikeIcon,\n table: tableIcon,\n underline: underlineIcon,\n video: videoIcon,\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Iterator_1 = __importDefault(require(\"./Iterator\"));\nvar Op;\n(function (Op) {\n function iterator(ops) {\n return new Iterator_1.default(ops);\n }\n Op.iterator = iterator;\n function length(op) {\n if (typeof op.delete === 'number') {\n return op.delete;\n }\n else if (typeof op.retain === 'number') {\n return op.retain;\n }\n else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n Op.length = length;\n})(Op || (Op = {}));\nexports.default = Op;\n//# sourceMappingURL=Op.js.map","export default new WeakMap();\n","class Theme {\n constructor(quill, options) {\n this.quill = quill;\n this.options = options;\n this.modules = {};\n }\n\n init() {\n Object.keys(this.options.modules).forEach(name => {\n if (this.modules[name] == null) {\n this.addModule(name);\n }\n });\n }\n\n addModule(name) {\n const ModuleClass = this.quill.constructor.import(`modules/${name}`);\n this.modules[name] = new ModuleClass(\n this.quill,\n this.options.modules[name] || {},\n );\n return this.modules[name];\n }\n}\nTheme.DEFAULTS = {\n modules: {},\n};\nTheme.themes = {\n default: Theme,\n};\n\nexport default Theme;\n","import { EmbedBlot } from 'parchment';\nimport TextBlot from './text';\n\nconst GUARD_TEXT = '\\uFEFF';\n\nclass Embed extends EmbedBlot {\n constructor(scroll, node) {\n super(scroll, node);\n this.contentNode = document.createElement('span');\n this.contentNode.setAttribute('contenteditable', false);\n Array.from(this.domNode.childNodes).forEach(childNode => {\n this.contentNode.appendChild(childNode);\n });\n this.leftGuard = document.createTextNode(GUARD_TEXT);\n this.rightGuard = document.createTextNode(GUARD_TEXT);\n this.domNode.appendChild(this.leftGuard);\n this.domNode.appendChild(this.contentNode);\n this.domNode.appendChild(this.rightGuard);\n }\n\n index(node, offset) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return super.index(node, offset);\n }\n\n restore(node) {\n let range;\n let textNode;\n const text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof TextBlot) {\n const prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length,\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length,\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof TextBlot) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length,\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(this.scroll.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length,\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n\n update(mutations, context) {\n mutations.forEach(mutation => {\n if (\n mutation.type === 'characterData' &&\n (mutation.target === this.leftGuard ||\n mutation.target === this.rightGuard)\n ) {\n const range = this.restore(mutation.target);\n if (range) context.range = range;\n }\n });\n }\n}\n\nexport default Embed;\n","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport {\n Attributor,\n ClassAttributor,\n EmbedBlot,\n Scope,\n StyleAttributor,\n BlockBlot,\n} from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nimport { AlignAttribute, AlignStyle } from '../formats/align';\nimport { BackgroundStyle } from '../formats/background';\nimport CodeBlock from '../formats/code';\nimport { ColorStyle } from '../formats/color';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction';\nimport { FontStyle } from '../formats/font';\nimport { SizeStyle } from '../formats/size';\n\nconst debug = logger('quill:clipboard');\n\nconst CLIPBOARD_CONFIG = [\n [Node.TEXT_NODE, matchText],\n [Node.TEXT_NODE, matchNewline],\n ['br', matchBreak],\n [Node.ELEMENT_NODE, matchNewline],\n [Node.ELEMENT_NODE, matchBlot],\n [Node.ELEMENT_NODE, matchAttributor],\n [Node.ELEMENT_NODE, matchStyles],\n ['li', matchIndent],\n ['ol, ul', matchList],\n ['pre', matchCodeBlock],\n ['tr', matchTable],\n ['b', matchAlias.bind(matchAlias, 'bold')],\n ['i', matchAlias.bind(matchAlias, 'italic')],\n ['style', matchIgnore],\n];\n\nconst ATTRIBUTE_ATTRIBUTORS = [AlignAttribute, DirectionAttribute].reduce(\n (memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n },\n {},\n);\n\nconst STYLE_ATTRIBUTORS = [\n AlignStyle,\n BackgroundStyle,\n ColorStyle,\n DirectionStyle,\n FontStyle,\n SizeStyle,\n].reduce((memo, attr) => {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\nclass Clipboard extends Module {\n constructor(quill, options) {\n super(quill, options);\n this.quill.root.addEventListener('copy', e => this.onCaptureCopy(e, false));\n this.quill.root.addEventListener('cut', e => this.onCaptureCopy(e, true));\n this.quill.root.addEventListener('paste', this.onCapturePaste.bind(this));\n this.matchers = [];\n CLIPBOARD_CONFIG.concat(this.options.matchers).forEach(\n ([selector, matcher]) => {\n this.addMatcher(selector, matcher);\n },\n );\n }\n\n addMatcher(selector, matcher) {\n this.matchers.push([selector, matcher]);\n }\n\n convert({ html, text }, formats = {}) {\n if (formats[CodeBlock.blotName]) {\n return new Delta().insert(text, {\n [CodeBlock.blotName]: formats[CodeBlock.blotName],\n });\n }\n if (!html) {\n return new Delta().insert(text || '');\n }\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const container = doc.body;\n const nodeMatches = new WeakMap();\n const [elementMatchers, textMatchers] = this.prepareMatching(\n container,\n nodeMatches,\n );\n const delta = traverse(\n this.quill.scroll,\n container,\n elementMatchers,\n textMatchers,\n nodeMatches,\n );\n // Remove trailing newline\n if (\n deltaEndsWith(delta, '\\n') &&\n (delta.ops[delta.ops.length - 1].attributes == null || formats.table)\n ) {\n return delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n }\n return delta;\n }\n\n dangerouslyPasteHTML(index, html, source = Quill.sources.API) {\n if (typeof index === 'string') {\n const delta = this.convert({ html: index, text: '' });\n this.quill.setContents(delta, html);\n this.quill.setSelection(0, Quill.sources.SILENT);\n } else {\n const paste = this.convert({ html, text: '' });\n this.quill.updateContents(\n new Delta().retain(index).concat(paste),\n source,\n );\n this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n }\n }\n\n onCaptureCopy(e, isCut = false) {\n if (e.defaultPrevented) return;\n e.preventDefault();\n const [range] = this.quill.selection.getRange();\n if (range == null) return;\n const { html, text } = this.onCopy(range, isCut);\n e.clipboardData.setData('text/plain', text);\n e.clipboardData.setData('text/html', html);\n if (isCut) {\n this.quill.deleteText(range, Quill.sources.USER);\n }\n }\n\n onCapturePaste(e) {\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n e.preventDefault();\n const range = this.quill.getSelection(true);\n if (range == null) return;\n const html = e.clipboardData.getData('text/html');\n const text = e.clipboardData.getData('text/plain');\n const files = Array.from(e.clipboardData.files || []);\n if (!html && files.length > 0) {\n this.quill.uploader.upload(range, files);\n } else {\n this.onPaste(range, { html, text });\n }\n }\n\n onCopy(range) {\n const text = this.quill.getText(range);\n const html = this.quill.getSemanticHTML(range);\n return { html, text };\n }\n\n onPaste(range, { text, html }) {\n const formats = this.quill.getFormat(range.index);\n const pastedDelta = this.convert({ text, html }, formats);\n debug.log('onPaste', pastedDelta, { text, html });\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .concat(pastedDelta);\n this.quill.updateContents(delta, Quill.sources.USER);\n // range.length contributes to delta.length()\n this.quill.setSelection(\n delta.length() - range.length,\n Quill.sources.SILENT,\n );\n this.quill.scrollIntoView();\n }\n\n prepareMatching(container, nodeMatches) {\n const elementMatchers = [];\n const textMatchers = [];\n this.matchers.forEach(pair => {\n const [selector, matcher] = pair;\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n Array.from(container.querySelectorAll(selector)).forEach(node => {\n if (nodeMatches.has(node)) {\n const matches = nodeMatches.get(node);\n matches.push(matcher);\n } else {\n nodeMatches.set(node, [matcher]);\n }\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n}\nClipboard.DEFAULTS = {\n matchers: [],\n};\n\nfunction applyFormat(delta, format, value) {\n if (typeof format === 'object') {\n return Object.keys(format).reduce((newDelta, key) => {\n return applyFormat(newDelta, key, format[key]);\n }, delta);\n }\n return delta.reduce((newDelta, op) => {\n if (op.attributes && op.attributes[format]) {\n return newDelta.push(op);\n }\n return newDelta.insert(\n op.insert,\n extend({}, { [format]: value }, op.attributes),\n );\n }, new Delta());\n}\n\nfunction deltaEndsWith(delta, text) {\n let endText = '';\n for (\n let i = delta.ops.length - 1;\n i >= 0 && endText.length < text.length;\n --i // eslint-disable-line no-plusplus\n ) {\n const op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n if (node.childNodes.length === 0) return false; // Exclude embed blocks\n return [\n 'address',\n 'article',\n 'blockquote',\n 'canvas',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'iframe',\n 'li',\n 'main',\n 'nav',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'section',\n 'table',\n 'td',\n 'tr',\n 'ul',\n 'video',\n ].includes(node.tagName.toLowerCase());\n}\n\nconst preNodes = new WeakMap();\nfunction isPre(node) {\n if (node == null) return false;\n if (!preNodes.has(node)) {\n if (node.tagName === 'PRE') {\n preNodes.set(node, true);\n } else {\n preNodes.set(node, isPre(node.parentNode));\n }\n }\n return preNodes.get(node);\n}\n\nfunction traverse(scroll, node, elementMatchers, textMatchers, nodeMatches) {\n // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce((delta, matcher) => {\n return matcher(node, delta, scroll);\n }, new Delta());\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n return Array.from(node.childNodes || []).reduce((delta, childNode) => {\n let childrenDelta = traverse(\n scroll,\n childNode,\n elementMatchers,\n textMatchers,\n nodeMatches,\n );\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce((reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n }, childrenDelta);\n childrenDelta = (nodeMatches.get(childNode) || []).reduce(\n (reducedDelta, matcher) => {\n return matcher(childNode, reducedDelta, scroll);\n },\n childrenDelta,\n );\n }\n return delta.concat(childrenDelta);\n }, new Delta());\n }\n return new Delta();\n}\n\nfunction matchAlias(format, node, delta) {\n return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta, scroll) {\n const attributes = Attributor.keys(node);\n const classes = ClassAttributor.keys(node);\n const styles = StyleAttributor.keys(node);\n const formats = {};\n attributes\n .concat(classes)\n .concat(styles)\n .forEach(name => {\n let attr = scroll.query(name, Scope.ATTRIBUTE);\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n if (Object.keys(formats).length > 0) {\n return applyFormat(delta, formats);\n }\n return delta;\n}\n\nfunction matchBlot(node, delta, scroll) {\n const match = scroll.query(node);\n if (match == null) return delta;\n if (match.prototype instanceof EmbedBlot) {\n const embed = {};\n const value = match.value(node);\n if (value != null) {\n embed[match.blotName] = value;\n return new Delta().insert(embed, match.formats(node, scroll));\n }\n } else {\n if (match.prototype instanceof BlockBlot && !deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n if (typeof match.formats === 'function') {\n return applyFormat(delta, match.blotName, match.formats(node, scroll));\n }\n }\n return delta;\n}\n\nfunction matchBreak(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\n\nfunction matchCodeBlock(node, delta, scroll) {\n const match = scroll.query('code-block');\n const language = match ? match.formats(node, scroll) : true;\n return applyFormat(delta, 'code-block', language);\n}\n\nfunction matchIgnore() {\n return new Delta();\n}\n\nfunction matchIndent(node, delta, scroll) {\n const match = scroll.query(node);\n if (\n match == null ||\n match.blotName !== 'list' ||\n !deltaEndsWith(delta, '\\n')\n ) {\n return delta;\n }\n let indent = -1;\n let parent = node.parentNode;\n while (parent != null) {\n if (['OL', 'UL'].includes(parent.tagName)) {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.compose(\n new Delta().retain(delta.length() - 1).retain(1, { indent }),\n );\n}\n\nfunction matchList(node, delta) {\n const list = node.tagName === 'OL' ? 'ordered' : 'bullet';\n return applyFormat(delta, 'list', list);\n}\n\nfunction matchNewline(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (\n isLine(node) ||\n (delta.length() > 0 && node.nextSibling && isLine(node.nextSibling))\n ) {\n delta.insert('\\n');\n }\n }\n return delta;\n}\n\nfunction matchStyles(node, delta) {\n const formats = {};\n const style = node.style || {};\n if (style.fontStyle === 'italic') {\n formats.italic = true;\n }\n if (\n style.fontWeight.startsWith('bold') ||\n parseInt(style.fontWeight, 10) >= 700\n ) {\n formats.bold = true;\n }\n if (Object.keys(formats).length > 0) {\n delta = applyFormat(delta, formats);\n }\n if (parseFloat(style.textIndent || 0) > 0) {\n // Could be 0.5in\n return new Delta().insert('\\t').concat(delta);\n }\n return delta;\n}\n\nfunction matchTable(node, delta) {\n const table =\n node.parentNode.tagName === 'TABLE'\n ? node.parentNode\n : node.parentNode.parentNode;\n const rows = Array.from(table.querySelectorAll('tr'));\n const row = rows.indexOf(node) + 1;\n return applyFormat(delta, 'table', row);\n}\n\nfunction matchText(node, delta) {\n let text = node.data;\n // Word represents empty line with <o:p> </o:p>\n if (node.parentNode.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (text.trim().length === 0) {\n return delta;\n }\n if (!isPre(node)) {\n const replacer = (collapse, match) => {\n const replaced = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n return replaced.length < 1 && collapse ? ' ' : replaced;\n };\n text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n if (\n (node.previousSibling == null && isLine(node.parentNode)) ||\n (node.previousSibling != null && isLine(node.previousSibling))\n ) {\n text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n }\n if (\n (node.nextSibling == null && isLine(node.parentNode)) ||\n (node.nextSibling != null && isLine(node.nextSibling))\n ) {\n text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n }\n }\n return delta.insert(text);\n}\n\nexport {\n Clipboard as default,\n matchAttributor,\n matchBlot,\n matchNewline,\n matchText,\n traverse,\n};\n","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['right', 'center', 'justify'],\n};\n\nconst AlignAttribute = new Attributor('align', 'align', config);\nconst AlignClass = new ClassAttributor('align', 'ql-align', config);\nconst AlignStyle = new StyleAttributor('align', 'text-align', config);\n\nexport { AlignAttribute, AlignClass, AlignStyle };\n","import { ClassAttributor, Scope } from 'parchment';\nimport { ColorAttributor } from './color';\n\nconst BackgroundClass = new ClassAttributor('background', 'ql-bg', {\n scope: Scope.INLINE,\n});\nconst BackgroundStyle = new ColorAttributor('background', 'background-color', {\n scope: Scope.INLINE,\n});\n\nexport { BackgroundClass, BackgroundStyle };\n","import { Attributor, ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.BLOCK,\n whitelist: ['rtl'],\n};\n\nconst DirectionAttribute = new Attributor('direction', 'dir', config);\nconst DirectionClass = new ClassAttributor('direction', 'ql-direction', config);\nconst DirectionStyle = new StyleAttributor('direction', 'direction', config);\n\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst config = {\n scope: Scope.INLINE,\n whitelist: ['serif', 'monospace'],\n};\n\nconst FontClass = new ClassAttributor('font', 'ql-font', config);\n\nclass FontStyleAttributor extends StyleAttributor {\n value(node) {\n return super.value(node).replace(/[\"']/g, '');\n }\n}\n\nconst FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexport { FontStyle, FontClass };\n","import { ClassAttributor, Scope, StyleAttributor } from 'parchment';\n\nconst SizeClass = new ClassAttributor('size', 'ql-size', {\n scope: Scope.INLINE,\n whitelist: ['small', 'large', 'huge'],\n});\nconst SizeStyle = new StyleAttributor('size', 'font-size', {\n scope: Scope.INLINE,\n whitelist: ['10px', '18px', '32px'],\n});\n\nexport { SizeClass, SizeStyle };\n","import Inline from '../blots/inline';\n\nclass Bold extends Inline {\n static create() {\n return super.create();\n }\n\n static formats() {\n return true;\n }\n\n optimize(context) {\n super.optimize(context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n}\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexport default Bold;\n","import Picker from './picker';\n\nclass ColorPicker extends Picker {\n constructor(select, label) {\n super(select);\n this.label.innerHTML = label;\n this.container.classList.add('ql-color-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item'))\n .slice(0, 7)\n .forEach(item => {\n item.classList.add('ql-primary');\n });\n }\n\n buildItem(option) {\n const item = super.buildItem(option);\n item.style.backgroundColor = option.getAttribute('value') || '';\n return item;\n }\n\n selectItem(item, trigger) {\n super.selectItem(item, trigger);\n const colorLabel = this.label.querySelector('.ql-color-label');\n const value = item ? item.getAttribute('data-value') || '' : '';\n if (colorLabel) {\n if (colorLabel.tagName === 'line') {\n colorLabel.style.stroke = value;\n } else {\n colorLabel.style.fill = value;\n }\n }\n }\n}\n\nexport default ColorPicker;\n","import Picker from './picker';\n\nclass IconPicker extends Picker {\n constructor(select, icons) {\n super(select);\n this.container.classList.add('ql-icon-picker');\n Array.from(this.container.querySelectorAll('.ql-picker-item')).forEach(\n item => {\n item.innerHTML = icons[item.getAttribute('data-value') || ''];\n },\n );\n this.defaultItem = this.container.querySelector('.ql-selected');\n this.selectItem(this.defaultItem);\n }\n\n selectItem(target, trigger) {\n super.selectItem(target, trigger);\n const item = target || this.defaultItem;\n if (this.label.innerHTML === item.innerHTML) return;\n this.label.innerHTML = item.innerHTML;\n }\n}\n\nexport default IconPicker;\n","class Tooltip {\n constructor(quill, boundsContainer) {\n this.quill = quill;\n this.boundsContainer = boundsContainer || document.body;\n this.root = quill.addContainer('ql-tooltip');\n this.root.innerHTML = this.constructor.TEMPLATE;\n if (this.quill.root === this.quill.scrollingContainer) {\n this.quill.root.addEventListener('scroll', () => {\n this.root.style.marginTop = `${-1 * this.quill.root.scrollTop}px`;\n });\n }\n this.hide();\n }\n\n hide() {\n this.root.classList.add('ql-hidden');\n }\n\n position(reference) {\n const left =\n reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n // root.scrollTop should be 0 if scrollContainer !== root\n const top = reference.bottom + this.quill.root.scrollTop;\n this.root.style.left = `${left}px`;\n this.root.style.top = `${top}px`;\n this.root.classList.remove('ql-flip');\n const containerBounds = this.boundsContainer.getBoundingClientRect();\n const rootBounds = this.root.getBoundingClientRect();\n let shift = 0;\n if (rootBounds.right > containerBounds.right) {\n shift = containerBounds.right - rootBounds.right;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.left < containerBounds.left) {\n shift = containerBounds.left - rootBounds.left;\n this.root.style.left = `${left + shift}px`;\n }\n if (rootBounds.bottom > containerBounds.bottom) {\n const height = rootBounds.bottom - rootBounds.top;\n const verticalShift = reference.bottom - reference.top + height;\n this.root.style.top = `${top - verticalShift}px`;\n this.root.classList.add('ql-flip');\n }\n return shift;\n }\n\n show() {\n this.root.classList.remove('ql-editing');\n this.root.classList.remove('ql-hidden');\n }\n}\n\nexport default Tooltip;\n","import extend from 'extend';\nimport Emitter from '../core/emitter';\nimport Theme from '../core/theme';\nimport ColorPicker from '../ui/color-picker';\nimport IconPicker from '../ui/icon-picker';\nimport Picker from '../ui/picker';\nimport Tooltip from '../ui/tooltip';\n\nconst ALIGNS = [false, 'center', 'right', 'justify'];\n\nconst COLORS = [\n '#000000',\n '#e60000',\n '#ff9900',\n '#ffff00',\n '#008a00',\n '#0066cc',\n '#9933ff',\n '#ffffff',\n '#facccc',\n '#ffebcc',\n '#ffffcc',\n '#cce8cc',\n '#cce0f5',\n '#ebd6ff',\n '#bbbbbb',\n '#f06666',\n '#ffc266',\n '#ffff66',\n '#66b966',\n '#66a3e0',\n '#c285ff',\n '#888888',\n '#a10000',\n '#b26b00',\n '#b2b200',\n '#006100',\n '#0047b2',\n '#6b24b2',\n '#444444',\n '#5c0000',\n '#663d00',\n '#666600',\n '#003700',\n '#002966',\n '#3d1466',\n];\n\nconst FONTS = [false, 'serif', 'monospace'];\n\nconst HEADERS = ['1', '2', '3', false];\n\nconst SIZES = ['small', false, 'large', 'huge'];\n\nclass BaseTheme extends Theme {\n constructor(quill, options) {\n super(quill, options);\n const listener = e => {\n if (!document.body.contains(quill.root)) {\n document.body.removeEventListener('click', listener);\n return;\n }\n if (\n this.tooltip != null &&\n !this.tooltip.root.contains(e.target) &&\n document.activeElement !== this.tooltip.textbox &&\n !this.quill.hasFocus()\n ) {\n this.tooltip.hide();\n }\n if (this.pickers != null) {\n this.pickers.forEach(picker => {\n if (!picker.container.contains(e.target)) {\n picker.close();\n }\n });\n }\n };\n quill.emitter.listenDOM('click', document.body, listener);\n }\n\n addModule(name) {\n const module = super.addModule(name);\n if (name === 'toolbar') {\n this.extendToolbar(module);\n }\n return module;\n }\n\n buildButtons(buttons, icons) {\n Array.from(buttons).forEach(button => {\n const className = button.getAttribute('class') || '';\n className.split(/\\s+/).forEach(name => {\n if (!name.startsWith('ql-')) return;\n name = name.slice('ql-'.length);\n if (icons[name] == null) return;\n if (name === 'direction') {\n button.innerHTML = icons[name][''] + icons[name].rtl;\n } else if (typeof icons[name] === 'string') {\n button.innerHTML = icons[name];\n } else {\n const value = button.value || '';\n if (value != null && icons[name][value]) {\n button.innerHTML = icons[name][value];\n }\n }\n });\n });\n }\n\n buildPickers(selects, icons) {\n this.pickers = Array.from(selects).map(select => {\n if (select.classList.contains('ql-align')) {\n if (select.querySelector('option') == null) {\n fillSelect(select, ALIGNS);\n }\n return new IconPicker(select, icons.align);\n }\n if (\n select.classList.contains('ql-background') ||\n select.classList.contains('ql-color')\n ) {\n const format = select.classList.contains('ql-background')\n ? 'background'\n : 'color';\n if (select.querySelector('option') == null) {\n fillSelect(\n select,\n COLORS,\n format === 'background' ? '#ffffff' : '#000000',\n );\n }\n return new ColorPicker(select, icons[format]);\n }\n if (select.querySelector('option') == null) {\n if (select.classList.contains('ql-font')) {\n fillSelect(select, FONTS);\n } else if (select.classList.contains('ql-header')) {\n fillSelect(select, HEADERS);\n } else if (select.classList.contains('ql-size')) {\n fillSelect(select, SIZES);\n }\n }\n return new Picker(select);\n });\n const update = () => {\n this.pickers.forEach(picker => {\n picker.update();\n });\n };\n this.quill.on(Emitter.events.EDITOR_CHANGE, update);\n }\n}\nBaseTheme.DEFAULTS = extend(true, {}, Theme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n formula() {\n this.quill.theme.tooltip.edit('formula');\n },\n image() {\n let fileInput = this.container.querySelector(\n 'input.ql-image[type=file]',\n );\n if (fileInput == null) {\n fileInput = document.createElement('input');\n fileInput.setAttribute('type', 'file');\n fileInput.setAttribute(\n 'accept',\n this.quill.uploader.options.mimetypes.join(', '),\n );\n fileInput.classList.add('ql-image');\n fileInput.addEventListener('change', () => {\n const range = this.quill.getSelection(true);\n this.quill.uploader.upload(range, fileInput.files);\n fileInput.value = '';\n });\n this.container.appendChild(fileInput);\n }\n fileInput.click();\n },\n video() {\n this.quill.theme.tooltip.edit('video');\n },\n },\n },\n },\n});\n\nclass BaseTooltip extends Tooltip {\n constructor(quill, boundsContainer) {\n super(quill, boundsContainer);\n this.textbox = this.root.querySelector('input[type=\"text\"]');\n this.listen();\n }\n\n listen() {\n this.textbox.addEventListener('keydown', event => {\n if (event.key === 'Enter') {\n this.save();\n event.preventDefault();\n } else if (event.key === 'Escape') {\n this.cancel();\n event.preventDefault();\n }\n });\n }\n\n cancel() {\n this.hide();\n }\n\n edit(mode = 'link', preview = null) {\n this.root.classList.remove('ql-hidden');\n this.root.classList.add('ql-editing');\n if (preview != null) {\n this.textbox.value = preview;\n } else if (mode !== this.root.getAttribute('data-mode')) {\n this.textbox.value = '';\n }\n this.position(this.quill.getBounds(this.quill.selection.savedRange));\n this.textbox.select();\n this.textbox.setAttribute(\n 'placeholder',\n this.textbox.getAttribute(`data-${mode}`) || '',\n );\n this.root.setAttribute('data-mode', mode);\n }\n\n restoreFocus() {\n const { scrollTop } = this.quill.scrollingContainer;\n this.quill.focus();\n this.quill.scrollingContainer.scrollTop = scrollTop;\n }\n\n save() {\n let { value } = this.textbox;\n switch (this.root.getAttribute('data-mode')) {\n case 'link': {\n const { scrollTop } = this.quill.root;\n if (this.linkRange) {\n this.quill.formatText(\n this.linkRange,\n 'link',\n value,\n Emitter.sources.USER,\n );\n delete this.linkRange;\n } else {\n this.restoreFocus();\n this.quill.format('link', value, Emitter.sources.USER);\n }\n this.quill.root.scrollTop = scrollTop;\n break;\n }\n case 'video': {\n value = extractVideoUrl(value);\n } // eslint-disable-next-line no-fallthrough\n case 'formula': {\n if (!value) break;\n const range = this.quill.getSelection(true);\n if (range != null) {\n const index = range.index + range.length;\n this.quill.insertEmbed(\n index,\n this.root.getAttribute('data-mode'),\n value,\n Emitter.sources.USER,\n );\n if (this.root.getAttribute('data-mode') === 'formula') {\n this.quill.insertText(index + 1, ' ', Emitter.sources.USER);\n }\n this.quill.setSelection(index + 2, Emitter.sources.USER);\n }\n break;\n }\n default:\n }\n this.textbox.value = '';\n this.hide();\n }\n}\n\nfunction extractVideoUrl(url) {\n let match =\n url.match(\n /^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/,\n ) ||\n url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (match) {\n return `${match[1] || 'https'}://www.youtube.com/embed/${\n match[2]\n }?showinfo=0`;\n }\n // eslint-disable-next-line no-cond-assign\n if ((match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/))) {\n return `${match[1] || 'https'}://player.vimeo.com/video/${match[2]}/`;\n }\n return url;\n}\n\nfunction fillSelect(select, values, defaultValue = false) {\n values.forEach(value => {\n const option = document.createElement('option');\n if (value === defaultValue) {\n option.setAttribute('selected', 'selected');\n } else {\n option.setAttribute('value', value);\n }\n select.appendChild(option);\n });\n}\n\nexport { BaseTooltip, BaseTheme as default };\n","import Quill from './core';\n\nimport { AlignClass, AlignStyle } from './formats/align';\nimport {\n DirectionAttribute,\n DirectionClass,\n DirectionStyle,\n} from './formats/direction';\nimport Indent from './formats/indent';\n\nimport Blockquote from './formats/blockquote';\nimport Header from './formats/header';\nimport List from './formats/list';\n\nimport { BackgroundClass, BackgroundStyle } from './formats/background';\nimport { ColorClass, ColorStyle } from './formats/color';\nimport { FontClass, FontStyle } from './formats/font';\nimport { SizeClass, SizeStyle } from './formats/size';\n\nimport Bold from './formats/bold';\nimport Italic from './formats/italic';\nimport Link from './formats/link';\nimport Script from './formats/script';\nimport Strike from './formats/strike';\nimport Underline from './formats/underline';\n\nimport Formula from './formats/formula';\nimport Image from './formats/image';\nimport Video from './formats/video';\n\nimport CodeBlock, { Code as InlineCode } from './formats/code';\n\nimport Syntax from './modules/syntax';\nimport Table from './modules/table';\nimport Toolbar from './modules/toolbar';\n\nimport Icons from './ui/icons';\nimport Picker from './ui/picker';\nimport ColorPicker from './ui/color-picker';\nimport IconPicker from './ui/icon-picker';\nimport Tooltip from './ui/tooltip';\n\nimport BubbleTheme from './themes/bubble';\nimport SnowTheme from './themes/snow';\n\nQuill.register(\n {\n 'attributors/attribute/direction': DirectionAttribute,\n\n 'attributors/class/align': AlignClass,\n 'attributors/class/background': BackgroundClass,\n 'attributors/class/color': ColorClass,\n 'attributors/class/direction': DirectionClass,\n 'attributors/class/font': FontClass,\n 'attributors/class/size': SizeClass,\n\n 'attributors/style/align': AlignStyle,\n 'attributors/style/background': BackgroundStyle,\n 'attributors/style/color': ColorStyle,\n 'attributors/style/direction': DirectionStyle,\n 'attributors/style/font': FontStyle,\n 'attributors/style/size': SizeStyle,\n },\n true,\n);\n\nQuill.register(\n {\n 'formats/align': AlignClass,\n 'formats/direction': DirectionClass,\n 'formats/indent': Indent,\n\n 'formats/background': BackgroundStyle,\n 'formats/color': ColorStyle,\n 'formats/font': FontClass,\n 'formats/size': SizeClass,\n\n 'formats/blockquote': Blockquote,\n 'formats/code-block': CodeBlock,\n 'formats/header': Header,\n 'formats/list': List,\n\n 'formats/bold': Bold,\n 'formats/code': InlineCode,\n 'formats/italic': Italic,\n 'formats/link': Link,\n 'formats/script': Script,\n 'formats/strike': Strike,\n 'formats/underline': Underline,\n\n 'formats/formula': Formula,\n 'formats/image': Image,\n 'formats/video': Video,\n\n 'modules/syntax': Syntax,\n 'modules/table': Table,\n 'modules/toolbar': Toolbar,\n\n 'themes/bubble': BubbleTheme,\n 'themes/snow': SnowTheme,\n\n 'ui/icons': Icons,\n 'ui/picker': Picker,\n 'ui/icon-picker': IconPicker,\n 'ui/color-picker': ColorPicker,\n 'ui/tooltip': Tooltip,\n },\n true,\n);\n\nexport default Quill;\n","import Quill from './core/quill';\n\nimport Block, { BlockEmbed } from './blots/block';\nimport Break from './blots/break';\nimport Container from './blots/container';\nimport Cursor from './blots/cursor';\nimport Embed from './blots/embed';\nimport Inline from './blots/inline';\nimport Scroll from './blots/scroll';\nimport TextBlot from './blots/text';\n\nimport Clipboard from './modules/clipboard';\nimport History from './modules/history';\nimport Keyboard from './modules/keyboard';\nimport Uploader from './modules/uploader';\n\nQuill.register({\n 'blots/block': Block,\n 'blots/block/embed': BlockEmbed,\n 'blots/break': Break,\n 'blots/container': Container,\n 'blots/cursor': Cursor,\n 'blots/embed': Embed,\n 'blots/inline': Inline,\n 'blots/scroll': Scroll,\n 'blots/text': TextBlot,\n\n 'modules/clipboard': Clipboard,\n 'modules/history': History,\n 'modules/keyboard': Keyboard,\n 'modules/uploader': Uploader,\n});\n\nexport default Quill;\n","exports = module.exports = typeof Object.keys === 'function'\n ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n}\n","var supportsArgumentsClass = (function(){\n return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n return object &&\n typeof object == 'object' &&\n typeof object.length == 'number' &&\n Object.prototype.hasOwnProperty.call(object, 'callee') &&\n !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n false;\n};\n","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos, _fix_unicode) {\n // Check for equality\n if (text1 === text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n if (cursor_pos != null) {\n var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);\n if (editdiff) {\n return editdiff;\n }\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs, _fix_unicode);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i !== -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n ];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length === 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 !== 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 === -d || (k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (\n x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) === text2.charAt(y1)\n ) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 === -d || (k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (\n x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)\n ) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)\n ) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) {\n pointermid--;\n }\n\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (\n text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)\n ) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n\n if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) {\n pointermid--;\n }\n\n return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {\n var prefixLength = diff_commonPrefix(\n longtext.substring(i), shorttext.substring(j));\n var suffixLength = diff_commonSuffix(\n longtext.substring(0, i), shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(\n j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [\n best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common\n ];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n * @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff\n */\nfunction diff_cleanupMerge(diffs, fix_unicode) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n diffs.splice(pointer, 1);\n continue;\n }\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n var previous_equality = pointer - count_insert - count_delete - 1;\n if (fix_unicode) {\n // prevent splitting of unicode surrogate pairs. when fix_unicode is true,\n // we assume that the old and new text in the diff are complete and correct\n // unicode-encoded JS strings, but the tuple boundaries may fall between\n // surrogate pairs. we fix this by shaving off stray surrogates from the end\n // of the previous equality and the beginning of this equality. this may create\n // empty equalities or a common prefix or suffix. for example, if AB and AC are\n // emojis, `[[0, 'A'], [-1, 'BA'], [0, 'C']]` would turn into deleting 'ABAC' and\n // inserting 'AC', and then the common suffix 'AC' will be eliminated. in this\n // particular case, both equalities go away, we absorb any previous inequalities,\n // and we keep scanning for the next equality before rewriting the tuples.\n if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {\n var stray = diffs[previous_equality][1].slice(-1);\n diffs[previous_equality][1] = diffs[previous_equality][1].slice(0, -1);\n text_delete = stray + text_delete;\n text_insert = stray + text_insert;\n if (!diffs[previous_equality][1]) {\n // emptied out previous equality, so delete it and include previous delete/insert\n diffs.splice(previous_equality, 1);\n pointer--;\n var k = previous_equality - 1;\n if (diffs[k] && diffs[k][0] === DIFF_INSERT) {\n count_insert++;\n text_insert = diffs[k][1] + text_insert;\n k--;\n }\n if (diffs[k] && diffs[k][0] === DIFF_DELETE) {\n count_delete++;\n text_delete = diffs[k][1] + text_delete;\n k--;\n }\n previous_equality = k;\n }\n }\n if (starts_with_pair_end(diffs[pointer][1])) {\n var stray = diffs[pointer][1].charAt(0);\n diffs[pointer][1] = diffs[pointer][1].slice(1);\n text_delete += stray;\n text_insert += stray;\n }\n }\n if (pointer < diffs.length - 1 && !diffs[pointer][1]) {\n // for empty equality not at end, wait for next equality\n diffs.splice(pointer, 1);\n break;\n }\n if (text_delete.length > 0 || text_insert.length > 0) {\n // note that diff_commonPrefix and diff_commonSuffix are unicode-aware\n if (text_delete.length > 0 && text_insert.length > 0) {\n // Factor out any common prefixes.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if (previous_equality >= 0) {\n diffs[previous_equality][1] += text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixes.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] =\n text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length - commonlength);\n text_delete = text_delete.substring(0, text_delete.length - commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n var n = count_insert + count_delete;\n if (text_delete.length === 0 && text_insert.length === 0) {\n diffs.splice(pointer - n, n);\n pointer = pointer - n;\n } else if (text_delete.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 1;\n } else if (text_insert.length === 0) {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);\n pointer = pointer - n + 1;\n } else {\n diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);\n pointer = pointer - n + 2;\n }\n }\n if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL &&\n diffs[pointer + 1][0] === DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs, fix_unicode);\n }\n};\n\nfunction is_surrogate_pair_start(charCode) {\n return charCode >= 0xD800 && charCode <= 0xDBFF;\n}\n\nfunction is_surrogate_pair_end(charCode) {\n return charCode >= 0xDC00 && charCode <= 0xDFFF;\n}\n\nfunction starts_with_pair_end(str) {\n return is_surrogate_pair_end(str.charCodeAt(0));\n}\n\nfunction ends_with_pair_start(str) {\n return is_surrogate_pair_start(str.charCodeAt(str.length - 1));\n}\n\nfunction remove_empty_tuples(tuples) {\n var ret = [];\n for (var i = 0; i < tuples.length; i++) {\n if (tuples[i][1].length > 0) {\n ret.push(tuples[i]);\n }\n }\n return ret;\n}\n\nfunction make_edit_splice(before, oldMiddle, newMiddle, after) {\n if (ends_with_pair_start(before) || starts_with_pair_end(after)) {\n return null;\n }\n return remove_empty_tuples([\n [DIFF_EQUAL, before],\n [DIFF_DELETE, oldMiddle],\n [DIFF_INSERT, newMiddle],\n [DIFF_EQUAL, after]\n ]);\n}\n\nfunction find_cursor_edit_diff(oldText, newText, cursor_pos) {\n // note: this runs after equality check has ruled out exact equality\n var oldRange = typeof cursor_pos === 'number' ?\n { index: cursor_pos, length: 0 } : cursor_pos.oldRange;\n var newRange = typeof cursor_pos === 'number' ?\n null : cursor_pos.newRange;\n // take into account the old and new selection to generate the best diff\n // possible for a text edit. for example, a text change from \"xxx\" to \"xx\"\n // could be a delete or forwards-delete of any one of the x's, or the\n // result of selecting two of the x's and typing \"x\".\n var oldLength = oldText.length;\n var newLength = newText.length;\n if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {\n // see if we have an insert or delete before or after cursor\n var oldCursor = oldRange.index;\n var oldBefore = oldText.slice(0, oldCursor);\n var oldAfter = oldText.slice(oldCursor);\n var maybeNewCursor = newRange ? newRange.index : null;\n editBefore: {\n // is this an insert or delete right before oldCursor?\n var newCursor = oldCursor + newLength - oldLength;\n if (maybeNewCursor !== null && maybeNewCursor !== newCursor) {\n break editBefore;\n }\n if (newCursor < 0 || newCursor > newLength) {\n break editBefore;\n }\n var newBefore = newText.slice(0, newCursor);\n var newAfter = newText.slice(newCursor);\n if (newAfter !== oldAfter) {\n break editBefore;\n }\n var prefixLength = Math.min(oldCursor, newCursor);\n var oldPrefix = oldBefore.slice(0, prefixLength);\n var newPrefix = newBefore.slice(0, prefixLength);\n if (oldPrefix !== newPrefix) {\n break editBefore;\n }\n var oldMiddle = oldBefore.slice(prefixLength);\n var newMiddle = newBefore.slice(prefixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);\n }\n editAfter: {\n // is this an insert or delete right after oldCursor?\n if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) {\n break editAfter;\n }\n var cursor = oldCursor;\n var newBefore = newText.slice(0, cursor);\n var newAfter = newText.slice(cursor);\n if (newBefore !== oldBefore) {\n break editAfter;\n }\n var suffixLength = Math.min(oldLength - cursor, newLength - cursor);\n var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);\n var newSuffix = newAfter.slice(newAfter.length - suffixLength);\n if (oldSuffix !== newSuffix) {\n break editAfter;\n }\n var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);\n var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);\n return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);\n }\n }\n if (oldRange.length > 0 && newRange && newRange.length === 0) {\n replaceRange: {\n // see if diff could be a splice of the old selection range\n var oldPrefix = oldText.slice(0, oldRange.index);\n var oldSuffix = oldText.slice(oldRange.index + oldRange.length);\n var prefixLength = oldPrefix.length;\n var suffixLength = oldSuffix.length;\n if (newLength < prefixLength + suffixLength) {\n break replaceRange;\n }\n var newPrefix = newText.slice(0, prefixLength);\n var newSuffix = newText.slice(newLength - suffixLength);\n if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) {\n break replaceRange;\n }\n var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);\n var newMiddle = newText.slice(prefixLength, newLength - suffixLength);\n return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);\n }\n }\n\n return null;\n}\n\nfunction diff(text1, text2, cursor_pos) {\n // only pass fix_unicode=true at the top level, not when diff_main is\n // recursively invoked\n return diff_main(text1, text2, cursor_pos, true);\n}\n\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar deep_equal_1 = __importDefault(require(\"deep-equal\"));\nvar extend_1 = __importDefault(require(\"extend\"));\nvar AttributeMap;\n(function (AttributeMap) {\n function compose(a, b, keepNull) {\n if (a === void 0) { a = {}; }\n if (b === void 0) { b = {}; }\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n var attributes = extend_1.default(true, {}, b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce(function (copy, key) {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (var key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.compose = compose;\n function diff(a, b) {\n if (a === void 0) { a = {}; }\n if (b === void 0) { b = {}; }\n if (typeof a !== 'object') {\n a = {};\n }\n if (typeof b !== 'object') {\n b = {};\n }\n var attributes = Object.keys(a)\n .concat(Object.keys(b))\n .reduce(function (attrs, key) {\n if (!deep_equal_1.default(a[key], b[key])) {\n attrs[key] = b[key] === undefined ? null : b[key];\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.diff = diff;\n function transform(a, b, priority) {\n if (priority === void 0) { priority = false; }\n if (typeof a !== 'object') {\n return b;\n }\n if (typeof b !== 'object') {\n return undefined;\n }\n if (!priority) {\n return b; // b simply overwrites us without priority\n }\n var attributes = Object.keys(b).reduce(function (attrs, key) {\n if (a[key] === undefined) {\n attrs[key] = b[key]; // null is a valid value\n }\n return attrs;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n AttributeMap.transform = transform;\n})(AttributeMap || (AttributeMap = {}));\nexports.default = AttributeMap;\n//# sourceMappingURL=AttributeMap.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Op_1 = __importDefault(require(\"./Op\"));\nvar Iterator = /** @class */ (function () {\n function Iterator(ops) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n }\n Iterator.prototype.hasNext = function () {\n return this.peekLength() < Infinity;\n };\n Iterator.prototype.next = function (length) {\n if (!length) {\n length = Infinity;\n }\n var nextOp = this.ops[this.index];\n if (nextOp) {\n var offset = this.offset;\n var opLength = Op_1.default.length(nextOp);\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n }\n else {\n this.offset += length;\n }\n if (typeof nextOp.delete === 'number') {\n return { delete: length };\n }\n else {\n var retOp = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n }\n else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n }\n else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n }\n else {\n return { retain: Infinity };\n }\n };\n Iterator.prototype.peek = function () {\n return this.ops[this.index];\n };\n Iterator.prototype.peekLength = function () {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return Op_1.default.length(this.ops[this.index]) - this.offset;\n }\n else {\n return Infinity;\n }\n };\n Iterator.prototype.peekType = function () {\n if (this.ops[this.index]) {\n if (typeof this.ops[this.index].delete === 'number') {\n return 'delete';\n }\n else if (typeof this.ops[this.index].retain === 'number') {\n return 'retain';\n }\n else {\n return 'insert';\n }\n }\n return 'retain';\n };\n Iterator.prototype.rest = function () {\n if (!this.hasNext()) {\n return [];\n }\n else if (this.offset === 0) {\n return this.ops.slice(this.index);\n }\n else {\n var offset = this.offset;\n var index = this.index;\n var next = this.next();\n var rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n };\n return Iterator;\n}());\nexports.default = Iterator;\n//# sourceMappingURL=Iterator.js.map","import clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\nimport Delta, { AttributeMap } from 'quill-delta';\nimport { LeafBlot } from 'parchment';\nimport { Range } from './selection';\nimport CursorBlot from '../blots/cursor';\nimport Block, { BlockEmbed, bubbleFormats } from '../blots/block';\nimport Break from '../blots/break';\nimport TextBlot, { escapeText } from '../blots/text';\n\nconst ASCII = /^[ -~]*$/;\n\nclass Editor {\n constructor(scroll) {\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n\n applyDelta(delta) {\n let consumeNextNewline = false;\n this.scroll.update();\n let scrollLength = this.scroll.length();\n this.scroll.batchStart();\n const normalizedDelta = normalizeDelta(delta);\n normalizedDelta.reduce((index, op) => {\n const length = op.retain || op.delete || op.insert.length || 1;\n let attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n let text = op.insert;\n if (text.endsWith('\\n') && consumeNextNewline) {\n consumeNextNewline = false;\n text = text.slice(0, -1);\n }\n if (\n (index >= scrollLength ||\n this.scroll.descendant(BlockEmbed, index)[0]) &&\n !text.endsWith('\\n')\n ) {\n consumeNextNewline = true;\n }\n this.scroll.insertAt(index, text);\n const [line, offset] = this.scroll.line(index);\n let formats = extend({}, bubbleFormats(line));\n if (line instanceof Block) {\n const [leaf] = line.descendant(LeafBlot, offset);\n formats = extend(formats, bubbleFormats(leaf));\n }\n attributes = AttributeMap.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n const key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n this.scroll.insertAt(index, key, op.insert[key]);\n }\n scrollLength += length;\n }\n Object.keys(attributes).forEach(name => {\n this.scroll.formatAt(index, length, name, attributes[name]);\n });\n return index + length;\n }, 0);\n normalizedDelta.reduce((index, op) => {\n if (typeof op.delete === 'number') {\n this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + (op.retain || op.insert.length || 1);\n }, 0);\n this.scroll.batchEnd();\n this.scroll.optimize();\n return this.update(normalizedDelta);\n }\n\n deleteText(index, length) {\n this.scroll.deleteAt(index, length);\n return this.update(new Delta().retain(index).delete(length));\n }\n\n formatLine(index, length, formats = {}) {\n this.scroll.update();\n Object.keys(formats).forEach(format => {\n this.scroll.lines(index, Math.max(length, 1)).forEach(line => {\n line.format(format, formats[format]);\n });\n });\n this.scroll.optimize();\n const delta = new Delta().retain(index).retain(length, clone(formats));\n return this.update(delta);\n }\n\n formatText(index, length, formats = {}) {\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, length, format, formats[format]);\n });\n const delta = new Delta().retain(index).retain(length, clone(formats));\n return this.update(delta);\n }\n\n getContents(index, length) {\n return this.delta.slice(index, index + length);\n }\n\n getDelta() {\n return this.scroll.lines().reduce((delta, line) => {\n return delta.concat(line.delta());\n }, new Delta());\n }\n\n getFormat(index, length = 0) {\n let lines = [];\n let leaves = [];\n if (length === 0) {\n this.scroll.path(index).forEach(path => {\n const [blot] = path;\n if (blot instanceof Block) {\n lines.push(blot);\n } else if (blot instanceof LeafBlot) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(LeafBlot, index, length);\n }\n const formatsArr = [lines, leaves].map(blots => {\n if (blots.length === 0) return {};\n let formats = bubbleFormats(blots.shift());\n while (Object.keys(formats).length > 0) {\n const blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats(bubbleFormats(blot), formats);\n }\n return formats;\n });\n return extend.apply(extend, formatsArr);\n }\n\n getHTML(index, length) {\n const [line, lineOffset] = this.scroll.line(index);\n if (line.length() >= lineOffset + length) {\n return convertHTML(line, lineOffset, length, true);\n }\n return convertHTML(this.scroll, index, length, true);\n }\n\n getText(index, length) {\n return this.getContents(index, length)\n .filter(op => typeof op.insert === 'string')\n .map(op => op.insert)\n .join('');\n }\n\n insertEmbed(index, embed, value) {\n this.scroll.insertAt(index, embed, value);\n return this.update(new Delta().retain(index).insert({ [embed]: value }));\n }\n\n insertText(index, text, formats = {}) {\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach(format => {\n this.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(new Delta().retain(index).insert(text, clone(formats)));\n }\n\n isBlank() {\n if (this.scroll.children.length === 0) return true;\n if (this.scroll.children.length > 1) return false;\n const block = this.scroll.children.head;\n if (block.statics.blotName !== Block.blotName) return false;\n if (block.children.length > 1) return false;\n return block.children.head instanceof Break;\n }\n\n removeFormat(index, length) {\n const text = this.getText(index, length);\n const [line, offset] = this.scroll.line(index + length);\n let suffixLength = 0;\n let suffix = new Delta();\n if (line != null) {\n suffixLength = line.length() - offset;\n suffix = line\n .delta()\n .slice(offset, offset + suffixLength - 1)\n .insert('\\n');\n }\n const contents = this.getContents(index, length + suffixLength);\n const diff = contents.diff(new Delta().insert(text).concat(suffix));\n const delta = new Delta().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n\n update(change, mutations = [], selectionInfo = undefined) {\n const oldDelta = this.delta;\n if (\n mutations.length === 1 &&\n mutations[0].type === 'characterData' &&\n mutations[0].target.data.match(ASCII) &&\n this.scroll.find(mutations[0].target)\n ) {\n // Optimization for character changes\n const textBlot = this.scroll.find(mutations[0].target);\n const formats = bubbleFormats(textBlot);\n const index = textBlot.offset(this.scroll);\n const oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n const oldText = new Delta().insert(oldValue);\n const newText = new Delta().insert(textBlot.value());\n const relativeSelectionInfo = selectionInfo && {\n oldRange: shiftRange(selectionInfo.oldRange, -index),\n newRange: shiftRange(selectionInfo.newRange, -index),\n };\n const diffDelta = new Delta()\n .retain(index)\n .concat(oldText.diff(newText, relativeSelectionInfo));\n change = diffDelta.reduce((delta, op) => {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n }\n return delta.push(op);\n }, new Delta());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !equal(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, selectionInfo);\n }\n }\n return change;\n }\n}\n\nfunction convertListHTML(items, lastIndent, types) {\n if (items.length === 0) {\n const [endTag] = getListType(types.pop());\n if (lastIndent <= 0) {\n return `</li></${endTag}>`;\n }\n return `</li></${endTag}>${convertListHTML([], lastIndent - 1, types)}`;\n }\n const [{ child, offset, length, indent, type }, ...rest] = items;\n const [tag, attribute] = getListType(type);\n if (indent > lastIndent) {\n types.push(type);\n return `<${tag}><li${attribute}>${convertHTML(\n child,\n offset,\n length,\n )}${convertListHTML(rest, indent, types)}`;\n }\n if (indent === lastIndent) {\n return `</li><li${attribute}>${convertHTML(\n child,\n offset,\n length,\n )}${convertListHTML(rest, indent, types)}`;\n }\n const [endTag] = getListType(types.pop());\n return `</li></${endTag}>${convertListHTML(items, lastIndent - 1, types)}`;\n}\n\nfunction convertHTML(blot, index, length, isRoot = false) {\n if (typeof blot.html === 'function') {\n return blot.html(index, length);\n }\n if (blot instanceof TextBlot) {\n return escapeText(blot.value().slice(index, index + length));\n }\n if (blot.children) {\n // TODO fix API\n if (blot.statics.blotName === 'list-container') {\n const items = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n const formats = child.formats();\n items.push({\n child,\n offset,\n length: childLength,\n indent: formats.indent || 0,\n type: formats.list,\n });\n });\n return convertListHTML(items, -1, []);\n }\n const parts = [];\n blot.children.forEachAt(index, length, (child, offset, childLength) => {\n parts.push(convertHTML(child, offset, childLength));\n });\n if (isRoot || blot.statics.blotName === 'list') {\n return parts.join('');\n }\n const { outerHTML, innerHTML } = blot.domNode;\n const [start, end] = outerHTML.split(`>${innerHTML}<`);\n // TODO cleanup\n if (start === '<table') {\n return `<table style=\"border: 1px solid #000;\">${parts.join('')}<${end}`;\n }\n return `${start}>${parts.join('')}<${end}`;\n }\n return blot.domNode.outerHTML;\n}\n\nfunction combineFormats(formats, combined) {\n return Object.keys(combined).reduce((merged, name) => {\n if (formats[name] == null) return merged;\n if (combined[name] === formats[name]) {\n merged[name] = combined[name];\n } else if (Array.isArray(combined[name])) {\n if (combined[name].indexOf(formats[name]) < 0) {\n merged[name] = combined[name].concat([formats[name]]);\n }\n } else {\n merged[name] = [combined[name], formats[name]];\n }\n return merged;\n }, {});\n}\n\nfunction getListType(type) {\n const tag = type === 'ordered' ? 'ol' : 'ul';\n switch (type) {\n case 'checked':\n return [tag, ' data-list=\"checked\"'];\n case 'unchecked':\n return [tag, ' data-list=\"unchecked\"'];\n default:\n return [tag, ''];\n }\n}\n\nfunction normalizeDelta(delta) {\n return delta.reduce((normalizedDelta, op) => {\n if (typeof op.insert === 'string') {\n const text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return normalizedDelta.insert(text, op.attributes);\n }\n return normalizedDelta.push(op);\n }, new Delta());\n}\n\nfunction shiftRange({ index, length }, amount) {\n return new Range(index + amount, length);\n}\n\nexport default Editor;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { Scope, ScrollBlot, ContainerBlot } from 'parchment';\nimport Emitter from '../core/emitter';\nimport Block, { BlockEmbed } from './block';\nimport Break from './break';\nimport Container from './container';\n\nfunction isLine(blot) {\n return blot instanceof Block || blot instanceof BlockEmbed;\n}\n\nclass Scroll extends ScrollBlot {\n constructor(registry, domNode, { emitter }) {\n super(registry, domNode);\n this.emitter = emitter;\n this.batch = false;\n this.optimize();\n this.enable();\n }\n\n batchStart() {\n if (!Array.isArray(this.batch)) {\n this.batch = [];\n }\n }\n\n batchEnd() {\n const mutations = this.batch;\n this.batch = false;\n this.update(mutations);\n }\n\n emitMount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_MOUNT, blot);\n }\n\n emitUnmount(blot) {\n this.emitter.emit(Emitter.events.SCROLL_BLOT_UNMOUNT, blot);\n }\n\n deleteAt(index, length) {\n const [first, offset] = this.line(index);\n const [last] = this.line(index + length);\n super.deleteAt(index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n this.optimize();\n return;\n }\n const ref =\n last.children.head instanceof Break ? null : last.children.head;\n first.moveChildren(last, ref);\n first.remove();\n }\n this.optimize();\n }\n\n enable(enabled = true) {\n this.domNode.setAttribute('contenteditable', enabled);\n }\n\n formatAt(index, length, format, value) {\n super.formatAt(index, length, format, value);\n this.optimize();\n }\n\n insertAt(index, value, def) {\n if (index >= this.length()) {\n if (def == null || this.scroll.query(value, Scope.BLOCK) == null) {\n const blot = this.scroll.create(this.statics.defaultChild.blotName);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n blot.insertAt(0, value.slice(0, -1), def);\n } else {\n blot.insertAt(0, value, def);\n }\n } else {\n const embed = this.scroll.create(value, def);\n this.appendChild(embed);\n }\n } else {\n super.insertAt(index, value, def);\n }\n this.optimize();\n }\n\n insertBefore(blot, ref) {\n if (blot.statics.scope === Scope.INLINE_BLOT) {\n const wrapper = this.scroll.create(this.statics.defaultChild.blotName);\n wrapper.appendChild(blot);\n super.insertBefore(wrapper, ref);\n } else {\n super.insertBefore(blot, ref);\n }\n }\n\n isEnabled() {\n return this.domNode.getAttribute('contenteditable') === 'true';\n }\n\n leaf(index) {\n return this.path(index).pop() || [null, -1];\n }\n\n line(index) {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n return this.descendant(isLine, index);\n }\n\n lines(index = 0, length = Number.MAX_VALUE) {\n const getLines = (blot, blotIndex, blotLength) => {\n let lines = [];\n let lengthLeft = blotLength;\n blot.children.forEachAt(\n blotIndex,\n blotLength,\n (child, childIndex, childLength) => {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof ContainerBlot) {\n lines = lines.concat(getLines(child, childIndex, lengthLeft));\n }\n lengthLeft -= childLength;\n },\n );\n return lines;\n };\n return getLines(this, index, length);\n }\n\n optimize(mutations = [], context = {}) {\n if (this.batch) return;\n super.optimize(mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n\n path(index) {\n return super.path(index).slice(1); // Exclude self\n }\n\n remove() {\n // Never remove self\n }\n\n update(mutations) {\n if (this.batch) {\n if (Array.isArray(mutations)) {\n this.batch = this.batch.concat(mutations);\n }\n return;\n }\n let source = Emitter.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n super.update(mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n }\n }\n}\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = Block;\nScroll.allowedChildren = [Block, BlockEmbed, Container];\n\nexport default Scroll;\n","import { Scope } from 'parchment';\nimport Delta, { Op } from 'quill-delta';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\n\nclass History extends Module {\n constructor(quill, options) {\n super(quill, options);\n this.lastRecorded = 0;\n this.ignoreChange = false;\n this.clear();\n this.quill.on(\n Quill.events.EDITOR_CHANGE,\n (eventName, delta, oldDelta, source) => {\n if (eventName !== Quill.events.TEXT_CHANGE || this.ignoreChange) return;\n if (!this.options.userOnly || source === Quill.sources.USER) {\n this.record(delta, oldDelta);\n } else {\n this.transform(delta);\n }\n },\n );\n this.quill.keyboard.addBinding(\n { key: 'z', shortKey: true },\n this.undo.bind(this),\n );\n this.quill.keyboard.addBinding(\n { key: 'z', shortKey: true, shiftKey: true },\n this.redo.bind(this),\n );\n if (/Win/i.test(navigator.platform)) {\n this.quill.keyboard.addBinding(\n { key: 'y', shortKey: true },\n this.redo.bind(this),\n );\n }\n }\n\n change(source, dest) {\n if (this.stack[source].length === 0) return;\n const delta = this.stack[source].pop();\n this.stack[dest].push(delta);\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(delta[source], Quill.sources.USER);\n this.ignoreChange = false;\n const index = getLastChangeIndex(this.quill.scroll, delta[source]);\n this.quill.setSelection(index);\n }\n\n clear() {\n this.stack = { undo: [], redo: [] };\n }\n\n cutoff() {\n this.lastRecorded = 0;\n }\n\n record(changeDelta, oldDelta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n let undoDelta = guessUndoDelta(changeDelta);\n if (undoDelta == null) {\n undoDelta = this.quill.getContents().diff(oldDelta);\n }\n const timestamp = Date.now();\n if (\n this.lastRecorded + this.options.delay > timestamp &&\n this.stack.undo.length > 0\n ) {\n const delta = this.stack.undo.pop();\n undoDelta = undoDelta.compose(delta.undo);\n changeDelta = delta.redo.compose(changeDelta);\n } else {\n this.lastRecorded = timestamp;\n }\n this.stack.undo.push({\n redo: changeDelta,\n undo: undoDelta,\n });\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n\n redo() {\n this.change('redo', 'undo');\n }\n\n transform(delta) {\n this.stack.undo.forEach(change => {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n this.stack.redo.forEach(change => {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n }\n\n undo() {\n this.change('undo', 'redo');\n }\n}\nHistory.DEFAULTS = {\n delay: 1000,\n maxStack: 100,\n userOnly: false,\n};\n\nfunction endsWithNewlineChange(scroll, delta) {\n const lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some(attr => {\n return scroll.query(attr, Scope.BLOCK) != null;\n });\n }\n return false;\n}\n\nfunction getLastChangeIndex(scroll, delta) {\n const deleteLength = delta.reduce((length, op) => {\n return length + (op.delete || 0);\n }, 0);\n let changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(scroll, delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\n\nfunction guessUndoDelta(delta) {\n const undoDelta = new Delta();\n let failed = false;\n delta.forEach(op => {\n if (op.insert) {\n undoDelta.delete(Op.length(op));\n } else if (op.retain && op.attributes == null) {\n undoDelta.retain(op.retain);\n } else {\n failed = true;\n return false;\n }\n return true;\n });\n return failed ? null : undoDelta;\n}\n\nexport { History as default, getLastChangeIndex };\n","import clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\nimport Delta, { AttributeMap } from 'quill-delta';\nimport { EmbedBlot, Scope, TextBlot } from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nconst debug = logger('quill:keyboard');\n\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nclass Keyboard extends Module {\n static match(evt, binding) {\n if (\n ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(key => {\n return !!binding[key] !== evt[key] && binding[key] !== null;\n })\n ) {\n return false;\n }\n return binding.key === evt.key || binding.key === evt.which;\n }\n\n constructor(quill, options) {\n super(quill, options);\n this.bindings = {};\n Object.keys(this.options.bindings).forEach(name => {\n if (this.options.bindings[name]) {\n this.addBinding(this.options.bindings[name]);\n }\n });\n this.addBinding({ key: 'Enter', shiftKey: null }, handleEnter);\n this.addBinding(\n { key: 'Enter', metaKey: null, ctrlKey: null, altKey: null },\n () => {},\n );\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: true },\n handleBackspace,\n );\n this.addBinding({ key: 'Delete' }, { collapsed: true }, handleDelete);\n } else {\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: true, prefix: /^.?$/ },\n handleBackspace,\n );\n this.addBinding(\n { key: 'Delete' },\n { collapsed: true, suffix: /^.?$/ },\n handleDelete,\n );\n }\n this.addBinding(\n { key: 'Backspace' },\n { collapsed: false },\n handleDeleteRange,\n );\n this.addBinding({ key: 'Delete' }, { collapsed: false }, handleDeleteRange);\n this.addBinding(\n {\n key: 'Backspace',\n altKey: null,\n ctrlKey: null,\n metaKey: null,\n shiftKey: null,\n },\n { collapsed: true, offset: 0 },\n handleBackspace,\n );\n this.listen();\n }\n\n addBinding(keyBinding, context = {}, handler = {}) {\n const binding = normalize(keyBinding);\n if (binding == null) {\n debug.warn('Attempted to add invalid keyboard binding', binding);\n return;\n }\n if (typeof context === 'function') {\n context = { handler: context };\n }\n if (typeof handler === 'function') {\n handler = { handler };\n }\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key];\n keys.forEach(key => {\n const singleBinding = extend({}, binding, { key }, context, handler);\n this.bindings[singleBinding.key] = this.bindings[singleBinding.key] || [];\n this.bindings[singleBinding.key].push(singleBinding);\n });\n }\n\n listen() {\n this.quill.root.addEventListener('keydown', evt => {\n if (evt.defaultPrevented) return;\n const bindings = (this.bindings[evt.key] || []).concat(\n this.bindings[evt.which] || [],\n );\n const matches = bindings.filter(binding => Keyboard.match(evt, binding));\n if (matches.length === 0) return;\n const range = this.quill.getSelection();\n if (range == null || !this.quill.hasFocus()) return;\n const [line, offset] = this.quill.getLine(range.index);\n const [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n const [leafEnd, offsetEnd] =\n range.length === 0\n ? [leafStart, offsetStart]\n : this.quill.getLeaf(range.index + range.length);\n const prefixText =\n leafStart instanceof TextBlot\n ? leafStart.value().slice(0, offsetStart)\n : '';\n const suffixText =\n leafEnd instanceof TextBlot ? leafEnd.value().slice(offsetEnd) : '';\n const curContext = {\n collapsed: range.length === 0,\n empty: range.length === 0 && line.length() <= 1,\n format: this.quill.getFormat(range),\n line,\n offset,\n prefix: prefixText,\n suffix: suffixText,\n event: evt,\n };\n const prevented = matches.some(binding => {\n if (\n binding.collapsed != null &&\n binding.collapsed !== curContext.collapsed\n ) {\n return false;\n }\n if (binding.empty != null && binding.empty !== curContext.empty) {\n return false;\n }\n if (binding.offset != null && binding.offset !== curContext.offset) {\n return false;\n }\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every(name => curContext.format[name] == null)) {\n return false;\n }\n } else if (typeof binding.format === 'object') {\n // all formats must match\n if (\n !Object.keys(binding.format).every(name => {\n if (binding.format[name] === true)\n return curContext.format[name] != null;\n if (binding.format[name] === false)\n return curContext.format[name] == null;\n return equal(binding.format[name], curContext.format[name]);\n })\n ) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) {\n return false;\n }\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) {\n return false;\n }\n return binding.handler.call(this, range, curContext, binding) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n}\n\nKeyboard.DEFAULTS = {\n bindings: {\n bold: makeFormatHandler('bold'),\n italic: makeFormatHandler('italic'),\n underline: makeFormatHandler('underline'),\n indent: {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: 'Tab',\n format: ['blockquote', 'indent', 'list'],\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', Quill.sources.USER);\n return false;\n },\n },\n outdent: {\n key: 'Tab',\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', Quill.sources.USER);\n return false;\n },\n },\n 'outdent backspace': {\n key: 'Backspace',\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', Quill.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, Quill.sources.USER);\n }\n },\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: 'Tab',\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler(range) {\n this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n },\n },\n tab: {\n key: 'Tab',\n handler(range, context) {\n if (context.format.table) return true;\n this.quill.history.cutoff();\n const delta = new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert('\\t');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n return false;\n },\n },\n 'blockquote empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['blockquote'],\n empty: true,\n handler() {\n this.quill.format('blockquote', false, Quill.sources.USER);\n },\n },\n 'list empty enter': {\n key: 'Enter',\n collapsed: true,\n format: ['list'],\n empty: true,\n handler(range, context) {\n const formats = { list: false };\n if (context.format.indent) {\n formats.indent = false;\n }\n this.quill.formatLine(\n range.index,\n range.length,\n formats,\n Quill.sources.USER,\n );\n },\n },\n 'checklist enter': {\n key: 'Enter',\n collapsed: true,\n format: { list: 'checked' },\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n const formats = extend({}, line.formats(), { list: 'checked' });\n const delta = new Delta()\n .retain(range.index)\n .insert('\\n', formats)\n .retain(line.length() - offset - 1)\n .retain(1, { list: 'unchecked' });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollIntoView();\n },\n },\n 'header enter': {\n key: 'Enter',\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler(range, context) {\n const [line, offset] = this.quill.getLine(range.index);\n const delta = new Delta()\n .retain(range.index)\n .insert('\\n', context.format)\n .retain(line.length() - offset - 1)\n .retain(1, { header: null });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollIntoView();\n },\n },\n 'table backspace': {\n key: 'Backspace',\n format: ['table'],\n collapsed: true,\n offset: 0,\n handler() {},\n },\n 'table delete': {\n key: 'Delete',\n format: ['table'],\n collapsed: true,\n suffix: /^$/,\n handler() {},\n },\n 'table enter': {\n key: 'Enter',\n shiftKey: null,\n format: ['table'],\n handler(range) {\n const module = this.quill.getModule('table');\n if (module) {\n const [table, row, cell, offset] = module.getTable(range);\n const shift = tableSide(table, row, cell, offset);\n if (shift == null) return;\n let index = table.offset();\n if (shift < 0) {\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(\n range.index + 1,\n range.length,\n Quill.sources.SILENT,\n );\n } else if (shift > 0) {\n index += table.length();\n const delta = new Delta().retain(index).insert('\\n');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(index, Quill.sources.USER);\n }\n }\n },\n },\n 'table tab': {\n key: 'Tab',\n shiftKey: null,\n format: ['table'],\n handler(range, context) {\n const { event, line: cell } = context;\n const offset = cell.offset(this.quill.scroll);\n if (event.shiftKey) {\n this.quill.setSelection(offset - 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(offset + cell.length(), Quill.sources.USER);\n }\n },\n },\n 'list autofill': {\n key: ' ',\n shiftKey: null,\n collapsed: true,\n format: {\n list: false,\n 'code-block': false,\n blockquote: false,\n header: false,\n table: false,\n },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler(range, context) {\n if (this.quill.scroll.query('list') == null) return true;\n const { length } = context.prefix;\n const [line, offset] = this.quill.getLine(range.index);\n if (offset > length) return true;\n let value;\n switch (context.prefix.trim()) {\n case '[]':\n case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-':\n case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', Quill.sources.USER);\n this.quill.history.cutoff();\n const delta = new Delta()\n .retain(range.index - offset)\n .delete(length + 1)\n .retain(line.length() - 2 - offset)\n .retain(1, { list: value });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n return false;\n },\n },\n 'code exit': {\n key: 'Enter',\n collapsed: true,\n format: ['code-block'],\n prefix: /^$/,\n suffix: /^\\s*$/,\n handler(range) {\n const [line, offset] = this.quill.getLine(range.index);\n let numLines = 2;\n let cur = line;\n while (\n cur != null &&\n cur.length() <= 1 &&\n cur.formats()['code-block']\n ) {\n cur = cur.prev;\n numLines -= 1;\n // Requisite prev lines are empty\n if (numLines <= 0) {\n const delta = new Delta()\n .retain(range.index + line.length() - offset - 2)\n .retain(1, { 'code-block': null })\n .delete(1);\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index - 1, Quill.sources.SILENT);\n return false;\n }\n }\n return true;\n },\n },\n 'embed left': makeEmbedArrowHandler('ArrowLeft', false),\n 'embed left shift': makeEmbedArrowHandler('ArrowLeft', true),\n 'embed right': makeEmbedArrowHandler('ArrowRight', false),\n 'embed right shift': makeEmbedArrowHandler('ArrowRight', true),\n 'table down': makeTableArrowHandler(false),\n 'table up': makeTableArrowHandler(true),\n },\n};\n\nfunction handleBackspace(range, context) {\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n const [line] = this.quill.getLine(range.index);\n let formats = {};\n if (context.offset === 0) {\n const [prev] = this.quill.getLine(range.index - 1);\n if (prev != null) {\n if (prev.length() > 1 || prev.statics.blotName === 'table') {\n const curFormats = line.formats();\n const prevFormats = this.quill.getFormat(range.index - 1, 1);\n formats = AttributeMap.diff(curFormats, prevFormats) || {};\n }\n }\n }\n // Check for astral symbols\n const length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n this.quill.deleteText(range.index - length, length, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(\n range.index - length,\n length,\n formats,\n Quill.sources.USER,\n );\n }\n this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n // Check for astral symbols\n const length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n if (range.index >= this.quill.getLength() - length) return;\n let formats = {};\n let nextLength = 0;\n const [line] = this.quill.getLine(range.index);\n if (context.offset >= line.length() - 1) {\n const [next] = this.quill.getLine(range.index + 1);\n if (next) {\n const curFormats = line.formats();\n const nextFormats = this.quill.getFormat(range.index, 1);\n formats = AttributeMap.diff(curFormats, nextFormats) || {};\n nextLength = next.length();\n }\n }\n this.quill.deleteText(range.index, length, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(\n range.index + nextLength - 1,\n length,\n formats,\n Quill.sources.USER,\n );\n }\n}\n\nfunction handleDeleteRange(range) {\n const lines = this.quill.getLines(range);\n let formats = {};\n if (lines.length > 1) {\n const firstFormats = lines[0].formats();\n const lastFormats = lines[lines.length - 1].formats();\n formats = AttributeMap.diff(lastFormats, firstFormats) || {};\n }\n this.quill.deleteText(range, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n }\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.quill.focus();\n}\n\n// TODO use just updateContents()\nfunction handleEnter(range, context) {\n if (range.length > 0) {\n this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n }\n const lineFormats = Object.keys(context.format).reduce((formats, format) => {\n if (\n this.quill.scroll.query(format, Scope.BLOCK) &&\n !Array.isArray(context.format[format])\n ) {\n formats[format] = context.format[format];\n }\n return formats;\n }, {});\n this.quill.insertText(range.index, '\\n', lineFormats, Quill.sources.USER);\n // Earlier scroll.deleteAt might have messed up our selection,\n // so insertText's built in selection preservation is not reliable\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.focus();\n Object.keys(context.format).forEach(name => {\n if (lineFormats[name] != null) return;\n if (Array.isArray(context.format[name])) return;\n if (name === 'link') return;\n this.quill.format(name, context.format[name], Quill.sources.USER);\n });\n}\n\nfunction makeCodeBlockHandler(indent) {\n return {\n key: 'Tab',\n shiftKey: !indent,\n format: { 'code-block': true },\n handler(range) {\n const CodeBlock = this.quill.scroll.query('code-block');\n const lines =\n range.length === 0\n ? this.quill.getLines(range.index, 1)\n : this.quill.getLines(range);\n let { index, length } = range;\n lines.forEach((line, i) => {\n if (indent) {\n line.insertAt(0, CodeBlock.TAB);\n if (i === 0) {\n index += CodeBlock.TAB.length;\n } else {\n length += CodeBlock.TAB.length;\n }\n } else if (line.domNode.textContent.startsWith(CodeBlock.TAB)) {\n line.deleteAt(0, CodeBlock.TAB.length);\n if (i === 0) {\n index -= CodeBlock.TAB.length;\n } else {\n length -= CodeBlock.TAB.length;\n }\n }\n });\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(index, length, Quill.sources.SILENT);\n },\n };\n}\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n const where = key === 'ArrowLeft' ? 'prefix' : 'suffix';\n return {\n key,\n shiftKey,\n altKey: null,\n [where]: /^$/,\n handler(range) {\n let { index } = range;\n if (key === 'ArrowRight') {\n index += range.length + 1;\n }\n const [leaf] = this.quill.getLeaf(index);\n if (!(leaf instanceof EmbedBlot)) return true;\n if (key === 'ArrowLeft') {\n if (shiftKey) {\n this.quill.setSelection(\n range.index - 1,\n range.length + 1,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(range.index - 1, Quill.sources.USER);\n }\n } else if (shiftKey) {\n this.quill.setSelection(\n range.index,\n range.length + 1,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(\n range.index + range.length + 1,\n Quill.sources.USER,\n );\n }\n return false;\n },\n };\n}\n\nfunction makeFormatHandler(format) {\n return {\n key: format[0],\n shortKey: true,\n handler(range, context) {\n this.quill.format(format, !context.format[format], Quill.sources.USER);\n },\n };\n}\n\nfunction makeTableArrowHandler(up) {\n return {\n key: up ? 'ArrowUp' : 'ArrowDown',\n collapsed: true,\n format: ['table'],\n handler(range, context) {\n // TODO move to table module\n const key = up ? 'prev' : 'next';\n const cell = context.line;\n const targetRow = cell.parent[key];\n if (targetRow != null) {\n if (targetRow.statics.blotName === 'table-row') {\n let targetCell = targetRow.children.head;\n let cur = cell;\n while (cur.prev != null) {\n cur = cur.prev;\n targetCell = targetCell.next;\n }\n const index =\n targetCell.offset(this.quill.scroll) +\n Math.min(context.offset, targetCell.length() - 1);\n this.quill.setSelection(index, 0, Quill.sources.USER);\n }\n } else {\n const targetLine = cell.table()[key];\n if (targetLine != null) {\n if (up) {\n this.quill.setSelection(\n targetLine.offset(this.quill.scroll) + targetLine.length() - 1,\n 0,\n Quill.sources.USER,\n );\n } else {\n this.quill.setSelection(\n targetLine.offset(this.quill.scroll),\n 0,\n Quill.sources.USER,\n );\n }\n }\n }\n return false;\n },\n };\n}\n\nfunction normalize(binding) {\n if (typeof binding === 'string' || typeof binding === 'number') {\n binding = { key: binding };\n } else if (typeof binding === 'object') {\n binding = clone(binding, false);\n } else {\n return null;\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\nfunction tableSide(table, row, cell, offset) {\n if (row.prev == null && row.next == null) {\n if (cell.prev == null && cell.next == null) {\n return offset === 0 ? -1 : 1;\n }\n return cell.prev == null ? -1 : 1;\n }\n if (row.prev == null) {\n return -1;\n }\n if (row.next == null) {\n return 1;\n }\n return null;\n}\n\nexport { Keyboard as default, SHORTKEY, normalize };\n","import Delta from 'quill-delta';\nimport Emitter from '../core/emitter';\nimport Module from '../core/module';\n\nclass Uploader extends Module {\n constructor(quill, options) {\n super(quill, options);\n quill.root.addEventListener('drop', e => {\n e.preventDefault();\n let native;\n if (document.caretRangeFromPoint) {\n native = document.caretRangeFromPoint(e.clientX, e.clientY);\n } else if (document.caretPositionFromPoint) {\n const position = document.caretPositionFromPoint(e.clientX, e.clientY);\n native = document.createRange();\n native.setStart(position.offsetNode, position.offset);\n native.setEnd(position.offsetNode, position.offset);\n } else {\n return;\n }\n const normalized = quill.selection.normalizeNative(native);\n const range = quill.selection.normalizedToRange(normalized);\n this.upload(range, e.dataTransfer.files);\n });\n }\n\n upload(range, files) {\n const uploads = [];\n Array.from(files).forEach(file => {\n if (file && this.options.mimetypes.includes(file.type)) {\n uploads.push(file);\n }\n });\n if (uploads.length > 0) {\n this.options.handler.call(this, range, uploads);\n }\n }\n}\n\nUploader.DEFAULTS = {\n mimetypes: ['image/png', 'image/jpeg'],\n handler(range, files) {\n const promises = files.map(file => {\n return new Promise(resolve => {\n const reader = new FileReader();\n reader.onload = e => {\n resolve(e.target.result);\n };\n reader.readAsDataURL(file);\n });\n });\n Promise.all(promises).then(images => {\n const update = images.reduce((delta, image) => {\n return delta.insert({ image });\n }, new Delta().retain(range.index).delete(range.length));\n this.quill.updateContents(update, Emitter.sources.USER);\n this.quill.setSelection(\n range.index + images.length,\n Emitter.sources.SILENT,\n );\n });\n },\n};\n\nexport default Uploader;\n","import { ClassAttributor, Scope } from 'parchment';\n\nclass IndentAttributor extends ClassAttributor {\n add(node, value) {\n if (value === '+1' || value === '-1') {\n const indent = this.value(node) || 0;\n value = value === '+1' ? indent + 1 : indent - 1;\n }\n if (value === 0) {\n this.remove(node);\n return true;\n }\n return super.add(node, value);\n }\n\n canAdd(node, value) {\n return super.canAdd(node, value) || super.canAdd(node, parseInt(value, 10));\n }\n\n value(node) {\n return parseInt(super.value(node), 10) || undefined; // Don't return NaN\n }\n}\n\nconst IndentClass = new IndentAttributor('indent', 'ql-indent', {\n scope: Scope.BLOCK,\n whitelist: [1, 2, 3, 4, 5, 6, 7, 8],\n});\n\nexport default IndentClass;\n","import Block from '../blots/block';\n\nclass Blockquote extends Block {}\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexport default Blockquote;\n","import Block from '../blots/block';\n\nclass Header extends Block {\n static formats(domNode) {\n return this.tagName.indexOf(domNode.tagName) + 1;\n }\n}\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexport default Header;\n","import Block from '../blots/block';\nimport Container from '../blots/container';\nimport Quill from '../core/quill';\n\nclass ListContainer extends Container {}\nListContainer.blotName = 'list-container';\nListContainer.tagName = 'OL';\n\nclass ListItem extends Block {\n static create(value) {\n const node = super.create();\n node.setAttribute('data-list', value);\n return node;\n }\n\n static formats(domNode) {\n return domNode.getAttribute('data-list') || undefined;\n }\n\n static register() {\n Quill.register(ListContainer);\n }\n\n constructor(scroll, domNode) {\n super(scroll, domNode);\n const ui = domNode.ownerDocument.createElement('span');\n const listEventHandler = e => {\n if (!scroll.isEnabled()) return;\n const format = this.statics.formats(domNode, scroll);\n if (format === 'checked') {\n this.format('list', 'unchecked');\n e.preventDefault();\n } else if (format === 'unchecked') {\n this.format('list', 'checked');\n e.preventDefault();\n }\n };\n ui.addEventListener('mousedown', listEventHandler);\n ui.addEventListener('touchstart', listEventHandler);\n this.attachUI(ui);\n }\n\n format(name, value) {\n if (name === this.statics.blotName && value) {\n this.domNode.setAttribute('data-list', value);\n } else {\n super.format(name, value);\n }\n }\n}\nListItem.blotName = 'list';\nListItem.tagName = 'LI';\n\nListContainer.allowedChildren = [ListItem];\nListItem.requiredContainer = ListContainer;\n\nexport { ListContainer, ListItem as default };\n","import Bold from './bold';\n\nclass Italic extends Bold {}\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexport default Italic;\n","import Inline from '../blots/inline';\n\nclass Script extends Inline {\n static create(value) {\n if (value === 'super') {\n return document.createElement('sup');\n }\n if (value === 'sub') {\n return document.createElement('sub');\n }\n return super.create(value);\n }\n\n static formats(domNode) {\n if (domNode.tagName === 'SUB') return 'sub';\n if (domNode.tagName === 'SUP') return 'super';\n return undefined;\n }\n}\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexport default Script;\n","import Inline from '../blots/inline';\n\nclass Strike extends Inline {}\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexport default Strike;\n","import Inline from '../blots/inline';\n\nclass Underline extends Inline {}\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexport default Underline;\n","import Embed from '../blots/embed';\n\nclass Formula extends Embed {\n static create(value) {\n if (window.katex == null) {\n throw new Error('Formula module requires KaTeX.');\n }\n const node = super.create(value);\n if (typeof value === 'string') {\n window.katex.render(value, node, {\n throwOnError: false,\n errorColor: '#f00',\n });\n node.setAttribute('data-value', value);\n }\n return node;\n }\n\n static value(domNode) {\n return domNode.getAttribute('data-value');\n }\n\n html() {\n const { formula } = this.value();\n return `<span>${formula}</span>`;\n }\n}\nFormula.blotName = 'formula';\nFormula.className = 'ql-formula';\nFormula.tagName = 'SPAN';\n\nexport default Formula;\n","import { EmbedBlot } from 'parchment';\nimport { sanitize } from './link';\n\nconst ATTRIBUTES = ['alt', 'height', 'width'];\n\nclass Image extends EmbedBlot {\n static create(value) {\n const node = super.create(value);\n if (typeof value === 'string') {\n node.setAttribute('src', this.sanitize(value));\n }\n return node;\n }\n\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n\n static match(url) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url);\n }\n\n static register() {\n if (/Firefox/i.test(navigator.userAgent)) {\n setTimeout(() => {\n // Disable image resizing in Firefox\n document.execCommand('enableObjectResizing', false, false);\n }, 1);\n }\n }\n\n static sanitize(url) {\n return sanitize(url, ['http', 'https', 'data']) ? url : '//:0';\n }\n\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n}\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexport default Image;\n","import { BlockEmbed } from '../blots/block';\nimport Link from './link';\n\nconst ATTRIBUTES = ['height', 'width'];\n\nclass Video extends BlockEmbed {\n static create(value) {\n const node = super.create(value);\n node.setAttribute('frameborder', '0');\n node.setAttribute('allowfullscreen', true);\n node.setAttribute('src', this.sanitize(value));\n return node;\n }\n\n static formats(domNode) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute);\n }\n return formats;\n }, {});\n }\n\n static sanitize(url) {\n return Link.sanitize(url); // eslint-disable-line import/no-named-as-default-member\n }\n\n static value(domNode) {\n return domNode.getAttribute('src');\n }\n\n format(name, value) {\n if (ATTRIBUTES.indexOf(name) > -1) {\n if (value) {\n this.domNode.setAttribute(name, value);\n } else {\n this.domNode.removeAttribute(name);\n }\n } else {\n super.format(name, value);\n }\n }\n\n html() {\n const { video } = this.value();\n return `<a href=\"${video}\">${video}</a>`;\n }\n}\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexport default Video;\n","import Delta from 'quill-delta';\nimport { ClassAttributor, Scope } from 'parchment';\nimport Inline from '../blots/inline';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\nimport { blockDelta } from '../blots/block';\nimport BreakBlot from '../blots/break';\nimport CursorBlot from '../blots/cursor';\nimport TextBlot, { escapeText } from '../blots/text';\nimport CodeBlock, { CodeBlockContainer } from '../formats/code';\nimport { traverse } from './clipboard';\n\nconst TokenAttributor = new ClassAttributor('code-token', 'hljs', {\n scope: Scope.INLINE,\n});\nclass CodeToken extends Inline {\n static formats(node, scroll) {\n while (node != null && node !== scroll.domNode) {\n if (node.classList.contains(CodeBlock.className)) {\n return super.formats(node, scroll);\n }\n node = node.parentNode;\n }\n return undefined;\n }\n\n constructor(scroll, domNode, value) {\n super(scroll, domNode, value);\n TokenAttributor.add(this.domNode, value);\n }\n\n format(format, value) {\n if (format !== CodeToken.blotName) {\n super.format(format, value);\n } else if (value) {\n TokenAttributor.add(this.domNode, value);\n } else {\n TokenAttributor.remove(this.domNode);\n this.domNode.classList.remove(this.statics.className);\n }\n }\n\n optimize(...args) {\n super.optimize(...args);\n if (!TokenAttributor.value(this.domNode)) {\n this.unwrap();\n }\n }\n}\nCodeToken.blotName = 'code-token';\nCodeToken.className = 'ql-token';\n\nclass SyntaxCodeBlock extends CodeBlock {\n static create(value) {\n const domNode = super.create(value);\n if (typeof value === 'string') {\n domNode.setAttribute('data-language', value);\n }\n return domNode;\n }\n\n static formats(domNode) {\n return domNode.getAttribute('data-language') || 'plain';\n }\n\n static register() {} // Syntax module will register\n\n format(name, value) {\n if (name === this.statics.blotName && value) {\n this.domNode.setAttribute('data-language', value);\n } else {\n super.format(name, value);\n }\n }\n\n replaceWith(name, value) {\n this.formatAt(0, this.length(), CodeToken.blotName, false);\n return super.replaceWith(name, value);\n }\n}\n\nclass SyntaxCodeBlockContainer extends CodeBlockContainer {\n attach() {\n super.attach();\n this.forceNext = false;\n this.scroll.emitMount(this);\n }\n\n format(name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n this.children.forEach(child => {\n child.format(name, value);\n });\n }\n }\n\n formatAt(index, length, name, value) {\n if (name === SyntaxCodeBlock.blotName) {\n this.forceNext = true;\n }\n super.formatAt(index, length, name, value);\n }\n\n highlight(highlight, forced = false) {\n if (this.children.head == null) return;\n const nodes = Array.from(this.domNode.childNodes).filter(\n node => node !== this.uiNode,\n );\n const text = `${nodes.map(node => node.textContent).join('\\n')}\\n`;\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n if (forced || this.forceNext || this.cachedText !== text) {\n if (text.trim().length > 0 || this.cachedText == null) {\n const oldDelta = this.children.reduce((delta, child) => {\n return delta.concat(blockDelta(child));\n }, new Delta());\n const delta = highlight(text, language);\n oldDelta.diff(delta).reduce((index, { retain, attributes }) => {\n // Should be all retains\n if (!retain) return index;\n if (attributes) {\n Object.keys(attributes).forEach(format => {\n if (\n [SyntaxCodeBlock.blotName, CodeToken.blotName].includes(format)\n ) {\n this.formatAt(index, retain, format, attributes[format]);\n }\n });\n }\n return index + retain;\n }, 0);\n }\n this.cachedText = text;\n this.forceNext = false;\n }\n }\n\n optimize(context) {\n super.optimize(context);\n if (\n this.parent != null &&\n this.children.head != null &&\n this.uiNode != null\n ) {\n const language = SyntaxCodeBlock.formats(this.children.head.domNode);\n if (language !== this.uiNode.value) {\n this.uiNode.value = language;\n }\n }\n }\n}\nSyntaxCodeBlockContainer.allowedChildren = [SyntaxCodeBlock];\nSyntaxCodeBlock.requiredContainer = SyntaxCodeBlockContainer;\nSyntaxCodeBlock.allowedChildren = [CodeToken, CursorBlot, TextBlot, BreakBlot];\n\nclass Syntax extends Module {\n static register() {\n Quill.register(CodeToken, true);\n Quill.register(SyntaxCodeBlock, true);\n Quill.register(SyntaxCodeBlockContainer, true);\n }\n\n constructor(quill, options) {\n super(quill, options);\n if (this.options.hljs == null) {\n throw new Error(\n 'Syntax module requires highlight.js. Please include the library on the page before Quill.',\n );\n }\n this.highlightBlot = this.highlightBlot.bind(this);\n this.initListener();\n this.initTimer();\n }\n\n initListener() {\n this.quill.on(Quill.events.SCROLL_BLOT_MOUNT, blot => {\n if (!(blot instanceof SyntaxCodeBlockContainer)) return;\n const select = this.quill.root.ownerDocument.createElement('select');\n this.options.languages.forEach(({ key, label }) => {\n const option = select.ownerDocument.createElement('option');\n option.textContent = label;\n option.setAttribute('value', key);\n select.appendChild(option);\n });\n select.addEventListener('change', () => {\n blot.format(SyntaxCodeBlock.blotName, select.value);\n this.quill.root.focus(); // Prevent scrolling\n this.highlight(blot, true);\n });\n if (blot.uiNode == null) {\n blot.attachUI(select);\n if (blot.children.head) {\n select.value = SyntaxCodeBlock.formats(blot.children.head.domNode);\n }\n }\n });\n }\n\n initTimer() {\n let timer = null;\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n this.highlight();\n timer = null;\n }, this.options.interval);\n });\n }\n\n highlight(blot = null, force = false) {\n if (this.quill.selection.composing) return;\n this.quill.update(Quill.sources.USER);\n const range = this.quill.getSelection();\n const blots =\n blot == null\n ? this.quill.scroll.descendants(SyntaxCodeBlockContainer)\n : [blot];\n blots.forEach(container => {\n container.highlight(this.highlightBlot, force);\n });\n this.quill.update(Quill.sources.SILENT);\n if (range != null) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n }\n }\n\n highlightBlot(text, language = 'plain') {\n if (language === 'plain') {\n return escapeText(text)\n .split('\\n')\n .reduce((delta, line, i) => {\n if (i !== 0) {\n delta.insert('\\n', { [CodeBlock.blotName]: language });\n }\n return delta.insert(line);\n }, new Delta());\n }\n const container = this.quill.root.ownerDocument.createElement('div');\n container.classList.add(CodeBlock.className);\n container.innerHTML = this.options.hljs.highlight(language, text).value;\n return traverse(\n this.quill.scroll,\n container,\n [\n (node, delta) => {\n const value = TokenAttributor.value(node);\n if (value) {\n return delta.compose(\n new Delta().retain(delta.length(), {\n [CodeToken.blotName]: value,\n }),\n );\n }\n return delta;\n },\n ],\n [\n (node, delta) => {\n return node.data.split('\\n').reduce((memo, nodeText, i) => {\n if (i !== 0) memo.insert('\\n', { [CodeBlock.blotName]: language });\n return memo.insert(nodeText);\n }, delta);\n },\n ],\n new WeakMap(),\n );\n }\n}\nSyntax.DEFAULTS = {\n hljs: (() => {\n return window.hljs;\n })(),\n interval: 1000,\n languages: [\n { key: 'plain', label: 'Plain' },\n { key: 'bash', label: 'Bash' },\n { key: 'cpp', label: 'C++' },\n { key: 'cs', label: 'C#' },\n { key: 'css', label: 'CSS' },\n { key: 'diff', label: 'Diff' },\n { key: 'xml', label: 'HTML/XML' },\n { key: 'java', label: 'Java' },\n { key: 'javascript', label: 'Javascript' },\n { key: 'markdown', label: 'Markdown' },\n { key: 'php', label: 'PHP' },\n { key: 'python', label: 'Python' },\n { key: 'ruby', label: 'Ruby' },\n { key: 'sql', label: 'SQL' },\n ],\n};\n\nexport { SyntaxCodeBlock as CodeBlock, CodeToken, Syntax as default };\n","import Delta from 'quill-delta';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\nimport {\n TableCell,\n TableRow,\n TableBody,\n TableContainer,\n tableId,\n} from '../formats/table';\n\nclass Table extends Module {\n static register() {\n Quill.register(TableCell);\n Quill.register(TableRow);\n Quill.register(TableBody);\n Quill.register(TableContainer);\n }\n\n constructor(...args) {\n super(...args);\n this.listenBalanceCells();\n }\n\n balanceTables() {\n this.quill.scroll.descendants(TableContainer).forEach(table => {\n table.balanceCells();\n });\n }\n\n deleteColumn() {\n const [table, , cell] = this.getTable();\n if (cell == null) return;\n table.deleteColumn(cell.cellOffset());\n this.quill.update(Quill.sources.USER);\n }\n\n deleteRow() {\n const [, row] = this.getTable();\n if (row == null) return;\n row.remove();\n this.quill.update(Quill.sources.USER);\n }\n\n deleteTable() {\n const [table] = this.getTable();\n if (table == null) return;\n const offset = table.offset();\n table.remove();\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(offset, Quill.sources.SILENT);\n }\n\n getTable(range = this.quill.getSelection()) {\n if (range == null) return [null, null, null, -1];\n const [cell, offset] = this.quill.getLine(range.index);\n if (cell == null || cell.statics.blotName !== TableCell.blotName) {\n return [null, null, null, -1];\n }\n const row = cell.parent;\n const table = row.parent.parent;\n return [table, row, cell, offset];\n }\n\n insertColumn(offset) {\n const range = this.quill.getSelection();\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const column = cell.cellOffset();\n table.insertColumn(column + offset);\n this.quill.update(Quill.sources.USER);\n let shift = row.rowOffset();\n if (offset === 0) {\n shift += 1;\n }\n this.quill.setSelection(\n range.index + shift,\n range.length,\n Quill.sources.SILENT,\n );\n }\n\n insertColumnLeft() {\n this.insertColumn(0);\n }\n\n insertColumnRight() {\n this.insertColumn(1);\n }\n\n insertRow(offset) {\n const range = this.quill.getSelection();\n const [table, row, cell] = this.getTable(range);\n if (cell == null) return;\n const index = row.rowOffset();\n table.insertRow(index + offset);\n this.quill.update(Quill.sources.USER);\n if (offset > 0) {\n this.quill.setSelection(range, Quill.sources.SILENT);\n } else {\n this.quill.setSelection(\n range.index + row.children.length,\n range.length,\n Quill.sources.SILENT,\n );\n }\n }\n\n insertRowAbove() {\n this.insertRow(0);\n }\n\n insertRowBelow() {\n this.insertRow(1);\n }\n\n insertTable(rows, columns) {\n const range = this.quill.getSelection();\n if (range == null) return;\n const delta = new Array(rows).fill(0).reduce(memo => {\n const text = new Array(columns).fill('\\n').join('');\n return memo.insert(text, { table: tableId() });\n }, new Delta().retain(range.index));\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.balanceTables();\n }\n\n listenBalanceCells() {\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, mutations => {\n mutations.some(mutation => {\n if (['TD', 'TR', 'TBODY', 'TABLE'].includes(mutation.target.tagName)) {\n this.quill.once(Quill.events.TEXT_CHANGE, (delta, old, source) => {\n if (source !== Quill.sources.USER) return;\n this.balanceTables();\n });\n return true;\n }\n return false;\n });\n });\n }\n}\n\nexport default Table;\n","import Block from '../blots/block';\nimport Container from '../blots/container';\n\nclass TableCell extends Block {\n static create(value) {\n const node = super.create();\n if (value) {\n node.setAttribute('data-row', value);\n } else {\n node.setAttribute('data-row', tableId());\n }\n return node;\n }\n\n static formats(domNode) {\n if (domNode.hasAttribute('data-row')) {\n return domNode.getAttribute('data-row');\n }\n return undefined;\n }\n\n cellOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n\n format(name, value) {\n if (name === TableCell.blotName && value) {\n this.domNode.setAttribute('data-row', value);\n } else {\n super.format(name, value);\n }\n }\n\n row() {\n return this.parent;\n }\n\n rowOffset() {\n if (this.row()) {\n return this.row().rowOffset();\n }\n return -1;\n }\n\n table() {\n return this.row() && this.row().table();\n }\n}\nTableCell.blotName = 'table';\nTableCell.tagName = 'TD';\n\nclass TableRow extends Container {\n checkMerge() {\n if (super.checkMerge() && this.next.children.head != null) {\n const thisHead = this.children.head.formats();\n const thisTail = this.children.tail.formats();\n const nextHead = this.next.children.head.formats();\n const nextTail = this.next.children.tail.formats();\n return (\n thisHead.table === thisTail.table &&\n thisHead.table === nextHead.table &&\n thisHead.table === nextTail.table\n );\n }\n return false;\n }\n\n optimize(...args) {\n super.optimize(...args);\n this.children.forEach(child => {\n if (child.next == null) return;\n const childFormats = child.formats();\n const nextFormats = child.next.formats();\n if (childFormats.table !== nextFormats.table) {\n const next = this.splitAfter(child);\n if (next) {\n next.optimize();\n }\n // We might be able to merge with prev now\n if (this.prev) {\n this.prev.optimize();\n }\n }\n });\n }\n\n rowOffset() {\n if (this.parent) {\n return this.parent.children.indexOf(this);\n }\n return -1;\n }\n\n table() {\n return this.parent && this.parent.parent;\n }\n}\nTableRow.blotName = 'table-row';\nTableRow.tagName = 'TR';\n\nclass TableBody extends Container {}\nTableBody.blotName = 'table-body';\nTableBody.tagName = 'TBODY';\n\nclass TableContainer extends Container {\n balanceCells() {\n const rows = this.descendants(TableRow);\n const maxColumns = rows.reduce((max, row) => {\n return Math.max(row.children.length, max);\n }, 0);\n rows.forEach(row => {\n new Array(maxColumns - row.children.length).fill(0).forEach(() => {\n let value;\n if (row.children.head != null) {\n value = TableCell.formats(row.children.head.domNode);\n }\n const blot = this.scroll.create(TableCell.blotName, value);\n row.appendChild(blot);\n blot.optimize(); // Add break blot\n });\n });\n }\n\n cells(column) {\n return this.rows().map(row => row.children.at(column));\n }\n\n deleteColumn(index) {\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const cell = row.children.at(index);\n if (cell != null) {\n cell.remove();\n }\n });\n }\n\n insertColumn(index) {\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n body.children.forEach(row => {\n const ref = row.children.at(index);\n const value = TableCell.formats(row.children.head.domNode);\n const cell = this.scroll.create(TableCell.blotName, value);\n row.insertBefore(cell, ref);\n });\n }\n\n insertRow(index) {\n const [body] = this.descendant(TableBody);\n if (body == null || body.children.head == null) return;\n const id = tableId();\n const row = this.scroll.create(TableRow.blotName);\n body.children.head.children.forEach(() => {\n const cell = this.scroll.create(TableCell.blotName, id);\n row.appendChild(cell);\n });\n const ref = body.children.at(index);\n body.insertBefore(row, ref);\n }\n\n rows() {\n const body = this.children.head;\n if (body == null) return [];\n return body.children.map(row => row);\n }\n}\nTableContainer.blotName = 'table-container';\nTableContainer.tagName = 'TABLE';\n\nTableContainer.allowedChildren = [TableBody];\nTableBody.requiredContainer = TableContainer;\n\nTableBody.allowedChildren = [TableRow];\nTableRow.requiredContainer = TableBody;\n\nTableRow.allowedChildren = [TableCell];\nTableCell.requiredContainer = TableRow;\n\nfunction tableId() {\n const id = Math.random()\n .toString(36)\n .slice(2, 6);\n return `row-${id}`;\n}\n\nexport { TableCell, TableRow, TableBody, TableContainer, tableId };\n","import Delta from 'quill-delta';\nimport { EmbedBlot, Scope } from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nconst debug = logger('quill:toolbar');\n\nclass Toolbar extends Module {\n constructor(quill, options) {\n super(quill, options);\n if (Array.isArray(this.options.container)) {\n const container = document.createElement('div');\n addControls(container, this.options.container);\n quill.container.parentNode.insertBefore(container, quill.container);\n this.container = container;\n } else if (typeof this.options.container === 'string') {\n this.container = document.querySelector(this.options.container);\n } else {\n this.container = this.options.container;\n }\n if (!(this.container instanceof HTMLElement)) {\n return debug.error('Container required for toolbar', this.options);\n }\n this.container.classList.add('ql-toolbar');\n this.controls = [];\n this.handlers = {};\n Object.keys(this.options.handlers).forEach(format => {\n this.addHandler(format, this.options.handlers[format]);\n });\n Array.from(this.container.querySelectorAll('button, select')).forEach(\n input => {\n this.attach(input);\n },\n );\n this.quill.on(Quill.events.EDITOR_CHANGE, (type, range) => {\n if (type === Quill.events.SELECTION_CHANGE) {\n this.update(range);\n }\n });\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n const [range] = this.quill.selection.getRange(); // quill.getSelection triggers update\n this.update(range);\n });\n }\n\n addHandler(format, handler) {\n this.handlers[format] = handler;\n }\n\n attach(input) {\n let format = Array.from(input.classList).find(className => {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (\n this.handlers[format] == null &&\n this.quill.scroll.query(format) == null\n ) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n const eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, e => {\n let value;\n if (input.tagName === 'SELECT') {\n if (input.selectedIndex < 0) return;\n const selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n this.quill.focus();\n const [range] = this.quill.selection.getRange();\n if (this.handlers[format] != null) {\n this.handlers[format].call(this, value);\n } else if (\n this.quill.scroll.query(format).prototype instanceof EmbedBlot\n ) {\n value = prompt(`Enter ${format}`); // eslint-disable-line no-alert\n if (!value) return;\n this.quill.updateContents(\n new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ [format]: value }),\n Quill.sources.USER,\n );\n } else {\n this.quill.format(format, value, Quill.sources.USER);\n }\n this.update(range);\n });\n this.controls.push([format, input]);\n }\n\n update(range) {\n const formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach(pair => {\n const [format, input] = pair;\n if (input.tagName === 'SELECT') {\n let option;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n let value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n }\n option = input.querySelector(`option[value=\"${value}\"]`);\n }\n if (option == null) {\n input.value = ''; // TODO make configurable?\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else if (range == null) {\n input.classList.remove('ql-active');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n const isActive =\n formats[format] === input.getAttribute('value') ||\n (formats[format] != null &&\n formats[format].toString() === input.getAttribute('value')) ||\n (formats[format] == null && !input.getAttribute('value'));\n input.classList.toggle('ql-active', isActive);\n } else {\n input.classList.toggle('ql-active', formats[format] != null);\n }\n });\n }\n}\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n const input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add(`ql-${format}`);\n if (value != null) {\n input.value = value;\n }\n container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n if (!Array.isArray(groups[0])) {\n groups = [groups];\n }\n groups.forEach(controls => {\n const group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach(control => {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n const format = Object.keys(control)[0];\n const value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\n\nfunction addSelect(container, format, values) {\n const input = document.createElement('select');\n input.classList.add(`ql-${format}`);\n values.forEach(value => {\n const option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', value);\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean() {\n const range = this.quill.getSelection();\n if (range == null) return;\n if (range.length === 0) {\n const formats = this.quill.getFormat();\n Object.keys(formats).forEach(name => {\n // Clean functionality in existing apps only clean inline formats\n if (this.quill.scroll.query(name, Scope.INLINE) != null) {\n this.quill.format(name, false, Quill.sources.USER);\n }\n });\n } else {\n this.quill.removeFormat(range, Quill.sources.USER);\n }\n },\n direction(value) {\n const { align } = this.quill.getFormat();\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', Quill.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, Quill.sources.USER);\n }\n this.quill.format('direction', value, Quill.sources.USER);\n },\n indent(value) {\n const range = this.quill.getSelection();\n const formats = this.quill.getFormat(range);\n const indent = parseInt(formats.indent || 0, 10);\n if (value === '+1' || value === '-1') {\n let modifier = value === '+1' ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, Quill.sources.USER);\n }\n },\n link(value) {\n if (value === true) {\n value = prompt('Enter link URL:'); // eslint-disable-line no-alert\n }\n this.quill.format('link', value, Quill.sources.USER);\n },\n list(value) {\n const range = this.quill.getSelection();\n const formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats.list === 'checked' || formats.list === 'unchecked') {\n this.quill.format('list', false, Quill.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', Quill.sources.USER);\n }\n } else {\n this.quill.format('list', value, Quill.sources.USER);\n }\n },\n },\n};\n\nexport { Toolbar as default, addControls };\n","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";","module.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";","module.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";","module.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";","module.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=2 width=3 x=5 y=5></rect> <rect class=ql-fill height=2 width=4 x=9 y=5></rect> <g class=\\\"ql-fill ql-transparent\\\"> <rect height=2 width=3 x=5 y=8></rect> <rect height=2 width=4 x=9 y=8></rect> <rect height=2 width=3 x=5 y=11></rect> <rect height=2 width=4 x=9 y=11></rect> </g> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";","module.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";","import extend from 'extend';\nimport Emitter from '../core/emitter';\nimport BaseTheme, { BaseTooltip } from './base';\nimport { Range } from '../core/selection';\nimport icons from '../ui/icons';\n\nconst TOOLBAR_CONFIG = [\n ['bold', 'italic', 'link'],\n [{ header: 1 }, { header: 2 }, 'blockquote'],\n];\n\nclass BubbleTooltip extends BaseTooltip {\n constructor(quill, bounds) {\n super(quill, bounds);\n this.quill.on(\n Emitter.events.EDITOR_CHANGE,\n (type, range, oldRange, source) => {\n if (type !== Emitter.events.SELECTION_CHANGE) return;\n if (\n range != null &&\n range.length > 0 &&\n source === Emitter.sources.USER\n ) {\n this.show();\n // Lock our width so we will expand beyond our offsetParent boundaries\n this.root.style.left = '0px';\n this.root.style.width = '';\n this.root.style.width = `${this.root.offsetWidth}px`;\n const lines = this.quill.getLines(range.index, range.length);\n if (lines.length === 1) {\n this.position(this.quill.getBounds(range));\n } else {\n const lastLine = lines[lines.length - 1];\n const index = this.quill.getIndex(lastLine);\n const length = Math.min(\n lastLine.length() - 1,\n range.index + range.length - index,\n );\n const indexBounds = this.quill.getBounds(new Range(index, length));\n this.position(indexBounds);\n }\n } else if (\n document.activeElement !== this.textbox &&\n this.quill.hasFocus()\n ) {\n this.hide();\n }\n },\n );\n }\n\n listen() {\n super.listen();\n this.root.querySelector('.ql-close').addEventListener('click', () => {\n this.root.classList.remove('ql-editing');\n });\n this.quill.on(Emitter.events.SCROLL_OPTIMIZE, () => {\n // Let selection be restored by toolbar handlers before repositioning\n setTimeout(() => {\n if (this.root.classList.contains('ql-hidden')) return;\n const range = this.quill.getSelection();\n if (range != null) {\n this.position(this.quill.getBounds(range));\n }\n }, 1);\n });\n }\n\n cancel() {\n this.show();\n }\n\n position(reference) {\n const shift = super.position(reference);\n const arrow = this.root.querySelector('.ql-tooltip-arrow');\n arrow.style.marginLeft = '';\n if (shift !== 0) {\n arrow.style.marginLeft = `${-1 * shift - arrow.offsetWidth / 2}px`;\n }\n return shift;\n }\n}\nBubbleTooltip.TEMPLATE = [\n '<span class=\"ql-tooltip-arrow\"></span>',\n '<div class=\"ql-tooltip-editor\">',\n '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">',\n '<a class=\"ql-close\"></a>',\n '</div>',\n].join('');\n\nclass BubbleTheme extends BaseTheme {\n constructor(quill, options) {\n if (\n options.modules.toolbar != null &&\n options.modules.toolbar.container == null\n ) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-bubble');\n }\n\n extendToolbar(toolbar) {\n this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n this.tooltip.root.appendChild(toolbar.container);\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n }\n}\nBubbleTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (!value) {\n this.quill.format('link', false);\n } else {\n this.quill.theme.tooltip.edit();\n }\n },\n },\n },\n },\n});\n\nexport { BubbleTooltip, BubbleTheme as default };\n","import extend from 'extend';\nimport Emitter from '../core/emitter';\nimport BaseTheme, { BaseTooltip } from './base';\nimport LinkBlot from '../formats/link';\nimport { Range } from '../core/selection';\nimport icons from '../ui/icons';\n\nconst TOOLBAR_CONFIG = [\n [{ header: ['1', '2', '3', false] }],\n ['bold', 'italic', 'underline', 'link'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ['clean'],\n];\n\nclass SnowTooltip extends BaseTooltip {\n constructor(quill, bounds) {\n super(quill, bounds);\n this.preview = this.root.querySelector('a.ql-preview');\n }\n\n listen() {\n super.listen();\n this.root.querySelector('a.ql-action').addEventListener('click', event => {\n if (this.root.classList.contains('ql-editing')) {\n this.save();\n } else {\n this.edit('link', this.preview.textContent);\n }\n event.preventDefault();\n });\n this.root.querySelector('a.ql-remove').addEventListener('click', event => {\n if (this.linkRange != null) {\n const range = this.linkRange;\n this.restoreFocus();\n this.quill.formatText(range, 'link', false, Emitter.sources.USER);\n delete this.linkRange;\n }\n event.preventDefault();\n this.hide();\n });\n this.quill.on(\n Emitter.events.SELECTION_CHANGE,\n (range, oldRange, source) => {\n if (range == null) return;\n if (range.length === 0 && source === Emitter.sources.USER) {\n const [link, offset] = this.quill.scroll.descendant(\n LinkBlot,\n range.index,\n );\n if (link != null) {\n this.linkRange = new Range(range.index - offset, link.length());\n const preview = LinkBlot.formats(link.domNode);\n this.preview.textContent = preview;\n this.preview.setAttribute('href', preview);\n this.show();\n this.position(this.quill.getBounds(this.linkRange));\n return;\n }\n } else {\n delete this.linkRange;\n }\n this.hide();\n },\n );\n }\n\n show() {\n super.show();\n this.root.removeAttribute('data-mode');\n }\n}\nSnowTooltip.TEMPLATE = [\n '<a class=\"ql-preview\" target=\"_blank\" href=\"about:blank\"></a>',\n '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">',\n '<a class=\"ql-action\"></a>',\n '<a class=\"ql-remove\"></a>',\n].join('');\n\nclass SnowTheme extends BaseTheme {\n constructor(quill, options) {\n if (\n options.modules.toolbar != null &&\n options.modules.toolbar.container == null\n ) {\n options.modules.toolbar.container = TOOLBAR_CONFIG;\n }\n super(quill, options);\n this.quill.container.classList.add('ql-snow');\n }\n\n extendToolbar(toolbar) {\n toolbar.container.classList.add('ql-snow');\n this.buildButtons(toolbar.container.querySelectorAll('button'), icons);\n this.buildPickers(toolbar.container.querySelectorAll('select'), icons);\n this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n if (toolbar.container.querySelector('.ql-link')) {\n this.quill.keyboard.addBinding(\n { key: 'k', shortKey: true },\n (range, context) => {\n toolbar.handlers.link.call(toolbar, !context.format.link);\n },\n );\n }\n }\n}\nSnowTheme.DEFAULTS = extend(true, {}, BaseTheme.DEFAULTS, {\n modules: {\n toolbar: {\n handlers: {\n link(value) {\n if (value) {\n const range = this.quill.getSelection();\n if (range == null || range.length === 0) return;\n let preview = this.quill.getText(range);\n if (\n /^\\S+@\\S+\\.\\S+$/.test(preview) &&\n preview.indexOf('mailto:') !== 0\n ) {\n preview = `mailto:${preview}`;\n }\n const { tooltip } = this.quill.theme;\n tooltip.edit('link', preview);\n } else {\n this.quill.format('link', false);\n }\n },\n },\n },\n },\n});\n\nexport default SnowTheme;\n"],"sourceRoot":""}