function MediumEditor(a,b){"use strict";return this.init(a,b)}"object"==typeof module?module.exports=MediumEditor:"function"==typeof define&&define.amd&&define(function(){"use strict";return MediumEditor}),function(a,b){"use strict";function c(a,b){var c;if(void 0===a)return b;for(c in b)b.hasOwnProperty(c)&&a.hasOwnProperty(c)===!1&&(a[c]=b[c]);return a}function d(a,b){var c,d,e,f,g=50,h=null,i=0;return b||0===b||(b=g),f=function(){i=m(),h=null,e=a.apply(c,d),h||(c=d=null)},function(){var g=m(),j=b-(g-i);return c=this,d=arguments,0>=j||j>b?(clearTimeout(h),h=null,i=g,e=a.apply(c,d),h||(c=d=null)):h||(h=setTimeout(f,j)),e}}function e(a,b){for(var c=b.parentNode;null!==c;){if(c===a)return!0;c=c.parentNode}return!1}function f(a,b,c){var d,e=!1,f=c.createNodeIterator(a,NodeFilter.SHOW_TEXT);for(d=f.nextNode();d;){if(d===b)e=!0;else if(e&&3===d.nodeType&&d.nodeValue.length>0)break;d=f.nextNode()}return d}function g(){var a,b,c,d=this.options.contentWindow.getSelection();if(d.getRangeAt&&d.rangeCount){for(c=[],a=0,b=d.rangeCount;b>a;a+=1)c.push(d.getRangeAt(a));return c}return null}function h(a){var b,c,d=this.options.contentWindow.getSelection();if(a)for(d.removeAllRanges(),b=0,c=a.length;c>b;b+=1)d.addRange(a[b])}function i(){var a=this.options.ownerDocument.getSelection().anchorNode,b=a&&3===a.nodeType?a.parentNode:a;return b}function j(){var a,b,c,d,e="";if(void 0!==this.options.contentWindow.getSelection){if(b=this.options.contentWindow.getSelection(),b.rangeCount){for(d=this.options.ownerDocument.createElement("div"),a=0,c=b.rangeCount;c>a;a+=1)d.appendChild(b.getRangeAt(a).cloneContents());e=d.innerHTML}}else void 0!==this.options.ownerDocument.selection&&"Text"===this.options.ownerDocument.selection.type&&(e=this.options.ownerDocument.selection.createRange().htmlText);return e}function k(a){return!(!a||1!==a.nodeType)}function l(b,c){var d,e,f,g,h,i;if(b.queryCommandSupported("insertHTML"))return b.execCommand("insertHTML",!1,c);if(d=a.getSelection(),d.getRangeAt&&d.rangeCount){for(e=d.getRangeAt(0),e.deleteContents(),f=b.createElement("div"),f.innerHTML=c,g=b.createDocumentFragment();f.firstChild;)h=f.firstChild,i=g.appendChild(h);e.insertNode(g),i&&(e=e.cloneRange(),e.setStartAfter(i),e.collapse(!0),d.removeAllRanges(),d.addRange(e))}}var m=Date.now||function(){return(new Date).getTime()};MediumEditor.prototype={defaults:{allowMultiParagraphSelection:!0,anchorInputPlaceholder:"Paste or type a link",anchorPreviewHideDelay:500,buttons:["bold","italic","underline","anchor","header1","header2","quote"],buttonLabels:!1,checkLinkFormat:!1,cleanPastedHTML:!1,delay:0,diffLeft:0,diffTop:-10,disableReturn:!1,disableDoubleReturn:!1,disableToolbar:!1,disableEditing:!1,disableAnchorForm:!1,disablePlaceholders:!1,elementsContainer:!1,standardizeSelectionStart:!1,contentWindow:a,ownerDocument:b,firstHeader:"h3",forcePlainText:!0,placeholder:"Type your text",secondHeader:"h4",targetBlank:!1,anchorTarget:!1,anchorButton:!1,anchorButtonClass:"btn",extensions:{},activeButtonClass:"medium-editor-button-active",firstButtonClass:"medium-editor-button-first",lastButtonClass:"medium-editor-button-last"},isIE:"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&null!==new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent),init:function(a,b){var d=1;if(this.options=c(b,this.defaults),this.setElementSelection(a),0!==this.elements.length){for(this.parentElements=["p","h1","h2","h3","h4","h5","h6","blockquote","pre"],this.options.elementsContainer||(this.options.elementsContainer=this.options.ownerDocument.body);this.options.elementsContainer.querySelector("#medium-editor-toolbar-"+d);)d+=1;return this.id=d,this.setup()}},setup:function(){this.events=[],this.isActive=!0,this.initThrottledMethods().initElements().bindSelect().bindPaste().setPlaceholders().bindElementActions().bindWindowActions().passInstance()},on:function(a,b,c,d){a.addEventListener(b,c,d),this.events.push([a,b,c,d])},off:function(a,b,c,d){var e,f=this.indexOfListener(a,b,c,d);-1!==f&&(e=this.events.splice(f,1)[0],e[0].removeEventListener(e[1],e[2],e[3]))},indexOfListener:function(a,b,c,d){var e,f,g;for(e=0,f=this.events.length;f>e;e+=1)if(g=this.events[e],g[0]===a&&g[1]===b&&g[2]===c&&g[3]===d)return e;return-1},delay:function(a){var b=this;setTimeout(function(){b.isActive&&a()},this.options.delay)},removeAllEvents:function(){for(var a=this.events.pop();a;)a[0].removeEventListener(a[1],a[2],a[3]),a=this.events.pop()},initThrottledMethods:function(){var a=this;return this.handleResize=d(function(){a.isActive&&a.positionToolbarIfShown()}),this.handleBlur=d(function(){a.isActive&&!a.keepToolbarAlive&&a.hideToolbarActions()}),this},initElements:function(){var a,b=!1;for(a=0;a'+b.bold+"",italic:'",underline:'",strikethrough:'",superscript:'",subscript:'",anchor:'",image:'",header1:'",header2:'",quote:'",orderedlist:'",unorderedlist:'",pre:'",indent:'",outdent:'",justifyCenter:'",justifyFull:'",justifyLeft:'",justifyRight:'"};return c[a]||!1},getButtonLabels:function(a){var b,c,d={bold:"B",italic:"I",underline:"U",strikethrough:"A",superscript:"x1",subscript:"x1",anchor:"#",image:"image",header1:"H1",header2:"H2",quote:"“",orderedlist:"1.",unorderedlist:"•",pre:"0101",indent:"→",outdent:"←",justifyCenter:"C",justifyFull:"J",justifyLeft:"L",justifyRight:"R"};if("fontawesome"===a?b={bold:'',italic:'',underline:'',strikethrough:'',superscript:'',subscript:'',anchor:'',image:'',quote:'',orderedlist:'',unorderedlist:'',pre:'',indent:'',outdent:'',justifyCenter:'',justifyFull:'',justifyLeft:'',justifyRight:''}:"object"==typeof a&&(b=a),"object"==typeof b)for(c in b)b.hasOwnProperty(c)&&(d[c]=b[c]);return d},initToolbar:function(){return this.toolbar?this:(this.toolbar=this.createToolbar(),this.keepToolbarAlive=!1,this.toolbarActions=this.toolbar.querySelector(".medium-editor-toolbar-actions"),this.anchorPreview=this.createAnchorPreview(),this.options.disableAnchorForm||(this.anchorForm=this.toolbar.querySelector(".medium-editor-toolbar-form-anchor"),this.anchorInput=this.anchorForm.querySelector("input.medium-editor-toolbar-anchor-input"),this.anchorTarget=this.anchorForm.querySelector("input.medium-editor-toolbar-anchor-target"),this.anchorButton=this.anchorForm.querySelector("input.medium-editor-toolbar-anchor-button")),this)},createToolbar:function(){var a=this.options.ownerDocument.createElement("div");return a.id="medium-editor-toolbar-"+this.id,a.className="medium-editor-toolbar",a.className+=this.options.staticToolbar?" static-toolbar":" stalker-toolbar",a.appendChild(this.toolbarButtons()),this.options.disableAnchorForm||a.appendChild(this.toolbarFormAnchor()),this.options.elementsContainer.appendChild(a),a},toolbarButtons:function(){var a,b,c,d,e=this.options.buttons,f=this.options.ownerDocument.createElement("ul");for(f.id="medium-editor-toolbar-actions"+this.id,f.className="medium-editor-toolbar-actions clearfix",b=0;b<\/[\S]+>/gim,""),b=a.match(/<(p|h[0-6]|blockquote)>([\s\S]*?)<\/(p|h[0-6]|blockquote)>/g);return b?b.length:0},checkSelectionElement:function(a,b){var c,d,e,g=0;if(this.selection=a,this.selectionRange=this.selection.getRangeAt(0),this.options.standardizeSelectionStart&&this.selectionRange.startOffset===this.selectionRange.startContainer.nodeValue.length&&(d=f(this.getSelectionElement(),this.selectionRange.startContainer,this.options.ownerDocument))){for(g=0;0===d.nodeValue.substr(g,1).trim().length;)g+=1;e=this.options.ownerDocument.createRange(),e.setStart(d,g),e.setEnd(this.selectionRange.endContainer,this.selectionRange.endOffset),this.selection.removeAllRanges(),this.selection.addRange(e),this.selectionRange=e}for(c=0;cg+this.elements[0].offsetHeight-this.toolbar.offsetHeight?this.toolbar.style.top=g+this.elements[0].offsetHeight+"px":d>g-this.toolbar.offsetHeight?(this.toolbar.classList.add("sticky-toolbar"),this.toolbar.style.top="0px"):(this.toolbar.classList.remove("sticky-toolbar"),this.toolbar.style.top=g-this.toolbar.offsetHeight+"px"):this.toolbar.style.top=g-this.toolbar.offsetHeight+"px",this.toolbar.style.left=f.left+"px"):i.isCollapsed||(a=i.getRangeAt(0),b=a.getBoundingClientRect(),c=(b.left+b.right)/2,b.topc?j+k+"px":this.options.contentWindow.innerWidth-c-1?this.classList.remove(c.options.activeButtonClass):this.className+=" "+c.options.activeButtonClass,this.hasAttribute("data-action")&&c.execAction(this.getAttribute("data-action"),a)};for(a=0;a0&&(a[0].className+=" "+this.options.firstButtonClass,a[a.length-1].className+=" "+this.options.lastButtonClass),this},execAction:function(a,b){a.indexOf("append-")>-1?(this.execFormatBlock(a.replace("append-","")),this.setToolbarPosition(),this.setToolbarButtonStates()):"anchor"===a?this.options.disableAnchorForm||this.triggerAnchorAction(b):"image"===a?this.options.ownerDocument.execCommand("insertImage",!1,this.options.contentWindow.getSelection()):(this.options.ownerDocument.execCommand(a,!1,null),this.setToolbarPosition())},rangeSelectsSingleNode:function(a){var b=a.startContainer;return b===a.endContainer&&b.hasChildNodes()&&a.endOffset===a.startOffset+1},getSelectedParentElement:function(){var a=null,b=this.selectionRange;return a=this.rangeSelectsSingleNode(b)?b.startContainer.childNodes[b.startOffset]:3===b.startContainer.nodeType?b.startContainer.parentNode:b.startContainer},triggerAnchorAction:function(){var a=this.getSelectedParentElement();return a.tagName&&"a"===a.tagName.toLowerCase()?this.options.ownerDocument.execCommand("unlink",!1,null):this.anchorForm&&("block"===this.anchorForm.style.display?this.showToolbarActions():this.showAnchorForm()),this},execFormatBlock:function(a){var b=this.getSelectionData(this.selection.anchorNode);if("blockquote"===a&&b.el&&"blockquote"===b.el.parentNode.tagName.toLowerCase())return this.options.ownerDocument.execCommand("outdent",!1,null);if(b.tagName===a&&(a="p"),this.isIE){if("blockquote"===a)return this.options.ownerDocument.execCommand("indent",!1,a);a="<"+a+">"}return this.options.ownerDocument.execCommand("formatBlock",!1,a)},getSelectionData:function(a){var b;for(a&&a.tagName&&(b=a.tagName.toLowerCase());a&&-1===this.parentElements.indexOf(b);)a=a.parentNode,a&&a.tagName&&(b=a.tagName.toLowerCase());return{el:a,tagName:b}},getFirstChild:function(a){for(var b=a.firstChild;null!==b&&1!==b.nodeType;)b=b.nextSibling;return b},isToolbarShown:function(){return this.toolbar&&this.toolbar.classList.contains("medium-editor-toolbar-active")},showToolbar:function(){this.toolbar&&!this.isToolbarShown()&&(this.toolbar.classList.add("medium-editor-toolbar-active"),this.onShowToolbar&&this.onShowToolbar())},hideToolbar:function(){this.isToolbarShown()&&(this.toolbar.classList.remove("medium-editor-toolbar-active"),this.onHideToolbar&&this.onHideToolbar())},hideToolbarActions:function(){this.keepToolbarAlive=!1,this.hideToolbar()},showToolbarActions:function(){var a=this;this.anchorForm&&(this.anchorForm.style.display="none"),this.toolbarActions.style.display="block",this.keepToolbarAlive=!1,this.delay(function(){a.showToolbar()})},saveSelection:function(){this.savedSelection=g.call(this)},restoreSelection:function(){h.call(this,this.savedSelection)},showAnchorForm:function(a){this.anchorForm&&(this.toolbarActions.style.display="none",this.saveSelection(),this.anchorForm.style.display="block",this.setToolbarPosition(),this.keepToolbarAlive=!0,this.anchorInput.focus(),this.anchorInput.value=a||"")},bindAnchorForm:function(){if(!this.anchorForm)return this;var a=this.anchorForm.querySelector("a.medium-editor-toobar-anchor-close"),b=this.anchorForm.querySelector("a.medium-editor-toobar-anchor-save"),c=this;return this.on(this.anchorForm,"click",function(a){a.stopPropagation(),c.keepToolbarAlive=!0}),this.on(this.anchorInput,"keyup",function(a){var b,d=null;13===a.keyCode?(a.preventDefault(),b=c.options.anchorTarget&&c.anchorTarget.checked?"_blank":"_self",c.options.anchorButton&&c.anchorButton.checked&&(d=c.options.anchorButtonClass),c.createLink(this,b,d)):27===a.keyCode&&(a.preventDefault(),c.showToolbarActions(),h.call(c,c.savedSelection))}),this.on(b,"click",function(a){var b,d=null;a.preventDefault(),b=c.options.anchorTarget&&c.anchorTarget.checked?"_blank":"_self",c.options.anchorButton&&c.anchorButton.checked&&(d=c.options.anchorButtonClass),c.createLink(c.anchorInput,b,d)},!0),this.on(this.anchorInput,"click",function(a){a.stopPropagation(),c.keepToolbarAlive=!0}),this.on(this.options.ownerDocument.body,"click",function(a){a.target===c.anchorForm||e(c.anchorForm,a.target)||e(c.toolbarActions,a.target)||(c.keepToolbarAlive=!1,c.checkSelection())},!0),this.on(this.options.ownerDocument.body,"focus",function(a){a.target===c.anchorForm||e(c.anchorForm,a.target)||e(c.toolbarActions,a.target)||(c.keepToolbarAlive=!1,c.checkSelection())},!0),this.on(a,"click",function(a){a.preventDefault(),c.showToolbarActions(),h.call(c,c.savedSelection)}),this},hideAnchorPreview:function(){this.anchorPreview.classList.remove("medium-editor-anchor-preview-active")},showAnchorPreview:function(a){if(this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||a.getAttribute("data-disable-preview"))return!0;var b,c,d=this,e=40,f=a.getBoundingClientRect(),g=(f.left+f.right)/2;return d.anchorPreview.querySelector("i").textContent=a.href,b=d.anchorPreview.offsetWidth/2,c=d.options.diffLeft-b,d.observeAnchorPreview(a),d.anchorPreview.classList.add("medium-toolbar-arrow-over"),d.anchorPreview.classList.remove("medium-toolbar-arrow-under"),d.anchorPreview.style.top=Math.round(e+f.bottom-d.options.diffTop+this.options.contentWindow.pageYOffset-d.anchorPreview.offsetHeight)+"px",d.anchorPreview.style.left=b>g?c+b+"px":this.options.contentWindow.innerWidth-gb.options.anchorPreviewHideDelay&&(b.hideAnchorPreview(),clearInterval(g),b.off(b.anchorPreview,"mouseover",e),b.off(b.anchorPreview,"mouseout",f),b.off(a,"mouseover",e),b.off(a,"mouseout",f))},200);this.on(b.anchorPreview,"mouseover",e),this.on(b.anchorPreview,"mouseout",f),this.on(a,"mouseover",e),this.on(a,"mouseout",f)},createAnchorPreview:function(){var a=this,b=this.options.ownerDocument.createElement("div");return b.id="medium-editor-anchor-preview-"+this.id,b.className="medium-editor-anchor-preview",b.innerHTML=this.anchorPreviewTemplate(),this.options.elementsContainer.appendChild(b),this.on(b,"click",function(){a.anchorPreviewClickHandler()}),b},anchorPreviewTemplate:function(){return'
'},anchorPreviewClickHandler:function(){if(!this.options.disableAnchorForm&&this.activeAnchor){var a=this,b=this.options.ownerDocument.createRange(),c=this.options.contentWindow.getSelection();b.selectNodeContents(a.activeAnchor),c.removeAllRanges(),c.addRange(b),this.delay(function(){a.activeAnchor&&a.showAnchorForm(a.activeAnchor.href),a.keepToolbarAlive=!1})}this.hideAnchorPreview()},editorAnchorObserver:function(a){var b=this,c=!0,d=function(){c=!1,b.off(b.activeAnchor,"mouseout",d)};if(a.target&&"a"===a.target.tagName.toLowerCase()){if(!/href=["']\S+["']/.test(a.target.outerHTML)||/href=["']#\S+["']/.test(a.target.outerHTML))return!0;if(this.isToolbarShown())return!0;this.activeAnchor=a.target,this.on(this.activeAnchor,"mouseout",d),this.delay(function(){c&&b.showAnchorPreview(a.target)})}},bindAnchorPreview:function(){var a,b=this;for(this.editorAnchorObserverWrapper=function(a){b.editorAnchorObserver(a)},a=0;a/g,">").replace(/"/g,""")},bindPaste:function(){var a,b=this;for(this.pasteWrapper=function(a){var c,d,e="",f="text/html",g="text/plain";if(this.classList.remove("medium-editor-placeholder"),!b.options.forcePlainText&&!b.options.cleanPastedHTML)return this;if(b.options.contentWindow.clipboardData&&void 0===a.clipboardData&&(a.clipboardData=b.options.contentWindow.clipboardData,f="Text",g="Text"),a.clipboardData&&a.clipboardData.getData&&!a.defaultPrevented){if(a.preventDefault(),b.options.cleanPastedHTML&&a.clipboardData.getData(f))return b.cleanPaste(a.clipboardData.getData(f));if(b.options.disableReturn||this.getAttribute("data-disable-return"))e=b.htmlEntities(a.clipboardData.getData(g)),l(b.options.ownerDocument,e);else{for(c=a.clipboardData.getData(g).split(/[\r\n]/g),d=0;d"+b.htmlEntities(c[d])+"
");l(b.options.ownerDocument,e)}}},a=0;a]*docs-internal-guid[^>]*>/gi),""],[new RegExp(/<\/b>(
]*>)?$/gi),""],[new RegExp(/\s+<\/span>/g)," "],[new RegExp(/
/g),"
"],[new RegExp(/]*(font-style:italic;font-weight:bold|font-weight:bold;font-style:italic)[^>]*>/gi),''],[new RegExp(/]*font-style:italic[^>]*>/gi),''],[new RegExp(/]*font-weight:bold[^>]*>/gi),''],[new RegExp(/<(\/?)(i|b|a)>/gi),"<$1$2>"],[new RegExp(/<a\s+href=("|”|“|“|”)([^&]+)("|”|“|“|”)>/gi),'']];for(b=0;b
"),this.pasteHTML(""+c.join("
")+"
"),this.options.ownerDocument.execCommand("insertText",!1,"\n"),c=e.querySelectorAll("a,p,div,br"),b=0;b"+c.innerHTML+"":c.innerHTML,c.parentNode.replaceChild(d,c);for(e=a.querySelectorAll("span"),b=0;b